Skip to content

Commit 9f83edc

Browse files
Fix leaking client-side enchantment cost prediction in AnvilWindow
1 parent 3f8216c commit 9f83edc

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

invui/src/main/java/xyz/xenondevs/invui/internal/menu/CustomAnvilMenu.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import net.minecraft.network.protocol.game.ServerboundRenameItemPacket;
55
import net.minecraft.world.inventory.MenuType;
66
import org.bukkit.entity.Player;
7+
import org.bukkit.inventory.ItemStack;
78
import org.jspecify.annotations.Nullable;
89
import xyz.xenondevs.invui.internal.network.PacketListener;
910

@@ -14,6 +15,8 @@
1415
*/
1516
public class CustomAnvilMenu extends CustomContainerMenu {
1617

18+
private static final int ENCHANTMENT_COST_DIRTY_MARKER = Integer.MIN_VALUE;
19+
1720
private String renameText = "";
1821
private @Nullable Consumer<? super String> renameHandler;
1922

@@ -40,11 +43,22 @@ public void handleClosed() {
4043
super.handleClosed();
4144
}
4245

46+
@Override
47+
public void setItem(int slot, @Nullable ItemStack item) {
48+
super.setItem(slot, item);
49+
50+
// updating second input slot causes client-side prediction of enchantment cost
51+
if (slot == 1) {
52+
remoteDataSlots[0] = ENCHANTMENT_COST_DIRTY_MARKER;
53+
}
54+
}
55+
4356
private void handleRename(ServerboundRenameItemPacket packet) {
4457
renameText = packet.getName();
4558
if (renameHandler != null)
4659
renameHandler.accept(renameText);
4760
remoteItems.set(2, DIRTY_MARKER);
61+
remoteDataSlots[0] = ENCHANTMENT_COST_DIRTY_MARKER;
4862
}
4963

5064
/**

0 commit comments

Comments
 (0)