aboutsummaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorSquibid <me@zacharyscheiman.com>2024-06-06 16:46:28 -0400
committerSquibid <me@zacharyscheiman.com>2024-06-06 16:46:28 -0400
commit375bc6d38fcece5ba86350396fa7c04a61f5775b (patch)
treeff55be9effb89a189281ca89d37f9646714c10fd /src/main
parentc70300784801e12eef2e79b65cd31a451089aa83 (diff)
downloadlnm-375bc6d38fcece5ba86350396fa7c04a61f5775b.tar.gz
lnm-375bc6d38fcece5ba86350396fa7c04a61f5775b.tar.bz2
lnm-375bc6d38fcece5ba86350396fa7c04a61f5775b.zip
add MinecraftTick.java to help with adding async...
delays, and converting tick to seconds
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;
+}