diff --git a/src/main/scala/li/cil/oc/server/agent/Inventory.scala b/src/main/scala/li/cil/oc/server/agent/Inventory.scala index b6dc54ef7..34f969ae9 100644 --- a/src/main/scala/li/cil/oc/server/agent/Inventory.scala +++ b/src/main/scala/li/cil/oc/server/agent/Inventory.scala @@ -1,6 +1,7 @@ package li.cil.oc.server.agent import li.cil.oc.api.internal +import li.cil.oc.util.InventoryUtils import net.minecraft.block.Block import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.InventoryPlayer @@ -9,8 +10,6 @@ import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagList -import scala.util.control.Breaks._ - class Inventory(val agent: internal.Agent) extends InventoryPlayer(null) { def selectedItemStack = agent.mainInventory.getStackInSlot(agent.selectedSlot) @@ -23,11 +22,6 @@ class Inventory(val agent: internal.Agent) extends InventoryPlayer(null) { else inventorySlots.find(getStackInSlot(_) == null).getOrElse(-1) } - def getFirstEmptyStackAccepting(stack: ItemStack) = { - if (selectedItemStack == null && isItemValidForSlot(agent.selectedSlot, stack)) agent.selectedSlot - else inventorySlots.find(slot => getStackInSlot(slot) == null && isItemValidForSlot(slot, stack)).getOrElse(-1) - } - override def setCurrentItem(item: Item, itemDamage: Int, checkDamage: Boolean, create: Boolean) {} override def changeCurrentItem(direction: Int) {} @@ -57,54 +51,9 @@ class Inventory(val agent: internal.Agent) extends InventoryPlayer(null) { } override def addItemStackToInventory(stack: ItemStack) = { - if (stack == null || stack.stackSize == 0) false - else if (stack.isItemDamaged || (stack.stackSize == 1 && stack.getMaxStackSize == 1)) { - val slot = getFirstEmptyStackAccepting(stack) - if (slot >= 0) { - setInventorySlotContents(slot, stack.splitStack(1)) - true - } - else false - } - else { - val originalSize = stack.stackSize - breakable { - while (stack.stackSize > 0) { - if (stack.getMaxStackSize == 1) { - val slot = getFirstEmptyStackAccepting(stack) - if (slot >= 0) { - setInventorySlotContents(slot, stack.splitStack(1)) - } - else break() - } - else { - val slot = - if (selectedItemStack == null) agent.selectedSlot - else inventorySlots.find(slot => { - val existing = getStackInSlot(slot) - existing != null && existing.isItemEqual(stack) && - (!existing.getHasSubtypes || (existing.getItemDamage == stack.getItemDamage && ItemStack.areItemStackTagsEqual(existing, stack))) && - (existing.stackSize < math.min(existing.getMaxStackSize, getInventoryStackLimit)) - }).getOrElse(getFirstEmptyStackAccepting(stack)) - if (slot >= 0) { - if (getStackInSlot(slot) == null) { - val amount = math.min(stack.stackSize, math.min(getInventoryStackLimit, stack.getMaxStackSize)) - setInventorySlotContents(slot, stack.splitStack(amount)) - } - else { - val existing = getStackInSlot(slot) - val space = math.min(getInventoryStackLimit, existing.getMaxStackSize) - existing.stackSize - val amount = math.min(stack.stackSize, space) - existing.stackSize += amount - stack.stackSize -= amount - } - } - else break() - } - } - } - stack.stackSize < originalSize - } + val indices = 0 until getSizeInventory + val slots = indices.drop(agent.selectedSlot) ++ indices.take(agent.selectedSlot) + InventoryUtils.insertIntoInventory(stack, this, slots = Option(slots)) } override def func_146025_b(block: Block) = canHarvestBlock(block)