summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKHobbits <rob@khobbits.co.uk>2013-12-02 02:27:22 +0000
committerKHobbits <rob@khobbits.co.uk>2013-12-05 23:03:33 +0000
commitdde8cd8f72baf0161d966f0bdfa6cc1c22ce30f7 (patch)
tree1285372210abfd86a499448e72848546e020b2c1
parentb3bad6a35a024c1c7f41d6bea22cb7e20146d853 (diff)
downloadEssentials-dde8cd8f72baf0161d966f0bdfa6cc1c22ce30f7.tar
Essentials-dde8cd8f72baf0161d966f0bdfa6cc1c22ce30f7.tar.gz
Essentials-dde8cd8f72baf0161d966f0bdfa6cc1c22ce30f7.tar.lz
Essentials-dde8cd8f72baf0161d966f0bdfa6cc1c22ce30f7.tar.xz
Essentials-dde8cd8f72baf0161d966f0bdfa6cc1c22ce30f7.zip
Merge remove and killall command, thanks to @Evonuts and @Iaccidentally.
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandkillall.java155
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandremove.java311
-rw-r--r--Essentials/src/plugin.yml6
3 files changed, 174 insertions, 298 deletions
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<? extends Entity> 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<ItemStack>(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<ItemStack>(0));
- ess.getServer().getPluginManager().callEvent(event);
- entity.remove();
- numKills++;
- }
- }
- else if (all)
- {
- EntityDeathEvent event = new EntityDeathEvent((LivingEntity)entity, new ArrayList<ItemStack>(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<ItemStack>(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<String> types = new ArrayList<String>();
+ List<String> customTypes = new ArrayList<String>();
- 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<String> types, List<String> customTypes, World world, int radius)
{
int removed = 0;
if (radius > 0)
{
radius *= radius;
}
+
+ ArrayList<ToRemove> removeTypes = new ArrayList<ToRemove>();
+
+ 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: /<command> <player>
aliases: [ekill]
- killall:
- description: Kill all mobs in a world.
- usage: /<command> [mobType] [radius] [world]
- aliases: [butcher,ebutcher,ekillall,mobkill,emobkill]
kit:
description: Obtains the specified kit or views all available kits.
usage: /<command> [kit] [player]
@@ -305,7 +301,7 @@ commands:
remove:
description: Removes entities in your world.
usage: /<command> <drops|arrows|boats|minecarts|xp|paintings|itemframes|endercrystals|hostile|monsters|passive|animals|ambient|mobs|entities> [radius] [world]
- aliases: [eremove]
+ aliases: [eremove,butcher,ebutcher,killall,ekillall,mobkill,emobkill]
repair:
description: Repairs the durability of one or all items.
usage: /<command> [hand|all]