From 419478aff6e5041d16136e6af2554c67869c3b6f Mon Sep 17 00:00:00 2001 From: Morphan1 Date: Sun, 7 Feb 2016 14:27:26 -0500 Subject: [PATCH] Allow list of items in FakeItem --- .../net/aufdemrand/denizen/objects/dItem.java | 2 +- .../commands/BukkitCommandRegistry.java | 2 +- .../commands/item/FakeItemCommand.java | 52 ++++++++++++------- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/objects/dItem.java b/src/main/java/net/aufdemrand/denizen/objects/dItem.java index 8a1952ec81..b3b44a4f0f 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dItem.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dItem.java @@ -68,7 +68,7 @@ public static dItem valueOf(String string, TagContext context) { * @return an Item, or null if incorrectly formatted */ public static dItem valueOf(String string, dPlayer player, dNPC npc) { - if (string == null) { + if (string == null || string.equals("")) { return null; } diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java index a0f125e3ed..0eacf69966 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java @@ -1137,7 +1137,7 @@ public void registerCoreMembers() { // <--[command] // @Name FakeItem - // @Syntax fakeitem [] [slot:<#>] (duration:) (players:|...) (player_only) + // @Syntax fakeitem [|...] [slot:<#>] (duration:) (players:|...) (player_only) // @Required 2 // @Stable stable // @Short Show a fake item in a player's inventory. diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/item/FakeItemCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/item/FakeItemCommand.java index f0d3a615a6..9a99311f97 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/item/FakeItemCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/item/FakeItemCommand.java @@ -46,8 +46,8 @@ else if (!scriptEntry.hasObject("duration") } else if (!scriptEntry.hasObject("item") - && arg.matchesArgumentType(dItem.class)) { - scriptEntry.addObject("item", arg.asType(dItem.class)); + && arg.matchesArgumentList(dItem.class)) { + scriptEntry.addObject("item", arg.asType(dList.class).filter(dItem.class)); } else if (!scriptEntry.hasObject("players") @@ -83,33 +83,45 @@ else if (!scriptEntry.hasObject("player_only") @Override public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { - dItem item = scriptEntry.getdObject("item"); - final Element slot = scriptEntry.getElement("slot"); + List items = (List) scriptEntry.getObject("item"); + final Element elSlot = scriptEntry.getElement("slot"); Duration duration = scriptEntry.getdObject("duration"); final List players = (List) scriptEntry.getObject("players"); final Element player_only = scriptEntry.getElement("player_only"); - dB.report(scriptEntry, getName(), item.debug() + slot.debug() + duration.debug() + dB.report(scriptEntry, getName(), aH.debugList("items", items) + elSlot.debug() + duration.debug() + aH.debugList("players", players) + player_only.debug()); - net.minecraft.server.v1_8_R3.ItemStack itemStack = CraftItemStack.asNMSCopy(item.getItemStack()); + int slot = elSlot.asInt() - 1; - for (dPlayer player : players) { - setSlot((CraftPlayer) player.getPlayerEntity(), slot.asInt() - 1, itemStack, player_only.asBoolean()); - } + for (dItem item : items) { + if (item == null) { + slot++; + continue; + } + + net.minecraft.server.v1_8_R3.ItemStack itemStack = CraftItemStack.asNMSCopy(item.getItemStack()); - if (duration.getSeconds() > 0) { - DenizenCore.schedule(new OneTimeSchedulable(new Runnable() { - @Override - public void run() { - for (dPlayer player : players) { - CraftPlayer craftPlayer = (CraftPlayer) player.getPlayerEntity(); - ItemStack original = CraftItemStack.asNMSCopy(craftPlayer.getOpenInventory() - .getItem(translateSlot(craftPlayer, slot.asInt() - 1, player_only.asBoolean()))); - setSlot(craftPlayer, slot.asInt() - 1, original, player_only.asBoolean()); + for (dPlayer player : players) { + setSlot((CraftPlayer) player.getPlayerEntity(), slot, itemStack, player_only.asBoolean()); + } + + final int slotSnapshot = slot; + slot++; + + if (duration.getSeconds() > 0) { + DenizenCore.schedule(new OneTimeSchedulable(new Runnable() { + @Override + public void run() { + for (dPlayer player : players) { + CraftPlayer craftPlayer = (CraftPlayer) player.getPlayerEntity(); + ItemStack original = CraftItemStack.asNMSCopy(craftPlayer.getOpenInventory() + .getItem(translateSlot(craftPlayer, slotSnapshot, player_only.asBoolean()))); + setSlot(craftPlayer, slotSnapshot, original, player_only.asBoolean()); + } } - } - }, (float) duration.getSeconds())); + }, (float) duration.getSeconds())); + } } }