diff options
author | Frog-That-code <max@kawallski.localdomain> | 2024-06-06 17:28:16 -0400 |
---|---|---|
committer | Frog-That-code <max@kawallski.localdomain> | 2024-06-06 17:28:16 -0400 |
commit | f414849202b5e6723739326b1cb35b3201c58401 (patch) | |
tree | 104350dfb1ca5acfb1da028856f86fd4902317d6 /src/main/java/los/numeros/utils/MinecraftTick.java | |
parent | 4774e42081d2cc0dbc7adf7ba6e034643a80eb80 (diff) | |
parent | c9fab5af6dd6d47f4e630358e599442b41db591b (diff) | |
download | lnm-f414849202b5e6723739326b1cb35b3201c58401.tar.gz lnm-f414849202b5e6723739326b1cb35b3201c58401.tar.bz2 lnm-f414849202b5e6723739326b1cb35b3201c58401.zip |
Merge branch 'master' of squi.bid:/var/git/lnm
Diffstat (limited to '')
-rw-r--r-- | src/main/java/los/numeros/utils/MinecraftTick.java | 77 |
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; +} |