Skip to content

Commit

Permalink
Networking rewrite
Browse files Browse the repository at this point in the history
  • Loading branch information
Gaming32 committed Jan 25, 2024
1 parent 84fc149 commit 191ecae
Show file tree
Hide file tree
Showing 25 changed files with 495 additions and 252 deletions.
24 changes: 20 additions & 4 deletions common/src/main/java/io/github/gaming32/bingo/Bingo.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import dev.architectury.event.events.common.LifecycleEvent;
import dev.architectury.event.events.common.PlayerEvent;
import dev.architectury.event.events.common.TickEvent;
import dev.architectury.networking.NetworkManager;
import dev.architectury.registry.ReloadListenerRegistry;
import dev.architectury.registry.registries.RegistrarManager;
import io.github.gaming32.bingo.conditions.BingoConditions;
Expand All @@ -23,7 +22,14 @@
import io.github.gaming32.bingo.data.subs.BingoSubType;
import io.github.gaming32.bingo.game.BingoGame;
import io.github.gaming32.bingo.mixin.common.ExplosionAccessor;
import io.github.gaming32.bingo.network.BingoNetwork;
import io.github.gaming32.bingo.network.BingoNetworking;
import io.github.gaming32.bingo.network.messages.c2s.KeyPressedPacket;
import io.github.gaming32.bingo.network.messages.s2c.InitBoardPacket;
import io.github.gaming32.bingo.network.messages.s2c.RemoveBoardPacket;
import io.github.gaming32.bingo.network.messages.s2c.ResyncStatesPacket;
import io.github.gaming32.bingo.network.messages.s2c.SyncTeamPacket;
import io.github.gaming32.bingo.network.messages.s2c.UpdateProgressPacket;
import io.github.gaming32.bingo.network.messages.s2c.UpdateStatePacket;
import io.github.gaming32.bingo.triggers.BingoTriggers;
import io.github.gaming32.bingo.util.BingoUtil;
import net.minecraft.locale.Language;
Expand All @@ -35,6 +41,7 @@
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.Style;
import net.minecraft.network.chat.contents.TranslatableContents;
import net.minecraft.network.protocol.PacketFlow;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.packs.PackType;
Expand Down Expand Up @@ -161,7 +168,16 @@ public static void init() {
List.of(BingoTag.ReloadListener.ID, BingoDifficulty.ReloadListener.ID)
);

BingoNetwork.load();
BingoNetworking.instance().onRegister(registrar -> {
registrar.register(PacketFlow.CLIENTBOUND, InitBoardPacket.ID, InitBoardPacket::new);
registrar.register(PacketFlow.CLIENTBOUND, RemoveBoardPacket.ID, buf -> RemoveBoardPacket.INSTANCE);
registrar.register(PacketFlow.CLIENTBOUND, ResyncStatesPacket.ID, ResyncStatesPacket::new);
registrar.register(PacketFlow.CLIENTBOUND, SyncTeamPacket.ID, SyncTeamPacket::new);
registrar.register(PacketFlow.CLIENTBOUND, UpdateProgressPacket.ID, UpdateProgressPacket::new);
registrar.register(PacketFlow.CLIENTBOUND, UpdateStatePacket.ID, UpdateStatePacket::new);

registrar.register(PacketFlow.SERVERBOUND, KeyPressedPacket.ID, KeyPressedPacket::new);
});

LOGGER.info("I got the diagonal!");
}
Expand Down Expand Up @@ -227,6 +243,6 @@ public static MutableComponent ensureHasFallback(MutableComponent component) {
}

public static boolean isInstalledOnClient(ServerPlayer player) {
return NetworkManager.canPlayerReceive(player, BingoNetwork.PROTOCOL_VERSION_PACKET);
return BingoNetworking.instance().canPlayerReceive(player, InitBoardPacket.ID);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import dev.architectury.event.events.client.ClientPlayerEvent;
import dev.architectury.event.events.client.ClientScreenInputEvent;
import dev.architectury.event.events.client.ClientTickEvent;
import dev.architectury.networking.NetworkManager;
import dev.architectury.platform.Platform;
import dev.architectury.registry.client.keymappings.KeyMappingRegistry;
import io.github.gaming32.bingo.Bingo;
Expand All @@ -20,7 +19,6 @@
import io.github.gaming32.bingo.game.BingoBoard;
import io.github.gaming32.bingo.game.BingoGameMode;
import io.github.gaming32.bingo.game.GoalProgress;
import io.github.gaming32.bingo.network.BingoNetwork;
import io.github.gaming32.bingo.network.ClientGoal;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
Expand Down Expand Up @@ -153,9 +151,6 @@ class TeamValue {
clientGame = null;
});

// Mark as able to receive this in PLAY, for mod presence checks
NetworkManager.registerReceiver(NetworkManager.s2c(), BingoNetwork.PROTOCOL_VERSION_PACKET, (buf, context) -> {});

DefaultIconRenderers.setup();

final KeyMapping boardKey = new KeyMapping("bingo.key.board", InputConstants.KEY_B, "bingo.key.category");
Expand Down
30 changes: 15 additions & 15 deletions common/src/main/java/io/github/gaming32/bingo/game/BingoGame.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import io.github.gaming32.bingo.data.BingoTag;
import io.github.gaming32.bingo.mixin.common.StatsCounterAccessor;
import io.github.gaming32.bingo.network.VanillaNetworking;
import io.github.gaming32.bingo.network.messages.s2c.InitBoardMessage;
import io.github.gaming32.bingo.network.messages.s2c.RemoveBoardMessage;
import io.github.gaming32.bingo.network.messages.s2c.ResyncStatesMessage;
import io.github.gaming32.bingo.network.messages.s2c.SyncTeamMessage;
import io.github.gaming32.bingo.network.messages.s2c.UpdateProgressMessage;
import io.github.gaming32.bingo.network.messages.s2c.UpdateStateMessage;
import io.github.gaming32.bingo.network.messages.s2c.InitBoardPacket;
import io.github.gaming32.bingo.network.messages.s2c.RemoveBoardPacket;
import io.github.gaming32.bingo.network.messages.s2c.ResyncStatesPacket;
import io.github.gaming32.bingo.network.messages.s2c.SyncTeamPacket;
import io.github.gaming32.bingo.network.messages.s2c.UpdateProgressPacket;
import io.github.gaming32.bingo.network.messages.s2c.UpdateStatePacket;
import io.github.gaming32.bingo.triggers.progress.ProgressibleTrigger;
import io.github.gaming32.bingo.util.BingoCodecs;
import io.github.gaming32.bingo.util.StatCodecs;
Expand Down Expand Up @@ -103,7 +103,7 @@ public void addPlayer(ServerPlayer player) {
return;
}

RemoveBoardMessage.INSTANCE.sendTo(player);
RemoveBoardPacket.INSTANCE.sendTo(player);
if (Bingo.needAdvancementsClear.remove(player.getUUID())) {
player.connection.send(new ClientboundUpdateAdvancementsPacket(
false, List.of(), Set.of(VanillaNetworking.ROOT_ADVANCEMENT.id()), Map.of()
Expand All @@ -116,9 +116,9 @@ public void addPlayer(ServerPlayer player) {
));

final BingoBoard.Teams team = getTeam(player);
new SyncTeamMessage(team).sendTo(player);
new SyncTeamPacket(team).sendTo(player);

new InitBoardMessage(this, obfuscateTeam(team)).sendTo(player);
new InitBoardPacket(this, obfuscateTeam(team)).sendTo(player);
player.connection.send(new ClientboundUpdateAdvancementsPacket(
false,
VanillaNetworking.generateAdvancements(board.getSize(), board.getGoals()),
Expand All @@ -132,7 +132,7 @@ public void addPlayer(ServerPlayer player) {
goalProgress.forEach((goal, progress) -> {
int goalIndex = getBoardIndex(player, goal);
if (goalIndex != -1) {
new UpdateProgressMessage(goalIndex, progress.progress(), progress.maxProgress()).sendTo(player);
new UpdateProgressPacket(goalIndex, progress.progress(), progress.maxProgress()).sendTo(player);
}
});
}
Expand Down Expand Up @@ -189,7 +189,7 @@ public void endGame(PlayerList playerList, BingoBoard.Teams winner) {
playerList.broadcastSystemMessage(message, false);

Bingo.activeGame = null;
new ResyncStatesMessage(board.getStates()).sendTo(playerList.getPlayers());
new ResyncStatesPacket(board.getStates()).sendTo(playerList.getPlayers());
Bingo.updateCommandTree(playerList);
}

Expand Down Expand Up @@ -294,7 +294,7 @@ public void updateProgress(ServerPlayer player, ActiveGoal goal, int progress, i
return;
}

new UpdateProgressMessage(goalIndex, progress, maxProgress).sendTo(player);
new UpdateProgressPacket(goalIndex, progress, maxProgress).sendTo(player);
goalProgress.put(goal, new GoalProgress(progress, maxProgress));
}

Expand Down Expand Up @@ -445,8 +445,8 @@ private void notifyTeam(
);
final BingoBoard.Teams boardState = board.getStates()[boardIndex];
final boolean showOtherTeam = Bingo.showOtherTeam || gameMode.getRenderMode() == BingoGameMode.RenderMode.ALL_TEAMS;
final UpdateStateMessage stateMessage = !showOtherTeam
? new UpdateStateMessage(boardIndex, obfuscateTeam(team, boardState)) : null;
final UpdateStatePacket stateMessage = !showOtherTeam
? new UpdateStatePacket(boardIndex, obfuscateTeam(team, boardState)) : null;
final ClientboundUpdateAdvancementsPacket vanillaPacket = new ClientboundUpdateAdvancementsPacket(
false,
List.of(),
Expand All @@ -471,7 +471,7 @@ private void notifyTeam(
player.sendSystemMessage(message);
}
if (showOtherTeam) {
new UpdateStateMessage(boardIndex, boardState).sendTo(playerList.getPlayers());
new UpdateStatePacket(boardIndex, boardState).sendTo(playerList.getPlayers());
if (gameMode.isLockout()) {
Component teamComponent = playerTeam.getDisplayName();
if (playerTeam.getColor() != ChatFormatting.RESET) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import io.github.gaming32.bingo.Bingo;
import io.github.gaming32.bingo.game.BingoBoard;
import io.github.gaming32.bingo.network.VanillaNetworking;
import io.github.gaming32.bingo.network.messages.s2c.ResyncStatesMessage;
import io.github.gaming32.bingo.network.messages.s2c.SyncTeamMessage;
import io.github.gaming32.bingo.network.messages.s2c.ResyncStatesPacket;
import io.github.gaming32.bingo.network.messages.s2c.SyncTeamPacket;
import net.minecraft.network.protocol.game.ClientboundUpdateAdvancementsPacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ServerScoreboard;
Expand Down Expand Up @@ -56,11 +56,11 @@ private void syncTeamRemove(String username, PlayerTeam playerTeam, CallbackInfo
final ServerPlayer player = server.getPlayerList().getPlayerByName(playerName);
if (player != null) {
final BingoBoard.Teams team = Bingo.activeGame.getTeam(player);
new SyncTeamMessage(team).sendTo(player);
new SyncTeamPacket(team).sendTo(player);
if (team.any()) {
Bingo.activeGame.flushQueuedGoals(player);
}
new ResyncStatesMessage(Bingo.activeGame.obfuscateTeam(team)).sendTo(player);
new ResyncStatesPacket(Bingo.activeGame.obfuscateTeam(team)).sendTo(player);
player.connection.send(new ClientboundUpdateAdvancementsPacket(
false,
List.of(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@

import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.platform.InputConstants;
import dev.architectury.networking.NetworkManager;
import io.github.gaming32.bingo.network.messages.c2s.BingoC2S;
import io.github.gaming32.bingo.network.messages.c2s.KeyPressedMessage;
import io.github.gaming32.bingo.network.BingoNetworking;
import io.github.gaming32.bingo.network.messages.c2s.KeyPressedPacket;
import net.minecraft.client.KeyMapping;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
Expand All @@ -23,8 +22,8 @@ public class MixinKeyMapping {
)
)
private static void onKeyPress(InputConstants.Key key, CallbackInfo ci, @Local KeyMapping keyMapping) {
if (NetworkManager.canServerReceive(BingoC2S.KEY_PRESSED.getId())) {
new KeyPressedMessage(keyMapping.getName()).sendToServer();
if (BingoNetworking.instance().canServerReceive(KeyPressedPacket.ID)) {
new KeyPressedPacket(keyMapping.getName()).sendToServer();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.github.gaming32.bingo.network;

import io.github.gaming32.bingo.Bingo;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;

public abstract class AbstractCustomPayload implements CustomPacketPayload {
protected static ResourceLocation id(String id) {
return new ResourceLocation(Bingo.MOD_ID, id);
}

public final void sendToServer() {
BingoNetworking.instance().sendToServer(this);
}

public final void sendTo(ServerPlayer player) {
BingoNetworking.instance().sendTo(player, this);
}

public final void sendTo(Iterable<ServerPlayer> players) {
BingoNetworking.instance().sendTo(players, this);
}

public abstract void handle(BingoNetworking.Context context);
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package io.github.gaming32.bingo.network;

import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.PacketFlow;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.Nullable;

import java.util.function.BiConsumer;
import java.util.function.Consumer;

public abstract class BingoNetworking {
public static final int PROTOCOL_VERSION = 9;

private static BingoNetworking instance;

public static BingoNetworking instance() {
return instance;
}

public static void init(BingoNetworking impl) {
if (instance != null) {
throw new IllegalStateException("Cannot override BingoNetworking impl");
}
instance = impl;
}

public abstract void onRegister(Consumer<Registrar> handler);

public abstract void sendToServer(CustomPacketPayload packet);

public abstract void sendTo(ServerPlayer player, CustomPacketPayload packet);

public void sendTo(Iterable<ServerPlayer> players, CustomPacketPayload packet) {
for (final ServerPlayer player : players) {
sendTo(player, packet);
}
}

public abstract boolean canServerReceive(ResourceLocation id);

public abstract boolean canPlayerReceive(ServerPlayer player, ResourceLocation id);

public abstract static class Registrar {
public abstract <P extends CustomPacketPayload> void register(
@Nullable PacketFlow flow, ResourceLocation id, FriendlyByteBuf.Reader<P> reader, BiConsumer<P, Context> handler
);

public <P extends AbstractCustomPayload> void register(@Nullable PacketFlow flow, ResourceLocation id, FriendlyByteBuf.Reader<P> reader) {
register(flow, id, reader, AbstractCustomPayload::handle);
}
}

public record Context(@Nullable Player player, Consumer<CustomPacketPayload> reply) {
public Level level() {
if (player == null) {
return null;
}
return player.level();
}
}
}

This file was deleted.

This file was deleted.

Loading

0 comments on commit 191ecae

Please sign in to comment.