From eb0439a7e5cd8dbf1be0b62bdab91577a37eacb1 Mon Sep 17 00:00:00 2001 From: David Cernat Date: Mon, 29 Jul 2013 12:31:12 +0300 Subject: [PATCH] Save entities spawned with Spawn in context, so they can be fetched with %entities% --- .../aufdemrand/denizen/flags/FlagManager.java | 3 ++- .../net/aufdemrand/denizen/objects/dItem.java | 18 +++++++++++++++--- .../aufdemrand/denizen/objects/dLocation.java | 3 ++- .../aufdemrand/denizen/objects/dPlayer.java | 3 +-- .../scripts/commands/entity/SpawnCommand.java | 18 +++++++++++++++++- .../containers/core/ItemScriptContainer.java | 2 +- 6 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/flags/FlagManager.java b/src/main/java/net/aufdemrand/denizen/flags/FlagManager.java index c8e93e8bc7..846d018698 100644 --- a/src/main/java/net/aufdemrand/denizen/flags/FlagManager.java +++ b/src/main/java/net/aufdemrand/denizen/flags/FlagManager.java @@ -274,7 +274,8 @@ public int split(Object obj) { if (split.length > 0) { for (String val : split) - value.values.add(val); + if (val.length() > 0) + value.values.add(val); save(); rebuild(); diff --git a/src/main/java/net/aufdemrand/denizen/objects/dItem.java b/src/main/java/net/aufdemrand/denizen/objects/dItem.java index e4f027ef7b..0ee04e9d15 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dItem.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dItem.java @@ -15,7 +15,9 @@ import org.bukkit.entity.Item; import org.bukkit.inventory.ItemStack; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -478,7 +480,7 @@ public String identify() { // If not a saved item, but is a custom item, return the script id else if (containsLore("§0id:")) { - return "i@" + getLore("§0id: "); + return "i@" + getLore("§0id:"); } } @@ -586,9 +588,19 @@ public String getAttribute(Attribute attribute) { } + // Return all lore except for lore that holds item script ID if (attribute.startsWith("lore")) { - if (getItemStack().hasItemMeta() && getItemStack().getItemMeta().hasLore()) - return new dList(getItemStack().getItemMeta().getLore()).getAttribute(attribute.fulfill(1)); + if (getItemStack().hasItemMeta() && getItemStack().getItemMeta().hasLore()) { + + List loreList = new ArrayList(); + + for (String itemLore : getItemStack().getItemMeta().getLore()) { + if (!itemLore.startsWith("§0id:")) { + loreList.add(itemLore); + } + } + return new dList(loreList).getAttribute(attribute.fulfill(1)); + } else return new dList("").getAttribute(attribute.fulfill(1)); } diff --git a/src/main/java/net/aufdemrand/denizen/objects/dLocation.java b/src/main/java/net/aufdemrand/denizen/objects/dLocation.java index b1e549ef85..7cb6c0e0d8 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dLocation.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dLocation.java @@ -356,10 +356,11 @@ public String getAttribute(Attribute attribute) { String[] ints = attribute.getContext(1).split(",", 3); if ((aH.matchesDouble(ints[0]) || aH.matchesInteger(ints[0])) && (aH.matchesDouble(ints[1]) || aH.matchesInteger(ints[1])) - && (aH.matchesDouble(ints[2]) || aH.matchesInteger(ints[2]))) + && (aH.matchesDouble(ints[2]) || aH.matchesInteger(ints[2]))) { return new dLocation(this.clone().add(Double.valueOf(ints[0]), Double.valueOf(ints[1]), Double.valueOf(ints[2]))).getAttribute(attribute.fulfill(1)); + } } } diff --git a/src/main/java/net/aufdemrand/denizen/objects/dPlayer.java b/src/main/java/net/aufdemrand/denizen/objects/dPlayer.java index 74f554244f..b88f1373b3 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dPlayer.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dPlayer.java @@ -717,8 +717,7 @@ else if (attribute.getAttribute(2).startsWith("world")) // <-- // -> Element(boolean) - // returns a dItem that the player's cursor is on, if any. This includes - // chest interfaces, inventories, and hotbars, etc. + // returns true if the player is allowed to fly, and false otherwise // --> if (attribute.startsWith("allowed_flight")) return new Element(String.valueOf(getPlayerEntity().getAllowFlight())) diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/SpawnCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/SpawnCommand.java index f5764620b0..120bd1824d 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/SpawnCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/SpawnCommand.java @@ -76,10 +76,16 @@ public void execute(final ScriptEntry scriptEntry) throws CommandExecutionExcept aH.debugObj("location", location) + (target != null ? aH.debugObj("target", target) : "")); + // Keep a dList of entities that can be called using %entities% + // later in the script queue + + dList entityList = new dList(""); + // Go through all the entities and spawn them or teleport them, // then set their targets if applicable for (dEntity entity : entities) { + if (entity.isSpawned() == false) { entity.spawnAt(location); } @@ -87,9 +93,19 @@ public void execute(final ScriptEntry scriptEntry) throws CommandExecutionExcept entity.teleport(location); } + // Only add to entityList after the entities have been + // spawned, otherwise you'll get something like "e@skeleton" + // instead of "e@57" on it + + entityList.add(entity.toString()); + if (target != null && target.isLivingEntity()) { entity.target(target.getLivingEntity()); } - } + } + + // Add the dList to the queue's context + + scriptEntry.getResidingQueue().addContext("entities", entityList.toString()); } } \ No newline at end of file diff --git a/src/main/java/net/aufdemrand/denizen/scripts/containers/core/ItemScriptContainer.java b/src/main/java/net/aufdemrand/denizen/scripts/containers/core/ItemScriptContainer.java index 13650b61b5..05125a7139 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/containers/core/ItemScriptContainer.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/containers/core/ItemScriptContainer.java @@ -46,7 +46,7 @@ public dItem getItemFrom(dPlayer player, dNPC npc) { List lore = new ArrayList(); // Set Id of the first, invisible lore - lore.add("§0id: " + getName()); + lore.add("§0id:" + getName()); // Set Display Name if (contains("DISPLAY NAME")){