From 74e3baa05c7e1d003b0e37f6aace2536a0aace46 Mon Sep 17 00:00:00 2001 From: Giovanni Harting <539@idlegandalf.com> Date: Tue, 19 Jul 2016 13:18:41 +0200 Subject: first implementaion of a custom TickHandler --- .../java/com/sosnitzka/taiga/util/TickTask.java | 28 ++++++++++++++++ .../com/sosnitzka/taiga/util/TickTaskHandler.java | 39 ++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/main/java/com/sosnitzka/taiga/util/TickTask.java create mode 100644 src/main/java/com/sosnitzka/taiga/util/TickTaskHandler.java (limited to 'src/main/java/com/sosnitzka/taiga/util') diff --git a/src/main/java/com/sosnitzka/taiga/util/TickTask.java b/src/main/java/com/sosnitzka/taiga/util/TickTask.java new file mode 100644 index 0000000..a928c68 --- /dev/null +++ b/src/main/java/com/sosnitzka/taiga/util/TickTask.java @@ -0,0 +1,28 @@ +package com.sosnitzka.taiga.util; + + +public class TickTask { + private Runnable task; + private int targetTicks = 0; + private int ticks; + + public TickTask(int targetTicks, Runnable runnable) { + this.task = runnable; + this.targetTicks = targetTicks; + } + + public TickTask(Runnable runnable) { + this.task = runnable; + this.targetTicks = 1; + } + + public boolean tickRun() { + ticks++; + + if (ticks >= targetTicks) { + this.task.run(); + return true; + } + return false; + } +} diff --git a/src/main/java/com/sosnitzka/taiga/util/TickTaskHandler.java b/src/main/java/com/sosnitzka/taiga/util/TickTaskHandler.java new file mode 100644 index 0000000..c11921e --- /dev/null +++ b/src/main/java/com/sosnitzka/taiga/util/TickTaskHandler.java @@ -0,0 +1,39 @@ +package com.sosnitzka.taiga.util; + + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class TickTaskHandler { + private List tickTasks = new ArrayList(); + + + private TickTaskHandler() { + } + + public static TickTaskHandler getInstance() { + return InstanceHolder.INSTANCE; + } + + @SubscribeEvent + public void onTick(TickEvent.ServerTickEvent e) { + for (Iterator iterator = tickTasks.iterator(); iterator.hasNext(); ) { + TickTask task = iterator.next(); + if (task.tickRun()) { + iterator.remove(); + } + } + } + + public void addTask(TickTask tickTask) { + tickTasks.add(tickTask); + } + + private static final class InstanceHolder { + static final TickTaskHandler INSTANCE = new TickTaskHandler(); + } +} -- cgit v1.2.3