diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index 77c28abe19..f251a3d0e7 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -615,6 +615,7 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new EntityHealsScriptEvent()); ScriptEvent.registerScriptEvent(new EntityInteractScriptEvent()); ScriptEvent.registerScriptEvent(new EntityKilledScriptEvent()); + ScriptEvent.registerScriptEvent(new EntityExitsVehicleScriptEvent()); ScriptEvent.registerScriptEvent(new EntityShootsBowEvent()); ScriptEvent.registerScriptEvent(new EntitySpawnScriptEvent()); ScriptEvent.registerScriptEvent(new EntityTamesScriptEvent()); diff --git a/src/main/java/net/aufdemrand/denizen/events/entity/EntityExitsVehicleScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/entity/EntityExitsVehicleScriptEvent.java new file mode 100644 index 0000000000..782958b03b --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/entity/EntityExitsVehicleScriptEvent.java @@ -0,0 +1,106 @@ +package net.aufdemrand.denizen.events.entity; + +import net.aufdemrand.denizen.BukkitScriptEntryData; +import net.aufdemrand.denizen.events.BukkitScriptEvent; +import net.aufdemrand.denizen.objects.dEntity; +import net.aufdemrand.denizen.utilities.DenizenAPI; +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.vehicle.VehicleExitEvent; + +import java.util.HashMap; + +public class EntityExitsVehicleScriptEvent extends BukkitScriptEvent implements Listener { + + // <--[event] + // @Events + // entity exits vehicle (in ) + // entity exits (in ) + // exits vehicle (in ) + // exits (in ) + // + // @Cancellable true + // + // @Triggers when an entity exits a vehicle. + // + // @Context + // returns the dEntity of the vehicle. + // returns the dEntity of the exiting entity. + // + // --> + + public EntityExitsVehicleScriptEvent() { + instance = this; + } + + public static EntityExitsVehicleScriptEvent instance; + public dEntity vehicle; + public dEntity entity; + public VehicleExitEvent event; + + @Override + public boolean couldMatch(ScriptContainer scriptContainer, String s) { + return CoreUtilities.getXthArg(1, CoreUtilities.toLowerCase(s)).equals("exits"); + } + + @Override + public boolean matches(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + if (!entity.matchesEntity(CoreUtilities.getXthArg(0, lower))) { + return false; + } + if (!vehicle.matchesEntity(CoreUtilities.getXthArg(2, lower))) { + return false; + } + return runInCheck(scriptContainer, s, lower, vehicle.getLocation()); + } + + @Override + public String getName() { + return "EntityExitsVehicle"; + } + + @Override + public void init() { + Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + @Override + public void destroy() { + VehicleExitEvent.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() ? entity.getDenizenPlayer() : null, + entity.isCitizensNPC() ? entity.getDenizenNPC() : null); + } + + @Override + public HashMap getContext() { + HashMap context = super.getContext(); + context.put("vehicle", vehicle); + context.put("entity", entity); + return context; + } + + @EventHandler + public void onEntityExitsVehicle(VehicleExitEvent event) { + vehicle = new dEntity(event.getVehicle()); + entity = new dEntity(event.getExited()); + this.event = event; + cancelled = event.isCancelled(); + fire(); + event.setCancelled(cancelled); + } +} 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 0d1b41d2b7..6a35784991 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 @@ -1326,52 +1326,5 @@ public void vehicleEnter(VehicleEnterEvent event) { event.setCancelled(true); } - // <--[event] - // @Events - // entity exits vehicle - // entity exits - // exits vehicle - // exits - // - // @Triggers when an entity exits a vehicle. - // @Context - // returns the dEntity of the vehicle. - // returns the dEntity of the exiting entity. - // - // @Determine - // "CANCELLED" to stop the entity from exiting the vehicle. - // - // --> - @EventHandler - public void vehicleExit(VehicleExitEvent event) { - - dPlayer player = null; - dNPC npc = null; - - Map context = new HashMap(); - - dEntity vehicle = new dEntity(event.getVehicle()); - dEntity entity = new dEntity(event.getExited()); - - context.put("vehicle", vehicle); - context.put("entity", entity.getDenizenObject()); - - if (entity.isCitizensNPC()) npc = entity.getDenizenNPC(); - else if (entity.isPlayer()) player = entity.getDenizenPlayer(); - - String determination = doEvents(Arrays.asList - ("entity exits vehicle", - "entity exits " + vehicle.identifyType(), - "entity exits " + vehicle.identifySimple(), - entity.identifyType() + " exits vehicle", - entity.identifyType() + " exits " + vehicle.identifyType(), - entity.identifyType() + " exits " + vehicle.identifySimple(), - entity.identifySimple() + " exits " + vehicle.identifyType(), - entity.identifySimple() + " exits " + vehicle.identifySimple()), - npc, player, context, true); - - if (determination.toUpperCase().startsWith("CANCELLED")) - event.setCancelled(true); - } }