From 4a4db471dac2435ad40f9fc3c5b6739362bc6eef Mon Sep 17 00:00:00 2001
From: Frog-That-code <max@kawallski.localdomain>
Date: Sat, 8 Jun 2024 18:45:20 -0400
Subject: begins the code for EPHS

---
 .../los/numeros/EPHS/modules/GameClockModule.java  | 116 +++++++++++++++++++++
 1 file changed, 116 insertions(+)
 create mode 100644 src/main/java/los/numeros/EPHS/modules/GameClockModule.java

(limited to 'src/main/java/los/numeros/EPHS/modules/GameClockModule.java')

diff --git a/src/main/java/los/numeros/EPHS/modules/GameClockModule.java b/src/main/java/los/numeros/EPHS/modules/GameClockModule.java
new file mode 100644
index 0000000..9c64a88
--- /dev/null
+++ b/src/main/java/los/numeros/EPHS/modules/GameClockModule.java
@@ -0,0 +1,116 @@
+package los.numeros.EPHS.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.sound.SoundEvents;
+import net.minecraft.text.LiteralText;
+import net.minecraft.text.Style;
+import net.minecraft.text.TextColor;
+
+public class GameClockModule implements Module {
+  private ServerPlayerEntity[] diggers, hiders, players;
+  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[], ServerPlayerEntity[] players, MinecraftServer server) {
+    this.diggers = diggers;
+    this.hiders = hiders;
+    this.players = players;
+    this.server = server;
+  }
+
+  private void playCountdownClick() {
+    for (ServerPlayerEntity p : players) {
+      p.playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 0.75f, 0.1f);
+    }
+  }
+
+  private void preGameClock() {
+    server.getPlayerManager().broadcastChatMessage(
+      new LiteralText("20s").setStyle(Style.EMPTY.withColor(TextColor.parse("light_green"))),
+      MessageType.SYSTEM,
+      new UUID(0, 0)
+    );
+    playCountdownClick();
+
+    minecraftTick.delayCallback(MinecraftTick.secondToTick(10), (tickDelay) -> {
+      server.getPlayerManager().broadcastChatMessage(
+        new LiteralText("10s").setStyle(Style.EMPTY.withColor(TextColor.parse("light_green"))),
+        MessageType.SYSTEM,
+        new UUID(0, 0)
+      );
+      playCountdownClick();
+    });
+
+    /* countdown 5 -> 1 */
+    for (i = 15, j = 5; j > 0; i++, j--) {
+      minecraftTick.delayCallback(MinecraftTick.secondToTick(i), (tickDelay) -> {
+        final int countdown = Math.abs(MinecraftTick.tickToSecond(tickDelay) - 20);
+        final String color = countdown <= 3 ? "red" : "yellow";
+        
+        playCountdownClick();
+        server.getPlayerManager().broadcastChatMessage(
+          new LiteralText(String.valueOf(countdown + "s"))
+            .setStyle(Style.EMPTY.withColor(TextColor.parse(color))),
+          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)
+      );
+
+      for (ServerPlayerEntity p : players) {
+        p.playSound(SoundEvents.BLOCK_NOTE_BLOCK_BASEDRUM, 1f, 0.5f);
+      }
+    });
+  }
+
+
+  @Override
+  public int init() {
+    preGameClock();
+    return 0;
+  }
+
+  @Override
+  public int end() {
+    return 0;
+  }
+}
-- 
cgit v1.2.1