From 724dbeea6672d31658d6563c1fe372a6f4cb4fbb Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Mon, 16 Mar 2026 21:12:14 +0100 Subject: fix(game): #18 --- .../java/world/anhgelus/molehunt/Molehunt.java | 5 ++-- .../java/world/anhgelus/molehunt/game/Game.java | 30 ++++++++++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/world/anhgelus/molehunt/Molehunt.java b/src/main/java/world/anhgelus/molehunt/Molehunt.java index 8df6e32..d5df320 100644 --- a/src/main/java/world/anhgelus/molehunt/Molehunt.java +++ b/src/main/java/world/anhgelus/molehunt/Molehunt.java @@ -160,7 +160,9 @@ public class Molehunt implements ModInitializer { return Command.SINGLE_SUCCESS; }) )); - command.then(literal("role").requires(ServerCommandSource::isExecutedByPlayer).executes(context -> { + command.then(literal("role") + .requires(ServerCommandSource::isExecutedByPlayer) + .executes(context -> { if (game == null || !game.started()) { throw (new SimpleCommandExceptionType(Text.translatable("commands.molehunt.error.game_not_started"))).create(); } @@ -216,7 +218,6 @@ public class Molehunt implements ModInitializer { ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, newPlayer, alive) -> { if (game == null) return; if (!game.started()) return; - if (game.getMoles().contains(oldPlayer)) game.updateMole(oldPlayer, newPlayer); newPlayer.changeGameMode(GameMode.SPECTATOR); }); diff --git a/src/main/java/world/anhgelus/molehunt/game/Game.java b/src/main/java/world/anhgelus/molehunt/game/Game.java index 117dbce..6ab5a4a 100644 --- a/src/main/java/world/anhgelus/molehunt/game/Game.java +++ b/src/main/java/world/anhgelus/molehunt/game/Game.java @@ -1,6 +1,8 @@ package world.anhgelus.molehunt.game; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.network.packet.s2c.play.OverlayMessageS2CPacket; @@ -27,7 +29,7 @@ public class Game { private final MinecraftServer server; - private final List moles = new ArrayList<>(); + private final List moles = new ArrayList<>(); private final TitleFadeS2CPacket timing = new TitleFadeS2CPacket(20, 40, 20); @@ -49,7 +51,7 @@ public class Game { final var r = ThreadLocalRandom.current().nextInt(0, players.size()); final var mole = players.get(r); if (mole == null) throw new IllegalStateException("Mole is null!"); - moles.add(mole); + moles.add(mole.getUuid()); players.remove(r); } @@ -94,7 +96,7 @@ public class Game { public void run() { playerManager.getPlayerList().forEach(p -> { p.networkHandler.sendPacket(timing); - if (moles.contains(p)) { + if (moles.contains(p.getUuid())) { p.networkHandler.sendPacket(new TitleS2CPacket(Text.translatable("molehunt.game.start.mole.title"))); p.networkHandler.sendPacket(new SubtitleS2CPacket(Text.translatable("molehunt.game.start.mole.subtitle"))); } else { @@ -118,7 +120,7 @@ public class Game { public void run() { remaining--; playerManager.getPlayerList().forEach(player -> { - if (Molehunt.timerVisibility.getOrDefault(player, true)) { + if (Molehunt.timerVisibility.getOrDefault(player.getUuid(), true)) { player.networkHandler.sendPacket(new OverlayMessageS2CPacket(Text.of(getRemainingText()))); } }); @@ -173,19 +175,23 @@ public class Game { } public List getMoles() { - return moles; + return moles.stream() + .map(uuid -> server.getPlayerManager().getPlayer(uuid)) + .filter(Objects::nonNull) + .filter(p -> !p.isSpectator()) + .toList(); } public String getMolesAsString() { - return moles.stream() - .map(ServerPlayerEntity::getDisplayName) + return getMoles().stream() + .map(PlayerEntity::getDisplayName) .filter(Objects::nonNull) - .map(Text::getString) + .map(Object::toString) .collect(Collectors.joining(", ")); } public boolean isMole(ServerPlayerEntity player) { - return moles.contains(player); + return moles.contains(player.getUuid()); } public boolean wonByMoles() { @@ -194,15 +200,11 @@ public class Game { .getPlayerList() .stream() .filter(p -> !p.isSpectator() && !p.isCreative()) + .map(Entity::getUuid) .toList() ); } - public void updateMole(ServerPlayerEntity oldPlayer, ServerPlayerEntity newPlayer) { - moles.remove(oldPlayer); - moles.add(newPlayer); - } - public boolean started() { return started; } -- cgit v1.2.3