first implementaion of a custom TickHandler

This commit is contained in:
2016-07-19 13:18:41 +02:00
parent 7a72051cb4
commit 74e3baa05c
5 changed files with 72 additions and 7 deletions

View File

@@ -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;
}
}

View File

@@ -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<TickTask> tickTasks = new ArrayList<TickTask>();
private TickTaskHandler() {
}
public static TickTaskHandler getInstance() {
return InstanceHolder.INSTANCE;
}
@SubscribeEvent
public void onTick(TickEvent.ServerTickEvent e) {
for (Iterator<TickTask> 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();
}
}