diff --git a/src/main/java/net/aufdemrand/denizen/events/core/EntitySpawnSmartEvent.java b/src/main/java/net/aufdemrand/denizen/events/core/EntitySpawnSmartEvent.java index b005a905b3..bdfcf7c31b 100644 --- a/src/main/java/net/aufdemrand/denizen/events/core/EntitySpawnSmartEvent.java +++ b/src/main/java/net/aufdemrand/denizen/events/core/EntitySpawnSmartEvent.java @@ -114,6 +114,9 @@ public void creatureSpawn(CreatureSpawnEvent event) { dEntity entity = new dEntity(event.getEntity()); String reason = event.getSpawnReason().name(); + // Remember the entity (for adjusting and stuff before it's spawned) + dEntity.rememberEntity(event.getEntity()); + // Look for cuboids that contain the block's location List cuboids = dCuboid.getNotableCuboidsContaining(event.getLocation()); @@ -146,6 +149,8 @@ public void creatureSpawn(CreatureSpawnEvent event) { String determination = BukkitWorldScriptHelper.doEvents(events, (entity.isCitizensNPC() ? entity.getDenizenNPC() : null), null, context, true); + dEntity.forgetEntity(event.getEntity()); + if (determination.toUpperCase().startsWith("CANCELLED")) event.setCancelled(true); } diff --git a/src/main/java/net/aufdemrand/denizen/objects/dEntity.java b/src/main/java/net/aufdemrand/denizen/objects/dEntity.java index 278d77c3ae..da53d7d5ce 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dEntity.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dEntity.java @@ -52,6 +52,16 @@ public class dEntity implements dObject, Adjustable { // STATIC METHODS ///////////////// + private static final Map rememberedEntities = new HashMap(); + + public static void rememberEntity(Entity entity) { + rememberedEntities.put(entity.getUniqueId(), entity); + } + + public static void forgetEntity(Entity entity) { + rememberedEntities.remove(entity.getUniqueId()); + } + public static boolean isNPC(Entity entity) { return entity != null && entity.hasMetadata("NPC") && entity.getMetadata("NPC").get(0).asBoolean(); } @@ -230,10 +240,11 @@ else if (context == null || context.debug) { return null; } - @Deprecated - public static Entity getEntityForID(UUID ID) { + public static Entity getEntityForID(UUID id) { + if (rememberedEntities.containsKey(id)) + return rememberedEntities.get(id); for (World world : Bukkit.getWorlds()) { - net.minecraft.server.v1_8_R2.Entity nmsEntity = ((CraftWorld) world).getHandle().getEntity(ID); + net.minecraft.server.v1_8_R2.Entity nmsEntity = ((CraftWorld) world).getHandle().getEntity(id); // Make sure the nmsEntity is valid, to prevent unpleasant errors if (nmsEntity != null) { @@ -1114,7 +1125,7 @@ public String identify() { // if (isSaved(this)) // return "e@" + getSaved(this); - else if (isSpawned()) + else if (isSpawned() || rememberedEntities.containsKey(entity.getUniqueId())) return "e@" + entity.getUniqueId().toString(); }