From 2dff2b0363f594e97fd3f91c87919c21c943f608 Mon Sep 17 00:00:00 2001 From: twisti <76837088+twisti-dev@users.noreply.github.com> Date: Sat, 28 Mar 2026 13:14:45 +0100 Subject: [PATCH 1/2] feat: add handling for container click packets to fix state ID issues --- .../server/packet/lore/PacketLoreListener.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/surf-api-bukkit/surf-api-bukkit-server/src/main/kotlin/dev/slne/surf/surfapi/bukkit/server/packet/lore/PacketLoreListener.kt b/surf-api-bukkit/surf-api-bukkit-server/src/main/kotlin/dev/slne/surf/surfapi/bukkit/server/packet/lore/PacketLoreListener.kt index 758543ea..53513710 100644 --- a/surf-api-bukkit/surf-api-bukkit-server/src/main/kotlin/dev/slne/surf/surfapi/bukkit/server/packet/lore/PacketLoreListener.kt +++ b/surf-api-bukkit/surf-api-bukkit-server/src/main/kotlin/dev/slne/surf/surfapi/bukkit/server/packet/lore/PacketLoreListener.kt @@ -15,6 +15,7 @@ import it.unimi.dsi.fastutil.objects.ObjectLists import net.kyori.adventure.text.format.TextDecoration import net.minecraft.core.component.DataComponents import net.minecraft.network.protocol.game.* +import net.minecraft.server.level.ServerPlayer import net.minecraft.world.item.ItemStack import net.minecraft.world.item.component.CustomData import net.minecraft.world.item.component.ItemLore @@ -121,6 +122,35 @@ object PacketLoreListener : PacketListener { ) } + @ServerboundListener + fun onContainerClickPacket( + event: ServerboundContainerClickPacket, + player: ServerPlayer + ): ServerboundContainerClickPacket { + if (!hasAnyHandlers()) return event + + val container = player.containerMenu + val currentStateId = container.stateId + + val brokenStateId = if (event.stateId() == currentStateId) { + currentStateId - 1 + } else { + event.stateId() + } + + if (brokenStateId == event.stateId()) return event + + return ServerboundContainerClickPacket( + event.containerId(), + brokenStateId, + event.slotNum(), + event.buttonNum(), + event.clickType(), + event.changedSlots(), + event.carriedItem() + ) + } + @ClientboundListener fun onSetCursorItemPacket(event: ClientboundSetCursorItemPacket): ClientboundSetCursorItemPacket { val original = event.contents From cf271ef3a203d7f702e028820677c5f2df9f858d Mon Sep 17 00:00:00 2001 From: twisti <76837088+twisti-dev@users.noreply.github.com> Date: Sat, 28 Mar 2026 13:15:12 +0100 Subject: [PATCH 2/2] chore: bump version to 1.21.11-2.71.1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b0277016..ad8a879f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled javaVersion=25 mcVersion=1.21.11 group=dev.slne.surf -version=1.21.11-2.71.0 +version=1.21.11-2.71.1 relocationPrefix=dev.slne.surf.surfapi.libs snapshot=false