mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-18 11:48:02 -04:00
Fixed items being replaced when used not being handled properly in robots (e.g. buckets), closes #279.
This commit is contained in:
parent
4c39ee547c
commit
6174673447
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user