@Override public ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) { ItemStack stack = null; Slot slot = (Slot) inventorySlots.get(slotNumber); if ((slot != null) && (slot.getHasStack())) { ItemStack stack1 = slot.getStack(); stack = stack1.copy(); EntityEquipmentSlot desiredSlot = EntityLiving.getSlotForItemStack(stack); if (slotNumber == 0) // CraftingResult { if (!mergeItemStack(stack1, 13, 49, true)) return ItemStack.field_190927_a; slot.onSlotChange(stack1, stack); } else if ((slotNumber >= 1) && (slotNumber < 5)) // CraftingGrid { if (!mergeItemStack(stack1, 13, 49, false)) return ItemStack.field_190927_a; } else if ((slotNumber >= 5) && (slotNumber < 13)) // NormalArmor & CosmeticArmor { if (!mergeItemStack(stack1, 13, 49, false)) return ItemStack.field_190927_a; } else if (desiredSlot.getSlotType() == EntityEquipmentSlot.Type.ARMOR && !inventorySlots .get(8 - desiredSlot.getIndex()) .getHasStack()) // ItemArmor - check NormalArmor slots { int j = 8 - desiredSlot.getIndex(); if (!mergeItemStack(stack1, j, j + 1, false)) return ItemStack.field_190927_a; } else if (desiredSlot.getSlotType() == EntityEquipmentSlot.Type.ARMOR && !inventorySlots .get(12 - desiredSlot.getIndex()) .getHasStack()) // ItemArmor - check CosmeticArmor slots { int j = 12 - desiredSlot.getIndex(); if (!mergeItemStack(stack1, j, j + 1, false)) return ItemStack.field_190927_a; } else if ((slotNumber >= 13) && (slotNumber < 40)) // PlayerInventory { if (!mergeItemStack(stack1, 40, 49, false)) return ItemStack.field_190927_a; } else if ((slotNumber >= 40) && (slotNumber < 49)) // PlayerHotBar { if (!mergeItemStack(stack1, 13, 40, false)) return ItemStack.field_190927_a; } else if (!mergeItemStack(stack1, 13, 49, false)) { return ItemStack.field_190927_a; } if (stack1.func_190916_E() == 0) slot.putStack(ItemStack.field_190927_a); else slot.onSlotChanged(); if (stack1.func_190916_E() == stack.func_190916_E()) return ItemStack.field_190927_a; slot.func_190901_a(player, stack1); if (slotNumber == 0) player.dropItem(stack1, false); } return stack; }