Skip to content

Commit

Permalink
Rewrote "on vehicle collides with entity" event in new ScriptEvent fo…
Browse files Browse the repository at this point in the history
…rmat.

Rewrote "on vehicle collides with block" event in new ScriptEvent format.
Split file into two separate events.
Existing issue where event doesn't handle when vehicle collides with NPC.
It is reporting as a block collision with the block under the NPC.
  • Loading branch information
Talamar1 committed Jun 11, 2015
1 parent b2ae168 commit a157b8e
Show file tree
Hide file tree
Showing 4 changed files with 233 additions and 154 deletions.
3 changes: 2 additions & 1 deletion src/main/java/net/aufdemrand/denizen/Denizen.java
Expand Up @@ -575,7 +575,6 @@ public void onEnable() {
OldEventManager.registerSmartEvent(new NPCNavigationSmartEvent());
OldEventManager.registerSmartEvent(new PlayerEquipsArmorSmartEvent());
OldEventManager.registerSmartEvent(new PlayerStepsOnSmartEvent());
OldEventManager.registerSmartEvent(new VehicleCollisionSmartEvent());
eventManager().registerCoreMembers();

ScriptEvent.registerScriptEvent(new BiomeEnterExitScriptEvent());
Expand All @@ -600,6 +599,8 @@ public void onEnable() {
ScriptEvent.registerScriptEvent(new PlayerWalkScriptEvent());
ScriptEvent.registerScriptEvent(new RedstoneScriptEvent());
ScriptEvent.registerScriptEvent(new ResourcePackStatusScriptEvent());
ScriptEvent.registerScriptEvent(new VehicleCollidesBlockScriptEvent());
ScriptEvent.registerScriptEvent(new VehicleCollidesEntityScriptEvent());
ScriptEvent.registerScriptEvent(new VehicleMoveScriptEvent());


Expand Down

This file was deleted.

@@ -0,0 +1,111 @@
package net.aufdemrand.denizen.events.scriptevents;

import net.aufdemrand.denizen.objects.dEntity;
import net.aufdemrand.denizen.objects.dLocation;
import net.aufdemrand.denizen.objects.dMaterial;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizencore.events.ScriptEvent;
import net.aufdemrand.denizencore.objects.dObject;
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.VehicleBlockCollisionEvent;

import java.util.HashMap;

public class VehicleCollidesBlockScriptEvent extends ScriptEvent implements Listener {

// <--[event]
// @Events
// vehicle collides with block
// vehicle collides with <material>
// <vehicle> collides with block
// <vehicle> collides with <material>
//
// @Triggers when a vehicle collides with a block.
//
// @Context
// <context.vehicle> returns the dEntity of the vehicle.
// <context.location> returns the dLocation of the block.
//
// -->

public VehicleCollidesBlockScriptEvent() {
instance = this;
}
public static VehicleCollidesBlockScriptEvent instance;
public dEntity vehicle;
public dLocation location;
public VehicleBlockCollisionEvent event;

@Override
public boolean couldMatch(ScriptContainer scriptContainer, String s) {
String lower = CoreUtilities.toLowerCase(s);
String arg = lower.substring(lower.lastIndexOf("with ") + 5);
return lower.contains(" collides with ")
&& (arg.equals("block") || dMaterial.matches(arg));
}

@Override
public boolean matches(ScriptContainer scriptContainer, String s) {
String lower = CoreUtilities.toLowerCase(s);

String block = lower.substring(lower.lastIndexOf(" ") + 1);
String mat = dMaterial.getMaterialFrom(event.getBlock().getType(), event.getBlock().getData()).identifyNoIdentifier();

if (mat.equals("m@air") || (mat.equals("air"))) {
return false;
}
if (!block.equals("block")
&& !block.equals(mat)) {
return false;
}

String v_test = lower.substring(0,lower.indexOf(" "));
if (!v_test.equals("vehicle")
&& !v_test.equals(vehicle.identifySimpleType())) {
return false;
}

return true;
}

@Override
public String getName() {
return "VehicleCollidesBlock";
}

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

@Override
public void destroy() {
VehicleBlockCollisionEvent.getHandlerList().unregister(this);
}

@Override
public boolean applyDetermination(ScriptContainer container, String determination) {
return super.applyDetermination(container, determination);
}

@Override
public HashMap<String, dObject> getContext() {
HashMap<String, dObject> context = super.getContext();
context.put("vehicle", vehicle);
context.put("location", location);
return context;
}

@EventHandler
public void onVehicleCollidesBlock(VehicleBlockCollisionEvent event) {
vehicle= new dEntity(event.getVehicle());
location = new dLocation(event.getBlock().getLocation());
this.event = event;
fire();
}
}

0 comments on commit a157b8e

Please sign in to comment.