Merge pull request #2558 from Kubuxu/robots-fix1

Potential fix for block breaking robots hanging up on air blocks.
This commit is contained in:
Adrian Siekierka 2015-03-15 10:12:35 +01:00
commit 591b7e9908

View file

@ -56,33 +56,38 @@ public class AIRobotBreak extends AIRobot {
@Override @Override
public void update() { public void update() {
if (block == null || block.isAir(robot.worldObj, blockToBreak.x, blockToBreak.y, blockToBreak.z)) {
terminate();
}
if (hardness != 0) { if (hardness != 0) {
blockDamage += speed / hardness / 30F; blockDamage += speed / hardness / 30F;
} else { } else {
// Instantly break the block // Instantly break the block
blockDamage = 1.1F; blockDamage = 1.1F;
} }
if (blockDamage > 1.0F) { if (blockDamage > 1.0F) {
robot.worldObj.destroyBlockInWorldPartially(robot.getEntityId(), blockToBreak.x, robot.worldObj.destroyBlockInWorldPartially(robot.getEntityId(), blockToBreak.x,
blockToBreak.y, blockToBreak.z, -1); blockToBreak.y, blockToBreak.z, -1);
blockDamage = 0; blockDamage = 0;
if (robot.getHeldItem() != null) { if (robot.getHeldItem() != null) {
robot.getHeldItem().getItem() robot.getHeldItem().getItem()
.onBlockStartBreak(robot.getHeldItem(), blockToBreak.x, blockToBreak.y, blockToBreak.z, .onBlockStartBreak(robot.getHeldItem(), blockToBreak.x, blockToBreak.y, blockToBreak.z,
CoreProxy.proxy.getBuildCraftPlayer((WorldServer) robot.worldObj).get()); CoreProxy.proxy.getBuildCraftPlayer((WorldServer) robot.worldObj).get());
} }
if (BlockUtils.breakBlock((WorldServer) robot.worldObj, blockToBreak.x, blockToBreak.y, blockToBreak.z, 6000)) { if (BlockUtils.breakBlock((WorldServer) robot.worldObj, blockToBreak.x, blockToBreak.y, blockToBreak.z, 6000)) {
robot.worldObj.playAuxSFXAtEntity(null, 2001, robot.worldObj.playAuxSFXAtEntity(null, 2001,
blockToBreak.x, blockToBreak.y, blockToBreak.z, blockToBreak.x, blockToBreak.y, blockToBreak.z,
Block.getIdFromBlock(block) + (meta << 12)); Block.getIdFromBlock(block) + (meta << 12));
if (robot.getHeldItem() != null) { if (robot.getHeldItem() != null) {
robot.getHeldItem().getItem() robot.getHeldItem().getItem()
.onBlockDestroyed(robot.getHeldItem(), robot.worldObj, block, blockToBreak.x, .onBlockDestroyed(robot.getHeldItem(), robot.worldObj, block, blockToBreak.x,
blockToBreak.y, blockToBreak.z, robot); blockToBreak.y, blockToBreak.z, robot);
if (robot.getHeldItem().getItemDamage() >= robot.getHeldItem().getMaxDamage()) { if (robot.getHeldItem().getItemDamage() >= robot.getHeldItem().getMaxDamage()) {
robot.setItemInUse(null); robot.setItemInUse(null);
@ -93,7 +98,7 @@ public class AIRobotBreak extends AIRobot {
terminate(); terminate();
} else { } else {
robot.worldObj.destroyBlockInWorldPartially(robot.getEntityId(), blockToBreak.x, robot.worldObj.destroyBlockInWorldPartially(robot.getEntityId(), blockToBreak.x,
blockToBreak.y, blockToBreak.z, (int) (blockDamage * 10.0F) - 1); blockToBreak.y, blockToBreak.z, (int) (blockDamage * 10.0F) - 1);
} }
} }