Fixed holder of cable blocks sometimes conflicting with a cable connection while rendering

This commit is contained in:
raoulvdberge
2019-11-17 13:11:42 +01:00
parent f330299358
commit a72dccdea4
2 changed files with 17 additions and 0 deletions

View File

@@ -9,6 +9,7 @@
- Fixed Pattern Grid causing world hanging on load (raoulvdberge)
- Fixed External Storage not refreshing when the storage is broken or replaced (raoulvdberge)
- Fixed delay in block update when placing a cable block (raoulvdberge)
- Fixed holder of cable blocks sometimes conflicting with a cable connection while rendering (raoulvdberge)
### 1.7
NOTE: This is an alpha release. Bugs may happen. Remember to take backups.

View File

@@ -18,6 +18,7 @@ import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.shapes.VoxelShapes;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;
import javax.annotation.Nullable;
@@ -93,6 +94,20 @@ public class CableBlock extends NetworkNodeBlock {
return shape;
}
@Override
protected void onDirectionChanged(World world, BlockPos pos, Direction newDirection) {
// rotate() in BaseBlock "stupidly" changes the direction without checking if our cable connections are still valid.
// You'd expect that cable connections are not changing when simply changing the direction.
// But they need to. For example, when rotating a constructor to connect to a neighboring cable, the connection to that neighbor
// needs to be removed as otherwise the "holder" of the constructor will conflict with the cable connection.
// This is already checked in hasNode().
// But since rotate() doesn't invalidate that connection, we need to do it here.
// Ideally, this code would be in rotate(). But rotate() doesn't have any data about the position and world, so we need to do it here.
world.setBlockState(pos, getState(world.getBlockState(pos), world, pos));
super.onDirectionChanged(world, pos, newDirection);
}
@Nullable
@Override
public BlockState getStateForPlacement(BlockItemUseContext ctx) {
@@ -100,6 +115,7 @@ public class CableBlock extends NetworkNodeBlock {
}
private boolean hasNode(IWorld world, BlockPos pos, BlockState state, Direction direction) {
// Prevent the "holder" of a cable block conflicting with a cable connection.
if (getDirection() != BlockDirection.NONE && state.get(getDirection().getProperty()).getOpposite() == direction) {
return false;
}