/** merges provided ItemStack with the first avaliable one in the container/player inventory */ protected boolean mergeItemStack(ItemStack par1ItemStack, int par2, int par3, boolean par4) { boolean var5 = false; int var6 = par2; if (par4) { var6 = par3 - 1; } Slot var7; ItemStack var8; if (par1ItemStack.isStackable()) { while (par1ItemStack.stackSize > 0 && (!par4 && var6 < par3 || par4 && var6 >= par2)) { var7 = (Slot) this.inventorySlots.get(var6); var8 = var7.getStack(); if (var8 != null && var8.itemID == par1ItemStack.itemID && (!par1ItemStack.getHasSubtypes() || par1ItemStack.getItemDamage() == var8.getItemDamage()) && ItemStack.func_77970_a(par1ItemStack, var8)) { int var9 = var8.stackSize + par1ItemStack.stackSize; if (var9 <= par1ItemStack.getMaxStackSize()) { par1ItemStack.stackSize = 0; var8.stackSize = var9; var7.onSlotChanged(); var5 = true; } else if (var8.stackSize < par1ItemStack.getMaxStackSize()) { par1ItemStack.stackSize -= par1ItemStack.getMaxStackSize() - var8.stackSize; var8.stackSize = par1ItemStack.getMaxStackSize(); var7.onSlotChanged(); var5 = true; } } if (par4) { --var6; } else { ++var6; } } } if (par1ItemStack.stackSize > 0) { if (par4) { var6 = par3 - 1; } else { var6 = par2; } while (!par4 && var6 < par3 || par4 && var6 >= par2) { var7 = (Slot) this.inventorySlots.get(var6); var8 = var7.getStack(); if (var8 == null) { var7.putStack(par1ItemStack.copy()); var7.onSlotChanged(); par1ItemStack.stackSize = 0; var5 = true; break; } if (par4) { --var6; } else { ++var6; } } } return var5; }
public ItemStack slotClick(int par1, int par2, boolean par3, EntityPlayer par4EntityPlayer) { ItemStack var5 = null; if (par2 > 1) { return null; } else { if (par2 == 0 || par2 == 1) { InventoryPlayer var6 = par4EntityPlayer.inventory; if (par1 == -999) { if (var6.getItemStack() != null && par1 == -999) { if (par2 == 0) { par4EntityPlayer.dropPlayerItem(var6.getItemStack()); var6.setItemStack((ItemStack) null); } if (par2 == 1) { par4EntityPlayer.dropPlayerItem(var6.getItemStack().splitStack(1)); if (var6.getItemStack().stackSize == 0) { var6.setItemStack((ItemStack) null); } } } } else if (par3) { ItemStack var7 = this.transferStackInSlot(par1); if (var7 != null) { int var8 = var7.itemID; var5 = var7.copy(); Slot var9 = (Slot) this.inventorySlots.get(par1); if (var9 != null && var9.getStack() != null && var9.getStack().itemID == var8) { this.retrySlotClick(par1, par2, par3, par4EntityPlayer); } } } else { if (par1 < 0) { return null; } Slot var12 = (Slot) this.inventorySlots.get(par1); if (var12 != null) { ItemStack var13 = var12.getStack(); ItemStack var14 = var6.getItemStack(); if (var13 != null) { var5 = var13.copy(); } int var10; if (var13 == null) { if (var14 != null && var12.isItemValid(var14)) { var10 = par2 == 0 ? var14.stackSize : 1; if (var10 > var12.getSlotStackLimit()) { var10 = var12.getSlotStackLimit(); } var12.putStack(var14.splitStack(var10)); if (var14.stackSize == 0) { var6.setItemStack((ItemStack) null); } } } else if (var14 == null) { var10 = par2 == 0 ? var13.stackSize : (var13.stackSize + 1) / 2; ItemStack var11 = var12.decrStackSize(var10); var6.setItemStack(var11); if (var13.stackSize == 0) { var12.putStack((ItemStack) null); } var12.onPickupFromSlot(var6.getItemStack()); } else if (var12.isItemValid(var14)) { if (var13.itemID == var14.itemID && (!var13.getHasSubtypes() || var13.getItemDamage() == var14.getItemDamage()) && ItemStack.func_77970_a(var13, var14)) { var10 = par2 == 0 ? var14.stackSize : 1; if (var10 > var12.getSlotStackLimit() - var13.stackSize) { var10 = var12.getSlotStackLimit() - var13.stackSize; } if (var10 > var14.getMaxStackSize() - var13.stackSize) { var10 = var14.getMaxStackSize() - var13.stackSize; } var14.splitStack(var10); if (var14.stackSize == 0) { var6.setItemStack((ItemStack) null); } var13.stackSize += var10; } else if (var14.stackSize <= var12.getSlotStackLimit()) { var12.putStack(var14); var6.setItemStack(var13); } } else if (var13.itemID == var14.itemID && var14.getMaxStackSize() > 1 && (!var13.getHasSubtypes() || var13.getItemDamage() == var14.getItemDamage()) && ItemStack.func_77970_a(var13, var14)) { var10 = var13.stackSize; if (var10 > 0 && var10 + var14.stackSize <= var14.getMaxStackSize()) { var14.stackSize += var10; var13 = var12.decrStackSize(var10); if (var13.stackSize == 0) { var12.putStack((ItemStack) null); } var12.onPickupFromSlot(var6.getItemStack()); } } var12.onSlotChanged(); } } } return var5; } }