Skip to content

Commit 955b56c

Browse files
committed
Add recursion limit
1 parent f2cacbc commit 955b56c

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

src/main/java/io/github/techstreet/dfscript/commands/misc/ScriptsCommand.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
package io.github.techstreet.dfscript.commands.misc;
22

33
import com.mojang.brigadier.CommandDispatcher;
4+
import com.mojang.brigadier.arguments.IntegerArgumentType;
45
import com.mojang.brigadier.arguments.StringArgumentType;
56
import io.github.techstreet.dfscript.DFScript;
67
import io.github.techstreet.dfscript.commands.Command;
78
import io.github.techstreet.dfscript.commands.arguments.StringFuncArgumentType;
9+
import io.github.techstreet.dfscript.event.system.EventManager;
810
import io.github.techstreet.dfscript.screen.script.ScriptListScreen;
911
import io.github.techstreet.dfscript.script.Script;
1012
import io.github.techstreet.dfscript.script.ScriptManager;
1113
import io.github.techstreet.dfscript.script.values.ScriptValue;
1214
import io.github.techstreet.dfscript.util.chat.ChatUtil;
13-
import java.util.ArrayList;
1415
import java.util.List;
1516
import java.util.Map.Entry;
1617
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
@@ -49,6 +50,14 @@ public void register(CommandDispatcher<FabricClientCommandSource> cd) {
4950
)
5051
)
5152
)
53+
.then(literal("recursion")
54+
.then(argument("limit", IntegerArgumentType.integer(-1)).executes(ctx -> {
55+
int limit = IntegerArgumentType.getInteger(ctx,"limit");
56+
EventManager.getInstance().setEventLimit(limit);
57+
ChatUtil.info("Set events per tick limit to " + limit);
58+
return 0;
59+
}))
60+
)
5261
);
5362
}
5463

src/main/java/io/github/techstreet/dfscript/event/system/EventManager.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
public class EventManager {
99

1010
private static EventManager instance;
11+
private int events = 0;
12+
private int eventLimit = 100;
1113
private final HashMap<Class<? extends Event>, List<Consumer<Event>>> listeners = new HashMap<>();
1214

1315
public EventManager() {
@@ -31,7 +33,17 @@ public <T extends Event> void register(Class<T> type, Consumer<T> consumer) {
3133

3234
public void dispatch(Event event) {
3335
for (Consumer<Event> consumer : listeners.getOrDefault(event.getClass(), new ArrayList<>())) {
36+
if(events == eventLimit) return;
37+
events++;
3438
consumer.accept(event);
3539
}
3640
}
41+
42+
public void resetEvents() {
43+
this.events = 0;
44+
}
45+
46+
public void setEventLimit(int eventLimit) {
47+
this.eventLimit = eventLimit;
48+
}
3749
}

src/main/java/io/github/techstreet/dfscript/mixin/player/MLocalPlayer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ private void command2(String command, Text preview, CallbackInfo ci) {
4545

4646
@Inject(method = "tick", at = @At("HEAD"))
4747
private void tick(CallbackInfo ci) {
48-
EventManager.getInstance().dispatch(new TickEvent());
48+
EventManager em = EventManager.getInstance();
49+
em.dispatch(new TickEvent());
50+
em.resetEvents();
4951
}
5052

5153
}

0 commit comments

Comments
 (0)