From 343ac36e4acb8136c5fe9afe6ef786f83207cf41 Mon Sep 17 00:00:00 2001 From: mcmonkey4eva Date: Sat, 18 Oct 2014 18:56:45 -0700 Subject: [PATCH] Add separate readSingleTag method Better tag control for the TagManager, yay! --- .../aufdemrand/denizen/tags/TagManager.java | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/tags/TagManager.java b/src/main/java/net/aufdemrand/denizen/tags/TagManager.java index 23be0c1a84..258f78bd69 100644 --- a/src/main/java/net/aufdemrand/denizen/tags/TagManager.java +++ b/src/main/java/net/aufdemrand/denizen/tags/TagManager.java @@ -169,6 +169,26 @@ public void fetchObject(ReplaceableTagEvent event) { } } + public static String readSingleTag(String str, TagContext context) { + ReplaceableTagEvent event = new ReplaceableTagEvent(context.player, context.npc, str, context.entry); + if (event.isInstant() != context.instant) { + // Not the right type of tag, escape the brackets so it doesn't get parsed again + return String.valueOf((char)0x01) + str + String.valueOf((char)0x02); + } else { + // Call Event + Bukkit.getServer().getPluginManager().callEvent(event); + if ((!event.replaced() && event.getAlternative() != null) + || (event.getReplaced().equals("null") && event.hasAlternative())) + event.setReplaced(event.getAlternative()); + if (context.debug) + dB.echoDebug(context.entry, "Filled tag <" + event.toString() + "> with '" + + event.getReplaced() + "'."); + if (!event.replaced()) + dB.echoError(context.entry != null ? context.entry.getResidingQueue(): null, "Tag '" + event.getReplaced() + "' is invalid!"); + return escapeOutput(event.getReplaced()); + } + } + public static String tag(dPlayer player, dNPC npc, String arg) { return tag(player, npc, arg, false, null); @@ -212,28 +232,11 @@ public static String tag(String arg, TagContext context) { do { // Just in case, do-loops make me nervous, but does implement a limit of 25 tags per argument. failsafe++; - ReplaceableTagEvent event; if (positions == null) break; else { String oriarg = arg.substring(positions[0] + 1, positions[1]); - event = new ReplaceableTagEvent(context.player, context.npc, oriarg, context.entry); - if (event.isInstant() != context.instant) { - // Not the right type of tag, escape the brackets so it doesn't get parsed again - arg = arg.substring(0, positions[0]) + String.valueOf((char)0x01) - + escapeOutput(event.getReplaced()) + String.valueOf((char)0x02) + arg.substring(positions[1] + 1, arg.length()); - } else { - // Call Event - Bukkit.getServer().getPluginManager().callEvent(event); - if ((!event.replaced() && event.getAlternative() != null) - || (event.getReplaced().equals("null") && event.hasAlternative())) - event.setReplaced(event.getAlternative()); - if (context.debug) - dB.echoDebug(context.entry, "Filled tag <" + event.toString() + "> with '" + - event.getReplaced() + "'."); - if (!event.replaced()) - dB.echoError(context.entry != null ? context.entry.getResidingQueue(): null, "Tag '" + event.getReplaced() + "' is invalid!"); - arg = arg.substring(0, positions[0]) + escapeOutput(event.getReplaced()) + arg.substring(positions[1] + 1, arg.length()); - } + String replaced = readSingleTag(oriarg, context); + arg = arg.substring(0, positions[0]) + replaced + arg.substring(positions[1] + 1, arg.length()); } // Find new tag positions = locateTag(arg);