aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/los/numeros/utils/MinecraftTick.java77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/main/java/los/numeros/utils/MinecraftTick.java b/src/main/java/los/numeros/utils/MinecraftTick.java
new file mode 100644
index 0000000..890865a
--- /dev/null
+++ b/src/main/java/los/numeros/utils/MinecraftTick.java
@@ -0,0 +1,77 @@
+package los.numeros.utils;
+
+import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
+
+/**
+ * class for dealing with minecraft ticks
+ *
+ */
+public class MinecraftTick {
+ /* interface for callbacks */
+ public interface Callback {
+ public void run(long delay);
+ }
+
+ /**
+ * run callback on delay
+ *
+ * @param ticks minecraft ticks to wait before calling delay
+ * @param callback callback to run after ticks delay
+ */
+ public void delayCallback(long ticks, MinecraftTick.Callback callback) {
+ Delay delay = new Delay();
+ delay.tickCallback = callback;
+
+ /* register event to run on every server tick */
+ /* TEST: I'm pretty sure this creates a new event every time this method is
+ * called, but I could be wrong */
+ ServerTickEvents.END_SERVER_TICK.register(event -> {
+ /* check if we're done */
+ if (delay.tickCounter == ticks) {
+ /* run callback */
+ delay.tickCallback.run(ticks);
+ delay.tickCallbackRan = true;
+
+ /* reset for next run */
+ delay.tickCounter = 0L;
+ return;
+ }
+
+ /* increment counter every tick */
+ if (!delay.tickCallbackRan) {
+ delay.tickCounter++;
+ }
+ });
+ return;
+ }
+
+ /**
+ * convert seconds to ticks
+ *
+ * @param seconds seconds
+ * @return ticks
+ */
+ static public long secondToTick(int seconds) {
+ return seconds * 20;
+ }
+
+ /**
+ * convert ticks to seconds
+ *
+ * @param ticks minecraft ticks
+ * @return seconds
+ */
+ static public int tickToSecond(long ticks) {
+ return (int)(ticks / 20);
+ }
+}
+
+/**
+ * small class to deal with tick delay callbacks
+ *
+ */
+class Delay {
+ public long tickCounter = 0L;
+ public boolean tickCallbackRan = false;
+ public MinecraftTick.Callback tickCallback;
+}