From 7da098c6b8b6d08bac5e371455006bf6f43cf67d Mon Sep 17 00:00:00 2001 From: Talamar1 Date: Mon, 22 Jun 2015 20:50:19 -0400 Subject: [PATCH] Convert "on item despawns" to new ScriptEvent format. --- .../java/net/aufdemrand/denizen/Denizen.java | 1 + .../entity/ItemDespawnsScriptEvent.java | 112 ++++++++++++++++++ .../core/BukkitWorldScriptHelper.java | 35 ------ 3 files changed, 113 insertions(+), 35 deletions(-) create mode 100644 src/main/java/net/aufdemrand/denizen/events/entity/ItemDespawnsScriptEvent.java diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index 2f3bea3fbc..74640a173b 100644 --- a/src/main/java/net/aufdemrand/denizen/Denizen.java +++ b/src/main/java/net/aufdemrand/denizen/Denizen.java @@ -621,6 +621,7 @@ public void onEnable() { ScriptEvent.registerScriptEvent(new FurnaceSmeltsItemScriptEvent()); ScriptEvent.registerScriptEvent(new HangingBreaksScriptEvent()); ScriptEvent.registerScriptEvent(new HorseJumpsScriptEvent()); + ScriptEvent.registerScriptEvent(new ItemDespawnsScriptEvent()); ScriptEvent.registerScriptEvent(new ItemMoveScriptEvent()); ScriptEvent.registerScriptEvent(new ItemScrollScriptEvent()); ScriptEvent.registerScriptEvent(new ItemSpawnsScriptEvent()); diff --git a/src/main/java/net/aufdemrand/denizen/events/entity/ItemDespawnsScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/entity/ItemDespawnsScriptEvent.java new file mode 100644 index 0000000000..a2107ffdac --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/entity/ItemDespawnsScriptEvent.java @@ -0,0 +1,112 @@ +package net.aufdemrand.denizen.events.entity; + +import net.aufdemrand.denizen.events.BukkitScriptEvent; +import net.aufdemrand.denizen.objects.dEntity; +import net.aufdemrand.denizen.objects.dItem; +import net.aufdemrand.denizen.objects.dLocation; +import net.aufdemrand.denizen.objects.dMaterial; +import net.aufdemrand.denizen.utilities.DenizenAPI; +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.entity.ItemDespawnEvent; + +import java.util.HashMap; + +public class ItemDespawnsScriptEvent extends BukkitScriptEvent implements Listener { + + // <--[event] + // @Events + // item despawns (in ) + // despawns (in ) + // despawns (in ) + // + // @Cancellable true + // + // @Triggers when an item entity spawns. + // + // @Context + // returns the dItem of the entity. + // returns the dEntity. + // returns the location of the entity to be despawned. + // + // --> + + public ItemDespawnsScriptEvent() { + instance = this; + } + public static ItemDespawnsScriptEvent instance; + public dItem item; + public dLocation location; + public dEntity entity; + public ItemDespawnEvent event; + + @Override + public boolean couldMatch(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String cmd = CoreUtilities.getXthArg(1, lower); + String entTest = CoreUtilities.getXthArg(0, lower); + return cmd.equals("despawns") + && (entTest.equals("item") || dMaterial.matches(entTest) || dItem.matches(entTest)); + } + + @Override + public boolean matches(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String item_test = CoreUtilities.getXthArg(0, lower); + + if (!item_test.equals("item") + && !item_test.equals(item.identifyNoIdentifier()) && !item_test.equals(item.identifySimpleNoIdentifier())) { + return false; + } + + if (!runInCheck(scriptContainer, s, lower, location)) { + return false; + } + + return true; + } + + @Override + public String getName() { + return "ItemDespawns"; + } + + @Override + public void init() { + Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + @Override + public void destroy() { + ItemDespawnEvent.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("item", item); + context.put("entity", entity); + return context; + } + + @EventHandler + public void onItemDespawns(ItemDespawnEvent event) { + location = new dLocation(event.getLocation()); + item = new dItem(event.getEntity().getItemStack()); + entity = new dEntity(event.getEntity()); + 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 4036404bc5..f475429a78 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 - // item despawns - // despawns - // despawns - // - // @Triggers when an item entity despawns. - // @Context - // returns the dItem of the entity. - // returns the dEntity. - // - // @Determine - // "CANCELLED" to stop the item entity from despawning. - // - // --> - @EventHandler - public void itemDespawn(ItemDespawnEvent event) { - - Map context = new HashMap(); - dItem item = new dItem(event.getEntity().getItemStack()); - - context.put("item", item); - context.put("entity", new dEntity(event.getEntity())); - - List events = new ArrayList(); - events.add("item despawns"); - events.add(item.identifySimple() + " despawns"); - events.add(item.identifyMaterial() + " despawns"); - - String determination = doEvents(events, null, null, context, true); - - if (determination.toUpperCase().startsWith("CANCELLED")) - event.setCancelled(true); - } - // <--[event] // @Events // projectile hits block