public InventoryType getType() { // Thanks to Droppers extending Dispensers, order is important. if (inventory instanceof InventoryCrafting) { return inventory.getSize() >= 9 ? InventoryType.WORKBENCH : InventoryType.CRAFTING; } else if (inventory instanceof PlayerInventory) { return InventoryType.PLAYER; } else if (inventory instanceof TileEntityDropper) { return InventoryType.DROPPER; } else if (inventory instanceof TileEntityDispenser) { return InventoryType.DISPENSER; } else if (inventory instanceof TileEntityFurnace) { return InventoryType.FURNACE; } else if (inventory instanceof ContainerEnchantTableInventory) { return InventoryType.ENCHANTING; } else if (inventory instanceof TileEntityBrewingStand) { return InventoryType.BREWING; } else if (inventory instanceof CraftInventoryCustom.MinecraftInventory) { return ((CraftInventoryCustom.MinecraftInventory) inventory).getType(); } else if (inventory instanceof InventoryEnderChest) { return InventoryType.ENDER_CHEST; } else if (inventory instanceof InventoryMerchant) { return InventoryType.MERCHANT; } else if (inventory instanceof TileEntityBeacon) { return InventoryType.BEACON; } else if (inventory instanceof ContainerAnvilInventory) { return InventoryType.ANVIL; } else if (inventory instanceof IHopper) { return InventoryType.HOPPER; } else { return InventoryType.CHEST; } }
@Override public void setItem(int index, ItemStack item) { super.setItem(index, item); if (this.getHolder() == null) return; EntityPlayer player = ((CraftPlayer) this.getHolder()).getHandle(); if (player.playerConnection == null) return; // PacketPlayOutSetSlot places the items differently than setItem() // // Between, and including, index 9 (the first index outside of the hotbar) and index 35 (the last index before // armor slots) both PacketPlayOutSetSlot and setItem() places the items in the player's inventory the same way. // Index 9 starts at the upper left corner of the inventory and moves to the right as it increases. When it // reaches the end of the line it goes back to the left side of the new line in the inventory. Basically, it // follows the path your eyes would follow as you read a book. // // The player's hotbar is indexed 0-8 in setItem(). The order goes: 0-8 hotbar, 9-35 normal inventory, 36 boots, // 37 leggings, 38 chestplate, and 39 helmet. For indexes > 39 an ArrayIndexOutOfBoundsException will be thrown. // // PacketPlayOutSetSlot works very differently. Slots 0-8 are as follows: 0 crafting output, 1-4 crafting input, // 5 helmet, 6 chestplate, 7 leggings, and 8 boots. Then, 9-35 work exactly the same as setItem(). The hotbar // for PacketPlayOutSetSlot starts at index 36, and continues to index 44. Items placed where index is < 0 or // > 44 have no action. Basically, the upper part of the player's inventory (crafting area and armor slots) is // the first "row" of 9 slots for PacketPlayOutSetSlot. From there the rows work as normal, from left to right // all the way down, including the hotbar. // // With this in mind, we have to modify the index we give PacketPlayOutSetSlot to match the index we intended // with setItem(). First, if the index is 0-8, we need to add 36, or 4 rows worth of slots, to the index. This // will push the item down to the correct spot in the hotbar. // // Now when index is > 35 (if index > 39 an ArrayIndexOutOfBoundsException will be thrown, so we need not worry // about it) then we need to reset the index, and then count backwards from the "top" of the inventory. That is // to say, we first find (index - 36), which will give us the index required for the armor slots. Now, we need // to reverse the order of the index from 8. That means we need 0 to correspond to 8, 1 to correspond to 7, // 2 to correspond to 6, and 3 to correspond to 5. We do this simply by taking the result of (index - 36) and // subtracting that value from 8. if (index < PlayerInventory.getHotbarSize()) index = index + 36; else if (index > 35) index = 8 - (index - 36); player.playerConnection.sendPacket(new PacketPlayOutSetSlot(player.defaultContainer.windowId, index, CraftItemStack.asNMSCopy(item))); }
public InventoryType getType() { // Thanks to Droppers extending Dispensers, order is important. if (inventory instanceof InventoryCrafting) { return inventory.getSize() >= 9 ? InventoryType.WORKBENCH : InventoryType.CRAFTING; } else if (inventory instanceof PlayerInventory) { return InventoryType.PLAYER; } else if (inventory instanceof TileEntityDropper) { return InventoryType.DROPPER; } else if (inventory instanceof TileEntityDispenser) { return InventoryType.DISPENSER; } else if (inventory instanceof TileEntityFurnace) { return InventoryType.FURNACE; } else if (this instanceof CraftInventoryEnchanting) { return InventoryType.ENCHANTING; } else if (inventory instanceof TileEntityBrewingStand) { return InventoryType.BREWING; } else if (inventory instanceof CraftInventoryCustom.MinecraftInventory) { return ((CraftInventoryCustom.MinecraftInventory) inventory).getType(); } else if (inventory instanceof InventoryEnderChest) { return InventoryType.ENDER_CHEST; } else if (inventory instanceof InventoryMerchant) { return InventoryType.MERCHANT; } else if (inventory instanceof TileEntityBeacon) { return InventoryType.BEACON; } else if (this instanceof CraftInventoryAnvil) { return InventoryType.ANVIL; } else if (inventory instanceof IHopper) { return InventoryType.HOPPER; } else { return InventoryType.CHEST; } }
public CraftInventoryPlayer(net.minecraft.server.PlayerInventory inventory) { super(inventory); }
@Override public PlayerInventory getInventory() { return (PlayerInventory) inventory; }
public void setHeldItemSlot(int slot) { Validate.isTrue(slot >= 0 && slot < PlayerInventory.getHotbarSize(), "Slot is not between 0 and 8 inclusive"); this.getInventory().itemInHandIndex = slot; ((CraftPlayer) this.getHolder()).getHandle().playerConnection.sendPacket(new PacketPlayOutHeldItemSlot(slot)); }
public void setHeldItemSlot(int slot) { Validate.isTrue(slot >= 0 && slot < PlayerInventory.getHotbarSize(), "Slot is not between 0 and 8 inclusive"); this.getInventory().itemInHandIndex = slot; ((CraftPlayer) this.getHolder()).getHandle().playerConnection.sendPacket(new Packet16BlockItemSwitch(slot)); }
@Override public void setItem(int index, ItemStack item) { super.setItem(index, item); if (this.getHolder() == null) return; EntityPlayer player = ((CraftPlayer) this.getHolder()).getHandle(); if (player.playerConnection == null) return; // PacketPlayOutSetSlot places the items differently than setItem() // // Between, and including, index 9 (the first index outside of the hotbar) and index 35 (the last index before // armor slots) both PacketPlayOutSetSlot and setItem() places the items in the player's inventory the same way. // Index 9 starts at the upper left corner of the inventory and moves to the right as it increases. When it // reaches the end of the line it goes back to the left side of the new line in the inventory. Basically, it // follows the path your eyes would follow as you read a book. // // The player's hotbar is indexed 0-8 in setItem(). The order goes: 0-8 hotbar, 9-35 normal inventory, 36 boots, // 37 leggings, 38 chestplate, and 39 helmet. For indexes > 39 an ArrayIndexOutOfBoundsException will be thrown. // // PacketPlayOutSetSlot works very differently. Slots 0-8 are as follows: 0 crafting output, 1-4 crafting input, // 5 helmet, 6 chestplate, 7 leggings, and 8 boots. Then, 9-35 work exactly the same as setItem(). The hotbar // for PacketPlayOutSetSlot starts at index 36, and continues to index 44. Items placed where index is < 0 or // > 44 have no action. Basically, the upper part of the player's inventory (crafting area and armor slots) is // the first "row" of 9 slots for PacketPlayOutSetSlot. From there the rows work as normal, from left to right // all the way down, including the hotbar. // // With this in mind, we have to modify the index we give PacketPlayOutSetSlot to match the index we intended // with setItem(). First, if the index is 0-8, we need to add 36, or 4 rows worth of slots, to the index. This // will push the item down to the correct spot in the hotbar. // // Now when index is > 35 (if index > 39 an ArrayIndexOutOfBoundsException will be thrown, so we need not worry // about it) then we need to reset the index, and then count backwards from the "top" of the inventory. That is // to say, we first find (index - 36), which will give us the index required for the armor slots. Now, we need // to reverse the order of the index from 8. That means we need 0 to correspond to 8, 1 to correspond to 7, // 2 to correspond to 6, and 3 to correspond to 5. We do this simply by taking the result of (index - 36) and // subtracting that value from 8. if (index < PlayerInventory.getHotbarSize()) { index += 36; } else if (index > 39) { index += 5; // Off hand } else if (index > 35) { index = 8 - (index - 36); } player.playerConnection.sendPacket(new PacketPlayOutSetSlot(player.defaultContainer.windowId, index, CraftItemStack.asNMSCopy(item))); }