diff --git a/common/src/main/java/me/shedaniel/architectury/networking/NetworkChannel.java b/common/src/main/java/me/shedaniel/architectury/networking/NetworkChannel.java index f49f227c..b2c203a3 100644 --- a/common/src/main/java/me/shedaniel/architectury/networking/NetworkChannel.java +++ b/common/src/main/java/me/shedaniel/architectury/networking/NetworkChannel.java @@ -20,7 +20,6 @@ package me.shedaniel.architectury.networking; import com.google.common.collect.Maps; -import com.mojang.datafixers.util.Pair; import io.netty.buffer.Unpooled; import me.shedaniel.architectury.networking.NetworkManager.PacketContext; import me.shedaniel.architectury.platform.Platform; @@ -111,32 +110,31 @@ public final class NetworkChannel { register(type, encoder, decoder, messageConsumer); } - private Pair, FriendlyByteBuf> encode(T message) { - MessageInfo messageInfo = (MessageInfo) Objects.requireNonNull(encoders.get(message.getClass())); + public Packet toPacket(NetworkManager.Side side, T message) { + MessageInfo messageInfo = (MessageInfo) Objects.requireNonNull(encoders.get(message.getClass()), "Unknown message type! " + message); FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); messageInfo.encoder.accept(message, buf); - return new Pair<>(messageInfo, buf); - } - - public Packet toPacket(NetworkManager.Side side, T message) { - Pair, FriendlyByteBuf> encoded = encode(message); - return NetworkManager.toPacket(side, encoded.getFirst().packetId, encoded.getSecond()); + return NetworkManager.toPacket(side, messageInfo.packetId, buf); } public void sendToPlayer(ServerPlayer player, T message) { - player.connection.send(toPacket(NetworkManager.s2c(), message)); + Objects.requireNonNull(player, "Unable to send packet to a 'null' player!").connection.send(toPacket(NetworkManager.s2c(), message)); } public void sendToPlayers(Iterable players, T message) { Packet packet = toPacket(NetworkManager.s2c(), message); for (ServerPlayer player : players) { - player.connection.send(packet); + Objects.requireNonNull(player, "Unable to send packet to a 'null' player!").connection.send(packet); } } @Environment(EnvType.CLIENT) public void sendToServer(T message) { - Minecraft.getInstance().getConnection().send(toPacket(NetworkManager.c2s(), message)); + if (Minecraft.getInstance().getConnection() != null) { + Minecraft.getInstance().getConnection().send(toPacket(NetworkManager.c2s(), message)); + } else { + throw new IllegalStateException("Unable to send packet to the server while not in game!"); + } } @Environment(EnvType.CLIENT) diff --git a/common/src/main/java/me/shedaniel/architectury/networking/NetworkManager.java b/common/src/main/java/me/shedaniel/architectury/networking/NetworkManager.java index 135b49e0..51a74cd1 100644 --- a/common/src/main/java/me/shedaniel/architectury/networking/NetworkManager.java +++ b/common/src/main/java/me/shedaniel/architectury/networking/NetworkManager.java @@ -30,6 +30,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; +import java.util.Objects; + public final class NetworkManager { @ExpectPlatform public static void registerReceiver(Side side, ResourceLocation id, NetworkReceiver receiver) { @@ -42,19 +44,23 @@ public final class NetworkManager { } public static void sendToPlayer(ServerPlayer player, ResourceLocation id, FriendlyByteBuf buf) { - player.connection.send(toPacket(serverToClient(), id, buf)); + Objects.requireNonNull(player, "Unable to send packet to a 'null' player!").connection.send(toPacket(serverToClient(), id, buf)); } public static void sendToPlayers(Iterable players, ResourceLocation id, FriendlyByteBuf buf) { Packet packet = toPacket(serverToClient(), id, buf); for (ServerPlayer player : players) { - player.connection.send(packet); + Objects.requireNonNull(player, "Unable to send packet to a 'null' player!").connection.send(packet); } } @Environment(EnvType.CLIENT) public static void sendToServer(ResourceLocation id, FriendlyByteBuf buf) { - Minecraft.getInstance().getConnection().send(toPacket(clientToServer(), id, buf)); + if (Minecraft.getInstance().getConnection() != null) { + Minecraft.getInstance().getConnection().send(toPacket(clientToServer(), id, buf)); + } else { + throw new IllegalStateException("Unable to send packet to the server while not in game!"); + } } @Environment(EnvType.CLIENT) @@ -77,7 +83,7 @@ public final class NetworkManager { Player getPlayer(); void queue(Runnable runnable); - + Env getEnvironment(); default EnvType getEnv() {