From efde5e72b29e0d0c76b7c5d5ce38989732c90226 Mon Sep 17 00:00:00 2001 From: Mads Volder Date: Wed, 22 Oct 2025 08:04:42 -0800 Subject: [PATCH 1/4] Fix EvtTeleport setting hasDelay --- src/main/java/ch/njol/skript/effects/EffTeleport.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/ch/njol/skript/effects/EffTeleport.java b/src/main/java/ch/njol/skript/effects/EffTeleport.java index e68f0fbfd43..007b0f19fe1 100644 --- a/src/main/java/ch/njol/skript/effects/EffTeleport.java +++ b/src/main/java/ch/njol/skript/effects/EffTeleport.java @@ -73,8 +73,6 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye return false; } - if (async) - getParser().setHasDelayBefore(Kleenean.UNKNOWN); // UNKNOWN because it isn't async if the chunk is already loaded. return true; } From 957af701548afa45d341a235588af9ec19afa787 Mon Sep 17 00:00:00 2001 From: Mads Volder Date: Wed, 22 Oct 2025 14:14:29 -0800 Subject: [PATCH 2/4] Changed so that delays triggered on a blind path doesn't affect other paths. --- .../java/ch/njol/skript/effects/EffExit.java | 38 +++++++++++++++++++ .../skript/lang/parser/ParserInstance.java | 22 +++++++++-- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/main/java/ch/njol/skript/effects/EffExit.java b/src/main/java/ch/njol/skript/effects/EffExit.java index f74b85b3589..31e469a2b74 100644 --- a/src/main/java/ch/njol/skript/effects/EffExit.java +++ b/src/main/java/ch/njol/skript/effects/EffExit.java @@ -2,6 +2,7 @@ import ch.njol.skript.Skript; import ch.njol.skript.classes.data.JavaClasses; +import ch.njol.skript.config.SectionNode; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; @@ -15,6 +16,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnknownNullability; +import java.util.Collection; import java.util.List; @Name("Exit") @@ -88,6 +90,42 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye breakLevels = innerSections.size(); } } + + Collection delaySections = getParser().getDelaySections(); + + if (getParser().getCurrentSection(TriggerSection.class) instanceof Section currentSection + && currentSection.getNode() instanceof SectionNode currentNode) { + + // set hasDelay to false if the only delayed section is the current one + if (delaySections.size() == 1 && delaySections.contains(currentNode)) { + getParser().setHasDelayBefore(Kleenean.FALSE); + } + // set hasDelay to false if only child sections are delayed + else if (delaySections.size() >= 1) { + boolean isOnlyChildSectionsDelayed = true; + for (SectionNode delaySection : delaySections) { + if(delaySection == null) + continue; + // check if currentNode is parent of delaySection + boolean isChildSection = false; + SectionNode section = delaySection; + while (section.getParent() != null) { + section = section.getParent(); + if (section == currentNode) { + isChildSection = true; + break; + } + } + if (!isChildSection) { + isOnlyChildSectionsDelayed = false; + break; + } + } + if (isOnlyChildSectionsDelayed) + getParser().setHasDelayBefore(Kleenean.FALSE); + } + } + assert innerSections != null; sectionsToExit = innerSections.stream() .filter(SectionExitHandler.class::isInstance) diff --git a/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java b/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java index 268f2d13d17..92d63c0bdfb 100644 --- a/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java +++ b/src/main/java/ch/njol/skript/lang/parser/ParserInstance.java @@ -5,10 +5,8 @@ import ch.njol.skript.SkriptAPIException; import ch.njol.skript.config.Config; import ch.njol.skript.config.Node; -import ch.njol.skript.lang.Expression; -import ch.njol.skript.lang.SkriptEvent; -import ch.njol.skript.lang.SkriptParser; -import ch.njol.skript.lang.TriggerSection; +import ch.njol.skript.config.SectionNode; +import ch.njol.skript.lang.*; import ch.njol.skript.log.HandlerList; import ch.njol.skript.structures.StructOptions.OptionsData; import ch.njol.skript.variables.HintManager; @@ -400,6 +398,7 @@ public final boolean isCurrentSection(Class... section // Delay API private Kleenean hasDelayBefore = Kleenean.FALSE; + private final Collection delaySectionNodes = new HashSet<>(); /** * This method should be called to indicate that @@ -409,6 +408,14 @@ public final boolean isCurrentSection(Class... section */ public void setHasDelayBefore(Kleenean hasDelayBefore) { this.hasDelayBefore = hasDelayBefore; + if (hasDelayBefore == Kleenean.TRUE + && getCurrentSection(TriggerSection.class) instanceof Section + && getCurrentSection(Section.class).getNode() instanceof SectionNode sectionNode) { + + delaySectionNodes.add(sectionNode); + } else if (hasDelayBefore == Kleenean.FALSE) { + delaySectionNodes.clear(); + } } /** @@ -422,6 +429,13 @@ public Kleenean getHasDelayBefore() { return hasDelayBefore; } + /** + * @return the sections from which a delay has occurred. + */ + public Collection getDelaySections() { + return delaySectionNodes; + } + // Logging API private final HandlerList handlers = new HandlerList(); From 7ebeee524b6597ecd1c3ced6b4267ed52bc6b7ef Mon Sep 17 00:00:00 2001 From: Mads Volder Date: Wed, 22 Oct 2025 14:19:32 -0800 Subject: [PATCH 3/4] Revert previous changes to EffTeleport. --- src/main/java/ch/njol/skript/effects/EffTeleport.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/ch/njol/skript/effects/EffTeleport.java b/src/main/java/ch/njol/skript/effects/EffTeleport.java index 007b0f19fe1..0ad282d347f 100644 --- a/src/main/java/ch/njol/skript/effects/EffTeleport.java +++ b/src/main/java/ch/njol/skript/effects/EffTeleport.java @@ -73,6 +73,9 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye return false; } + if (async) + getParser().setHasDelayBefore(Kleenean.UNKNOWN); // UNKNOWN because it isn't async if the chunk is already loaded. + return true; } From 614f2a722d0d6ab91349630089920a743655b423 Mon Sep 17 00:00:00 2001 From: _Mads <75088349+TFSMads@users.noreply.github.com> Date: Thu, 30 Oct 2025 05:59:05 -0800 Subject: [PATCH 4/4] Update src/main/java/ch/njol/skript/effects/EffTeleport.java Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com> --- src/main/java/ch/njol/skript/effects/EffTeleport.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/effects/EffTeleport.java b/src/main/java/ch/njol/skript/effects/EffTeleport.java index 0ad282d347f..e68f0fbfd43 100644 --- a/src/main/java/ch/njol/skript/effects/EffTeleport.java +++ b/src/main/java/ch/njol/skript/effects/EffTeleport.java @@ -75,7 +75,6 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye if (async) getParser().setHasDelayBefore(Kleenean.UNKNOWN); // UNKNOWN because it isn't async if the chunk is already loaded. - return true; }