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