From 3dc0659f664e0ac7f56f1e555da2fa9e97d7b2e8 Mon Sep 17 00:00:00 2001 From: snowleo Date: Mon, 27 Jun 2011 11:53:57 +0200 Subject: [PATCH] Another fix to /spawnmob Merged for release --- .../src/com/earth2me/essentials/Mob.java | 105 ++++++------------ .../essentials/commands/Commandspawnmob.java | 49 ++++---- 2 files changed, 56 insertions(+), 98 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Mob.java b/Essentials/src/com/earth2me/essentials/Mob.java index 771d54abe..f5e1aea3d 100644 --- a/Essentials/src/com/earth2me/essentials/Mob.java +++ b/Essentials/src/com/earth2me/essentials/Mob.java @@ -1,75 +1,55 @@ package com.earth2me.essentials; -import java.lang.reflect.Constructor; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import net.minecraft.server.Entity; -import net.minecraft.server.WorldServer; +import org.bukkit.Location; import org.bukkit.Server; -import org.bukkit.craftbukkit.entity.CraftEntity; -import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.entity.CreatureType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; public enum Mob { - CHICKEN("Chicken", Enemies.FRIENDLY), - COW("Cow", Enemies.FRIENDLY), - CREEPER("Creeper", Enemies.ENEMY), - GHAST("Ghast", Enemies.ENEMY), - GIANT("Giant", "GiantZombie", Enemies.ENEMY), - PIG("Pig", Enemies.FRIENDLY), - PIGZOMB("PigZombie", Enemies.NEUTRAL), - SHEEP("Sheep", Enemies.FRIENDLY, ""), - SKELETON("Skeleton", Enemies.ENEMY), - SLIME("Slime", Enemies.ENEMY), - SPIDER("Spider", Enemies.ENEMY), - SQUID("Squid", Enemies.FRIENDLY), - ZOMBIE("Zombie", Enemies.ENEMY), - MONSTER("Monster", Enemies.ENEMY), - WOLF("Wolf", Enemies.NEUTRAL); + CHICKEN("Chicken", Enemies.FRIENDLY, CreatureType.CHICKEN), + COW("Cow", Enemies.FRIENDLY, CreatureType.COW), + CREEPER("Creeper", Enemies.ENEMY, CreatureType.CREEPER), + GHAST("Ghast", Enemies.ENEMY, CreatureType.GHAST), + GIANT("Giant", Enemies.ENEMY, CreatureType.GIANT), + PIG("Pig", Enemies.FRIENDLY, CreatureType.PIG), + PIGZOMB("PigZombie", Enemies.NEUTRAL, CreatureType.PIG_ZOMBIE), + SHEEP("Sheep", Enemies.FRIENDLY, "", CreatureType.SHEEP), + SKELETON("Skeleton", Enemies.ENEMY, CreatureType.SKELETON), + SLIME("Slime", Enemies.ENEMY, CreatureType.SLIME), + SPIDER("Spider", Enemies.ENEMY, CreatureType.SPIDER), + SQUID("Squid", Enemies.FRIENDLY, CreatureType.SQUID), + ZOMBIE("Zombie", Enemies.ENEMY, CreatureType.ZOMBIE), + MONSTER("Monster", Enemies.ENEMY, CreatureType.MONSTER), + WOLF("Wolf", Enemies.NEUTRAL, CreatureType.WOLF); public static final Logger logger = Logger.getLogger("Minecraft"); - private Mob(String n, Enemies en, String s) + private Mob(String n, Enemies en, String s, CreatureType type) { - this.s = s; + this.suffix = s; this.name = n; - this.craftClass = n; - this.entityClass = n; this.type = en; + this.bukkitType = type; } - private Mob(String n, Enemies en) + private Mob(String n, Enemies en, CreatureType type) { this.name = n; - this.craftClass = n; - this.entityClass = n; this.type = en; + this.bukkitType = type; } - private Mob(String n, String ec, Enemies en) - { - this.name = n; - this.craftClass = n; - this.entityClass = ec; - this.type = en; - } - - private Mob(String n, String ec, String cc, Enemies en) - { - this.name = n; - this.entityClass = ec; - this.craftClass = cc; - this.type = en; - } - public String s = "s"; - public String name; - public Enemies type; - private String entityClass; - private String craftClass; + public String suffix = "s"; + final public String name; + final public Enemies type; + final private CreatureType bukkitType; private static final Map hashMap = new HashMap(); static @@ -80,24 +60,16 @@ public enum Mob } } - @SuppressWarnings( + public LivingEntity spawn(final Player player, final Server server, final Location loc) throws MobException { - "unchecked", "CallToThreadDumpStack" - }) - public CraftEntity spawn(Player player, Server server) throws MobException - { - try + + final LivingEntity entity = player.getWorld().spawnCreature(loc, this.bukkitType); + if (entity == null) { - WorldServer world = ((org.bukkit.craftbukkit.CraftWorld)player.getWorld()).getHandle(); - Constructor craft = (Constructor)ClassLoader.getSystemClassLoader().loadClass("org.bukkit.craftbukkit.entity.Craft" + craftClass).getConstructors()[0]; - Constructor entity = (Constructor)ClassLoader.getSystemClassLoader().loadClass("net.minecraft.server.Entity" + entityClass).getConstructors()[0]; - return craft.newInstance((CraftServer)server, entity.newInstance(world)); - } - catch (Exception ex) - { - logger.log(Level.WARNING, Util.i18n("unableToSpawnMob"), ex); - throw new MobException(ex); + logger.log(Level.WARNING, Util.i18n("unableToSpawnMob")); + throw new MobException(); } + return entity; } @@ -107,22 +79,17 @@ public enum Mob NEUTRAL("neutral"), ENEMY("enemy"); - private Enemies(String t) + private Enemies(final String t) { this.type = t; } - protected String type; + final protected String type; } public static class MobException extends Exception { private static final long serialVersionUID = 1L; - - private MobException(Exception ex) - { - super(ex); - } } public static Mob fromName(String n) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java index 480e23aea..0f0b838b4 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandspawnmob.java @@ -3,8 +3,6 @@ package com.earth2me.essentials.commands; import net.minecraft.server.WorldServer; import org.bukkit.Location; import org.bukkit.Server; -import org.bukkit.craftbukkit.entity.CraftEntity; -import com.earth2me.essentials.Essentials; import com.earth2me.essentials.User; import com.earth2me.essentials.Mob; import com.earth2me.essentials.Mob.MobException; @@ -20,6 +18,7 @@ import org.bukkit.craftbukkit.entity.CraftCreeper; import org.bukkit.craftbukkit.entity.CraftSheep; import org.bukkit.craftbukkit.entity.CraftSlime; import org.bukkit.craftbukkit.entity.CraftWolf; +import org.bukkit.entity.Entity; public class Commandspawnmob extends EssentialsCommand @@ -62,9 +61,9 @@ public class Commandspawnmob extends EssentialsCommand } - CraftEntity spawnedMob = null; + Entity spawnedMob = null; Mob mob = null; - CraftEntity spawnedMount = null; + Entity spawnedMount = null; Mob mobMount = null; mob = Mob.fromName(mobType); @@ -74,16 +73,6 @@ public class Commandspawnmob extends EssentialsCommand return; } charge(user); - WorldServer world = ((CraftWorld)user.getWorld()).getHandle(); - try - { - spawnedMob = mob.spawn(user, server); - } - catch (MobException e) - { - user.sendMessage(Util.i18n("unableToSpawnMob")); - return; - } int[] ignore = { 8, 9 @@ -96,8 +85,16 @@ public class Commandspawnmob extends EssentialsCommand loc.setY(loc.getY() + 1); block = user.getWorld().getBlockAt(loc); } - spawnedMob.teleportTo(loc); - world.addEntity(spawnedMob.getHandle()); + + try + { + spawnedMob = mob.spawn(user, server, loc); + } + catch (MobException e) + { + user.sendMessage(Util.i18n("unableToSpawnMob")); + return; + } if (mountType != null) { @@ -109,16 +106,14 @@ public class Commandspawnmob extends EssentialsCommand } try { - spawnedMount = mobMount.spawn(user, server); + spawnedMount = mobMount.spawn(user, server, loc); } catch (MobException e) { user.sendMessage(Util.i18n("unableToSpawnMob")); return; } - spawnedMount.teleportTo(spawnedMob); - spawnedMount.getHandle().setPassengerOf(spawnedMob.getHandle()); - world.addEntity(spawnedMount.getHandle()); + spawnedMob.setPassenger(spawnedMount); } if (mobData != null) { @@ -142,23 +137,19 @@ public class Commandspawnmob extends EssentialsCommand { for (int i = 1; i < mobCount; i++) { - spawnedMob = mob.spawn(user, server); - spawnedMob.teleportTo(loc); - world.addEntity(spawnedMob.getHandle()); + spawnedMob = mob.spawn(user, server, loc); if (mobMount != null) { try { - spawnedMount = mobMount.spawn(user, server); + spawnedMount = mobMount.spawn(user, server, loc); } catch (MobException e) { user.sendMessage(Util.i18n("unableToSpawnMob")); return; } - spawnedMount.teleportTo(spawnedMob); - spawnedMount.getHandle().setPassengerOf(spawnedMob.getHandle()); - world.addEntity(spawnedMount.getHandle()); + spawnedMob.setPassenger(spawnedMount); } if (mobData != null) { @@ -169,7 +160,7 @@ public class Commandspawnmob extends EssentialsCommand changeMobData(mobMount.name, spawnedMount, mountData, user); } } - user.sendMessage(args[1] + " " + mob.name.toLowerCase() + mob.s + Util.i18n("spawned")); + user.sendMessage(args[1] + " " + mob.name.toLowerCase() + mob.suffix + Util.i18n("spawned")); } catch (MobException e1) { @@ -195,7 +186,7 @@ public class Commandspawnmob extends EssentialsCommand return s.toUpperCase().charAt(0) + s.toLowerCase().substring(1); } - private void changeMobData(String type, CraftEntity spawned, String data, User user) throws Exception + private void changeMobData(String type, Entity spawned, String data, User user) throws Exception { if ("Slime".equalsIgnoreCase(type)) {