From f7c462ac7e6e40ad3a9fff26cf3460036198cdd3 Mon Sep 17 00:00:00 2001 From: Sollace Date: Wed, 19 Sep 2018 14:39:37 +0200 Subject: [PATCH] Fix some rendering weirdness between slabs and stairs --- .../unicopia/block/BlockCloudSlab.java | 2 +- .../unicopia/block/BlockCloudStairs.java | 42 +++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java index f9e8d935..68d3eee3 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java @@ -128,7 +128,7 @@ public class BlockCloudSlab extends BlockSlab implements ICloudBlock { } if (face == EnumFacing.UP || face == EnumFacing.DOWN) { - return true; + return (state.getValue(HALF) == EnumBlockHalf.TOP) && (face == EnumFacing.UP); } if (beside.getBlock() == this) { diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudStairs.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudStairs.java index 7401a860..bf6de28a 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudStairs.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudStairs.java @@ -8,7 +8,9 @@ import com.minelittlepony.unicopia.CloudType; import net.minecraft.block.Block; import net.minecraft.block.BlockSlab; +import net.minecraft.block.BlockSlab.EnumBlockHalf; import net.minecraft.block.BlockStairs; +import net.minecraft.block.state.BlockFaceShape; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -102,24 +104,50 @@ public class BlockCloudStairs extends BlockStairs implements ICloudBlock { @Override public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) { + state = state.getActualState(world, pos); - IBlockState beside = world.getBlockState(pos.offset(face)); + IBlockState beside = world.getBlockState(pos.offset(face)).getActualState(world, pos); if (beside.getBlock() instanceof ICloudBlock) { ICloudBlock cloud = ((ICloudBlock)beside.getBlock()); - EnumFacing front = state.getValue(FACING); - EnumHalf half = state.getValue(HALF); - if (cloud.getCloudMaterialType(beside) == getCloudMaterialType(state)) { + EnumFacing front = state.getValue(FACING); + EnumHalf half = state.getValue(HALF); + + boolean sideIsBack = state.getBlockFaceShape(world, pos, face) == BlockFaceShape.SOLID; + boolean sideIsFront = state.getBlockFaceShape(world, pos, face.getOpposite()) == BlockFaceShape.SOLID; + boolean sideIsSide = !(sideIsBack || sideIsFront); + if (beside.getBlock() == this) { EnumFacing bfront = beside.getValue(FACING); EnumHalf bhalf = beside.getValue(HALF); - return (bfront == front && front != face && half == bhalf) - || (bfront.getOpposite() == front && front == face); + if (face == EnumFacing.UP || face == EnumFacing.DOWN) { + return half != bhalf + && ( (face == EnumFacing.UP && half == EnumHalf.TOP) + || (face == EnumFacing.DOWN && half == EnumHalf.BOTTOM) + ); + } + + boolean bsideIsBack = beside.getBlockFaceShape(world, pos, face) == BlockFaceShape.SOLID; + boolean bsideIsFront = beside.getBlockFaceShape(world, pos, face.getOpposite()) == BlockFaceShape.SOLID; + boolean bsideIsSide = !(bsideIsBack || bsideIsFront); + + return sideIsBack + || (sideIsSide && bsideIsSide && front == bfront && half == bhalf); } else if (beside.getBlock() instanceof BlockCloudSlab) { - return beside.getValue(BlockSlab.HALF).ordinal() == half.ordinal(); + EnumBlockHalf bhalf = beside.getValue(BlockSlab.HALF); + + if (face == EnumFacing.UP || face == EnumFacing.DOWN) { + return bhalf == EnumBlockHalf.TOP && half == EnumHalf.BOTTOM; + } + + return bhalf == EnumBlockHalf.TOP && half == EnumHalf.BOTTOM; + } else { + if (face == EnumFacing.UP || face == EnumFacing.DOWN) { + return half == EnumHalf.BOTTOM && face == EnumFacing.DOWN; + } } return front == face;