From 35f76fcd180d00ab167da1f9d2c578d80258d4e3 Mon Sep 17 00:00:00 2001 From: Managarmr Date: Wed, 25 Apr 2018 01:42:04 +0100 Subject: [PATCH 1/4] Made cable faces UNDEFINED --- .../java/mcjty/xnet/blocks/generic/GenericCableBlock.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/mcjty/xnet/blocks/generic/GenericCableBlock.java b/src/main/java/mcjty/xnet/blocks/generic/GenericCableBlock.java index 6ce466ec..b83ecfbb 100644 --- a/src/main/java/mcjty/xnet/blocks/generic/GenericCableBlock.java +++ b/src/main/java/mcjty/xnet/blocks/generic/GenericCableBlock.java @@ -25,6 +25,7 @@ import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; @@ -311,6 +312,11 @@ public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAc return false; } + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) { + return BlockFaceShape.UNDEFINED; + } + @Override public boolean isBlockNormalCube(IBlockState blockState) { return false; From 1309dc5c45b1bc0aee331a4bf59868eaff0b7dba Mon Sep 17 00:00:00 2001 From: Managarmr Date: Wed, 25 Apr 2018 02:11:39 +0100 Subject: [PATCH 2/4] Fix collision boxes for cables and facades Also returns getSelectedBoundingBox from mimicked blocks. --- .../xnet/blocks/cables/ConnectorBlock.java | 16 +++++++++++++ .../xnet/blocks/cables/NetCableBlock.java | 14 +++++++++++ .../mcjty/xnet/blocks/facade/FacadeBlock.java | 24 +++++++++++++++---- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/main/java/mcjty/xnet/blocks/cables/ConnectorBlock.java b/src/main/java/mcjty/xnet/blocks/cables/ConnectorBlock.java index 8144b7c0..9e4a2a01 100644 --- a/src/main/java/mcjty/xnet/blocks/cables/ConnectorBlock.java +++ b/src/main/java/mcjty/xnet/blocks/cables/ConnectorBlock.java @@ -30,6 +30,7 @@ import net.minecraft.client.renderer.block.statemap.StateMapperBase; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -41,6 +42,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.IBlockAccess; @@ -448,4 +450,18 @@ public static boolean isAdvancedConnector(World world, BlockPos pos) { public boolean isAdvancedConnector() { return false; } + + @Override + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_CENTER); + + for (EnumFacing facing : EnumFacing.VALUES) { + ConnectorType connectorType = getConnectorType(state.getValue(COLOR), worldIn, pos, facing); + if (connectorType == ConnectorType.CABLE) { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABBS[facing.getIndex()]); + } else if (connectorType == ConnectorType.BLOCK) { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABBS_CONNECTOR[facing.getIndex()]); + } + } + } } diff --git a/src/main/java/mcjty/xnet/blocks/cables/NetCableBlock.java b/src/main/java/mcjty/xnet/blocks/cables/NetCableBlock.java index 36de8446..95274323 100644 --- a/src/main/java/mcjty/xnet/blocks/cables/NetCableBlock.java +++ b/src/main/java/mcjty/xnet/blocks/cables/NetCableBlock.java @@ -9,10 +9,12 @@ import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.StateMapperBase; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -21,6 +23,8 @@ import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; public class NetCableBlock extends GenericCableBlock { @@ -80,4 +84,14 @@ protected ConnectorType getConnectorType(@Nonnull CableColor color, IBlockAccess } } + @Override + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_CENTER); + + for (EnumFacing facing : EnumFacing.VALUES) { + if (getConnectorType(state.getValue(COLOR), worldIn, pos, facing) != ConnectorType.NONE) { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABBS[facing.getIndex()]); + } + } + } } diff --git a/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java b/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java index c2aa9d06..0d81e116 100644 --- a/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java +++ b/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java @@ -12,6 +12,7 @@ import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.StateMapperBase; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; @@ -22,6 +23,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; @@ -35,6 +37,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nullable; +import java.util.List; public class FacadeBlock extends NetCableBlock implements ITileEntityProvider { @@ -116,8 +119,6 @@ public void breakBlock(World world, BlockPos pos, IBlockState state) { originalBreakBlock(world, pos, state); } - - @Override @SideOnly(Side.CLIENT) public void initModel() { @@ -149,6 +150,23 @@ public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAc return mimicBlock == null ? true : mimicBlock.shouldSideBeRendered(blockAccess, pos, side); } + @Override + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) { + IBlockState mimicBlock = getMimicBlock(worldIn, pos); + if (mimicBlock != null) { + mimicBlock.getBlock().addCollisionBoxToList(mimicBlock, worldIn, pos, entityBox, collidingBoxes, entityIn, isActualState); + return; + } + addCollisionBoxToList(pos, entityBox, collidingBoxes, FULL_BLOCK_AABB); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) { + IBlockState mimicBlock = getMimicBlock(worldIn, pos); + return mimicBlock != null ? mimicBlock.getSelectedBoundingBox(worldIn, pos) : FULL_BLOCK_AABB; + } + @Override @SideOnly(Side.CLIENT) public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) { @@ -175,6 +193,4 @@ public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, Blo public boolean isFullCube(IBlockState state) { return true; } - - } From e240dbce2f5461c21dffb78de39e81bc2033b680 Mon Sep 17 00:00:00 2001 From: Managarmr Date: Wed, 25 Apr 2018 02:25:40 +0100 Subject: [PATCH 3/4] Improve facade raytrace --- src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java b/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java index 0d81e116..a60615a2 100644 --- a/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java +++ b/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java @@ -66,6 +66,10 @@ protected void initTileEntity() { @Nullable @Override public RayTraceResult collisionRayTrace(IBlockState blockState, World world, BlockPos pos, Vec3d start, Vec3d end) { + IBlockState mimicBlock = getMimicBlock(world, pos); + if (mimicBlock != null) { + return mimicBlock.getBlock().collisionRayTrace(mimicBlock, world, pos, start, end); + } // We do not want the raytracing that happens in the GenericCableBlock return super.originalCollisionRayTrace(blockState, world, pos, start, end); } From 7d2631ed12b53eb1b55eec1a4cb7db982ffc9c3b Mon Sep 17 00:00:00 2001 From: Managarmr Date: Mon, 30 Apr 2018 01:51:41 +0100 Subject: [PATCH 4/4] Implemented proposed fixes --- .../xnet/blocks/cables/ConnectorBlock.java | 14 +++++++++++++ .../mcjty/xnet/blocks/facade/FacadeBlock.java | 20 ++++--------------- .../blocks/generic/GenericCableBlock.java | 10 +++------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/main/java/mcjty/xnet/blocks/cables/ConnectorBlock.java b/src/main/java/mcjty/xnet/blocks/cables/ConnectorBlock.java index 9e4a2a01..09a8b58c 100644 --- a/src/main/java/mcjty/xnet/blocks/cables/ConnectorBlock.java +++ b/src/main/java/mcjty/xnet/blocks/cables/ConnectorBlock.java @@ -453,6 +453,13 @@ public boolean isAdvancedConnector() { @Override public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) { + IBlockState mimicBlock = getMimicBlock(worldIn, pos); + if (mimicBlock != null) { + mimicBlock = mimicBlock.getActualState(worldIn, pos); + mimicBlock.getBlock().addCollisionBoxToList(mimicBlock, worldIn, pos, entityBox, collidingBoxes, entityIn, true); + return; + } + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_CENTER); for (EnumFacing facing : EnumFacing.VALUES) { @@ -464,4 +471,11 @@ public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos } } } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) { + IBlockState mimicBlock = getMimicBlock(worldIn, pos); + return mimicBlock != null ? mimicBlock.getSelectedBoundingBox(worldIn, pos) : super.getSelectedBoundingBox(state, worldIn, pos); + } } diff --git a/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java b/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java index a60615a2..d5950bcc 100644 --- a/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java +++ b/src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java @@ -25,8 +25,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.model.ModelLoader; @@ -63,17 +61,6 @@ protected void initTileEntity() { GameRegistry.registerTileEntity(FacadeTileEntity.class, XNet.MODID + "_facade"); } - @Nullable - @Override - public RayTraceResult collisionRayTrace(IBlockState blockState, World world, BlockPos pos, Vec3d start, Vec3d end) { - IBlockState mimicBlock = getMimicBlock(world, pos); - if (mimicBlock != null) { - return mimicBlock.getBlock().collisionRayTrace(mimicBlock, world, pos, start, end); - } - // We do not want the raytracing that happens in the GenericCableBlock - return super.originalCollisionRayTrace(blockState, world, pos, start, end); - } - @Override public TileEntity createNewTileEntity(World world, int i) { return null; @@ -158,17 +145,18 @@ public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAc public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) { IBlockState mimicBlock = getMimicBlock(worldIn, pos); if (mimicBlock != null) { - mimicBlock.getBlock().addCollisionBoxToList(mimicBlock, worldIn, pos, entityBox, collidingBoxes, entityIn, isActualState); + mimicBlock = mimicBlock.getActualState(worldIn, pos); + mimicBlock.getBlock().addCollisionBoxToList(mimicBlock, worldIn, pos, entityBox, collidingBoxes, entityIn, true); return; } - addCollisionBoxToList(pos, entityBox, collidingBoxes, FULL_BLOCK_AABB); + super.addCollisionBoxToList(state, worldIn, pos, entityBox, collidingBoxes, entityIn, isActualState); } @Override @SideOnly(Side.CLIENT) public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) { IBlockState mimicBlock = getMimicBlock(worldIn, pos); - return mimicBlock != null ? mimicBlock.getSelectedBoundingBox(worldIn, pos) : FULL_BLOCK_AABB; + return mimicBlock != null ? mimicBlock.getSelectedBoundingBox(worldIn, pos) : super.getSelectedBoundingBox(state, worldIn, pos); } @Override diff --git a/src/main/java/mcjty/xnet/blocks/generic/GenericCableBlock.java b/src/main/java/mcjty/xnet/blocks/generic/GenericCableBlock.java index b83ecfbb..3b65bf54 100644 --- a/src/main/java/mcjty/xnet/blocks/generic/GenericCableBlock.java +++ b/src/main/java/mcjty/xnet/blocks/generic/GenericCableBlock.java @@ -185,9 +185,9 @@ public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, Bl @Nullable @Override public RayTraceResult collisionRayTrace(IBlockState blockState, World world, BlockPos pos, Vec3d start, Vec3d end) { - if (getMimicBlock(world, pos) != null) { - // In mimic mode we use original raytrace mode - return originalCollisionRayTrace(blockState, world, pos, start, end); + IBlockState mimicBlock = getMimicBlock(world, pos); + if (mimicBlock != null) { + return mimicBlock.getBlock().collisionRayTrace(mimicBlock, world, pos, start, end); } Vec3d vec3d = start.subtract(pos.getX(), pos.getY(), pos.getZ()); Vec3d vec3d1 = end.subtract(pos.getX(), pos.getY(), pos.getZ()); @@ -220,10 +220,6 @@ private RayTraceResult checkIntersect(BlockPos pos, Vec3d vec3d, Vec3d vec3d1, A return raytraceresult == null ? null : new RayTraceResult(raytraceresult.hitVec.addVector(pos.getX(), pos.getY(), pos.getZ()), raytraceresult.sideHit, pos); } - protected RayTraceResult originalCollisionRayTrace(IBlockState blockState, World world, BlockPos pos, Vec3d start, Vec3d end) { - return super.collisionRayTrace(blockState, world, pos, start, end); - } - @Override @SideOnly(Side.CLIENT) @Optional.Method(modid = "waila")