private void handleBlockChange(Player player, Block block, short entityID, String mobName) { if (!player.hasPermission("silkspawners.changetype." + mobName)) { su.sendMessage( player, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("noPermissionChangingSpawner"))); return; } // Call the event and maybe change things! SilkSpawnersSpawnerChangeEvent changeEvent = new SilkSpawnersSpawnerChangeEvent( player, block, entityID, su.getSpawnerEntityID(block), 1); plugin.getServer().getPluginManager().callEvent(changeEvent); // See if we need to stop if (changeEvent.isCancelled()) { return; } // Get the new ID (might be changed) short newEntityID = changeEvent.getEntityID(); String newMob = su.getCreatureName(entityID); if (su.setSpawnerType( block, newEntityID, player, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("changingDeniedWorldGuard")))) { su.sendMessage( player, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("changedSpawner")) .replace("%creature%", newMob)); } }
private void handleHelp(CommandSender sender) { for (int i = 1; i <= 7; i++) { String message = ChatColor.translateAlternateColorCodes( '\u0026', plugin .localization .getString("help" + i) .replace("%version%", plugin.getDescription().getVersion())); su.sendMessage(sender, message); } }
private void handleReload(CommandSender sender) { if (sender.hasPermission("silkspawners.reload")) { plugin.reloadConfigs(); su.sendMessage( sender, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("configsReloaded"))); } else { su.sendMessage( sender, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("noPermission"))); } }
private void handleChangeEgg( Player player, short entityID, String mobName, ItemStack itemInHand) { if (!player.hasPermission("silkspawners.changetypewithegg." + mobName)) { su.sendMessage( player, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("noPermissionChangingEgg"))); return; } // Call the event and maybe change things! SilkSpawnersSpawnerChangeEvent changeEvent = new SilkSpawnersSpawnerChangeEvent( player, null, entityID, su.getStoredSpawnerItemEntityID(itemInHand), itemInHand.getAmount()); plugin.getServer().getPluginManager().callEvent(changeEvent); // See if we need to stop if (changeEvent.isCancelled()) { return; } // Get the new ID (might be changed) short newEntityID = changeEvent.getEntityID(); String newMob = su.getCreatureName(entityID); ItemStack newItem = su.setSpawnerType(itemInHand, newEntityID, plugin.localization.getString("spawnerName")); su.nmsProvider.setSpawnerItemInHand(player, newItem); su.sendMessage( player, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("changedEgg")) .replace("%creature%", newMob)); }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { if (event.isCancelled()) { return; } Block block = event.getBlock(); Player player = event.getPlayer(); // We just want the mob spawner events if (block.getType() != Material.MOB_SPAWNER) { return; } // We can't build here? Return then if (!su.canBuildHere(player, block.getLocation())) { return; } // Get the entityID from the spawner short entityID = su.getSpawnerEntityID(block); // Message the player about the broken spawner plugin.informPlayer( player, ChatColor.translateAlternateColorCodes( '\u0026', plugin.localization.getString("spawnerBroken")) .replace("%creature%", su.getCreatureName(entityID))); // If using silk touch, drop spawner itself ItemStack tool = player.getItemInHand(); // Check for SilkTocuh level boolean validToolAndSilkTouch = su.isValidItemAndHasSilkTouch(tool); // Get the world to drop in World world = player.getWorld(); // Mob String mobName = su.getCreatureName(entityID).toLowerCase().replace(" ", ""); // No drops in creative if (plugin.config.getBoolean("noDropsCreative", true) && player.getGameMode() == GameMode.CREATIVE) { return; } // Prevent XP farming/duping event.setExpToDrop(0); // assume not mined boolean mined = false; // drop XP only when destroyed and not silk picked boolean dropXPOnlyOnDestroy = plugin.config.getBoolean("dropXPOnlyOnDestroy", false); if (plugin.config.getBoolean("preventXPFarming", true) && block.hasMetadata("mined")) { mined = block.getMetadata("mined").get(0).asBoolean(); } // Drop maybe some XP if (player.hasPermission("silkspawners.silkdrop." + mobName) || player.hasPermission("silkspawners.destroydrop." + mobName)) { int addXP = plugin.config.getInt("destroyDropXP"); // If we have more than 0 XP, drop them // either we drop XP for destroy and silktouch or only when // destroyed and we have no silktouch if (!mined && addXP != 0 && (!dropXPOnlyOnDestroy || !validToolAndSilkTouch && dropXPOnlyOnDestroy)) { event.setExpToDrop(addXP); // check if we should flag spawners if (plugin.config.getBoolean("preventXPFarming", true)) { block.setMetadata("mined", new FixedMetadataValue(plugin, true)); } } } // random drop chance String mobID = su.eid2MobID.get(entityID); int randomNumber = rnd.nextInt(100); int dropChance = 0; // silk touch if (validToolAndSilkTouch && player.hasPermission("silkspawners.silkdrop." + mobName)) { // Calculate drop chance if (plugin.mobs.contains("creatures." + mobID + ".silkDropChance")) { dropChance = plugin.mobs.getInt("creatures." + mobID + ".silkDropChance", 100); } else { dropChance = plugin.config.getInt("silkDropChance", 100); } if (randomNumber < dropChance) { // Drop spawner world.dropItemNaturally( block.getLocation(), su.newSpawnerItem( entityID, su.getCustomSpawnerName(su.eid2MobID.get(entityID)), 1, false)); } return; } // no silk touch if (player.hasPermission("silkspawners.destroydrop." + mobName)) { if (plugin.config.getBoolean("destroyDropEgg", false)) { // Calculate drop chance randomNumber = rnd.nextInt(100); if (plugin.mobs.contains("creatures." + mobID + ".eggDropChance")) { dropChance = plugin.mobs.getInt("creatures." + mobID + ".eggDropChance", 100); } else { dropChance = plugin.config.getInt("eggDropChance", 100); } if (randomNumber < dropChance) { // Drop egg world.dropItemNaturally(block.getLocation(), su.newEggItem(entityID)); } } // Drop iron bars (or not) int dropBars = plugin.config.getInt("destroyDropBars", 0); if (dropBars != 0) { // Calculate drop chance randomNumber = rnd.nextInt(100); if (plugin.mobs.contains("creatures." + mobID + ".destroyDropChance")) { dropChance = plugin.mobs.getInt("creatures." + mobID + ".destroyDropChance", 100); } else { dropChance = plugin.config.getInt("destroyDropChance", 100); } if (randomNumber < dropChance) { world.dropItem(block.getLocation(), new ItemStack(Material.IRON_FENCE, dropBars)); } } } }
@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); }