From c294a0df169d37591db56b401bb80b65ffb6a00b Mon Sep 17 00:00:00 2001 From: sovdee <10354869+sovdeeth@users.noreply.github.com> Date: Mon, 24 Nov 2025 18:46:51 -0800 Subject: [PATCH] move addDelayedEvent to trigger after the delay finishes, rather than before. --- src/main/java/ch/njol/skript/effects/Delay.java | 2 +- src/main/java/ch/njol/skript/effects/EffTeleport.java | 2 +- src/main/java/ch/njol/skript/effects/IndeterminateDelay.java | 2 +- src/main/java/ch/njol/skript/util/AsyncEffect.java | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/ch/njol/skript/effects/Delay.java b/src/main/java/ch/njol/skript/effects/Delay.java index 94179d8fdb0..afee5f02e62 100644 --- a/src/main/java/ch/njol/skript/effects/Delay.java +++ b/src/main/java/ch/njol/skript/effects/Delay.java @@ -68,7 +68,6 @@ protected TriggerItem walk(Event event) { long start = Skript.debug() ? System.nanoTime() : 0; TriggerItem next = getNext(); if (next != null && Skript.getInstance().isEnabled()) { // See https://github.com/SkriptLang/Skript/issues/3702 - addDelayedEvent(event); Timespan duration = this.duration.getSingle(event); if (duration == null) @@ -78,6 +77,7 @@ protected TriggerItem walk(Event event) { Object localVars = Variables.removeLocals(event); Bukkit.getScheduler().scheduleSyncDelayedTask(Skript.getInstance(), () -> { + addDelayedEvent(event); Skript.debug(getIndentation() + "... continuing after " + (System.nanoTime() - start) / 1_000_000_000. + "s"); // Re-set local variables diff --git a/src/main/java/ch/njol/skript/effects/EffTeleport.java b/src/main/java/ch/njol/skript/effects/EffTeleport.java index e68f0fbfd43..15b0256862f 100644 --- a/src/main/java/ch/njol/skript/effects/EffTeleport.java +++ b/src/main/java/ch/njol/skript/effects/EffTeleport.java @@ -132,11 +132,11 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye } final Location fixed = location; - Delay.addDelayedEvent(event); Object localVars = Variables.removeLocals(event); // This will either fetch the chunk instantly if on Spigot or already loaded or fetch it async if on Paper. PaperLib.getChunkAtAsync(location).thenAccept(chunk -> { + Delay.addDelayedEvent(event); // The following is now on the main thread SkriptTeleportFlag[] teleportFlags = this.teleportFlags == null ? null : this.teleportFlags.getArray(event); for (Entity entity : entityArray) { diff --git a/src/main/java/ch/njol/skript/effects/IndeterminateDelay.java b/src/main/java/ch/njol/skript/effects/IndeterminateDelay.java index 5179d20fd36..c3d11530e0d 100644 --- a/src/main/java/ch/njol/skript/effects/IndeterminateDelay.java +++ b/src/main/java/ch/njol/skript/effects/IndeterminateDelay.java @@ -23,7 +23,6 @@ protected TriggerItem walk(Event event) { TriggerItem next = getNext(); if (next != null && Skript.getInstance().isEnabled()) { // See https://github.com/SkriptLang/Skript/issues/3702 - Delay.addDelayedEvent(event); Timespan duration = this.duration.getSingle(event); if (duration == null) return null; @@ -32,6 +31,7 @@ protected TriggerItem walk(Event event) { Object localVars = Variables.removeLocals(event); Bukkit.getScheduler().scheduleSyncDelayedTask(Skript.getInstance(), () -> { + Delay.addDelayedEvent(event); Skript.debug(getIndentation() + "... continuing after " + (System.nanoTime() - start) / 1_000_000_000. + "s"); // Re-set local variables diff --git a/src/main/java/ch/njol/skript/util/AsyncEffect.java b/src/main/java/ch/njol/skript/util/AsyncEffect.java index 7786185f1ea..a215f21a7ea 100644 --- a/src/main/java/ch/njol/skript/util/AsyncEffect.java +++ b/src/main/java/ch/njol/skript/util/AsyncEffect.java @@ -27,14 +27,14 @@ public abstract class AsyncEffect extends Effect { @Nullable protected TriggerItem walk(Event e) { debug(e, true); - - Delay.addDelayedEvent(e); // Mark this event as delayed + Object localVars = Variables.removeLocals(e); // Back up local variables if (!Skript.getInstance().isEnabled()) // See https://github.com/SkriptLang/Skript/issues/3702 return null; Bukkit.getScheduler().runTaskAsynchronously(Skript.getInstance(), () -> { + Delay.addDelayedEvent(e); // Mark this event as delayed // Re-set local variables if (localVars != null) Variables.setLocalVariables(e, localVars);