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);
- }
}