From 7d1f1494bf8f932583dd0feb56c0b127a43c6893 Mon Sep 17 00:00:00 2001 From: MrErrors Date: Thu, 24 Apr 2025 20:23:24 -0400 Subject: [PATCH 1/2] init commit --- .../ch/njol/skript/effects/EffScriptFile.java | 31 +++++++-- .../expressions/ExprScriptFileErrors.java | 67 +++++++++++++++++++ src/test/skript/tests/misc/-reloadErrors.sk | 2 + .../syntaxes/expressions/ExprScriptErrors.sk | 13 ++++ 4 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 src/main/java/ch/njol/skript/expressions/ExprScriptFileErrors.java create mode 100644 src/test/skript/tests/misc/-reloadErrors.sk create mode 100644 src/test/skript/tests/syntaxes/expressions/ExprScriptErrors.sk diff --git a/src/main/java/ch/njol/skript/effects/EffScriptFile.java b/src/main/java/ch/njol/skript/effects/EffScriptFile.java index d49d41d3112..b572b58b4b1 100644 --- a/src/main/java/ch/njol/skript/effects/EffScriptFile.java +++ b/src/main/java/ch/njol/skript/effects/EffScriptFile.java @@ -6,8 +6,11 @@ import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; import ch.njol.skript.doc.Since; +import ch.njol.skript.expressions.ExprScriptFileErrors; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; +import ch.njol.skript.log.LogEntry; +import ch.njol.skript.log.RetainingLogHandler; import ch.njol.skript.registrations.Feature; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; @@ -77,20 +80,34 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye @Override protected void execute(Event event) { + OpenCloseable openCloseable = OpenCloseable.EMPTY; + RetainingLogHandler logHandler = null; + if (mark == RELOAD || mark == ENABLE) { + logHandler = new RetainingLogHandler().start(); + openCloseable = logHandler; + } if (scripts) { for (Script script : scriptExpression.getArray(event)) { @Nullable File file = script.getConfig().getFile(); - this.handle(file, script.getConfig().getFileName()); + this.handle(file, script.getConfig().getFileName(), openCloseable); } } else { String name = scriptNameExpression.getSingle(event); - if (name == null) - return; - this.handle(ScriptLoader.getScriptFromName(name), name); + if (name != null) + this.handle(ScriptLoader.getScriptFromName(name), name, openCloseable); + } + if (logHandler != null) { + String[] errors = logHandler.getErrors().stream().map(LogEntry::getMessage).toArray(String[]::new); + if (mark == RELOAD) { + ExprScriptFileErrors.lastReloadedErrors = errors; + } else { + ExprScriptFileErrors.lastEnabledErrors = errors; + } + logHandler.printErrors(); } } - private void handle(@Nullable File scriptFile, @Nullable String name) { + private void handle(@Nullable File scriptFile, @Nullable String name, OpenCloseable openCloseable) { if (scriptFile == null || !scriptFile.exists()) return; if (name == null) @@ -117,7 +134,7 @@ private void handle(@Nullable File scriptFile, @Nullable String name) { } } - ScriptLoader.loadScripts(scriptFile, OpenCloseable.EMPTY); + ScriptLoader.loadScripts(scriptFile, openCloseable); break; case RELOAD: if (filter.accept(scriptFile)) @@ -125,7 +142,7 @@ private void handle(@Nullable File scriptFile, @Nullable String name) { this.unloadScripts(scriptFile); - ScriptLoader.loadScripts(scriptFile, OpenCloseable.EMPTY); + ScriptLoader.loadScripts(scriptFile, openCloseable); break; case UNLOAD: if (hasReflection) { // if we don't use the new features this falls through into DISABLE diff --git a/src/main/java/ch/njol/skript/expressions/ExprScriptFileErrors.java b/src/main/java/ch/njol/skript/expressions/ExprScriptFileErrors.java new file mode 100644 index 00000000000..03142b1249f --- /dev/null +++ b/src/main/java/ch/njol/skript/expressions/ExprScriptFileErrors.java @@ -0,0 +1,67 @@ +package ch.njol.skript.expressions; + +import ch.njol.skript.Skript; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Example; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.Since; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.util.SimpleExpression; +import ch.njol.util.Kleenean; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +@Name("Last Reloaded Errors") +@Description("The errors from the last singular or multiple scripts that were reloaded or enabled via an effect.") +@Example(""" + reload script named "test.sk" + if last reloaded errors is set: + disable script file "test.sk" + """) +@Example(""" + enable script named "-test.sk" + if last enabled errors is set: + disable script file "test.sk" + """) +@Since("INSERT VERSION") +public class ExprScriptFileErrors extends SimpleExpression { + + static { + Skript.registerExpression(ExprScriptFileErrors.class, String.class, ExpressionType.SIMPLE, + "[the] last (:reloaded|enabled) [script|skript] errors"); + } + + public static String[] lastReloadedErrors = null; + public static String[] lastEnabledErrors = null; + + private boolean getReloaded; + + @Override + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + getReloaded = parseResult.hasTag("reloaded"); + return true; + } + + @Override + protected String @Nullable [] get(Event event) { + return getReloaded ? lastReloadedErrors : lastEnabledErrors; + } + + @Override + public boolean isSingle() { + return false; + } + + @Override + public Class getReturnType() { + return String.class; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return "the last reloaded script errors"; + } + +} diff --git a/src/test/skript/tests/misc/-reloadErrors.sk b/src/test/skript/tests/misc/-reloadErrors.sk new file mode 100644 index 00000000000..68d87503a9b --- /dev/null +++ b/src/test/skript/tests/misc/-reloadErrors.sk @@ -0,0 +1,2 @@ +on load: + set {_filler} to blah diff --git a/src/test/skript/tests/syntaxes/expressions/ExprScriptErrors.sk b/src/test/skript/tests/syntaxes/expressions/ExprScriptErrors.sk new file mode 100644 index 00000000000..3b3c599905c --- /dev/null +++ b/src/test/skript/tests/syntaxes/expressions/ExprScriptErrors.sk @@ -0,0 +1,13 @@ +options: + path: "../../../../../../src/test/skript/tests/" + +test "enabled errors": + set {_path} to {@path} + "misc/-reloadErrors.sk" + enable script named {_path} + assert last enabled errors contains "Can't understand this expression: 'blah'" with "Did not retrieve last enabled errors" + +test "reloaded errors": + set {_path} to {@path} + "misc/reloadErrors.sk" + reload script named {_path} + assert last reloaded errors contains "Can't understand this expression: 'blah'" with "Did not retrieve last reloaded errors" + disable script named {_path} From 2fd2a920b91d3523762624177c044506cd84e896 Mon Sep 17 00:00:00 2001 From: MrErrors Date: Thu, 24 Apr 2025 23:25:01 -0400 Subject: [PATCH 2/2] switched to printing instead of catching errors --- .../ch/njol/skript/effects/EffScriptFile.java | 50 ++++++++------ .../expressions/ExprScriptFileErrors.java | 67 ------------------- src/test/skript/tests/misc/-reloadErrors.sk | 2 - .../syntaxes/expressions/ExprScriptErrors.sk | 13 ---- 4 files changed, 29 insertions(+), 103 deletions(-) delete mode 100644 src/main/java/ch/njol/skript/expressions/ExprScriptFileErrors.java delete mode 100644 src/test/skript/tests/misc/-reloadErrors.sk delete mode 100644 src/test/skript/tests/syntaxes/expressions/ExprScriptErrors.sk diff --git a/src/main/java/ch/njol/skript/effects/EffScriptFile.java b/src/main/java/ch/njol/skript/effects/EffScriptFile.java index b572b58b4b1..5a90098798b 100644 --- a/src/main/java/ch/njol/skript/effects/EffScriptFile.java +++ b/src/main/java/ch/njol/skript/effects/EffScriptFile.java @@ -2,16 +2,26 @@ import ch.njol.skript.ScriptLoader; import ch.njol.skript.Skript; +import ch.njol.skript.SkriptCommand; +import ch.njol.skript.command.ScriptCommand; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; import ch.njol.skript.doc.Since; -import ch.njol.skript.expressions.ExprScriptFileErrors; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; +import ch.njol.skript.localization.Language; +import ch.njol.skript.localization.PluralizingArgsMessage; import ch.njol.skript.log.LogEntry; +import ch.njol.skript.log.LogHandler; +import ch.njol.skript.log.RedirectingLogHandler; import ch.njol.skript.log.RetainingLogHandler; +import ch.njol.skript.log.TimingLogHandler; import ch.njol.skript.registrations.Feature; +import ch.njol.skript.util.Utils; +import ch.njol.util.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; import org.skriptlang.skript.lang.script.Script; @@ -24,7 +34,10 @@ import java.io.File; import java.io.FileFilter; import java.io.IOException; +import java.util.HashSet; import java.util.Set; +import java.util.logging.Level; +import java.util.stream.Collectors; @Name("Enable/Disable/Unload/Reload Script") @Description(""" @@ -44,9 +57,9 @@ public class EffScriptFile extends Effect { static { Skript.registerEffect(EffScriptFile.class, - "(1:(enable|load)|2:reload|3:disable|4:unload) script [file|named] %string%", - "(1:(enable|load)|2:reload|3:disable|4:unload) skript file %string%", - "(1:(enable|load)|2:reload|3:disable|4:unload) %scripts%" + "(1:(enable|load)|2:reload|3:disable|4:unload) script [file|named] %string% [print:with errors]", + "(1:(enable|load)|2:reload|3:disable|4:unload) skript file %string% [print:with errors]", + "(1:(enable|load)|2:reload|3:disable|4:unload) %scripts% [print:with errors]" ); /* The string-pattern must come first (since otherwise `script X` would match the expression) @@ -60,12 +73,13 @@ public class EffScriptFile extends Effect { private @UnknownNullability Expression scriptNameExpression; private @UnknownNullability Expression