summaryrefslogtreecommitdiff
path: root/src/main/java/luckyblock/action/LuckyActionManager.java
diff options
context:
space:
mode:
authorketsuban_152 <webmaster@dangofacotry.net>2026-07-04 21:59:07 +0900
committerketsuban_152 <webmaster@dangofacotry.net>2026-07-04 21:59:07 +0900
commit8354ed6c09e960d2f48d7bc40b7c7978947524eb (patch)
treeeba1dfff5d762cb6c991e93f27c8d2cae5e6a57f /src/main/java/luckyblock/action/LuckyActionManager.java
downloadLuckyBlock-master.tar.gz
LuckyBlock-master.tar.bz2
LuckyBlock-master.zip
Initial commitHEADmaster
Diffstat (limited to 'src/main/java/luckyblock/action/LuckyActionManager.java')
-rw-r--r--src/main/java/luckyblock/action/LuckyActionManager.java67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/main/java/luckyblock/action/LuckyActionManager.java b/src/main/java/luckyblock/action/LuckyActionManager.java
new file mode 100644
index 0000000..4acc2eb
--- /dev/null
+++ b/src/main/java/luckyblock/action/LuckyActionManager.java
@@ -0,0 +1,67 @@
+package luckyblock.action;
+
+import luckyblock.Main;
+import net.minecraft.core.BlockPos;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraftforge.event.TickEvent;
+import net.minecraftforge.eventbus.api.SubscribeEvent;
+
+import java.util.LinkedList;
+import java.util.Queue;
+
+public class LuckyActionManager {
+ private static class Task {
+ String fieldName;
+ BlockPos pos;
+ ServerLevel level;
+ int remainingTicks;
+
+ Task(String fieldName, BlockPos pos, ServerLevel level, int remainingTicks) {
+ this.fieldName = fieldName.replace("-", "_");
+ this.pos = pos;
+ this.level = level;
+ this.remainingTicks = remainingTicks;
+ }
+ }
+
+ private static final Queue<Task> actions = new LinkedList<>();
+
+ public static void enqueue(String actionField, BlockPos pos, ServerLevel level, int delayTicks) {
+ actions.offer(new Task(actionField, pos, level, delayTicks));
+ }
+
+ public static void enqueue(String actionField, BlockPos pos, int delayTicks) {
+ if (net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer() != null) {
+ enqueue(actionField, pos, net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer().overworld(), delayTicks);
+ }
+ }
+
+ @SubscribeEvent
+ public static void onServerTick(TickEvent.ServerTickEvent event) {
+ if (event.phase != TickEvent.Phase.END
+ || actions.isEmpty()
+ || Main.settings == null) {
+ return;
+ }
+
+ int size = actions.size();
+ for (int i=0;i<size;i++) {
+ Task task = actions.poll();
+ if (task == null) continue;
+
+ task.remainingTicks--;
+ if (task.remainingTicks <= 0) {
+ ServerLevel level = task.level;
+ if (level == null) {
+ level = event.getServer().overworld();
+ }
+ LuckyActionHolder action = Main.settings.events.get(task.fieldName);
+ if (action != null) {
+ action.execute(level, task.pos);
+ }
+ }else {
+ actions.offer(task);
+ }
+ }
+ }
+}