From 9ed06d33517de7ceb0f4c60e7c19574ece62b806 Mon Sep 17 00:00:00 2001 From: Talamar1 Date: Sat, 13 Jun 2015 15:05:58 -0400 Subject: [PATCH] Rewrote "on piston extends" event in new ScriptEvent format. Removed from BukkitWorldScriptHelper. --- .../java/net/aufdemrand/denizen/Denizen.java | 1 + .../PistonExtendsScriptEvent.java | 118 ++++++++++++++++++ .../core/BukkitWorldScriptHelper.java | 44 ------- 3 files changed, 119 insertions(+), 44 deletions(-) create mode 100644 src/main/java/net/aufdemrand/denizen/events/scriptevents/PistonExtendsScriptEvent.java diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index 71da0b1c9f..2704b2ca16 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -602,6 +602,7 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new ItemScrollScriptEvent()); ScriptEvent.registerScriptEvent(new LiquidSpreadScriptEvent()); ScriptEvent.registerScriptEvent(new ListPingScriptEvent()); + ScriptEvent.registerScriptEvent(new PistonExtendsScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerDamagesBlockScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerJumpScriptEvent()); ScriptEvent.registerScriptEvent(new PlayerWalkScriptEvent()); diff --git a/src/main/java/net/aufdemrand/denizen/events/scriptevents/PistonExtendsScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/scriptevents/PistonExtendsScriptEvent.java new file mode 100644 index 0000000000..1029e66b77 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/scriptevents/PistonExtendsScriptEvent.java @@ -0,0 +1,118 @@ +package net.aufdemrand.denizen.events.scriptevents; + +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.Element; +import net.aufdemrand.denizencore.objects.dList; +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.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPistonExtendEvent; + +import java.util.HashMap; + +public class PistonExtendsScriptEvent extends ScriptEvent implements Listener { + + // <--[event] + // @Events + // piston extends + // extends + // + // @Cancellable true + // + // @Triggers when a piston extends. + // + // @Context + // returns the dLocation of the piston. + // returns the dMaterial of the piston. + // returns an Element of the number of blocks that will be moved by the piston. + // returns a dList of all block locations about to be moved. + // returns an Element of whether the piston is sticky. + // returns a dLocation of the block in front of the piston. + // + // --> + + public PistonExtendsScriptEvent() { + instance = this; + } + public static PistonExtendsScriptEvent instance; + public dLocation location; + public dMaterial material; + public Element length; + public dList blocks; + public Element sticky; + public dLocation relative; + public BlockPistonExtendEvent event; + + @Override + public boolean couldMatch(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String mat = CoreUtilities.getXthArg(0, lower); + return lower.contains("piston extends") + || (lower.equals(mat + " extends") && dMaterial.matches(mat)); + } + + @Override + public boolean matches(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String mat = CoreUtilities.getXthArg(0, lower); + return mat.equals("piston") + || (material.identifySimpleNoIdentifier().toLowerCase().equals(mat)); + } + + @Override + public String getName() { + return "PistonExtends"; + } + + @Override + public void init() { + Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + @Override + public void destroy() { + BlockPistonExtendEvent.getHandlerList().unregister(this); + } + + @Override + public boolean applyDetermination(ScriptContainer container, String determination) { + return super.applyDetermination(container, determination); + } + + @Override + public HashMap getContext() { + HashMap context = super.getContext(); + context.put("location", location); + context.put("material", material); + context.put("sticky", sticky); + context.put("relative", relative); + context.put("blocks", blocks); + context.put("length", length); + return context; + } + + @EventHandler + public void onPistonExtends(BlockPistonExtendEvent event) { + location = new dLocation(event.getBlock().getLocation()); + material = dMaterial.getMaterialFrom(event.getBlock().getType(), event.getBlock().getData()); + sticky = new Element(event.isSticky() ? "true": "false"); + relative = new dLocation(event.getBlock().getRelative(event.getDirection()).getLocation()); + blocks = new dList(); + for (Block block: event.getBlocks()) { + blocks.add(new dLocation(block.getLocation()).identify()); + } + length = new Element(blocks.size()); + cancelled = event.isCancelled(); + this.event = event; + 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 5afc67021a..35b83dcabb 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 @@ -171,50 +171,6 @@ public void blockBreak(BlockBreakEvent event) { } } - // <--[event] - // @Events - // piston extends - // extends - // - // @Triggers when a piston extends. - // @Context - // returns the dLocation of the piston. - // returns the dMaterial of the piston. - // returns an Element of the number of blocks that will be moved by the piston. - // returns a dList of all block locations about to be moved. - // returns an Element of whether the piston is sticky. - // returns a dLocation of the block in front of the piston. - // - // @Determine - // "CANCELLED" to stop the piston from extending. - // - // --> - @EventHandler - public void blockPistonExtend(BlockPistonExtendEvent event) { - - Map context = new HashMap(); - dMaterial material = dMaterial.getMaterialFrom(event.getBlock().getType(), event.getBlock().getData()); - - context.put("location", new dLocation(event.getBlock().getLocation())); - context.put("material", material); - context.put("length", new Element(event.getLength())); - context.put("sticky", new Element(event.isSticky() ? "true": "false")); - context.put("relative", new dLocation(event.getBlock().getRelative(event.getDirection()).getLocation())); - - dList blocks = new dList(); - for (Block block: event.getBlocks()) - blocks.add(new dLocation(block.getLocation()).identify()); - context.put("blocks", blocks); - - String determination = doEvents(Arrays.asList - ("piston extends", - material.identifySimple() + " extends"), - null, null, context, true); - - if (determination.toUpperCase().startsWith("CANCELLED")) - event.setCancelled(true); - } - // <--[event] // @Events // piston retracts