diff --git a/patches/minecraft/net/minecraft/block/Block.java.patch b/patches/minecraft/net/minecraft/block/Block.java.patch index 5b633640a..ff082d2ff 100644 --- a/patches/minecraft/net/minecraft/block/Block.java.patch +++ b/patches/minecraft/net/minecraft/block/Block.java.patch @@ -197,7 +197,7 @@ public SoundType func_185467_w() { return this.field_149762_H; -@@ -908,6 +932,1153 @@ +@@ -908,6 +932,1166 @@ { } @@ -1346,12 +1346,25 @@ + return func_180642_a(world, pos, facing, hitX, hitY, hitZ, meta, placer); + } + ++ /** ++ * Determines if another block can connect to this block ++ * ++ * @param world The current world ++ * @param pos The position of this block ++ * @param facing The side the connecting block is on ++ * @return True to allow another block to connect to this block ++ */ ++ public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) ++ { ++ return false; ++ } ++ + /* ========================================= FORGE END ======================================*/ + public static void func_149671_p() { func_176215_a(0, field_176230_a, (new BlockAir()).func_149663_c("air")); -@@ -1201,14 +2372,7 @@ +@@ -1201,14 +2385,7 @@ } else { diff --git a/patches/minecraft/net/minecraft/block/BlockFence.java.patch b/patches/minecraft/net/minecraft/block/BlockFence.java.patch new file mode 100644 index 000000000..df72c6603 --- /dev/null +++ b/patches/minecraft/net/minecraft/block/BlockFence.java.patch @@ -0,0 +1,49 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockFence.java ++++ ../src-work/minecraft/net/minecraft/block/BlockFence.java +@@ -153,7 +153,10 @@ + + public IBlockState func_176221_a(IBlockState p_176221_1_, IBlockAccess p_176221_2_, BlockPos p_176221_3_) + { +- return p_176221_1_.func_177226_a(field_176526_a, Boolean.valueOf(this.func_176524_e(p_176221_2_, p_176221_3_.func_177978_c()))).func_177226_a(field_176525_b, Boolean.valueOf(this.func_176524_e(p_176221_2_, p_176221_3_.func_177974_f()))).func_177226_a(field_176527_M, Boolean.valueOf(this.func_176524_e(p_176221_2_, p_176221_3_.func_177968_d()))).func_177226_a(field_176528_N, Boolean.valueOf(this.func_176524_e(p_176221_2_, p_176221_3_.func_177976_e()))); ++ return p_176221_1_.func_177226_a(field_176526_a, canFenceConnectTo(p_176221_2_, p_176221_3_, EnumFacing.NORTH)) ++ .func_177226_a(field_176525_b, canFenceConnectTo(p_176221_2_, p_176221_3_, EnumFacing.EAST)) ++ .func_177226_a(field_176527_M, canFenceConnectTo(p_176221_2_, p_176221_3_, EnumFacing.SOUTH)) ++ .func_177226_a(field_176528_N, canFenceConnectTo(p_176221_2_, p_176221_3_, EnumFacing.WEST)); + } + + public IBlockState func_185499_a(IBlockState p_185499_1_, Rotation p_185499_2_) +@@ -188,4 +191,34 @@ + { + return new BlockStateContainer(this, new IProperty[] {field_176526_a, field_176525_b, field_176528_N, field_176527_M}); + } ++ ++ /* ======================================== FORGE START ======================================== */ ++ ++ @Override ++ public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) ++ { ++ Block connector = world.func_180495_p(pos.func_177972_a(facing)).func_177230_c(); ++ ++ if(connector instanceof BlockFence) ++ { ++ if(this != Blocks.field_150386_bk && connector == Blocks.field_150386_bk) ++ { ++ return false; ++ } ++ else if(this == Blocks.field_150386_bk && connector != Blocks.field_150386_bk) ++ { ++ return false; ++ } ++ return true; ++ } ++ return false; ++ } ++ ++ private boolean canFenceConnectTo(IBlockAccess world, BlockPos pos, EnumFacing facing) ++ { ++ Block block = world.func_180495_p(pos.func_177972_a(facing)).func_177230_c(); ++ return block.canBeConnectedTo(world, pos.func_177972_a(facing), facing.func_176734_d()) || func_176524_e(world, pos.func_177972_a(facing)); ++ } ++ ++ /* ======================================== FORGE END ======================================== */ + } diff --git a/patches/minecraft/net/minecraft/block/BlockFenceGate.java.patch b/patches/minecraft/net/minecraft/block/BlockFenceGate.java.patch new file mode 100644 index 000000000..2762bbade --- /dev/null +++ b/patches/minecraft/net/minecraft/block/BlockFenceGate.java.patch @@ -0,0 +1,33 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockFenceGate.java ++++ ../src-work/minecraft/net/minecraft/block/BlockFenceGate.java +@@ -50,7 +50,7 @@ + { + EnumFacing.Axis enumfacing$axis = ((EnumFacing)p_176221_1_.func_177229_b(field_185512_D)).func_176740_k(); + +- if (enumfacing$axis == EnumFacing.Axis.Z && (p_176221_2_.func_180495_p(p_176221_3_.func_177976_e()).func_177230_c() == Blocks.field_150463_bK || p_176221_2_.func_180495_p(p_176221_3_.func_177974_f()).func_177230_c() == Blocks.field_150463_bK) || enumfacing$axis == EnumFacing.Axis.X && (p_176221_2_.func_180495_p(p_176221_3_.func_177978_c()).func_177230_c() == Blocks.field_150463_bK || p_176221_2_.func_180495_p(p_176221_3_.func_177968_d()).func_177230_c() == Blocks.field_150463_bK)) ++ if (enumfacing$axis == EnumFacing.Axis.Z && (canFenceGateConnectTo(p_176221_2_, p_176221_3_, EnumFacing.WEST) || canFenceGateConnectTo(p_176221_2_, p_176221_3_, EnumFacing.EAST)) || enumfacing$axis == EnumFacing.Axis.X && (canFenceGateConnectTo(p_176221_2_, p_176221_3_, EnumFacing.NORTH) || canFenceGateConnectTo(p_176221_2_, p_176221_3_, EnumFacing.SOUTH))) + { + p_176221_1_ = p_176221_1_.func_177226_a(field_176467_M, Boolean.valueOf(true)); + } +@@ -175,4 +175,21 @@ + { + return new BlockStateContainer(this, new IProperty[] {field_185512_D, field_176466_a, field_176465_b, field_176467_M}); + } ++ ++ /* ======================================== FORGE START ======================================== */ ++ ++ @Override ++ public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) ++ { ++ Block connector = world.func_180495_p(pos.func_177972_a(facing)).func_177230_c(); ++ return connector instanceof BlockFence || connector instanceof BlockWall; ++ } ++ ++ private boolean canFenceGateConnectTo(IBlockAccess world, BlockPos pos, EnumFacing facing) ++ { ++ Block block = world.func_180495_p(pos.func_177972_a(facing)).func_177230_c(); ++ return block.canBeConnectedTo(world, pos.func_177972_a(facing), facing.func_176734_d()); ++ } ++ ++ /* ======================================== FORGE END ======================================== */ + } diff --git a/patches/minecraft/net/minecraft/block/BlockPane.java.patch b/patches/minecraft/net/minecraft/block/BlockPane.java.patch index c463646b2..e2c968e05 100644 --- a/patches/minecraft/net/minecraft/block/BlockPane.java.patch +++ b/patches/minecraft/net/minecraft/block/BlockPane.java.patch @@ -12,15 +12,25 @@ } public Item func_180660_a(IBlockState p_180660_1_, Random p_180660_2_, int p_180660_3_) -@@ -184,4 +187,11 @@ +@@ -184,4 +187,21 @@ { return new BlockStateContainer(this, new IProperty[] {field_176241_b, field_176242_M, field_176244_O, field_176243_N}); } + ++ /* ======================================== FORGE START ======================================== */ ++ ++ @Override ++ public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) ++ { ++ Block connector = world.func_180495_p(pos.func_177972_a(facing)).func_177230_c(); ++ return connector instanceof BlockPane; ++ } ++ + public boolean canPaneConnectTo(IBlockAccess world, BlockPos pos, EnumFacing dir) + { -+ BlockPos off = pos.func_177972_a(dir); -+ IBlockState state = world.func_180495_p(off); -+ return func_150098_a(state.func_177230_c()) || state.isSideSolid(world, off, dir.func_176734_d()); ++ IBlockState state = world.func_180495_p(pos.func_177972_a(dir)); ++ return state.func_177230_c().canBeConnectedTo(world, pos.func_177972_a(dir), dir.func_176734_d()) || func_150098_a(state.func_177230_c()) || state.isSideSolid(world, pos.func_177972_a(dir), dir.func_176734_d()); + } ++ ++ /* ======================================== FORGE END ======================================== */ } diff --git a/patches/minecraft/net/minecraft/block/BlockWall.java.patch b/patches/minecraft/net/minecraft/block/BlockWall.java.patch new file mode 100644 index 000000000..feee89e9a --- /dev/null +++ b/patches/minecraft/net/minecraft/block/BlockWall.java.patch @@ -0,0 +1,41 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockWall.java ++++ ../src-work/minecraft/net/minecraft/block/BlockWall.java +@@ -141,10 +141,10 @@ + + public IBlockState func_176221_a(IBlockState p_176221_1_, IBlockAccess p_176221_2_, BlockPos p_176221_3_) + { +- boolean flag = this.func_176253_e(p_176221_2_, p_176221_3_.func_177978_c()); +- boolean flag1 = this.func_176253_e(p_176221_2_, p_176221_3_.func_177974_f()); +- boolean flag2 = this.func_176253_e(p_176221_2_, p_176221_3_.func_177968_d()); +- boolean flag3 = this.func_176253_e(p_176221_2_, p_176221_3_.func_177976_e()); ++ boolean flag = canWallConnectTo(p_176221_2_, p_176221_3_, EnumFacing.NORTH); ++ boolean flag1 = canWallConnectTo(p_176221_2_, p_176221_3_, EnumFacing.EAST); ++ boolean flag2 = canWallConnectTo(p_176221_2_, p_176221_3_, EnumFacing.SOUTH); ++ boolean flag3 = canWallConnectTo(p_176221_2_, p_176221_3_, EnumFacing.WEST); + boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3; + return p_176221_1_.func_177226_a(field_176256_a, Boolean.valueOf(!flag4 || !p_176221_2_.func_175623_d(p_176221_3_.func_177984_a()))).func_177226_a(field_176254_b, Boolean.valueOf(flag)).func_177226_a(field_176257_M, Boolean.valueOf(flag1)).func_177226_a(field_176258_N, Boolean.valueOf(flag2)).func_177226_a(field_176259_O, Boolean.valueOf(flag3)); + } +@@ -154,6 +154,23 @@ + return new BlockStateContainer(this, new IProperty[] {field_176256_a, field_176254_b, field_176257_M, field_176259_O, field_176258_N, field_176255_P}); + } + ++ /* ======================================== FORGE START ======================================== */ ++ ++ @Override ++ public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) ++ { ++ Block connector = world.func_180495_p(pos.func_177972_a(facing)).func_177230_c(); ++ return connector instanceof BlockWall || connector instanceof BlockFenceGate; ++ } ++ ++ private boolean canWallConnectTo(IBlockAccess world, BlockPos pos, EnumFacing facing) ++ { ++ Block block = world.func_180495_p(pos.func_177972_a(facing)).func_177230_c(); ++ return block.canBeConnectedTo(world, pos.func_177972_a(facing), facing.func_176734_d()) || func_176253_e(world, pos.func_177972_a(facing)); ++ } ++ ++ /* ======================================== FORGE END ======================================== */ ++ + public static enum EnumType implements IStringSerializable + { + NORMAL(0, "cobblestone", "normal"),