mirror of
https://github.com/FabricMC/fabric.git
synced 2025-04-05 19:47:00 -04:00
Fix unhandled packets disconnecting the client. (#3324)
This commit is contained in:
parent
2034447cba
commit
69e331e36e
5 changed files with 31 additions and 15 deletions
fabric-networking-api-v1/src
client/java/net/fabricmc/fabric/impl/networking/client
main/java/net/fabricmc/fabric/impl/networking
testmod/java/net/fabricmc/fabric/test/networking/play
testmodClient/java/net/fabricmc/fabric/test/networking/client/play
|
@ -86,11 +86,7 @@ public final class ClientConfigurationNetworkAddon extends AbstractChanneledNetw
|
|||
* @return true if the packet has been handled
|
||||
*/
|
||||
public boolean handle(PacketByteBufPayload payload) {
|
||||
try {
|
||||
return this.handle(payload.id(), payload.data());
|
||||
} finally {
|
||||
payload.data().release();
|
||||
}
|
||||
return this.handle(payload.id(), payload.data());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -86,11 +86,7 @@ public final class ClientPlayNetworkAddon extends AbstractChanneledNetworkAddon<
|
|||
* @return true if the packet has been handled
|
||||
*/
|
||||
public boolean handle(PacketByteBufPayload payload) {
|
||||
try {
|
||||
return this.handle(payload.id(), payload.data());
|
||||
} finally {
|
||||
payload.data().release();
|
||||
}
|
||||
return this.handle(payload.id(), payload.data());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -72,17 +72,17 @@ public abstract class AbstractChanneledNetworkAddon<H> extends AbstractNetworkAd
|
|||
}
|
||||
|
||||
// always supposed to handle async!
|
||||
protected boolean handle(Identifier channelName, PacketByteBuf originalBuf) {
|
||||
protected boolean handle(Identifier channelName, PacketByteBuf buf) {
|
||||
this.logger.debug("Handling inbound packet from channel with name \"{}\"", channelName);
|
||||
|
||||
// Handle reserved packets
|
||||
if (NetworkingImpl.REGISTER_CHANNEL.equals(channelName)) {
|
||||
this.receiveRegistration(true, PacketByteBufs.slice(originalBuf));
|
||||
this.receiveRegistration(true, buf);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (NetworkingImpl.UNREGISTER_CHANNEL.equals(channelName)) {
|
||||
this.receiveRegistration(false, PacketByteBufs.slice(originalBuf));
|
||||
this.receiveRegistration(false, buf);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -92,8 +92,6 @@ public abstract class AbstractChanneledNetworkAddon<H> extends AbstractNetworkAd
|
|||
return false;
|
||||
}
|
||||
|
||||
PacketByteBuf buf = PacketByteBufs.slice(originalBuf);
|
||||
|
||||
try {
|
||||
this.receive(handler, buf);
|
||||
} catch (Throwable ex) {
|
||||
|
|
|
@ -45,6 +45,7 @@ import net.fabricmc.fabric.test.networking.NetworkingTestmods;
|
|||
|
||||
public final class NetworkingPlayPacketTest implements ModInitializer {
|
||||
public static final Identifier TEST_CHANNEL = NetworkingTestmods.id("test_channel");
|
||||
private static final Identifier UNKNOWN_TEST_CHANNEL = NetworkingTestmods.id("unknown_test_channel");
|
||||
|
||||
public static void sendToTestChannel(ServerPlayerEntity player, String stuff) {
|
||||
ServerPlayNetworking.getSender(player).sendPacket(new OverlayPacket(Text.literal(stuff)), future -> {
|
||||
|
@ -52,6 +53,10 @@ public final class NetworkingPlayPacketTest implements ModInitializer {
|
|||
});
|
||||
}
|
||||
|
||||
private static void sendToUnknownChannel(ServerPlayerEntity player) {
|
||||
ServerPlayNetworking.getSender(player).sendPacket(UNKNOWN_TEST_CHANNEL, PacketByteBufs.create());
|
||||
}
|
||||
|
||||
public static void registerCommand(CommandDispatcher<ServerCommandSource> dispatcher) {
|
||||
NetworkingTestmods.LOGGER.info("Registering test command");
|
||||
|
||||
|
@ -61,6 +66,10 @@ public final class NetworkingPlayPacketTest implements ModInitializer {
|
|||
sendToTestChannel(ctx.getSource().getPlayer(), stuff);
|
||||
return Command.SINGLE_SUCCESS;
|
||||
}))
|
||||
.then(literal("unknown").executes(ctx -> {
|
||||
sendToUnknownChannel(ctx.getSource().getPlayer());
|
||||
return Command.SINGLE_SUCCESS;
|
||||
}))
|
||||
.then(literal("bundled").executes(ctx -> {
|
||||
PacketByteBuf buf1 = PacketByteBufs.create();
|
||||
buf1.writeText(Text.literal("bundled #1"));
|
||||
|
|
|
@ -16,19 +16,36 @@
|
|||
|
||||
package net.fabricmc.fabric.test.networking.client.play;
|
||||
|
||||
import com.mojang.brigadier.Command;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
import net.fabricmc.fabric.test.networking.NetworkingTestmods;
|
||||
import net.fabricmc.fabric.test.networking.play.NetworkingPlayPacketTest;
|
||||
|
||||
public final class NetworkingPlayPacketClientTest implements ClientModInitializer, ClientPlayNetworking.PlayPacketHandler<NetworkingPlayPacketTest.OverlayPacket> {
|
||||
private static final Identifier UNKNOWN_TEST_CHANNEL = NetworkingTestmods.id("unknown_test_channel");
|
||||
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
ClientPlayConnectionEvents.INIT.register((handler, client) -> ClientPlayNetworking.registerReceiver(NetworkingPlayPacketTest.OverlayPacket.PACKET_TYPE, this));
|
||||
|
||||
ClientCommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> dispatcher.register(
|
||||
ClientCommandManager.literal("clientnetworktestcommand")
|
||||
.then(ClientCommandManager.literal("unknown").executes(context -> {
|
||||
ClientPlayNetworking.send(UNKNOWN_TEST_CHANNEL, PacketByteBufs.create());
|
||||
return Command.SINGLE_SUCCESS;
|
||||
}
|
||||
))));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Add table
Reference in a new issue