From 47fdad6765f392f90fda91cbb8666c7da2ee167a Mon Sep 17 00:00:00 2001 From: mcmonkey4eva Date: Fri, 19 Jun 2015 18:53:50 -0700 Subject: [PATCH] Fix events, fix 'in notable cuboid' for breaks block [experimental] --- .../denizen/events/BukkitScriptEvent.java | 58 +++++++++++++++++++ .../player/PlayerBreaksBlockScriptEvent.java | 26 ++------- .../player/PlayerDamagesBlockScriptEvent.java | 2 +- 3 files changed, 64 insertions(+), 22 deletions(-) create mode 100644 src/main/java/net/aufdemrand/denizen/events/BukkitScriptEvent.java diff --git a/src/main/java/net/aufdemrand/denizen/events/BukkitScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/BukkitScriptEvent.java new file mode 100644 index 0000000000..6509f6a6fc --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/BukkitScriptEvent.java @@ -0,0 +1,58 @@ +package net.aufdemrand.denizen.events; + +import net.aufdemrand.denizen.objects.dCuboid; +import net.aufdemrand.denizen.objects.dEllipsoid; +import net.aufdemrand.denizen.utilities.debugging.dB; +import net.aufdemrand.denizencore.events.ScriptEvent; +import net.aufdemrand.denizencore.scripts.containers.ScriptContainer; +import net.aufdemrand.denizencore.utilities.CoreUtilities; +import org.bukkit.Location; + +import java.util.List; + +public abstract class BukkitScriptEvent extends ScriptEvent { + + public boolean runInCheck(ScriptContainer scriptContainer, String s, String lower, Location location) { + + List data = CoreUtilities.split(lower, ' '); + + int index; + + for (index = 0; index < data.size(); index++) { + if (data.get(index).equals("in")) { + break; + } + } + if (index >= data.size()) { + // No 'in ...' specified + return true; + } + + String it = CoreUtilities.getXthArg(index + 1, s); + if (it.equalsIgnoreCase("notable")) { + String subit = CoreUtilities.getXthArg(index + 2, lower); + if (subit.equalsIgnoreCase("cuboid")) { + return dCuboid.getNotableCuboidsContaining(location).size() > 0; + } + else if (subit.equalsIgnoreCase("ellipsoid")) { + return dEllipsoid.getNotableEllipsoidsContaining(location).size() > 0; + } + else { + dB.echoError("Invalid event 'IN ...' check [" + getName() + "] ('in notable ???'): '" + s + "' for " + scriptContainer.getName()); + return false; + } + } + else if (dCuboid.matches(it)) { + dCuboid cuboid = dCuboid.valueOf(it); + return cuboid.isInsideCuboid(location); + } + else if (dEllipsoid.matches(it)) { + dEllipsoid ellipsoid = dEllipsoid.valueOf(it); + return ellipsoid.contains(location); + } + else { + dB.echoError("Invalid event 'IN ...' check [" + getName() + "] ('in ???'): '" + s + "' for " + scriptContainer.getName()); + return false; + } + } +} diff --git a/src/main/java/net/aufdemrand/denizen/events/player/PlayerBreaksBlockScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/player/PlayerBreaksBlockScriptEvent.java index db464bce46..bcef84b9eb 100644 --- a/src/main/java/net/aufdemrand/denizen/events/player/PlayerBreaksBlockScriptEvent.java +++ b/src/main/java/net/aufdemrand/denizen/events/player/PlayerBreaksBlockScriptEvent.java @@ -1,10 +1,9 @@ package net.aufdemrand.denizen.events.player; import net.aufdemrand.denizen.BukkitScriptEntryData; +import net.aufdemrand.denizen.events.BukkitScriptEvent; import net.aufdemrand.denizen.objects.*; import net.aufdemrand.denizen.utilities.DenizenAPI; -import net.aufdemrand.denizen.utilities.debugging.dB; -import net.aufdemrand.denizencore.events.ScriptEvent; import net.aufdemrand.denizencore.objects.Element; import net.aufdemrand.denizencore.objects.aH; import net.aufdemrand.denizencore.objects.dList; @@ -22,7 +21,7 @@ import java.util.HashMap; -public class PlayerBreaksBlockScriptEvent extends ScriptEvent implements Listener { +public class PlayerBreaksBlockScriptEvent extends BukkitScriptEvent implements Listener { // <--[event] // @Events @@ -73,24 +72,9 @@ public boolean matches(ScriptContainer scriptContainer, String s) { if (!mat.equals("block") && !mat.equals(material.identifyNoIdentifier())) { return false; } - if (CoreUtilities.xthArgEquals(3, lower, "in") || CoreUtilities.xthArgEquals(5, lower, "in")) { - String it = CoreUtilities.getXthArg(4, lower); - if (dCuboid.matches(it)) { - dCuboid cuboid = dCuboid.valueOf(it); - if (!cuboid.isInsideCuboid(location)) { - return false; - } - } - else if (dEllipsoid.matches(it)) { - dEllipsoid ellipsoid = dEllipsoid.valueOf(it); - if (!ellipsoid.contains(location)) { - return false; - } - } - else { - dB.echoError("Invalid event 'IN ...' check [" + getName() + "]: '" + s + "' for " + scriptContainer.getName()); - return false; - } + + if (!runInCheck(scriptContainer, s, lower, location)) { + return false; } if (CoreUtilities.xthArgEquals(3, lower, "with")) { diff --git a/src/main/java/net/aufdemrand/denizen/events/player/PlayerDamagesBlockScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/player/PlayerDamagesBlockScriptEvent.java index a537c01a2f..fc5d9e8bdb 100644 --- a/src/main/java/net/aufdemrand/denizen/events/player/PlayerDamagesBlockScriptEvent.java +++ b/src/main/java/net/aufdemrand/denizen/events/player/PlayerDamagesBlockScriptEvent.java @@ -54,7 +54,7 @@ public PlayerDamagesBlockScriptEvent() { @Override public boolean couldMatch(ScriptContainer scriptContainer, String s) { String lower = CoreUtilities.toLowerCase(s); - String mat = CoreUtilities.getXthArg(3, lower); + String mat = CoreUtilities.getXthArg(2, lower); return lower.startsWith("player damages") && (mat.equals("block") || dMaterial.matches(mat)); }