From 8bab87024133a3967811809c3429332180f6e6b8 Mon Sep 17 00:00:00 2001 From: Roch Blonndiaux Date: Fri, 27 Dec 2024 17:18:31 +0100 Subject: [PATCH] feat: send close form packet when receiving empty form data --- .../protocol/java/JavaCustomPayloadTranslator.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index c3108167b2..dee1d6cee9 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -28,6 +28,8 @@ import com.google.common.base.Charsets; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; + +import org.cloudburstmc.protocol.bedrock.packet.ClientboundCloseFormPacket; import org.cloudburstmc.protocol.bedrock.packet.TransferPacket; import org.cloudburstmc.protocol.bedrock.packet.UnknownPacket; import org.geysermc.cumulus.Forms; @@ -67,6 +69,12 @@ public void translate(GeyserSession session, ClientboundCustomPayloadPacket pack session.ensureInEventLoop(() -> { byte[] data = packet.getData(); + // If the data is empty, we just need to close the form + if (data.length == 0) { + session.sendUpstreamPacketImmediately(new ClientboundCloseFormPacket()); + return; + } + // receive: first byte is form type, second and third are the id, remaining is the form data // respond: first and second byte id, remaining is form response data @@ -96,7 +104,6 @@ public void translate(GeyserSession session, ClientboundCustomPayloadPacket pack }); session.sendForm(form); }); - } else if (channel.equals(PluginMessageChannels.TRANSFER)) { session.ensureInEventLoop(() -> { byte[] data = packet.getData();