From 38bec8737ff642dc35495c224285570f724d09aa Mon Sep 17 00:00:00 2001 From: Talamar1 Date: Sun, 21 Jun 2015 20:46:56 -0400 Subject: [PATCH] Rewrote "on entity explosion primes" in ScriptEvent format --- .../java/net/aufdemrand/denizen/Denizen.java | 1 + .../EntityExplosionPrimesScriptEvent.java | 116 ++++++++++++++++++ .../core/BukkitWorldScriptHelper.java | 35 ------ 3 files changed, 117 insertions(+), 35 deletions(-) create mode 100644 src/main/java/net/aufdemrand/denizen/events/entity/EntityExplosionPrimesScriptEvent.java diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index 8d9b5136cd..29360d1839 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -605,6 +605,7 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new EntityEntersPortalScriptEvent()); ScriptEvent.registerScriptEvent(new EntityExitsPortalScriptEvent()); ScriptEvent.registerScriptEvent(new EntityExplodesScriptEvent()); + ScriptEvent.registerScriptEvent(new EntityExplosionPrimesScriptEvent()); ScriptEvent.registerScriptEvent(new EntityFormsBlock()); ScriptEvent.registerScriptEvent(new EntityHealsScriptEvent()); ScriptEvent.registerScriptEvent(new EntityInteractScriptEvent()); diff --git a/src/main/java/net/aufdemrand/denizen/events/entity/EntityExplosionPrimesScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/entity/EntityExplosionPrimesScriptEvent.java new file mode 100644 index 0000000000..47169449cd --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/entity/EntityExplosionPrimesScriptEvent.java @@ -0,0 +1,116 @@ +package net.aufdemrand.denizen.events.entity; + +import net.aufdemrand.denizen.BukkitScriptEntryData; +import net.aufdemrand.denizen.objects.dEntity; +import net.aufdemrand.denizen.utilities.DenizenAPI; +import net.aufdemrand.denizencore.events.ScriptEvent; +import net.aufdemrand.denizencore.objects.Element; +import net.aufdemrand.denizencore.objects.aH; +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.entity.ExplosionPrimeEvent; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +public class EntityExplosionPrimesScriptEvent extends ScriptEvent implements Listener { + + // <--[event] + // @Events + // entity explosion primes + // explosion primes + // + // @Cancellable true + // + // @Triggers when an entity decides to explode. + // + // @Context + // returns the dEntity. + // returns an Element of the explosion's radius. + // returns an Element with a value of "true" if the explosion will create fire and "false" otherwise. + // --> + + public EntityExplosionPrimesScriptEvent() { + instance = this; + } + public static EntityExplosionPrimesScriptEvent instance; + public dEntity entity; + public Float radius; + public Boolean fire; + public ExplosionPrimeEvent event; + + @Override + public boolean couldMatch(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String entOne = CoreUtilities.getXthArg(0, lower); + List types = Arrays.asList("entity", "player", "npc"); + return (types.contains(entOne) || dEntity.matches(entOne)) + && lower.contains("explosion primes"); + } + + @Override + public boolean matches(ScriptContainer scriptContainer, String s) { + String target = CoreUtilities.getXthArg(0,CoreUtilities.toLowerCase(s)); + List types = Arrays.asList("entity", "player", "npc"); + return (types.contains(target) || entity.matchesEntity(target)); + } + + @Override + public String getName() { + return "EntityExplosionPrimes"; + } + + @Override + public void init() { + Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + @Override + public void destroy() { + ExplosionPrimeEvent.getHandlerList().unregister(this); + } + + @Override + public boolean applyDetermination(ScriptContainer container, String determination) { + if (aH.Argument.valueOf(determination) + .matchesPrimitive(aH.PrimitiveType.Float)) { + radius = aH.getFloatFrom(determination); + return true; + } + if (aH.Argument.valueOf(determination) + .matchesPrimitive(aH.PrimitiveType.Boolean)) { + fire = aH.getBooleanFrom(determination); + return true; + } + return super.applyDetermination(container, determination); + } + + @Override + public HashMap getContext() { + HashMap context = super.getContext(); + context.put("entity", entity); + context.put("radius", new Element(radius)); + context.put("fire", new Element(fire)); + return context; + } + + @EventHandler + public void onEntityExplosionPrimes(ExplosionPrimeEvent event) { + entity = new dEntity(event.getEntity()); + radius = event.getRadius(); + fire = event.getFire(); + cancelled = event.isCancelled(); + this.event = event; + fire(); + event.setCancelled(cancelled); + event.setFire(fire); + event.setRadius(radius); + } +} 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 edd091ae60..eed6aaa9dc 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 @@ -137,41 +137,6 @@ public void timeEvent() { // Additional EVENTS ///////////////// - // <--[event] - // @Events - // entity explosion primes - // explosion primes - // - // @Triggers when an entity decides to explode. - // @Context - // returns the dEntity. - // returns an Element of the explosion's radius. - // returns an Element with a value of "true" if the explosion will create fire and "false" otherwise. - // - // @Determine - // "CANCELLED" to stop the entity from deciding to explode. - // TODO: Set radius, set fire-state (mulitple-determinations) - // - // --> - @EventHandler - public void explosionPrimeEvent(ExplosionPrimeEvent event) { - - Map context = new HashMap(); - Entity entity = event.getEntity(); - - context.put("entity", new dEntity(entity)); - context.put("radius", new Element(event.getRadius())); - context.put("fire", new Element(event.getFire())); - - String determination = doEvents(Arrays.asList - ("entity explosion primes", - entity.getType().name() + " explosion primes"), - null, null, context); - - if (determination.toUpperCase().startsWith("CANCELLED")) - event.setCancelled(true); - } - // <--[event] // @Events // entity changes food level