Merge pull request #2558 from Kubuxu/robots-fix1
Potential fix for block breaking robots hanging up on air blocks.
This commit is contained in:
commit
591b7e9908
1 changed files with 16 additions and 11 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue