diff --git a/src/main/java/ch/njol/skript/ScriptLoader.java b/src/main/java/ch/njol/skript/ScriptLoader.java index 333d907e306..8925bd2cf62 100644 --- a/src/main/java/ch/njol/skript/ScriptLoader.java +++ b/src/main/java/ch/njol/skript/ScriptLoader.java @@ -5,11 +5,7 @@ import ch.njol.skript.config.SectionNode; import ch.njol.skript.config.SimpleNode; import ch.njol.skript.events.bukkit.PreScriptLoadEvent; -import ch.njol.skript.lang.ExecutionIntent; -import ch.njol.skript.lang.Section; -import ch.njol.skript.lang.SkriptParser; -import ch.njol.skript.lang.Statement; -import ch.njol.skript.lang.TriggerItem; +import ch.njol.skript.lang.*; import ch.njol.skript.lang.parser.ParserInstance; import ch.njol.skript.log.CountingLogHandler; import ch.njol.skript.log.LogEntry; @@ -22,7 +18,6 @@ import ch.njol.skript.util.Task; import ch.njol.skript.util.Timespan; import ch.njol.skript.variables.HintManager; -import ch.njol.util.NonNullPair; import ch.njol.util.OpenCloseable; import ch.njol.util.StringUtils; import org.bukkit.Bukkit; @@ -528,18 +523,19 @@ private static CompletableFuture loadScripts(List configs, O // build sorted list // this nest of pairs is terrible, but we need to keep the reference to the modifiable structures list - List> pairs = scripts.stream() + record LoadingStructure (LoadingScriptInfo loadingScriptInfo, Structure structure) {} + List loadingStructures = scripts.stream() .flatMap(info -> { // Flatten each entry down to a stream of Script-Structure pairs return info.structures.stream() - .map(structure -> new NonNullPair<>(info, structure)); + .map(structure -> new LoadingStructure(info, structure)); }) - .sorted(Comparator.comparing(pair -> pair.getSecond().getPriority())) + .sorted(Comparator.comparing(pair -> pair.structure().getPriority())) .collect(Collectors.toCollection(ArrayList::new)); // pre-loading - pairs.removeIf(pair -> { - LoadingScriptInfo loadingInfo = pair.getFirst(); - Structure structure = pair.getSecond(); + loadingStructures.removeIf(loadingStructure -> { + LoadingScriptInfo loadingInfo = loadingStructure.loadingScriptInfo(); + Structure structure = loadingStructure.structure(); parser.setActive(loadingInfo.script); parser.setCurrentStructure(structure); @@ -566,9 +562,9 @@ private static CompletableFuture loadScripts(List configs, O // Until these reworks happen, limiting main loading to asynchronous (not parallel) is the only choice we have. // loading - pairs.removeIf(pair -> { - LoadingScriptInfo loadingInfo = pair.getFirst(); - Structure structure = pair.getSecond(); + loadingStructures.removeIf(loadingStructure -> { + LoadingScriptInfo loadingInfo = loadingStructure.loadingScriptInfo(); + Structure structure = loadingStructure.structure(); parser.setActive(loadingInfo.script); parser.setCurrentStructure(structure); @@ -590,9 +586,9 @@ private static CompletableFuture loadScripts(List configs, O parser.setInactive(); // post-loading - pairs.removeIf(pair -> { - LoadingScriptInfo loadingInfo = pair.getFirst(); - Structure structure = pair.getSecond(); + loadingStructures.removeIf(loadingStructure -> { + LoadingScriptInfo loadingInfo = loadingStructure.loadingScriptInfo(); + Structure structure = loadingStructure.structure(); parser.setActive(loadingInfo.script); parser.setCurrentStructure(structure); @@ -870,35 +866,53 @@ public static ScriptInfo unloadScripts(Set