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