diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index b3f173007f..0d7d35a8f4 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -600,6 +600,7 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new EntityDeathScriptEvent()); ScriptEvent.registerScriptEvent(new EntityDespawnScriptEvent()); ScriptEvent.registerScriptEvent(new EntityEntersPortalScriptEvent()); + ScriptEvent.registerScriptEvent(new EntityExitsPortalScriptEvent()); ScriptEvent.registerScriptEvent(new EntityExplodesScriptEvent()); ScriptEvent.registerScriptEvent(new EntityFormsBlock()); ScriptEvent.registerScriptEvent(new EntityHealsScriptEvent()); diff --git a/src/main/java/net/aufdemrand/denizen/events/scriptevents/EntityExitsPortalScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/scriptevents/EntityExitsPortalScriptEvent.java new file mode 100644 index 0000000000..284ff6424c --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/scriptevents/EntityExitsPortalScriptEvent.java @@ -0,0 +1,104 @@ +package net.aufdemrand.denizen.events.scriptevents; + +import net.aufdemrand.denizen.BukkitScriptEntryData; +import net.aufdemrand.denizen.objects.dEntity; +import net.aufdemrand.denizen.objects.dLocation; +import net.aufdemrand.denizen.utilities.DenizenAPI; +import net.aufdemrand.denizencore.events.ScriptEvent; +import net.aufdemrand.denizencore.objects.dObject; +import net.aufdemrand.denizencore.scripts.ScriptEntryData; +import net.aufdemrand.denizencore.scripts.containers.ScriptContainer; +import net.aufdemrand.denizencore.utilities.CoreUtilities; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPortalExitEvent; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +public class EntityExitsPortalScriptEvent extends ScriptEvent implements Listener { + + // <--[event] + // @Events + // entity exits portal + // exits portal + // + // @Cancellable false + // + // @Triggers when an entity enters a portal. + // + // @Context + // returns the dEntity. + // returns the dLocation of the portal block touched by the entity. + // + // --> + + public EntityExitsPortalScriptEvent() { + instance = this; + } + public static EntityExitsPortalScriptEvent instance; + public dEntity entity; + public dLocation location; + public EntityPortalExitEvent event; + + @Override + public boolean couldMatch(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String entOne = CoreUtilities.getXthArg(0, lower); + List types = Arrays.asList("entity", "player", "npc"); + return (types.contains(entOne) || dEntity.matches(entOne)) + && lower.contains("exits portal"); + } + + @Override + public boolean matches(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String target = CoreUtilities.getXthArg(0,lower); + List types = Arrays.asList("entity", "player", "npc"); + return types.contains(target) || entity.matchesEntity(target); + } + + @Override + public String getName() { + return "EntityExitsPortal"; + } + + @Override + public void init() { + Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + @Override + public void destroy() { + EntityPortalExitEvent.getHandlerList().unregister(this); + } + + @Override + public boolean applyDetermination(ScriptContainer container, String determination) { + return super.applyDetermination(container, determination); + } + + @Override + public ScriptEntryData getScriptEntryData() { + return new BukkitScriptEntryData(entity.isPlayer() ? dEntity.getPlayerFrom(event.getEntity()): null, + entity.isCitizensNPC() ? dEntity.getNPCFrom(event.getEntity()): null); + } + + @Override + public HashMap getContext() { + HashMap context = super.getContext(); + context.put("entity", entity); + context.put("location", location); + return context; + } + + @EventHandler + public void onEntityExitsPortal(EntityPortalExitEvent event) { + entity = new dEntity(event.getEntity()); + location = new dLocation(event.getTo()); + this.event = event; + fire(); + } +} diff --git a/src/main/java/net/aufdemrand/denizen/scripts/containers/core/BukkitWorldScriptHelper.java b/src/main/java/net/aufdemrand/denizen/scripts/containers/core/BukkitWorldScriptHelper.java index fd97877484..e79e2feede 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/containers/core/BukkitWorldScriptHelper.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/containers/core/BukkitWorldScriptHelper.java @@ -139,38 +139,6 @@ public void timeEvent() { // Additional EVENTS ///////////////// - // <--[event] - // @Events - // entity exits portal - // exits portal - // - // @Triggers when an entity exits a portal. - // @Context - // returns the dEntity. - // returns the dLocation of the portal block touched by the entity. - // - // --> - @EventHandler - public void entityPortalExit(EntityPortalExitEvent event) { - - dPlayer player = null; - dNPC npc = null; - - Map context = new HashMap(); - dEntity entity = new dEntity(event.getEntity()); - - context.put("location", new dLocation(event.getTo())); - context.put("entity", entity.getDenizenObject()); - - if (entity.isCitizensNPC()) npc = entity.getDenizenNPC(); - else if (entity.isPlayer()) player = entity.getDenizenPlayer(); - - doEvents(Arrays.asList - ("entity exits portal", - entity.identifyType() + " exits portal"), - npc, player, context, true); - } - // <--[event] // @Events // player uses portal