diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index 42dbc56f0c..cc99ff5f29 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -1459,45 +1459,41 @@ public class PlayerConnection extends Connection { boolean flag3 = itemstack == null || itemstack.getData() >= 0 && itemstack.getData() >= 0 && itemstack.count <= 64 && itemstack.count > 0; // CraftBukkit start - Call click event - if (flag1 || flag) { // Insist on valid slot - ItemStack existingItem = this.player.defaultContainer.getSlot(packet107setcreativeslot.slot).getItem(); - // Client assumes that the server forgets the contents of the inventory. It doesn't. - if (!ItemStack.matches(existingItem, packet107setcreativeslot.b)) { + if (flag || (flag1 && !ItemStack.matches(this.player.defaultContainer.getSlot(packet107setcreativeslot.slot).getItem(), packet107setcreativeslot.b))) { // Insist on valid slot - org.bukkit.entity.HumanEntity player = this.player.getBukkitEntity(); - InventoryView inventory = new CraftInventoryView(player, player.getInventory(), this.player.defaultContainer); - org.bukkit.inventory.ItemStack item = CraftItemStack.asBukkitCopy(packet107setcreativeslot.b); // Should be packet107setcreativeslot.newitem + org.bukkit.entity.HumanEntity player = this.player.getBukkitEntity(); + InventoryView inventory = new CraftInventoryView(player, player.getInventory(), this.player.defaultContainer); + org.bukkit.inventory.ItemStack item = CraftItemStack.asBukkitCopy(packet107setcreativeslot.b); // Should be packet107setcreativeslot.newitem - SlotType type = SlotType.QUICKBAR; - if (flag) { - type = SlotType.OUTSIDE; - } else if (packet107setcreativeslot.slot < 36) { - if (packet107setcreativeslot.slot >= 5 && packet107setcreativeslot.slot < 9) { - type = SlotType.ARMOR; - } else { - type = SlotType.CONTAINER; - } + SlotType type = SlotType.QUICKBAR; + if (flag) { + type = SlotType.OUTSIDE; + } else if (packet107setcreativeslot.slot < 36) { + if (packet107setcreativeslot.slot >= 5 && packet107setcreativeslot.slot < 9) { + type = SlotType.ARMOR; + } else { + type = SlotType.CONTAINER; } - InventoryCreativeEvent event = new InventoryCreativeEvent(inventory, type, flag ? -999 : packet107setcreativeslot.slot, item); - server.getPluginManager().callEvent(event); + } + InventoryCreativeEvent event = new InventoryCreativeEvent(inventory, type, flag ? -999 : packet107setcreativeslot.slot, item); + server.getPluginManager().callEvent(event); - itemstack = CraftItemStack.asNMSCopy(event.getCursor()); + itemstack = CraftItemStack.asNMSCopy(event.getCursor()); - switch (event.getResult()) { - case ALLOW: - // Plugin cleared the id / stacksize checks - flag2 = flag3 = true; - break; - case DEFAULT: - break; - case DENY: - // Reset the slot - if (packet107setcreativeslot.slot >= 0) { - this.player.playerConnection.sendPacket(new Packet103SetSlot(this.player.defaultContainer.windowId, packet107setcreativeslot.slot, this.player.defaultContainer.getSlot(packet107setcreativeslot.slot).getItem())); - this.player.playerConnection.sendPacket(new Packet103SetSlot(-1, -1, null)); - } - return; + switch (event.getResult()) { + case ALLOW: + // Plugin cleared the id / stacksize checks + flag2 = flag3 = true; + break; + case DEFAULT: + break; + case DENY: + // Reset the slot + if (packet107setcreativeslot.slot >= 0) { + this.player.playerConnection.sendPacket(new Packet103SetSlot(this.player.defaultContainer.windowId, packet107setcreativeslot.slot, this.player.defaultContainer.getSlot(packet107setcreativeslot.slot).getItem())); + this.player.playerConnection.sendPacket(new Packet103SetSlot(-1, -1, null)); } + return; } } // CraftBukkit end