Skip to content

Commit deebb9c

Browse files
Ignore delays from sections that stop execution
1 parent a38d944 commit deebb9c

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/main/java/ch/njol/skript/lang/Section.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,16 @@ protected void loadCode(SectionNode sectionNode) {
8686
sections.add(this);
8787
parser.setCurrentSections(sections);
8888

89+
Kleenean hadDelayBefore = parser.getHasDelayBefore();
8990
try {
9091
setTriggerItems(ScriptLoader.loadItems(sectionNode));
9192
} finally {
93+
if (hadDelayBefore != parser.getHasDelayBefore()) { // the loaded elements caused a delay
94+
ExecutionIntent intent = triggerExecutionIntent();
95+
if (intent instanceof ExecutionIntent.StopTrigger) { // execution is guaranteed to stop, delay has no effect
96+
parser.setHasDelayBefore(hadDelayBefore);
97+
}
98+
}
9299
parser.setCurrentSections(previousSections);
93100
}
94101
}
@@ -176,12 +183,12 @@ protected final Trigger loadCode(SectionNode sectionNode, String name,
176183
* if the loaded section has a possible or definite delay in it.
177184
*/
178185
protected void loadOptionalCode(SectionNode sectionNode) {
179-
Kleenean hadDelayBefore = getParser().getHasDelayBefore();
186+
ParserInstance parser = getParser();
187+
Kleenean hadDelayBefore = parser.getHasDelayBefore();
180188
loadCode(sectionNode);
181-
if (hadDelayBefore.isTrue())
182-
return;
183-
if (!getParser().getHasDelayBefore().isFalse())
184-
getParser().setHasDelayBefore(Kleenean.UNKNOWN);
189+
if (!hadDelayBefore.isTrue() && !parser.getHasDelayBefore().isFalse()) {
190+
parser.setHasDelayBefore(Kleenean.UNKNOWN);
191+
}
185192
}
186193

187194
@Nullable
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
test "section delays considering execution intent":
2+
parse:
3+
set {_var} to true
4+
if {_var} is true:
5+
wait 1 second
6+
stop
7+
assert has delay before is false with "delay carried beyond section"

0 commit comments

Comments
 (0)