diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/payload/PayloadHelper.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/payload/PayloadHelper.java index 2ee971f74..9aa374f8d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/payload/PayloadHelper.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/payload/PayloadHelper.java @@ -1,11 +1,13 @@ package net.momirealms.craftengine.bukkit.plugin.network.payload; import io.netty.buffer.Unpooled; +import net.kyori.adventure.text.Component; import net.momirealms.craftengine.bukkit.plugin.network.payload.protocol.CancelBlockUpdatePacket; import net.momirealms.craftengine.bukkit.plugin.network.payload.protocol.ClientBlockStateSizePacket; import net.momirealms.craftengine.bukkit.plugin.network.payload.protocol.ClientCustomBlockPacket; import net.momirealms.craftengine.bukkit.plugin.network.payload.protocol.VisualBlockStatePacket; import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.plugin.logger.Debugger; import net.momirealms.craftengine.core.plugin.network.ModPacket; import net.momirealms.craftengine.core.plugin.network.NetWorkUser; import net.momirealms.craftengine.core.plugin.network.NetworkManager; @@ -42,16 +44,25 @@ public class PayloadHelper { } public static void handleReceiver(Payload payload, NetWorkUser user) { - FriendlyByteBuf buf = payload.toBuffer(); - byte type = buf.readByte(); - @SuppressWarnings("unchecked") - NetworkCodec codec = (NetworkCodec) BuiltInRegistries.MOD_PACKET.getValue(type); - if (codec == null) { - CraftEngine.instance().logger().warn("Unknown data type received: " + type); - return; - } + try { + FriendlyByteBuf buf = payload.toBuffer(); + byte type = buf.readByte(); + @SuppressWarnings("unchecked") + NetworkCodec codec = (NetworkCodec) BuiltInRegistries.MOD_PACKET.getValue(type); + if (codec == null) { + Debugger.COMMON.debug(() -> "Unknown data type received: " + type); + return; + } - ModPacket networkData = codec.decode(buf); - networkData.handle(user); + ModPacket networkData = codec.decode(buf); + networkData.handle(user); + } catch (Throwable e) { + // 乱发包我给你踹了 + user.kick(Component.translatable( + "disconnect.craftengine.invalid_payload", + "Connection terminated due to transmission of invalid payload. \n Please ensure that the client mod and server plugin are the latest version." + )); + Debugger.COMMON.warn(() -> "Failed to handle payload", e); + } } }