aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/los/numeros/EPHS/modules/GameClockModule.java
blob: 0906a55f4c078d742b09c3dcea642898967dc9ef (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package los.numeros.EPHS.modules;

import java.util.UUID;

import los.numeros.GameEngine.Module;
import los.numeros.utils.MinecraftTick;
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[] seekers, hiders, players;
  private MinecraftServer server;
  private MinecraftTick minecraftTick = new MinecraftTick();
  private int i, j;
  private LiteralText seekersString;

  public GameClockModule(ServerPlayerEntity seekers[], ServerPlayerEntity hiders[], ServerPlayerEntity[] players, MinecraftServer server) {
    this.seekers = seekers;
    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 (seekers.length > 1) {
        seekersString = new LiteralText("The Seekers are Seeking");
      } else {
        seekersString = new LiteralText("The Seeker is Seeking");
      }

      /* style text */
      seekersString.setStyle(Style.EMPTY.withColor(TextColor.parse("red")));

      /* send chat message */
      server.getPlayerManager().broadcastChatMessage(
        seekersString,
        MessageType.SYSTEM,
        new UUID(0, 0)
      );

      /* set title screen */
      server.getPlayerManager().sendToAll(
        new TitleS2CPacket(TitleS2CPacket.Action.TITLE, seekersString)
      );

      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;
  }
}