diff options
| author | ketsuban_152 <webmaster@dangofacotry.net> | 2026-07-04 21:59:07 +0900 |
|---|---|---|
| committer | ketsuban_152 <webmaster@dangofacotry.net> | 2026-07-04 21:59:07 +0900 |
| commit | 8354ed6c09e960d2f48d7bc40b7c7978947524eb (patch) | |
| tree | eba1dfff5d762cb6c991e93f27c8d2cae5e6a57f /src/main/java/luckyblock/action/LuckyActionManager.java | |
| download | LuckyBlock-8354ed6c09e960d2f48d7bc40b7c7978947524eb.tar.gz LuckyBlock-8354ed6c09e960d2f48d7bc40b7c7978947524eb.tar.bz2 LuckyBlock-8354ed6c09e960d2f48d7bc40b7c7978947524eb.zip | |
Diffstat (limited to 'src/main/java/luckyblock/action/LuckyActionManager.java')
| -rw-r--r-- | src/main/java/luckyblock/action/LuckyActionManager.java | 67 |
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); + } + } + } +} |
