From 3864fb6b10fe1adddd1f16806932e3c23af3a1ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Ro=C3=9Fbacher?= Date: Wed, 1 Nov 2023 18:08:14 +0100 Subject: [PATCH] finished first features --- gradle.properties | 2 +- .../zombiesutils/ZombiesUtils.java | 4 +- .../commands/CategoryCommand.java | 3 +- .../zombiesutils/game/GameMode.java | 8 ++- .../zombiesutils/handlers/ChatHandler.java | 7 ++- .../zombiesutils/handlers/TickHandler.java | 1 + .../mixin/MixinNetHandlerPlayClient.java | 37 +++++++++++- .../zombiesutils/render/TimeRenderer.java | 2 + .../zombiesutils/timer/RecordManager.java | 59 +++++++++++-------- .../zombiesutils/timer/Timer.java | 3 +- .../zombiesutils/timer/recorder/Category.java | 3 - .../timer/recorder/TimesFile.java | 2 - .../zombiesutils/utils/Scoreboard.java | 11 ++-- 13 files changed, 94 insertions(+), 48 deletions(-) diff --git a/gradle.properties b/gradle.properties index aae301c..be1ab3a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs=-Xmx2g baseGroup = com.github.stachelbeere1248.zombiesutils mcVersion = 1.8.9 modid = zombiesutils -version = 1.0.0 +version = 1.0.1 diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/ZombiesUtils.java b/src/main/java/com/github/stachelbeere1248/zombiesutils/ZombiesUtils.java index 48f4328..a8153f2 100644 --- a/src/main/java/com/github/stachelbeere1248/zombiesutils/ZombiesUtils.java +++ b/src/main/java/com/github/stachelbeere1248/zombiesutils/ZombiesUtils.java @@ -1,6 +1,7 @@ package com.github.stachelbeere1248.zombiesutils; import com.github.stachelbeere1248.zombiesutils.commands.CategoryCommand; +import com.github.stachelbeere1248.zombiesutils.handlers.ChatHandler; import com.github.stachelbeere1248.zombiesutils.handlers.TickHandler; import com.github.stachelbeere1248.zombiesutils.render.TimeRenderer; import net.minecraftforge.client.ClientCommandHandler; @@ -11,7 +12,7 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import org.apache.logging.log4j.Logger; -@Mod(modid = "zombiesutils", useMetadata=true, clientSideOnly = true) +@Mod(modid = "zombiesutils", useMetadata = true, clientSideOnly = true) public class ZombiesUtils { private static ZombiesUtils instance; private Configuration config; @@ -34,6 +35,7 @@ public class ZombiesUtils { public void init(FMLInitializationEvent event) { MinecraftForge.EVENT_BUS.register(new TimeRenderer()); MinecraftForge.EVENT_BUS.register(new TickHandler()); + MinecraftForge.EVENT_BUS.register(new ChatHandler()); ClientCommandHandler.instance.registerCommand(new CategoryCommand()); } public Configuration getConfig() { diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/commands/CategoryCommand.java b/src/main/java/com/github/stachelbeere1248/zombiesutils/commands/CategoryCommand.java index 5f4deed..92bc3fd 100644 --- a/src/main/java/com/github/stachelbeere1248/zombiesutils/commands/CategoryCommand.java +++ b/src/main/java/com/github/stachelbeere1248/zombiesutils/commands/CategoryCommand.java @@ -3,7 +3,6 @@ package com.github.stachelbeere1248.zombiesutils.commands; import com.github.stachelbeere1248.zombiesutils.timer.Timer; import com.github.stachelbeere1248.zombiesutils.timer.recorder.Category; import net.minecraft.command.CommandBase; -import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; @@ -27,7 +26,7 @@ public class CategoryCommand extends CommandBase { } @Override - public void processCommand(ICommandSender sender, String[] args) throws CommandException { + public void processCommand(ICommandSender sender, String[] args) { if (args.length == 0) { IChatComponent error = new ChatComponentText("Please input the name for the category"); sender.addChatMessage(error); diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/GameMode.java b/src/main/java/com/github/stachelbeere1248/zombiesutils/game/GameMode.java index 55820dc..4d04d8b 100644 --- a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/GameMode.java +++ b/src/main/java/com/github/stachelbeere1248/zombiesutils/game/GameMode.java @@ -7,7 +7,6 @@ public class GameMode { public static final GameMode DEAD_END_NORMAL = new GameMode(Map.DEAD_END), DEAD_END_HARD = new GameMode(Map.DEAD_END, Difficulty.HARD), DEAD_END_RIP = new GameMode(Map.DEAD_END, Difficulty.RIP); public static final GameMode BAD_BLOOD_NORMAL = new GameMode(Map.BAD_BLOOD), BAD_BLOOD_HARD = new GameMode(Map.BAD_BLOOD, Difficulty.HARD), BAD_BLOOD_RIP = new GameMode(Map.BAD_BLOOD, Difficulty.RIP); public static final GameMode ALIEN_ARCADIUM = new GameMode(Map.ALIEN_ARCADIUM); - private final Map map; private final Difficulty difficulty; @@ -41,7 +40,8 @@ public class GameMode { case NORMAL: currentGameMode = DEAD_END_NORMAL; break; case HARD: currentGameMode = DEAD_END_HARD; break; case RIP: currentGameMode = DEAD_END_RIP; break; - } break; + } + break; case BAD_BLOOD: switch (difficulty) { case NORMAL: currentGameMode = BAD_BLOOD_NORMAL; break; @@ -60,4 +60,8 @@ public class GameMode { public static void drop() { currentGameMode = null; } + + public boolean equals(@NotNull GameMode gameMode) { + return (this.getDifficulty() == gameMode.getDifficulty() && this.getMap() == gameMode.getMap()); + } } diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/ChatHandler.java b/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/ChatHandler.java index 24e9e7f..3a44092 100644 --- a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/ChatHandler.java +++ b/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/ChatHandler.java @@ -9,22 +9,25 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.regex.Pattern; public class ChatHandler { + public ChatHandler () { + } private static final Pattern STRIP_COLOR_PATTERN = Pattern.compile("§[0-9A-FK-ORZ]", Pattern.CASE_INSENSITIVE); @SubscribeEvent - public void onChatReceived(ClientChatReceivedEvent event) { + public void difficultyChange(ClientChatReceivedEvent event) { String message = STRIP_COLOR_PATTERN.matcher(event.message.getUnformattedText()).replaceAll("").trim(); GameMode gameMode = GameMode.getCurrentGameMode(); if (message.contains(":")) return; if (gameMode == null) return; - ZombiesUtils.getInstance().getLogger().debug("Chat-event: " + message); if (message.contains("Hard Difficulty") || message.contains("困难") || message.contains("困難")) { gameMode.changeDifficulty(Difficulty.HARD); + ZombiesUtils.getInstance().getLogger().debug("Changed to Hard"); } else if (message.contains("RIP Difficulty") || message.contains("安息") || message.contains("RIP")) { gameMode.changeDifficulty(Difficulty.RIP); + ZombiesUtils.getInstance().getLogger().debug("Changed to RIP"); } } diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/TickHandler.java b/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/TickHandler.java index 1c8519f..5cd8ffc 100644 --- a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/TickHandler.java +++ b/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/TickHandler.java @@ -7,6 +7,7 @@ import net.minecraftforge.fml.common.gameevent.TickEvent; public class TickHandler { @SubscribeEvent public void onTick(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.START) return; Scoreboard.refresh(); } } diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/mixin/MixinNetHandlerPlayClient.java b/src/main/java/com/github/stachelbeere1248/zombiesutils/mixin/MixinNetHandlerPlayClient.java index 4fabbbb..14aa52d 100644 --- a/src/main/java/com/github/stachelbeere1248/zombiesutils/mixin/MixinNetHandlerPlayClient.java +++ b/src/main/java/com/github/stachelbeere1248/zombiesutils/mixin/MixinNetHandlerPlayClient.java @@ -1,10 +1,12 @@ package com.github.stachelbeere1248.zombiesutils.mixin; import com.github.stachelbeere1248.zombiesutils.ZombiesUtils; +import com.github.stachelbeere1248.zombiesutils.game.GameMode; import com.github.stachelbeere1248.zombiesutils.timer.Timer; import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.network.play.server.S29PacketSoundEffect; +import net.minecraft.network.play.server.S45PacketTitle; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -21,15 +23,18 @@ public class MixinNetHandlerPlayClient { private void handleSound(S29PacketSoundEffect packetIn, CallbackInfo ci) { zombies_utils$handleSound(packetIn); } + @Inject(method = "handleTitle", at = @At(value = "HEAD")) + private void handleTitle(S45PacketTitle packetIn, CallbackInfo ci) { + zombies_utils$handleTitle(packetIn); + } @Unique private void zombies_utils$handleSound(@NotNull S29PacketSoundEffect packet) { + if (!Scoreboard.isZombies()) return; String soundEffect = packet.getSoundName(); if (!( soundEffect.equals("mob.wither.spawn") - || soundEffect.equals("mob.enderdragon.end") || (soundEffect.equals("mob.guardian.curse") && !zombies_utils$alienUfoOpened) )) return; - zombies_utils$alienUfoOpened = soundEffect.equals("mob.guardian.curse"); if (!Timer.getInstance().isPresent()) { @@ -40,7 +45,6 @@ public class MixinNetHandlerPlayClient { ); } else { Timer timer = Timer.getInstance().get(); - //TODO: GAME END if (timer.equalsServerOrNull(Scoreboard.getServerNumber().orElse(null))) timer.split(Scoreboard.getRound()); else { @@ -53,4 +57,31 @@ public class MixinNetHandlerPlayClient { } } } + @Unique + private void zombies_utils$handleTitle(S45PacketTitle packet) { + if (packet.getType() != S45PacketTitle.Type.TITLE) return; + if (!Scoreboard.isZombies()) return; + final String message = packet.getMessage().getUnformattedText().trim(); + if (message.equals("\u00a7aYou Win!")) { + switch (GameMode.getCurrentGameMode().getMap()) { + case DEAD_END: case BAD_BLOOD: + Timer.getInstance().ifPresent(timer -> { + timer.split((byte) 30); + Timer.dropInstance(); + }); + break; + case ALIEN_ARCADIUM: + Timer.getInstance().ifPresent(timer -> { + timer.split((byte) 105); + Timer.dropInstance(); + }); + break; + } + } else if (message.equals("\u00a7cGame Over!")) { + Timer.dropInstance(); + } else { + ZombiesUtils.getInstance().getLogger().debug(message); + } + + } } diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/render/TimeRenderer.java b/src/main/java/com/github/stachelbeere1248/zombiesutils/render/TimeRenderer.java index 20fd813..4a0eb53 100644 --- a/src/main/java/com/github/stachelbeere1248/zombiesutils/render/TimeRenderer.java +++ b/src/main/java/com/github/stachelbeere1248/zombiesutils/render/TimeRenderer.java @@ -1,6 +1,7 @@ package com.github.stachelbeere1248.zombiesutils.render; import com.github.stachelbeere1248.zombiesutils.timer.Timer; +import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.ScaledResolution; @@ -18,6 +19,7 @@ public class TimeRenderer { @SubscribeEvent public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) { + if (!Scoreboard.isZombies()) return; if (event.type != RenderGameOverlayEvent.ElementType.ALL) return; if (!Timer.getInstance().isPresent()) return; diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/RecordManager.java b/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/RecordManager.java index 141bef1..5f53cf6 100644 --- a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/RecordManager.java +++ b/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/RecordManager.java @@ -4,63 +4,65 @@ import com.github.stachelbeere1248.zombiesutils.game.GameMode; import com.github.stachelbeere1248.zombiesutils.timer.recorder.Category; import com.github.stachelbeere1248.zombiesutils.timer.recorder.TimesFile; import net.minecraft.client.Minecraft; -import net.minecraft.util.*; +import net.minecraft.util.ChatComponentText; public class RecordManager { public static void compareSegment(byte round, short roundTime, Category category) { + sendBar(); TimesFile timesFile = category.getByGameMode(GameMode.getCurrentGameMode()); short bestSegment = timesFile.getBestSegment(round); - if (roundTime scoreCollection = scoreboard.getSortedScores(sidebar); List filteredScores = scoreCollection.stream().filter(input -> input.getPlayerName() != null && !input.getPlayerName().startsWith("#")).collect(Collectors.toList()); @@ -106,7 +109,7 @@ public class Scoreboard { default: return Optional.empty(); } } - public static String getTitle() { - return title; + public static boolean isZombies() { + return ("ZOMBIES".equals(title)); } } \ No newline at end of file