From a218dfab37225e50840b56d26c4440d8193185aa Mon Sep 17 00:00:00 2001 From: Talamar1 Date: Fri, 12 Jun 2015 23:42:02 -0400 Subject: [PATCH] Rewrote "on block built" event in new ScriptEvent format. Removed from BukkitWorldScriptHelper. --- .../java/net/aufdemrand/denizen/Denizen.java | 1 + .../scriptevents/BlockBuiltScriptEvent.java | 108 ++++++++++++++++++ .../core/BukkitWorldScriptHelper.java | 48 -------- 3 files changed, 109 insertions(+), 48 deletions(-) create mode 100644 src/main/java/net/aufdemrand/denizen/events/scriptevents/BlockBuiltScriptEvent.java diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index 67f3069d7e..eb0a0c8a34 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -576,6 +576,7 @@ public void onEnable() { eventManager().registerCoreMembers(); ScriptEvent.registerScriptEvent(new BiomeEnterExitScriptEvent()); + ScriptEvent.registerScriptEvent(new BlockBuiltScriptEvent()); ScriptEvent.registerScriptEvent(new BlockFallsScriptEvent()); ScriptEvent.registerScriptEvent(new BlockPhysicsScriptEvent()); ScriptEvent.registerScriptEvent(new BucketEmptyScriptEvent()); diff --git a/src/main/java/net/aufdemrand/denizen/events/scriptevents/BlockBuiltScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/scriptevents/BlockBuiltScriptEvent.java new file mode 100644 index 0000000000..e22160c481 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/scriptevents/BlockBuiltScriptEvent.java @@ -0,0 +1,108 @@ +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.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.block.BlockCanBuildEvent; + +import java.util.HashMap; + +public class BlockBuiltScriptEvent extends ScriptEvent implements Listener { + + // <--[event] + // @Events + // block being built + // block being built on + // being built + // being built on + // + // @Cancellable true + // + // @Triggers when an attempt is made to build a block on another block. Not necessarily caused by players. + // + // @Context + // returns the dLocation of the block the player is trying to build on. + // returns the dMaterial of the block the player is trying to build on. + // Deprecated, returns the dMaterial of the block the player is trying to build. + // + // @Determine + // "BUILDABLE" to allow the building. + // + // --> + + public BlockBuiltScriptEvent() { + instance = this; + } + public static BlockBuiltScriptEvent instance; + public dLocation location; + public dMaterial old_material; + public dMaterial new_material; + public BlockCanBuildEvent event; + + @Override + public boolean couldMatch(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + return lower.contains(" being built"); + } + + @Override + public boolean matches(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String arg1 = CoreUtilities.getXthArg(0, lower); + String arg2 = CoreUtilities.getXthArg(4, lower); + return (arg1.equals("block") || arg1.equals(new_material.identifyNoIdentifier())) + && (!lower.contains(" on ") || (arg2.equals("block") || arg2.equals(old_material.identifyNoIdentifier()))); + } + + @Override + public String getName() { + return "BlockBuilt"; + } + + @Override + public void init() { + Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + @Override + public void destroy() { + BlockCanBuildEvent.getHandlerList().unregister(this); + } + + @Override + public boolean applyDetermination(ScriptContainer container, String determination) { + String lower = CoreUtilities.toLowerCase(determination); + if (lower.equals("buildable")) { + cancelled = false; + } + return super.applyDetermination(container, determination); + } + + @Override + public HashMap getContext() { + HashMap context = super.getContext(); + context.put("location", location); + context.put("new_material", new_material); // Deprecated because it doesn't have proper data + context.put("old_material", old_material); + return context; + } + + @EventHandler + public void onBlockBuilt(BlockCanBuildEvent event) { + location = new dLocation(event.getBlock().getLocation()); + old_material = dMaterial.getMaterialFrom(event.getBlock().getType(), event.getBlock().getData()); + new_material = dMaterial.getMaterialFrom(event.getMaterial()); // Deprecated because it doesn't have proper data + cancelled = !event.isBuildable(); + this.event = event; + fire(); + event.setBuildable(!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 40cd1e7304..8b60e105a9 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 @@ -204,54 +204,6 @@ public void blockBurn(BlockBurnEvent event) { event.setCancelled(true); } - // <--[event] - // @Events - // block being built - // block being built on - // being built - // being built on - // - // @Triggers when an attempt is made to build a block on another block. Not necessarily caused by players. - // @Context - // returns the dLocation of the block the player is trying to build on. - // returns the dMaterial of the block the player is trying to build on. - // returns the dMaterial of the block the player is trying to build. - // - // @Determine - // "BUILDABLE" to allow the building. - // "CANCELLED" to cancel the building. - // - // --> - @EventHandler - public void blockCanBuild(BlockCanBuildEvent event) { - - // TODO: Remove when Bukkit fixes error? - if (event.getMaterial() == null) - return; - - Map context = new HashMap(); - dMaterial oldMaterial = dMaterial.getMaterialFrom(event.getBlock().getType()); - dMaterial newMaterial = dMaterial.getMaterialFrom(event.getMaterial()); - - context.put("location", new dLocation(event.getBlock().getLocation())); - context.put("old_material", oldMaterial); - context.put("new_material", newMaterial); - - String determination = doEvents(Arrays.asList - ("block being built", - "block being built on " + oldMaterial.identifySimple(), - newMaterial.identifySimple() + " being built", - newMaterial.identifySimple() + " being built on " + - oldMaterial.identifySimple()), - null, null, context, true); - - if (determination.toUpperCase().startsWith("BUILDABLE")) - event.setBuildable(true); - - if (determination.toUpperCase().startsWith("CANCELLED")) - event.setBuildable(false); - } - // <--[event] // @Events // player damages block