From f6acad60db7225604cc75e7cfe13b8cd23c978d3 Mon Sep 17 00:00:00 2001 From: mcmonkey4eva Date: Tue, 8 Oct 2013 16:25:23 -0700 Subject: [PATCH] Fix item script player/npc context in give/drop --- .../java/net/aufdemrand/denizen/objects/dList.java | 10 ++++++++-- .../denizen/scripts/commands/item/GiveCommand.java | 2 +- .../denizen/scripts/commands/world/DropCommand.java | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/objects/dList.java b/src/main/java/net/aufdemrand/denizen/objects/dList.java index 49a832be7e..3af86965ad 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dList.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dList.java @@ -1,6 +1,7 @@ package net.aufdemrand.denizen.objects; import net.aufdemrand.denizen.flags.FlagManager; +import net.aufdemrand.denizen.scripts.ScriptEntry; import net.aufdemrand.denizen.tags.Attribute; import net.aufdemrand.denizen.utilities.DenizenAPI; import net.aufdemrand.denizen.utilities.Utilities; @@ -162,7 +163,10 @@ public String[] toArray() { } // Return a list that includes only elements belonging to a certain class - public List filter(Class dClass) { + public List filter(Class dClass) { + return filter(dClass, null); + } + public List filter(Class dClass, ScriptEntry entry) { List results = new ArrayList(); @@ -171,7 +175,9 @@ public List filter(Class dClass) { try { if ((Boolean) dClass.getMethod("matches", String.class).invoke(null, element)) { - dObject object = (dObject) dClass.getMethod("valueOf", String.class).invoke(null, element); + dObject object = (dObject) (dClass == dItem.class && entry != null ? + dItem.valueOf(element, entry.getPlayer(), entry.getNPC()): + dClass.getMethod("valueOf", String.class).invoke(null, element)); // Only add the object if it is not null, thus filtering useless // list items diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/item/GiveCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/item/GiveCommand.java index 9d6cbe4a6a..32864b27d9 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/item/GiveCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/item/GiveCommand.java @@ -64,7 +64,7 @@ else if (!scriptEntry.hasObject("engrave") else if (!scriptEntry.hasObject("items") && !scriptEntry.hasObject("type") && arg.matchesArgumentList(dItem.class)) - scriptEntry.addObject("items", dList.valueOf(arg.raw_value.replace("item:", "")).filter(dItem.class)); + scriptEntry.addObject("items", dList.valueOf(arg.raw_value.replace("item:", "")).filter(dItem.class, scriptEntry)); else if (!scriptEntry.hasObject("inventory") && arg.matchesPrefix("t, to") diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/world/DropCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/world/DropCommand.java index ab404067ab..16c47c5852 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/world/DropCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/world/DropCommand.java @@ -50,7 +50,7 @@ public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException && arg.matchesArgumentType(dItem.class)) { // Item arg scriptEntry.addObject("action", new Element(Action.DROP_ITEM.toString()).setPrefix("action")); - scriptEntry.addObject("item", arg.asType(dItem.class).setPrefix("item")); } + scriptEntry.addObject("item", dItem.valueOf(arg.getValue(), scriptEntry.getPlayer(), scriptEntry.getNPC()).setPrefix("item")); } else if (!scriptEntry.hasObject("action")