--- ../src_base/common/net/minecraft/src/BlockButton.java +++ ../src_work/common/net/minecraft/src/BlockButton.java @@ -2,6 +2,10 @@ import java.util.List; import java.util.Random; + +import net.minecraftforge.common.ForgeDirection; + +import static net.minecraftforge.common.ForgeDirection.*; public class BlockButton extends Block { @@ -55,7 +59,11 @@ */ public boolean canPlaceBlockOnSide(World par1World, int par2, int par3, int par4, int par5) { - return par5 == 2 && par1World.isBlockNormalCube(par2, par3, par4 + 1) ? true : (par5 == 3 && par1World.isBlockNormalCube(par2, par3, par4 - 1) ? true : (par5 == 4 && par1World.isBlockNormalCube(par2 + 1, par3, par4) ? true : par5 == 5 && par1World.isBlockNormalCube(par2 - 1, par3, par4))); + ForgeDirection dir = ForgeDirection.getOrientation(par5); + return (dir == NORTH && par1World.isBlockSolidOnSide(par2, par3, par4 + 1, NORTH)) || + (dir == SOUTH && par1World.isBlockSolidOnSide(par2, par3, par4 - 1, SOUTH)) || + (dir == WEST && par1World.isBlockSolidOnSide(par2 + 1, par3, par4, WEST)) || + (dir == EAST && par1World.isBlockSolidOnSide(par2 - 1, par3, par4, EAST)); } /** @@ -63,7 +71,10 @@ */ public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) { - return par1World.isBlockNormalCube(par2 - 1, par3, par4) ? true : (par1World.isBlockNormalCube(par2 + 1, par3, par4) ? true : (par1World.isBlockNormalCube(par2, par3, par4 - 1) ? true : par1World.isBlockNormalCube(par2, par3, par4 + 1))); + return (par1World.isBlockSolidOnSide(par2 - 1, par3, par4, EAST)) || + (par1World.isBlockSolidOnSide(par2 + 1, par3, par4, WEST)) || + (par1World.isBlockSolidOnSide(par2, par3, par4 - 1, SOUTH)) || + (par1World.isBlockSolidOnSide(par2, par3, par4 + 1, NORTH)); } /** @@ -74,20 +85,22 @@ int var9 = par1World.getBlockMetadata(par2, par3, par4); int var10 = var9 & 8; var9 &= 7; - - if (par5 == 2 && par1World.isBlockNormalCube(par2, par3, par4 + 1)) + + ForgeDirection dir = ForgeDirection.getOrientation(par5); + + if (dir == NORTH && par1World.isBlockSolidOnSide(par2, par3, par4 + 1, NORTH)) { var9 = 4; } - else if (par5 == 3 && par1World.isBlockNormalCube(par2, par3, par4 - 1)) + else if (dir == SOUTH && par1World.isBlockSolidOnSide(par2, par3, par4 - 1, SOUTH)) { var9 = 3; } - else if (par5 == 4 && par1World.isBlockNormalCube(par2 + 1, par3, par4)) + else if (dir == WEST && par1World.isBlockSolidOnSide(par2 + 1, par3, par4, WEST)) { var9 = 2; } - else if (par5 == 5 && par1World.isBlockNormalCube(par2 - 1, par3, par4)) + else if (dir == EAST && par1World.isBlockSolidOnSide(par2 - 1, par3, par4, EAST)) { var9 = 1; } @@ -104,7 +117,11 @@ */ private int getOrientation(World par1World, int par2, int par3, int par4) { - return par1World.isBlockNormalCube(par2 - 1, par3, par4) ? 1 : (par1World.isBlockNormalCube(par2 + 1, par3, par4) ? 2 : (par1World.isBlockNormalCube(par2, par3, par4 - 1) ? 3 : (par1World.isBlockNormalCube(par2, par3, par4 + 1) ? 4 : 1))); + if (par1World.isBlockSolidOnSide(par2 - 1, par3, par4, EAST)) return 1; + if (par1World.isBlockSolidOnSide(par2 + 1, par3, par4, WEST)) return 2; + if (par1World.isBlockSolidOnSide(par2, par3, par4 - 1, SOUTH)) return 3; + if (par1World.isBlockSolidOnSide(par2, par3, par4 + 1, NORTH)) return 4; + return 1; } /** @@ -118,22 +135,22 @@ int var6 = par1World.getBlockMetadata(par2, par3, par4) & 7; boolean var7 = false; - if (!par1World.isBlockNormalCube(par2 - 1, par3, par4) && var6 == 1) + if (!par1World.isBlockSolidOnSide(par2 - 1, par3, par4, EAST) && var6 == 1) { var7 = true; } - if (!par1World.isBlockNormalCube(par2 + 1, par3, par4) && var6 == 2) + if (!par1World.isBlockSolidOnSide(par2 + 1, par3, par4, WEST) && var6 == 2) { var7 = true; } - if (!par1World.isBlockNormalCube(par2, par3, par4 - 1) && var6 == 3) + if (!par1World.isBlockSolidOnSide(par2, par3, par4 - 1, SOUTH) && var6 == 3) { var7 = true; } - if (!par1World.isBlockNormalCube(par2, par3, par4 + 1) && var6 == 4) + if (!par1World.isBlockSolidOnSide(par2, par3, par4 + 1, NORTH) && var6 == 4) { var7 = true; }