From 05e2a4b4d388a82d441de75b97937ae1d308b86c Mon Sep 17 00:00:00 2001 From: DisasterMoo Date: Mon, 26 Aug 2019 14:34:12 -0300 Subject: [PATCH] Fixed TerraFirmaCraft#332 --- .../blocks/stone/BlockRockVariantConnected.java | 2 +- .../objects/blocks/stone/BlockRockVariantFallable.java | 2 +- .../tfc/objects/entity/EntityFallingBlockTFC.java | 2 +- src/main/java/net/dries007/tfc/util/IFallingBlock.java | 10 ++++++---- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/dries007/tfc/objects/blocks/stone/BlockRockVariantConnected.java b/src/main/java/net/dries007/tfc/objects/blocks/stone/BlockRockVariantConnected.java index be97baad3e..2c4f50358d 100644 --- a/src/main/java/net/dries007/tfc/objects/blocks/stone/BlockRockVariantConnected.java +++ b/src/main/java/net/dries007/tfc/objects/blocks/stone/BlockRockVariantConnected.java @@ -82,7 +82,7 @@ public boolean checkFalling(World worldIn, BlockPos pos, IBlockState state) { worldIn.setBlockToAir(pos); pos1 = pos1.down(); - while (canFallThrough(worldIn.getBlockState(pos1)) && pos1.getY() > 0) + while (canFallThrough(worldIn, pos1) && pos1.getY() > 0) { pos1 = pos1.down(); } diff --git a/src/main/java/net/dries007/tfc/objects/blocks/stone/BlockRockVariantFallable.java b/src/main/java/net/dries007/tfc/objects/blocks/stone/BlockRockVariantFallable.java index db5fe3ad29..466249b509 100644 --- a/src/main/java/net/dries007/tfc/objects/blocks/stone/BlockRockVariantFallable.java +++ b/src/main/java/net/dries007/tfc/objects/blocks/stone/BlockRockVariantFallable.java @@ -98,7 +98,7 @@ public BlockPos getFallablePos(World world, BlockPos pos) // Check if it can fall faces = Arrays.stream(EnumFacing.HORIZONTALS) - .filter(x -> shouldFall(world, pos.offset(x), pos) && canFallThrough(world.getBlockState(pos.offset(x)))) + .filter(x -> shouldFall(world, pos.offset(x), pos) && canFallThrough(world, pos.offset(x))) .toArray(EnumFacing[]::new); if (faces.length >= 1) diff --git a/src/main/java/net/dries007/tfc/objects/entity/EntityFallingBlockTFC.java b/src/main/java/net/dries007/tfc/objects/entity/EntityFallingBlockTFC.java index bce80cd58f..aef62ee4bf 100644 --- a/src/main/java/net/dries007/tfc/objects/entity/EntityFallingBlockTFC.java +++ b/src/main/java/net/dries007/tfc/objects/entity/EntityFallingBlockTFC.java @@ -145,7 +145,7 @@ else if (!world.isRemote) setDead(); //world.mayPlace(block, pos, true, EnumFacing.UP, null) && - if (!falling.canFallThrough(world.getBlockState(pos.down()))) + if (!falling.canFallThrough(world, pos.down())) { world.destroyBlock(pos, true); world.setBlockState(pos, state, 3); diff --git a/src/main/java/net/dries007/tfc/util/IFallingBlock.java b/src/main/java/net/dries007/tfc/util/IFallingBlock.java index 412aaafbf0..29be019a59 100644 --- a/src/main/java/net/dries007/tfc/util/IFallingBlock.java +++ b/src/main/java/net/dries007/tfc/util/IFallingBlock.java @@ -12,6 +12,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -20,15 +21,16 @@ public interface IFallingBlock { - default boolean canFallThrough(IBlockState state) + default boolean canFallThrough(World world, BlockPos pos) { - return state.getMaterial().isReplaceable(); + if (!world.isSideSolid(pos, EnumFacing.UP)) return true; + return world.getBlockState(pos).getMaterial().isReplaceable(); } default boolean shouldFall(World world, BlockPos posToFallAt, BlockPos originalPos) { // Can the block fall at a particular position; ignore horizontal falling - return canFallThrough(world.getBlockState(posToFallAt.down())) && !BlockSupport.isBeingSupported(world, originalPos); + return canFallThrough(world, posToFallAt.down()) && !BlockSupport.isBeingSupported(world, originalPos); } // Get the position that the block will fall from (allows for horizontal falling) @@ -61,7 +63,7 @@ default boolean checkFalling(World worldIn, BlockPos pos, IBlockState state) { worldIn.setBlockToAir(pos); pos1 = pos1.down(); - while (canFallThrough(worldIn.getBlockState(pos1)) && pos1.getY() > 0) + while (canFallThrough(worldIn, pos1) && pos1.getY() > 0) { pos1 = pos1.down(); }