Skip to content

Commit

Permalink
Rewrote "entity enters vehicle" in ScriptEvent format.
Browse files Browse the repository at this point in the history
  • Loading branch information
Talamar1 committed Jul 7, 2015
1 parent 5bf4689 commit 5dae515
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 50 deletions.
1 change: 1 addition & 0 deletions src/main/java/net/aufdemrand/denizen/Denizen.java
Expand Up @@ -607,6 +607,7 @@ public void onEnable() {
ScriptEvent.registerScriptEvent(new EntityDeathScriptEvent());
ScriptEvent.registerScriptEvent(new EntityDespawnScriptEvent());
ScriptEvent.registerScriptEvent(new EntityEntersPortalScriptEvent());
ScriptEvent.registerScriptEvent(new EntityEntersVehicleScriptEvent());
ScriptEvent.registerScriptEvent(new EntityExitsPortalScriptEvent());
ScriptEvent.registerScriptEvent(new EntityExplodesScriptEvent());
ScriptEvent.registerScriptEvent(new EntityExplosionPrimesScriptEvent());
Expand Down
@@ -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.VehicleEnterEvent;

import java.util.HashMap;

public class EntityEntersVehicleScriptEvent extends BukkitScriptEvent implements Listener {

// <--[event]
// @Events
// entity enters vehicle (in <area>)
// entity enters <vehicle> (in <area>)
// <entity> enters vehicle (in <area>)
// <entity> enters <vehicle> (in <area>)
//
// @Cancellable true
//
// @Triggers when an entity enters a vehicle.
//
// @Context
// <context.vehicle> returns the dEntity of the vehicle.
// <context.entity> returns the dEntity of the exiting entity.
//
// -->

public EntityEntersVehicleScriptEvent() {
instance = this;
}

public static EntityEntersVehicleScriptEvent instance;
public dEntity vehicle;
public dEntity entity;
public VehicleEnterEvent event;

@Override
public boolean couldMatch(ScriptContainer scriptContainer, String s) {
return CoreUtilities.getXthArg(1, CoreUtilities.toLowerCase(s)).equals("enters");
}

@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 "EntityEntersVehicle";
}

@Override
public void init() {
Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance());
}

@Override
public void destroy() {
VehicleEnterEvent.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<String, dObject> getContext() {
HashMap<String, dObject> context = super.getContext();
context.put("vehicle", vehicle);
context.put("entity", entity);
return context;
}

@EventHandler
public void onEntityEntersVehicle(VehicleEnterEvent event) {
vehicle = new dEntity(event.getVehicle());
entity = new dEntity(event.getEntered());
this.event = event;
cancelled = event.isCancelled();
fire();
event.setCancelled(cancelled);
}
}
Expand Up @@ -1277,54 +1277,4 @@ public void vehicleDestroy(VehicleDestroyEvent event) {
event.setCancelled(true);
}

// <--[event]
// @Events
// entity enters vehicle
// <entity> enters vehicle
// entity enters <vehicle>
// <entity> enters <vehicle>
//
// @Triggers when an entity enters a vehicle.
// @Context
// <context.vehicle> returns the dEntity of the vehicle.
// <context.entity> returns the dEntity of the entering entity.
//
// @Determine
// "CANCELLED" to stop the entity from entering the vehicle.
//
// -->
@EventHandler
public void vehicleEnter(VehicleEnterEvent event) {

dPlayer player = null;
dNPC npc = null;

Map<String, dObject> context = new HashMap<String, dObject>();

dEntity vehicle = new dEntity(event.getVehicle());
dEntity entity = new dEntity(event.getEntered());

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 enters vehicle",
entity.identifyType() + " enters vehicle",
entity.identifySimple() + " enters vehicle",
"entity enters " + vehicle.identifyType(),
"entity enters " + vehicle.identifySimple(),
entity.identifyType() + " enters " + vehicle.identifyType(),
entity.identifySimple() + " enters " + vehicle.identifyType(),
entity.identifyType() + " enters " + vehicle.identifySimple(),
entity.identifySimple() + " enters " + vehicle.identifySimple()),
npc, player, context, true);

if (determination.toUpperCase().startsWith("CANCELLED"))
event.setCancelled(true);
}


}

0 comments on commit 5dae515

Please sign in to comment.