From 86780f5985560346a1f2a01f513b00d0ad73bdf1 Mon Sep 17 00:00:00 2001 From: Talamar1 Date: Mon, 22 Jun 2015 23:41:20 -0400 Subject: [PATCH] Convert "on inv picks up item" to ScriptEvent format --- .../java/net/aufdemrand/denizen/Denizen.java | 1 + .../world/InvPicksUpItemScriptEvent.java | 109 ++++++++++++++++++ .../core/BukkitWorldScriptHelper.java | 45 -------- 3 files changed, 110 insertions(+), 45 deletions(-) create mode 100644 src/main/java/net/aufdemrand/denizen/events/world/InvPicksUpItemScriptEvent.java diff --git a/src/main/java/net/aufdemrand/denizen/Denizen.java b/src/main/java/net/aufdemrand/denizen/Denizen.java index 9bdea4db60..b53c08fd22 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 InvPicksUpItemScriptEvent()); ScriptEvent.registerScriptEvent(new ItemDespawnsScriptEvent()); ScriptEvent.registerScriptEvent(new ItemMoveScriptEvent()); ScriptEvent.registerScriptEvent(new ItemScrollScriptEvent()); diff --git a/src/main/java/net/aufdemrand/denizen/events/world/InvPicksUpItemScriptEvent.java b/src/main/java/net/aufdemrand/denizen/events/world/InvPicksUpItemScriptEvent.java new file mode 100644 index 0000000000..807b71d2c9 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/events/world/InvPicksUpItemScriptEvent.java @@ -0,0 +1,109 @@ +package net.aufdemrand.denizen.events.world; + +import net.aufdemrand.denizen.objects.dInventory; +import net.aufdemrand.denizen.objects.dItem; +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.inventory.InventoryPickupItemEvent; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +public class InvPicksUpItemScriptEvent extends ScriptEvent implements Listener { + + // <--[event] + // @Events + // inventory picks up item + // inventory picks up + // picks up item + // picks up + // + // @Cancellable true + // + // @Triggers when a hopper or hopper minecart picks up an item. + // + // @Context + // returns the dInventory that picked up the item. + // returns the dItem. + // + // --> + + public InvPicksUpItemScriptEvent() { + instance = this; + } + public static InvPicksUpItemScriptEvent instance; + public dInventory inventory; + public dItem item; + public InventoryPickupItemEvent event; + + @Override + public boolean couldMatch(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String inv = CoreUtilities.getXthArg(0, lower); + List types = Arrays.asList("inventory", "hopper", "hopper_minecart"); + return lower.contains("picks up") + && types.contains(inv); + } + + @Override + public boolean matches(ScriptContainer scriptContainer, String s) { + String lower = CoreUtilities.toLowerCase(s); + String inv = CoreUtilities.getXthArg(0, lower); + String itemName = CoreUtilities.getXthArg(3, lower); + if (!inv.equals("inventory")) { + if (!inventory.getInventoryType().toString().toLowerCase().equals(inv)) { + return false; + } + } + if (!itemName.equals("item")) { + if (!itemName.equals(item.identifySimpleNoIdentifier()) && !itemName.equals(inventory.identifySimple())) { + return false; + } + } + return true; + } + + @Override + public String getName() { + return "InvPicksUpItem"; + } + + @Override + public void init() { + Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); + } + + @Override + public void destroy() { + InventoryPickupItemEvent.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("inventory", inventory); + context.put("item", item); + return context; + } + + @EventHandler + public void onInvPicksUpItem(InventoryPickupItemEvent event) { + inventory = dInventory.mirrorBukkitInventory(event.getInventory()); + item = new dItem(event.getItem()); + cancelled = event.isCancelled(); + 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 9181b5fca7..77ebad8750 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 @@ -691,51 +691,6 @@ public void inventoryOpenEvent(InventoryOpenEvent event) { event.setCancelled(true); } - // <--[event] - // @Events - // inventory picks up item - // inventory picks up - // picks up item - // picks up - // - // @Triggers when a hopper or hopper minecart picks up an item. - // @Context - // returns the dInventory that picked up the item. - // returns the dItem. - // - // @Determine - // "CANCELLED" to stop the item from being moved. - // - // --> - @EventHandler - public void inventoryPickupItemEvent(InventoryPickupItemEvent event) { - - // Too laggy! TODO: Evaluate further. - if (event.getInventory().getType() == InventoryType.HOPPER) - return; - - Map context = new HashMap(); - - String type = event.getInventory().getType().name(); - dItem item = new dItem(event.getItem()); - - List events = Arrays.asList("inventory picks up item", - "inventory picks up " + item.identifySimple(), - type + " picks up item", - type + " picks up " + item.identifySimple()); - - dInventory inventory = dInventory.mirrorBukkitInventory(event.getInventory()); - context.put("inventory", inventory); - context.put("item", item); - - String determination = doEvents(events, - null, null, context, true); - - if (determination.toUpperCase().startsWith("CANCELLED")) - event.setCancelled(true); - } - - ///////////////////// // PLAYER EVENTS /////////////////