From dde8cd8f72baf0161d966f0bdfa6cc1c22ce30f7 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Mon, 2 Dec 2013 02:27:22 +0000 Subject: Merge remove and killall command, thanks to @Evonuts and @Iaccidentally. --- .../essentials/commands/Commandkillall.java | 155 ---------- .../essentials/commands/Commandremove.java | 311 ++++++++++++--------- Essentials/src/plugin.yml | 6 +- 3 files changed, 174 insertions(+), 298 deletions(-) delete mode 100644 Essentials/src/com/earth2me/essentials/commands/Commandkillall.java diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkillall.java b/Essentials/src/com/earth2me/essentials/commands/Commandkillall.java deleted file mode 100644 index b61cbd4db..000000000 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkillall.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.earth2me.essentials.commands; - -import com.earth2me.essentials.CommandSource; -import static com.earth2me.essentials.I18n._; -import com.earth2me.essentials.Mob; -import java.util.ArrayList; -import java.util.Locale; -import org.bukkit.Chunk; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.entity.*; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.inventory.ItemStack; - - -public class Commandkillall extends EssentialsCommand -{ - public Commandkillall() - { - super("killall"); - } - - //TODO: Tidy - missed this during command cleanup - @Override - public void run(Server server, CommandSource sender, String commandLabel, String[] args) throws Exception - { - String type = "all"; - int radius = -1; - World world; - if (sender.isPlayer()) - { - world = sender.getPlayer().getWorld(); - if (args.length == 1) - { - try - { - radius = Integer.parseInt(args[0]); - } - catch (NumberFormatException e1) - { - type = args[0]; - } - } - else if (args.length > 1) - { - type = args[0]; - try - { - radius = Integer.parseInt(args[1]); - } - catch (NumberFormatException e) - { - throw new Exception(_("numberRequired"), e); - } - } - if (args.length > 2) - { - world = ess.getWorld(args[2]); - } - } - else - { - if (args.length == 0) - { - throw new NotEnoughArgumentsException(); - } - else if (args.length == 1) - { - world = ess.getWorld(args[0]); - } - else - { - type = args[0]; - world = ess.getWorld(args[1]); - } - } - if (radius >= 0) - { - radius *= radius; - } - String killType = type.toLowerCase(Locale.ENGLISH); - boolean animals = killType.startsWith("animal"); - boolean monster = killType.startsWith("monster") || killType.startsWith("mob"); - boolean all = killType.equals("all"); - Class entityClass = null; - if (!animals && !monster && !all) - { - if (Mob.fromName(killType) == null) - { - throw new Exception(_("invalidMob")); - } - entityClass = Mob.fromName(killType).getType().getEntityClass(); - } - int numKills = 0; - for (Chunk chunk : world.getLoadedChunks()) - { - for (Entity entity : chunk.getEntities()) - { - if (sender.isPlayer()) - { - if (radius >= 0 && sender.getPlayer().getLocation().distanceSquared(entity.getLocation()) > radius) - { - continue; - } - } - if (entity instanceof LivingEntity == false || entity instanceof HumanEntity) - { - continue; - } - if (entity instanceof Tameable) - { - if (((Tameable)entity).isTamed()) - { - continue; - } - } - if (animals) - { - if (entity instanceof Animals || entity instanceof NPC || entity instanceof Snowman || entity instanceof WaterMob) - { - EntityDeathEvent event = new EntityDeathEvent((LivingEntity)entity, new ArrayList(0)); - ess.getServer().getPluginManager().callEvent(event); - entity.remove(); - numKills++; - } - } - else if (monster) - { - if (entity instanceof Monster || entity instanceof ComplexLivingEntity || entity instanceof Flying || entity instanceof Slime) - { - EntityDeathEvent event = new EntityDeathEvent((LivingEntity)entity, new ArrayList(0)); - ess.getServer().getPluginManager().callEvent(event); - entity.remove(); - numKills++; - } - } - else if (all) - { - EntityDeathEvent event = new EntityDeathEvent((LivingEntity)entity, new ArrayList(0)); - ess.getServer().getPluginManager().callEvent(event); - entity.remove(); - numKills++; - } - else if (entityClass != null && entityClass.isAssignableFrom(entity.getClass())) - { - EntityDeathEvent event = new EntityDeathEvent((LivingEntity)entity, new ArrayList(0)); - ess.getServer().getPluginManager().callEvent(event); - entity.remove(); - numKills++; - } - } - } - sender.sendMessage(_("kill", numKills)); - } -} diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandremove.java b/Essentials/src/com/earth2me/essentials/commands/Commandremove.java index 98c4fb673..7ebe67ac2 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandremove.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandremove.java @@ -2,15 +2,19 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.CommandSource; import static com.earth2me.essentials.I18n._; +import com.earth2me.essentials.Mob; import com.earth2me.essentials.User; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; +import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Server; import org.bukkit.World; import org.bukkit.entity.*; -//Todo: Fix this up -//Todo: now overlaps some functions of killall, which should be deprecated and removed once all functions are covered +// This could be rewritten in a simpler form if we made a mapping of all Entity names to their types (which would also provide possible mod support) + public class Commandremove extends EssentialsCommand { public Commandremove() @@ -21,14 +25,9 @@ public class Commandremove extends EssentialsCommand @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - if (args.length < 1) - { - throw new NotEnoughArgumentsException(); - } - ToRemove toRemove; World world = user.getWorld(); int radius = 0; - + Bukkit.broadcastMessage("len: " + args.length); if (args.length >= 2) { try @@ -40,28 +39,12 @@ public class Commandremove extends EssentialsCommand throw new Exception(_("numberRequired"), e); } } - if (args.length >= 3) { world = ess.getWorld(args[2]); } + parseCommand(server, user.getSource(), args, world, radius); - try - { - toRemove = ToRemove.valueOf(args[0].toUpperCase(Locale.ENGLISH)); - } - catch (IllegalArgumentException e) - { - try - { - toRemove = ToRemove.valueOf(args[0].concat("S").toUpperCase(Locale.ENGLISH)); - } - catch (IllegalArgumentException ee) - { - throw new NotEnoughArgumentsException(ee); //TODO: translate and list types - } - } - removeEntities(user.getSource(), world, toRemove, radius); } @Override @@ -72,33 +55,60 @@ public class Commandremove extends EssentialsCommand throw new NotEnoughArgumentsException(); } World world = ess.getWorld(args[1]); + parseCommand(server, sender, args, world, 0); + } + + private void parseCommand(Server server, CommandSource sender, String[] args, World world, int radius) throws Exception + { + List types = new ArrayList(); + List customTypes = new ArrayList(); - ToRemove toRemove; - try + if (args.length > 0 && (args[0].contentEquals("*") || args[0].contentEquals("all"))) { - toRemove = ToRemove.valueOf(args[0].toUpperCase(Locale.ENGLISH)); + types.add(0, "ALL"); } - catch (IllegalArgumentException e) + else { - try - { - toRemove = ToRemove.valueOf(args[0].concat("S").toUpperCase(Locale.ENGLISH)); - } - catch (IllegalArgumentException ee) + for (String s : args[0].split(",")) { - throw new NotEnoughArgumentsException(ee); //TODO: translate and list types + ToRemove toRemove; + try + { + toRemove = ToRemove.valueOf(s.toUpperCase(Locale.ENGLISH)); + } + catch (Exception e) + { + try + { + toRemove = ToRemove.valueOf(s.concat("S").toUpperCase(Locale.ENGLISH)); + } + catch (Exception ee) + { + toRemove = ToRemove.CUSTOM; + customTypes.add(s); + } + } + types.add(toRemove.toString()); } } - removeEntities(sender, world, toRemove, 0); + removeHandler(sender, types, customTypes, world, radius); } - private void removeEntities(final CommandSource sender, final World world, final ToRemove toRemove, int radius) throws Exception + private void removeHandler(CommandSource sender, List types, List customTypes, World world, int radius) { int removed = 0; if (radius > 0) { radius *= radius; } + + ArrayList removeTypes = new ArrayList(); + + for (String s : types) + { + removeTypes.add(ToRemove.valueOf(s)); + } + for (Chunk chunk : world.getLoadedChunks()) { for (Entity e : chunk.getEntities()) @@ -110,114 +120,136 @@ public class Commandremove extends EssentialsCommand continue; } } - if (e instanceof Tameable) + if (e instanceof HumanEntity) { - if (((Tameable)e).isTamed()) - { - continue; - } + continue; } - switch (toRemove) + + for (ToRemove toRemove : removeTypes) { - case DROPS: - if (e instanceof Item) - { - e.remove(); - removed++; - } - ; - break; - case ARROWS: - if (e instanceof Projectile) - { - e.remove(); - removed++; - } - break; - case BOATS: - if (e instanceof Boat) - { - e.remove(); - removed++; - } - break; - case MINECARTS: - if (e instanceof Minecart) - { - e.remove(); - removed++; - } - break; - case XP: - if (e instanceof ExperienceOrb) - { - e.remove(); - removed++; - } - break; - case PAINTINGS: - if (e instanceof Painting) - { - e.remove(); - removed++; - } - break; - case ITEMFRAMES: - if (e instanceof ItemFrame) - { - e.remove(); - removed++; - } - break; - case ENDERCRYSTALS: - if (e instanceof EnderCrystal) - { - e.remove(); - removed++; - } - break; - case AMBIENT: - if (e instanceof Flying) - { - e.remove(); - removed++; - } - break; - case HOSTILE: - case MONSTERS: - if (e instanceof Monster || e instanceof ComplexLivingEntity || e instanceof Flying || e instanceof Slime) - { - e.remove(); - removed++; - } - break; - case PASSIVE: - case ANIMALS: - if (e instanceof Animals || e instanceof NPC || e instanceof Snowman || e instanceof WaterMob) - { - e.remove(); - removed++; - } - break; - case MOBS: - if (e instanceof Animals || e instanceof NPC || e instanceof Snowman || e instanceof WaterMob - || e instanceof Monster || e instanceof ComplexLivingEntity || e instanceof Flying || e instanceof Slime) + + if (e instanceof Tameable && ((Tameable)e).isTamed()) { - e.remove(); - removed++; + if (toRemove == ToRemove.TAMED) + { + e.remove(); + removed++; + } + else + { + continue; + } } - break; - case ENTITIES: - if (e instanceof Entity) + + switch (toRemove) { - if (e instanceof HumanEntity) + case DROPS: + if (e instanceof Item) { - continue; + e.remove(); + removed++; + } + ; + break; + case ARROWS: + if (e instanceof Projectile) + { + e.remove(); + removed++; + } + break; + case BOATS: + if (e instanceof Boat) + { + e.remove(); + removed++; + } + break; + case MINECARTS: + if (e instanceof Minecart) + { + e.remove(); + removed++; + } + break; + case XP: + if (e instanceof ExperienceOrb) + { + e.remove(); + removed++; + } + break; + case PAINTINGS: + if (e instanceof Painting) + { + e.remove(); + removed++; + } + break; + case ITEMFRAMES: + if (e instanceof ItemFrame) + { + e.remove(); + removed++; + } + break; + case ENDERCRYSTALS: + if (e instanceof EnderCrystal) + { + e.remove(); + removed++; + } + break; + case AMBIENT: + if (e instanceof Flying) + { + e.remove(); + removed++; + } + break; + case HOSTILE: + case MONSTERS: + if (e instanceof Monster || e instanceof ComplexLivingEntity || e instanceof Flying || e instanceof Slime) + { + e.remove(); + removed++; + } + break; + case PASSIVE: + case ANIMALS: + if (e instanceof Animals || e instanceof NPC || e instanceof Snowman || e instanceof WaterMob || e instanceof Ambient) + { + e.remove(); + removed++; + } + break; + case MOBS: + if (e instanceof Animals || e instanceof NPC || e instanceof Snowman || e instanceof WaterMob + || e instanceof Monster || e instanceof ComplexLivingEntity || e instanceof Flying || e instanceof Slime || e instanceof Ambient) + { + e.remove(); + removed++; + } + break; + case ENTITIES: + case ALL: + if (e instanceof Entity) + { + e.remove(); + removed++; + } + break; + case CUSTOM: + for (String type : customTypes) + { + if (e.getType() == Mob.fromName(type).getType()) + { + e.remove(); + removed++; + } } - e.remove(); - removed++; + break; } - break; } } } @@ -241,6 +273,9 @@ public class Commandremove extends EssentialsCommand ANIMALS, AMBIENT, MOBS, - ENTITIES + ENTITIES, + ALL, + CUSTOM, + TAMED } -} +} \ No newline at end of file diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index b2a8a0007..3a4eb7250 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -206,10 +206,6 @@ commands: description: Kills specified player. usage: / aliases: [ekill] - killall: - description: Kill all mobs in a world. - usage: / [mobType] [radius] [world] - aliases: [butcher,ebutcher,ekillall,mobkill,emobkill] kit: description: Obtains the specified kit or views all available kits. usage: / [kit] [player] @@ -305,7 +301,7 @@ commands: remove: description: Removes entities in your world. usage: / [radius] [world] - aliases: [eremove] + aliases: [eremove,butcher,ebutcher,killall,ekillall,mobkill,emobkill] repair: description: Repairs the durability of one or all items. usage: / [hand|all] -- cgit v1.2.3