Fixed items being replaced when used not being handled properly in robots (e.g. buckets), closes #279.

This commit is contained in:
Florian Nücke 2014-05-31 02:51:40 +02:00
parent 4c39ee547c
commit 6174673447

View File

@ -165,7 +165,7 @@ class Player(val robot: tileentity.Robot) extends EntityPlayer(robot.world, Sett
def useEquippedItem(duration: Double) = {
callUsingItemInSlot(0, stack => {
if (!shouldCancel(() => ForgeEventFactory.onPlayerInteract(this, Action.RIGHT_CLICK_AIR, 0, 0, 0, -1))) {
tryUseItem(getCurrentEquippedItem, duration)
tryUseItem(stack, duration)
}
else false
})
@ -198,7 +198,11 @@ class Player(val robot: tileentity.Robot) extends EntityPlayer(robot.world, Sett
def sizeOrDamageChanged = newStack.stackSize != oldSize || newStack.getItemDamage != oldDamage
def tagChanged = (oldData == null && newStack.hasTagCompound) || (oldData != null && !newStack.hasTagCompound) ||
(oldData != null && newStack.hasTagCompound && !oldData.equals(newStack.getTagCompound))
newStack != stack || (newStack != null && (sizeOrDamageChanged || tagChanged || PortalGun.isStandardPortalGun(stack)))
val stackChanged = newStack != stack || (newStack != null && (sizeOrDamageChanged || tagChanged || PortalGun.isStandardPortalGun(stack)))
if (stackChanged) {
robot.setInventorySlotContents(0, newStack)
}
stackChanged
}
}
@ -344,13 +348,14 @@ class Player(val robot: tileentity.Robot) extends EntityPlayer(robot.world, Sett
f(stack)
}
finally {
if (stack != null) {
if (stack.stackSize <= 0) {
val newStack = inventory.getStackInSlot(slot)
if (newStack != null) {
if (newStack.stackSize <= 0) {
inventory.setInventorySlotContents(slot, null)
}
if (repair) {
if (stack.stackSize > 0) tryRepair(stack, oldStack)
else ForgeEventFactory.onPlayerDestroyItem(this, stack)
if (newStack.stackSize > 0) tryRepair(newStack, oldStack)
else ForgeEventFactory.onPlayerDestroyItem(this, newStack)
}
}
collectDroppedItems(itemsBefore)
@ -358,10 +363,13 @@ class Player(val robot: tileentity.Robot) extends EntityPlayer(robot.world, Sett
}
private def tryRepair(stack: ItemStack, oldStack: ItemStack) {
val damageRate = new RobotUsedTool.ComputeDamageRate(robot, stack, oldStack, Settings.get.itemDamageRate)
MinecraftForge.EVENT_BUS.post(damageRate)
if (damageRate.getDamageRate < 1) {
MinecraftForge.EVENT_BUS.post(new RobotUsedTool.ApplyDamageRate(robot, stack, oldStack, damageRate.getDamageRate))
// Only if the underlying type didn't change.
if (stack.getItem == oldStack.getItem) {
val damageRate = new RobotUsedTool.ComputeDamageRate(robot, stack, oldStack, Settings.get.itemDamageRate)
MinecraftForge.EVENT_BUS.post(damageRate)
if (damageRate.getDamageRate < 1) {
MinecraftForge.EVENT_BUS.post(new RobotUsedTool.ApplyDamageRate(robot, stack, oldStack, damageRate.getDamageRate))
}
}
}