diff --git a/src/main/java/ch/njol/skript/ScriptLoader.java b/src/main/java/ch/njol/skript/ScriptLoader.java index 411323f9795..dac3cc17596 100644 --- a/src/main/java/ch/njol/skript/ScriptLoader.java +++ b/src/main/java/ch/njol/skript/ScriptLoader.java @@ -962,7 +962,7 @@ public static ArrayList loadItems(SectionNode node) { if (!SkriptParser.validateLine(expr)) continue; - TriggerItem item; + TriggerItem item = null; if (subNode instanceof SimpleNode) { long start = System.currentTimeMillis(); item = Statement.parse(expr, items, "Can't understand this condition/effect: " + expr); @@ -982,13 +982,13 @@ public static ArrayList loadItems(SectionNode node) { Skript.debug(SkriptColor.replaceColorChar(parser.getIndentation() + item.toString(null, true))); items.add(item); - } else if (subNode instanceof SectionNode) { + } else if (subNode instanceof SectionNode subSection) { TypeHints.enterScope(); // Begin conditional type hints RetainingLogHandler handler = SkriptLogger.startRetainingLog(); find_section: try { - item = Section.parse(expr, "Can't understand this section: " + expr, (SectionNode) subNode, items); + item = Section.parse(expr, "Can't understand this section: " + expr, subSection, items); if (item != null) break find_section; @@ -996,7 +996,7 @@ public static ArrayList loadItems(SectionNode node) { RetainingLogHandler backup = handler.backup(); handler.clear(); - item = Statement.parse(expr, "Can't understand this condition/effect: " + expr, (SectionNode) subNode, items); + item = Statement.parse(expr, "Can't understand this condition/effect: " + expr, subSection, items); if (item != null) break find_section; @@ -1013,12 +1013,14 @@ public static ArrayList loadItems(SectionNode node) { } continue; } finally { + RetainingLogHandler afterParse = handler.backup(); + handler.clear(); handler.printLog(); + if (item != null && (Skript.debug() || subNode.debug())) + Skript.debug(SkriptColor.replaceColorChar(parser.getIndentation() + item.toString(null, true))); + afterParse.printLog(); } - if (Skript.debug() || subNode.debug()) - Skript.debug(SkriptColor.replaceColorChar(parser.getIndentation() + item.toString(null, true))); - items.add(item); // Destroy these conditional type hints diff --git a/src/main/java/ch/njol/skript/sections/SecConditional.java b/src/main/java/ch/njol/skript/sections/SecConditional.java index 02830488cc6..143976fd248 100644 --- a/src/main/java/ch/njol/skript/sections/SecConditional.java +++ b/src/main/java/ch/njol/skript/sections/SecConditional.java @@ -15,6 +15,7 @@ import ch.njol.skript.patterns.PatternCompiler; import ch.njol.skript.patterns.SkriptPattern; import ch.njol.skript.util.Patterns; +import ch.njol.skript.util.SkriptColor; import ch.njol.util.Kleenean; import com.google.common.collect.Iterables; import org.bukkit.event.Event; @@ -203,6 +204,17 @@ public boolean init(Expression[] exprs, if (conditionals.isEmpty()) return false; + /* + This allows the embedded multilined conditions to be properly debugged. + Debugs are caught within the RetainingLogHandler in ScriptLoader#loadItems + Which will be printed after the debugged section (e.g 'if all') + */ + if ((Skript.debug() || sectionNode.debug()) && conditionals.size() > 1) { + String indentation = getParser().getIndentation() + " "; + for (Conditional condition : conditionals) + Skript.debug(indentation + SkriptColor.replaceColorChar(condition.toString(null, true))); + } + conditional = Conditional.compound(ifAny ? Operator.OR : Operator.AND, conditionals); }