Add null checks to networking for better errors.

This commit is contained in:
shedaniel
2021-02-25 15:00:34 +08:00
parent 4288ba88f5
commit b93cb04b6f
2 changed files with 20 additions and 16 deletions

View File

@@ -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 <T> Pair<MessageInfo<T>, FriendlyByteBuf> encode(T message) {
MessageInfo<T> messageInfo = (MessageInfo<T>) Objects.requireNonNull(encoders.get(message.getClass()));
public <T> Packet<?> toPacket(NetworkManager.Side side, T message) {
MessageInfo<T> messageInfo = (MessageInfo<T>) 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 <T> Packet<?> toPacket(NetworkManager.Side side, T message) {
Pair<MessageInfo<T>, FriendlyByteBuf> encoded = encode(message);
return NetworkManager.toPacket(side, encoded.getFirst().packetId, encoded.getSecond());
return NetworkManager.toPacket(side, messageInfo.packetId, buf);
}
public <T> 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 <T> void sendToPlayers(Iterable<ServerPlayer> 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 <T> 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)

View File

@@ -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<ServerPlayer> 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() {