@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { if (event.isCancelled()) { return; } Block blockPlaced = event.getBlockPlaced(); // Just mob spawner events if (blockPlaced.getType() != Material.MOB_SPAWNER) { return; } Player player = event.getPlayer(); // If the player can't build here, return if (!su.canBuildHere(player, blockPlaced.getLocation())) { return; } // Get the item ItemStack item = event.getItemInHand(); // Get data from item short entityID = su.getStoredSpawnerItemEntityID(item); boolean defaultID = false; // 0 or unknown then fallback if (entityID == 0 || !su.knownEids.contains(entityID)) { // Default defaultID = true; entityID = su.getDefaultEntityID(); } // Names String creatureName = su.getCreatureName(entityID); String spawnerName = creatureName.toLowerCase().replace(" ", ""); // Check for place permission if (!player.hasPermission("silkspawners.place." + spawnerName)) { event.setCancelled(true); player.sendMessage( ChatColor.translateAlternateColorCodes( '\u0026', plugin .localization .getString("noPermissionPlace") .replace("%ID%", Short.toString(entityID))) .replace("%creature%", creatureName)); return; } // Message default if (defaultID) { plugin.informPlayer( player, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("placingDefault"))); } else { // Else message the type plugin.informPlayer( player, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("spawnerPlaced")) .replace("%creature%", su.getCreatureName(entityID))); } su.setSpawnerEntityID(blockPlaced, entityID); }