diff options
| author | anhgelus <anhgelus.morhtuuzh@proton.me> | 2024-08-24 13:05:11 +0000 |
|---|---|---|
| committer | anhgelus <anhgelus.morhtuuzh@proton.me> | 2024-08-24 13:05:11 +0000 |
| commit | dfbc5bbfd20a22edb2596b4d73248df57a4cce20 (patch) | |
| tree | 6ec4a92c6a2daac254454369650e8a0fe18f0b7c /src/main/java/world/anhgelus | |
| parent | 34dc864a495699f1311651c92111884653b42806 (diff) | |
feat(network): send game state to client and disable mixins when game is not launched
Diffstat (limited to 'src/main/java/world/anhgelus')
| -rw-r--r-- | src/main/java/world/anhgelus/molehunt/Molehunt.java | 17 | ||||
| -rw-r--r-- | src/main/java/world/anhgelus/molehunt/game/Game.java (renamed from src/main/java/world/anhgelus/molehunt/Game.java) | 14 | ||||
| -rw-r--r-- | src/main/java/world/anhgelus/molehunt/game/GamePayload.java | 23 |
3 files changed, 47 insertions, 7 deletions
diff --git a/src/main/java/world/anhgelus/molehunt/Molehunt.java b/src/main/java/world/anhgelus/molehunt/Molehunt.java index d7c0d58..afd6960 100644 --- a/src/main/java/world/anhgelus/molehunt/Molehunt.java +++ b/src/main/java/world/anhgelus/molehunt/Molehunt.java @@ -24,6 +24,8 @@ import org.slf4j.LoggerFactory; import world.anhgelus.molehunt.config.Config; import world.anhgelus.molehunt.config.ConfigPayload; import world.anhgelus.molehunt.config.SimpleConfig; +import world.anhgelus.molehunt.game.Game; +import world.anhgelus.molehunt.game.GamePayload; import java.util.HashMap; @@ -150,11 +152,18 @@ public class Molehunt implements ModInitializer { newPlayer.changeGameMode(GameMode.SPECTATOR); }); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> ServerPlayNetworking.send( - handler.player, - new ConfigPayload(CONFIG.areNametagsEnabled(), CONFIG.areSkinsEnabled(), CONFIG.isTabEnabled()) - )); + ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { + ServerPlayNetworking.send( + handler.player, + new ConfigPayload(CONFIG.areNametagsEnabled(), CONFIG.areSkinsEnabled(), CONFIG.isTabEnabled()) + ); + ServerPlayNetworking.send( + handler.player, + new GamePayload(game != null && game.hasStarted()) + ); + }); PayloadTypeRegistry.playS2C().register(ConfigPayload.ID, ConfigPayload.CODEC); + PayloadTypeRegistry.playS2C().register(GamePayload.ID, GamePayload.CODEC); } } diff --git a/src/main/java/world/anhgelus/molehunt/Game.java b/src/main/java/world/anhgelus/molehunt/game/Game.java index dbe7ebd..a98516c 100644 --- a/src/main/java/world/anhgelus/molehunt/Game.java +++ b/src/main/java/world/anhgelus/molehunt/game/Game.java @@ -1,5 +1,6 @@ -package world.anhgelus.molehunt;
+package world.anhgelus.molehunt.game;
+import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.packet.s2c.play.OverlayMessageS2CPacket;
import net.minecraft.network.packet.s2c.play.SubtitleS2CPacket;
import net.minecraft.network.packet.s2c.play.TitleFadeS2CPacket;
@@ -9,6 +10,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text;
import net.minecraft.world.GameMode;
import net.minecraft.world.GameRules;
+import world.anhgelus.molehunt.Molehunt;
import world.anhgelus.molehunt.utils.TimeUtils;
import java.util.*;
@@ -89,7 +91,7 @@ public class Game { // reset time and weather
server.getOverworld().setTimeOfDay(0);
server.getOverworld().resetWeather();
- started = true;
+ changeState(true);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
@@ -116,7 +118,7 @@ public class Game { public void end() {
timer.cancel();
timer = new Timer();
- started = false;
+ changeState(false);
final var pm = server.getPlayerManager();
final var winnerSuspense = new TitleS2CPacket(Text.translatable("molehunt.game.end.suspense.title"));
pm.getPlayerList().forEach(p -> {
@@ -175,4 +177,10 @@ public class Game { public boolean hasStarted() {
return started;
}
+
+ private void changeState(boolean hasStarted) {
+ started = hasStarted;
+ final var payload = new GamePayload(hasStarted);
+ server.getPlayerManager().getPlayerList().forEach(p -> ServerPlayNetworking.send(p, payload));
+ }
}
diff --git a/src/main/java/world/anhgelus/molehunt/game/GamePayload.java b/src/main/java/world/anhgelus/molehunt/game/GamePayload.java new file mode 100644 index 0000000..4f7b8ce --- /dev/null +++ b/src/main/java/world/anhgelus/molehunt/game/GamePayload.java @@ -0,0 +1,23 @@ +package world.anhgelus.molehunt.game;
+
+import net.minecraft.network.RegistryByteBuf;
+import net.minecraft.network.codec.PacketCodec;
+import net.minecraft.network.codec.PacketCodecs;
+import net.minecraft.network.packet.CustomPayload;
+import net.minecraft.util.Identifier;
+import world.anhgelus.molehunt.Molehunt;
+
+public record GamePayload(boolean gameLaunched) implements CustomPayload {
+ public static final Identifier GAME_PACKET_ID = Identifier.of(Molehunt.MOD_ID, "game");
+
+ public static final CustomPayload.Id<GamePayload> ID = new CustomPayload.Id<>(GAME_PACKET_ID);
+ public static final PacketCodec<RegistryByteBuf, GamePayload> CODEC = PacketCodec.tuple(
+ PacketCodecs.BOOL, GamePayload::gameLaunched,
+ GamePayload::new
+ );
+
+ @Override
+ public Id<? extends CustomPayload> getId() {
+ return ID;
+ }
+}
|
