aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSquibid <me@zacharyscheiman.com>2024-06-06 16:58:33 -0400
committerSquibid <me@zacharyscheiman.com>2024-06-06 16:58:33 -0400
commitc9fab5af6dd6d47f4e630358e599442b41db591b (patch)
tree74be19f9d82870bbaa4eddea8aaa2789771f6100
parent375bc6d38fcece5ba86350396fa7c04a61f5775b (diff)
downloadlnm-c9fab5af6dd6d47f4e630358e599442b41db591b.tar.gz
lnm-c9fab5af6dd6d47f4e630358e599442b41db591b.tar.bz2
lnm-c9fab5af6dd6d47f4e630358e599442b41db591b.zip
add game clock module, which handles timed...
events during the game
Diffstat (limited to '')
-rw-r--r--src/main/java/los/numeros/HidersAndDiggers/Main.java1
-rw-r--r--src/main/java/los/numeros/HidersAndDiggers/modules/GameClockModule.java127
2 files changed, 128 insertions, 0 deletions
diff --git a/src/main/java/los/numeros/HidersAndDiggers/Main.java b/src/main/java/los/numeros/HidersAndDiggers/Main.java
index 7e82dd8..4a28e6d 100644
--- a/src/main/java/los/numeros/HidersAndDiggers/Main.java
+++ b/src/main/java/los/numeros/HidersAndDiggers/Main.java
@@ -60,6 +60,7 @@ public class Main implements Engine {
/* populate the modules */
modules[0] = new MainModule(diggers, hiders, players);
+ modules[1] = new GameClockModule(diggers, hiders, server);
/* start the game */
Engine.StartEngine(running, modules);
diff --git a/src/main/java/los/numeros/HidersAndDiggers/modules/GameClockModule.java b/src/main/java/los/numeros/HidersAndDiggers/modules/GameClockModule.java
new file mode 100644
index 0000000..2a8765a
--- /dev/null
+++ b/src/main/java/los/numeros/HidersAndDiggers/modules/GameClockModule.java
@@ -0,0 +1,127 @@
+package los.numeros.HidersAndDiggers.modules;
+
+import java.util.UUID;
+
+import los.numeros.GameEngine.Module;
+import los.numeros.utils.MinecraftTick;
+import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.network.MessageType;
+import net.minecraft.network.packet.s2c.play.TitleS2CPacket;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.server.network.ServerPlayerEntity;
+import net.minecraft.text.LiteralText;
+import net.minecraft.text.Style;
+import net.minecraft.text.TextColor;
+
+public class GameClockModule implements Module {
+ private ServerPlayerEntity[] diggers, hiders;
+ private MinecraftServer server;
+ private MinecraftTick minecraftTick = new MinecraftTick();
+ private int i, j;
+ private LiteralText diggersString;
+
+ private long tickCounter;
+ private boolean hidersVisible = false;
+
+ public GameClockModule(ServerPlayerEntity diggers[], ServerPlayerEntity hiders[], MinecraftServer server) {
+ this.diggers = diggers;
+ this.hiders = hiders;
+ this.server = server;
+ }
+
+ private void preGameClock() {
+ server.getPlayerManager().broadcastChatMessage(
+ new LiteralText("20s"),
+ MessageType.SYSTEM,
+ new UUID(0, 0)
+ );
+
+ minecraftTick.delayCallback(MinecraftTick.secondToTick(10), (tickDelay) -> {
+ server.getPlayerManager().broadcastChatMessage(
+ new LiteralText("10s"),
+ MessageType.SYSTEM,
+ new UUID(0, 0)
+ );
+ });
+
+ /* countdown 5 -> 1 */
+ for (i = 15, j = 5; j > 0; i++, j--) {
+ minecraftTick.delayCallback(MinecraftTick.secondToTick(i), (tickDelay) -> {
+ server.getPlayerManager().broadcastChatMessage(
+ new LiteralText(String.valueOf(Math.abs(MinecraftTick.tickToSecond(tickDelay) - 20)) + "s"),
+ MessageType.SYSTEM,
+ new UUID(0, 0)
+ );
+ });
+ }
+
+ /* wait 20 seconds */
+ minecraftTick.delayCallback(MinecraftTick.secondToTick(20), (tickDelay) -> {
+ /* make title screen adhere to gammar */
+ if (diggers.length > 1) {
+ diggersString = new LiteralText("The Diggers are Digging");
+ } else {
+ diggersString = new LiteralText("The Digger is Digging");
+ }
+
+ /* style text */
+ diggersString.setStyle(Style.EMPTY.withColor(TextColor.parse("red")));
+
+ /* send chat message */
+ server.getPlayerManager().broadcastChatMessage(
+ diggersString,
+ MessageType.SYSTEM,
+ new UUID(0, 0)
+ );
+
+ /* set title screen */
+ server.getPlayerManager().sendToAll(
+ new TitleS2CPacket(TitleS2CPacket.Action.TITLE, diggersString)
+ );
+ });
+ }
+
+ @Override
+ public int init() {
+ preGameClock();
+
+ /* TEST: this may keep on running after the game has ended :( */
+ ServerTickEvents.END_SERVER_TICK.register(event -> {
+ if (this.tickCounter == MinecraftTick.secondToTick(120) && !this.hidersVisible) {
+ this.hidersVisible = true;
+ this.tickCounter = 0L;
+ for (ServerPlayerEntity p : this.hiders) {
+ p.addStatusEffect(new StatusEffectInstance(StatusEffects.GLOWING, 200000000, 10, false, false));
+ }
+
+ server.getPlayerManager().broadcastChatMessage(
+ new LiteralText("Hiders are visible"),
+ MessageType.SYSTEM,
+ new UUID(0, 0)
+ );
+ } else if (this.tickCounter == MinecraftTick.secondToTick(10) && this.hidersVisible) {
+ this.hidersVisible = false;
+ for (ServerPlayerEntity p : this.hiders) {
+ p.clearStatusEffects();
+ }
+
+ server.getPlayerManager().broadcastChatMessage(
+ new LiteralText("Hiders are invisible"),
+ MessageType.SYSTEM,
+ new UUID(0, 0)
+ );
+ }
+
+ tickCounter++;
+ });
+
+ return 0;
+ }
+
+ @Override
+ public int end() {
+ return 0;
+ }
+}