From 94ae4e43a569a43295408ebf64a56b4217b9281e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 29 May 2015 11:52:07 +0200 Subject: [PATCH] Added some special code for mods using `InventoryPlayer.currentItem` instead of `InventoryPlayer.getCurrentItem`. Such as OpenBlocks' /dev/null. Oh well, it *almost* worked out of the box, just placing didn't. --- .../li/cil/oc/server/agent/Inventory.scala | 20 ++++++++++++++----- .../scala/li/cil/oc/server/agent/Player.scala | 2 ++ 2 files changed, 17 insertions(+), 5 deletions(-) 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 6742ae79f..d3677b64c 100644 --- a/src/main/scala/li/cil/oc/server/agent/Inventory.scala +++ b/src/main/scala/li/cil/oc/server/agent/Inventory.scala @@ -142,13 +142,21 @@ class Inventory(val agent: internal.Agent) extends InventoryPlayer(null) { override def getSizeInventory = agent.mainInventory.getSizeInventory - override def getStackInSlot(slot: Int) = agent.mainInventory.getStackInSlot(slot) + override def getStackInSlot(slot: Int) = + if (slot < 0) agent.equipmentInventory.getStackInSlot(~slot) + else agent.mainInventory.getStackInSlot(slot) - override def decrStackSize(slot: Int, amount: Int) = agent.mainInventory.decrStackSize(slot, amount) + override def decrStackSize(slot: Int, amount: Int) = + if (slot < 0) agent.equipmentInventory.decrStackSize(~slot, amount) + else agent.mainInventory.decrStackSize(slot, amount) - override def getStackInSlotOnClosing(slot: Int) = agent.mainInventory.getStackInSlotOnClosing(slot) + override def getStackInSlotOnClosing(slot: Int) = + if (slot < 0) agent.equipmentInventory.getStackInSlotOnClosing(~slot) + else agent.mainInventory.getStackInSlotOnClosing(slot) - override def setInventorySlotContents(slot: Int, stack: ItemStack) = agent.mainInventory.setInventorySlotContents(slot, stack) + override def setInventorySlotContents(slot: Int, stack: ItemStack) = + if (slot < 0) agent.equipmentInventory.setInventorySlotContents(~slot, stack) + else agent.mainInventory.setInventorySlotContents(slot, stack) override def getInventoryName = agent.mainInventory.getInventoryName @@ -158,5 +166,7 @@ class Inventory(val agent: internal.Agent) extends InventoryPlayer(null) { override def isUseableByPlayer(player: EntityPlayer) = agent.mainInventory.isUseableByPlayer(player) - override def isItemValidForSlot(slot: Int, stack: ItemStack) = agent.mainInventory.isItemValidForSlot(slot, stack) + override def isItemValidForSlot(slot: Int, stack: ItemStack) = + if (slot < 0) agent.equipmentInventory.isItemValidForSlot(~slot, stack) + else agent.mainInventory.isItemValidForSlot(slot, stack) } diff --git a/src/main/scala/li/cil/oc/server/agent/Player.scala b/src/main/scala/li/cil/oc/server/agent/Player.scala index 569a44569..f2b9392ed 100644 --- a/src/main/scala/li/cil/oc/server/agent/Player.scala +++ b/src/main/scala/li/cil/oc/server/agent/Player.scala @@ -404,10 +404,12 @@ class Player(val agent: internal.Agent) extends FakePlayer(agent.world.asInstanc val itemsBefore = adjacentItems val stack = inventory.getStackInSlot(slot) val oldStack = if (stack != null) stack.copy() else null + this.inventory.currentItem = if (inventory == agent.mainInventory) slot else ~slot try { f(stack) } finally { + this.inventory.currentItem = 0 val newStack = inventory.getStackInSlot(slot) if (newStack != null) { if (newStack.stackSize <= 0) {