mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-08 06:41:23 -04:00
Merge branch 'master-MC1.7.10' of github.com:MightyPirates/OpenComputers into master-MC1.8
Conflicts: src/main/scala/li/cil/oc/server/agent/Inventory.scala
This commit is contained in:
commit
058ee1b6d9
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user