diff --git a/src/main/scala/li/cil/oc/common/block/Delegate.scala b/src/main/scala/li/cil/oc/common/block/Delegate.scala index 3f4899259..f31d973cd 100644 --- a/src/main/scala/li/cil/oc/common/block/Delegate.scala +++ b/src/main/scala/li/cil/oc/common/block/Delegate.scala @@ -50,6 +50,8 @@ trait Delegate { def explosionResistance(entity: Entity): Float = parent.getExplosionResistance(entity) + def isAir(world: World, x: Int, y: Int, z: Int) = false + def isNormalCube(world: World, x: Int, y: Int, z: Int) = true def validRotations(world: World, x: Int, y: Int, z: Int) = validRotations_ diff --git a/src/main/scala/li/cil/oc/common/block/Delegator.scala b/src/main/scala/li/cil/oc/common/block/Delegator.scala index 5a2d3971d..bf96b59d4 100644 --- a/src/main/scala/li/cil/oc/common/block/Delegator.scala +++ b/src/main/scala/li/cil/oc/common/block/Delegator.scala @@ -146,6 +146,12 @@ class Delegator[Child <: Delegate](id: Int) extends Block(id, Material.iron) { case _ => super.getExplosionResistance(entity, world, x, y, z, explosionX, explosionY, explosionZ) } + override def isAirBlock(world: World, x: Int, y: Int, z: Int) = + subBlock(world, x, y, z) match { + case Some(subBlock) => subBlock.isAir(world, x, y, z) + case _ => super.isAirBlock(world, x, y, z) + } + override def isBlockNormalCube(world: World, x: Int, y: Int, z: Int) = subBlock(world.getBlockMetadata(x, y, z)) match { case Some(subBlock) => subBlock.isNormalCube(world, x, y, z) diff --git a/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala b/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala index 3aa35897d..d955f7595 100644 --- a/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala +++ b/src/main/scala/li/cil/oc/common/block/RobotAfterimage.scala @@ -39,6 +39,8 @@ class RobotAfterimage(val parent: SpecialDelegator) extends SpecialDelegate { override def opacity(world: World, x: Int, y: Int, z: Int) = 0 + override def isAir(world: World, x: Int, y: Int, z: Int) = true + override def isNormalCube(world: World, x: Int, y: Int, z: Int) = false override def isSolid(world: IBlockAccess, x: Int, y: Int, z: Int, side: ForgeDirection) = false diff --git a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala index 455e036a5..18f635721 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala @@ -171,7 +171,7 @@ class Robot extends traits.Computer with traits.PowerInformation with api.machin // If we broke some replaceable block (like grass) play its break sound. if (blockId > 0) { val block = Block.blocksList(blockId) - if (block != null) { + if (block != null && !Delegator.subBlock(block, metadata).exists(_ == Blocks.robotAfterimage)) { if (FluidRegistry.lookupFluidForBlock(block) == null && !block.isInstanceOf[BlockFluidBase] && !block.isInstanceOf[BlockFlowing]) {