From 3b523d57a9ceef4684442b45a787a4441df612ed Mon Sep 17 00:00:00 2001 From: LexManos Date: Sun, 3 Jun 2012 00:32:37 -0700 Subject: [PATCH] New Hooks addedf for custom tree/leaves. And better interaction with trees growing and rerplacing certain blocks. Should allow for ExtraBiomes to behave nicer, and RedPower to make there blocks un-breakable by trees. --- .../net/minecraft/src/Block.java.patch | 81 +++++++++++++++++- .../net/minecraft/src/BlockLeaves.java.patch | 47 ++++++++++- .../net/minecraft/src/BlockLog.java.patch | 36 ++++++++ .../net/minecraft/src/BlockSnow.java.patch | 18 +++- .../net/minecraft/src/EntityOcelot.java.patch | 12 +++ .../src/WorldGenBigMushroom.java.patch | 35 ++++++++ .../minecraft/src/WorldGenDeadBush.java.patch | 22 +++++ .../minecraft/src/WorldGenForest.java.patch | 36 ++++++++ .../src/WorldGenHugeTrees.java.patch | 66 +++++++++++++++ .../minecraft/src/WorldGenMinable.java.patch | 12 +++ .../minecraft/src/WorldGenShrub.java.patch | 33 ++++++++ .../minecraft/src/WorldGenSwamp.java.patch | 44 ++++++++++ .../minecraft/src/WorldGenTaiga1.java.patch | 36 ++++++++ .../minecraft/src/WorldGenTaiga2.java.patch | 35 ++++++++ .../src/WorldGenTallGrass.java.patch | 22 +++++ .../minecraft/src/WorldGenTrees.java.patch | 50 +++++++++++ .../net/minecraft/src/Block.java.patch | 82 ++++++++++++++++++- .../net/minecraft/src/BlockLeaves.java.patch | 46 ++++++++++- .../net/minecraft/src/BlockLog.java.patch | 36 ++++++++ .../net/minecraft/src/BlockSnow.java.patch | 18 +++- .../net/minecraft/src/EntityOcelot.java.patch | 12 +++ .../src/WorldGenBigMushroom.java.patch | 35 ++++++++ .../minecraft/src/WorldGenDeadBush.java.patch | 22 +++++ .../minecraft/src/WorldGenForest.java.patch | 36 ++++++++ .../src/WorldGenHugeTrees.java.patch | 66 +++++++++++++++ .../minecraft/src/WorldGenMinable.java.patch | 12 +++ .../minecraft/src/WorldGenShrub.java.patch | 33 ++++++++ .../minecraft/src/WorldGenSwamp.java.patch | 44 ++++++++++ .../minecraft/src/WorldGenTaiga1.java.patch | 36 ++++++++ .../minecraft/src/WorldGenTaiga2.java.patch | 35 ++++++++ .../src/WorldGenTallGrass.java.patch | 22 +++++ .../minecraft/src/WorldGenTrees.java.patch | 50 +++++++++++ 32 files changed, 1156 insertions(+), 14 deletions(-) create mode 100644 forge/patches/minecraft/net/minecraft/src/BlockLog.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/EntityOcelot.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenBigMushroom.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenDeadBush.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenForest.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenHugeTrees.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenMinable.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenShrub.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenSwamp.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenTaiga1.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenTaiga2.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenTallGrass.java.patch create mode 100644 forge/patches/minecraft/net/minecraft/src/WorldGenTrees.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/BlockLog.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/EntityOcelot.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenBigMushroom.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenDeadBush.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenForest.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenHugeTrees.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenMinable.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenShrub.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenSwamp.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenTaiga1.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenTaiga2.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenTallGrass.java.patch create mode 100644 forge/patches/minecraft_server/net/minecraft/src/WorldGenTrees.java.patch diff --git a/forge/patches/minecraft/net/minecraft/src/Block.java.patch b/forge/patches/minecraft/net/minecraft/src/Block.java.patch index bd3e72454..6d9ae659b 100644 --- a/forge/patches/minecraft/net/minecraft/src/Block.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/Block.java.patch @@ -80,7 +80,7 @@ { ItemStack var8 = this.createStackedBlock(par6); -@@ -1058,6 +1058,512 @@ +@@ -1058,6 +1058,591 @@ */ public void onFallenUpon(World par1World, int par2, int par3, int par4, Entity par5Entity, float par6) {} @@ -589,6 +589,85 @@ + { + return BlockBed.isBlockFootOfBed(world.getBlockMetadata(x, y, z)); + } ++ ++ /** ++ * Called when a leaf should start its decay process. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ */ ++ public void beginLeavesDecay(World world, int x, int y, int z){} ++ ++ /** ++ * Determines if this block can prevent leaves connected to it from decaying. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return true if the presence this block can prevent leaves from decaying. ++ */ ++ public boolean canSustainLeaves(World world, int x, int y, int z) ++ { ++ return false; ++ } ++ ++ /** ++ * Determines if this block is considered a leaf block, used to apply the leaf decay and generation system. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return true if this block is considered leaves. ++ */ ++ public boolean isLeaves(World world, int x, int y, int z) ++ { ++ return false; ++ } ++ ++ /** ++ * Used during tree growth to determine if newly generated leaves can replace this block. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return true if this block can be replaced by growing leaves. ++ */ ++ public boolean canBeReplacedByLeaves(World world, int x, int y, int z) ++ { ++ return !Block.opaqueCubeLookup[this.blockID]; ++ } ++ ++ /** ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return true if the block is wood (logs) ++ */ ++ public boolean isWood(World world, int x, int y, int z) ++ { ++ return false; ++ } ++ ++ /** ++ * Determines if the current block is replaceable by Ore veins during world generation. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return True to allow this block to be replaced by a ore ++ */ ++ public boolean isGenMineableReplaceable(World world, int x, int y, int z) ++ { ++ return blockID == stone.blockID; ++ } + static { diff --git a/forge/patches/minecraft/net/minecraft/src/BlockLeaves.java.patch b/forge/patches/minecraft/net/minecraft/src/BlockLeaves.java.patch index c5245a5d8..8ce3640ee 100644 --- a/forge/patches/minecraft/net/minecraft/src/BlockLeaves.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/BlockLeaves.java.patch @@ -13,7 +13,38 @@ { /** * The base index in terrain.png corresponding to the fancy version of the leaf texture. This is stored so we can -@@ -268,15 +271,7 @@ +@@ -88,10 +91,9 @@ + { + int var10 = par1World.getBlockId(par2 + var7, par3 + var8, par4 + var9); + +- if (var10 == Block.leaves.blockID) ++ if (Block.blocksList[var10] != null) + { +- int var11 = par1World.getBlockMetadata(par2 + var7, par3 + var8, par4 + var9); +- par1World.setBlockMetadata(par2 + var7, par3 + var8, par4 + var9, var11 | 8); ++ Block.blocksList[var10].beginLeavesDecay(par1World, par2 + var7, par3 + var8, par4 + var9); + } + } + } +@@ -136,12 +138,14 @@ + for (var14 = -var7; var14 <= var7; ++var14) + { + var15 = par1World.getBlockId(par2 + var12, par3 + var13, par4 + var14); +- +- if (var15 == Block.wood.blockID) ++ ++ Block block = Block.blocksList[var15]; ++ ++ if (block != null && block.canSustainLeaves(par1World, par2 + var12, par3 + var13, par4 + var14)) + { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = 0; + } +- else if (var15 == Block.leaves.blockID) ++ else if (block != null && block.isLeaves(par1World, par2 + var12, par3 + var13, par4 + var14)) + { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -2; + } +@@ -268,15 +272,7 @@ */ public void harvestBlock(World par1World, EntityPlayer par2EntityPlayer, int par3, int par4, int par5, int par6) { @@ -30,7 +61,7 @@ } /** -@@ -320,4 +315,18 @@ +@@ -320,4 +316,30 @@ { super.onEntityWalking(par1World, par2, par3, par4, par5Entity); } @@ -47,5 +78,17 @@ + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this, 1, world.getBlockMetadata(x, y, z) & 3)); + return ret; ++ } ++ ++ @Override ++ public void beginLeavesDecay(World world, int x, int y, int z) ++ { ++ world.setBlockMetadata(x, y, z, world.getBlockMetadata(x, y, z) | 8); ++ } ++ ++ @Override ++ public boolean isLeaves(World world, int x, int y, int z) ++ { ++ return true; + } } diff --git a/forge/patches/minecraft/net/minecraft/src/BlockLog.java.patch b/forge/patches/minecraft/net/minecraft/src/BlockLog.java.patch new file mode 100644 index 000000000..cadd98aed --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/BlockLog.java.patch @@ -0,0 +1,36 @@ +--- ../src_base/minecraft/net/minecraft/src/BlockLog.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/BlockLog.java 0000-00-00 00:00:00.000000000 -0000 +@@ -53,14 +53,9 @@ + { + int var10 = par1World.getBlockId(par2 + var7, par3 + var8, par4 + var9); + +- if (var10 == Block.leaves.blockID) ++ if (Block.blocksList[var10] != null) + { +- int var11 = par1World.getBlockMetadata(par2 + var7, par3 + var8, par4 + var9); +- +- if ((var11 & 8) == 0) +- { +- par1World.setBlockMetadata(par2 + var7, par3 + var8, par4 + var9, var11 | 8); +- } ++ Block.blocksList[var10].beginLeavesDecay(par1World, par2 + var7, par3 + var8, par4 + var9); + } + } + } +@@ -83,4 +78,16 @@ + { + return par1; + } ++ ++ @Override ++ public boolean canSustainLeaves(World world, int x, int y, int z) ++ { ++ return true; ++ } ++ ++ @Override ++ public boolean isWood(World world, int x, int y, int z) ++ { ++ return true; ++ } + } diff --git a/forge/patches/minecraft/net/minecraft/src/BlockSnow.java.patch b/forge/patches/minecraft/net/minecraft/src/BlockSnow.java.patch index 2e0ddeda2..81e312848 100644 --- a/forge/patches/minecraft/net/minecraft/src/BlockSnow.java.patch +++ b/forge/patches/minecraft/net/minecraft/src/BlockSnow.java.patch @@ -1,6 +1,16 @@ --- ../src_base/minecraft/net/minecraft/src/BlockSnow.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft/net/minecraft/src/BlockSnow.java 0000-00-00 00:00:00.000000000 -0000 -@@ -73,7 +73,6 @@ +@@ -54,7 +54,8 @@ + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3 - 1, par4); +- return var5 != 0 && (var5 == Block.leaves.blockID || Block.blocksList[var5].isOpaqueCube()) ? par1World.getBlockMaterial(par2, par3 - 1, par4).blocksMovement() : false; ++ Block block = Block.blocksList[var5]; ++ return block != null && (block.isLeaves(par1World, par2, par3 - 1, par4) || Block.blocksList[var5].isOpaqueCube()) ? par1World.getBlockMaterial(par2, par3 - 1, par4).blocksMovement() : false; + } + + /** +@@ -73,7 +74,6 @@ { if (!this.canPlaceBlockAt(par1World, par2, par3, par4)) { @@ -8,7 +18,7 @@ par1World.setBlockWithNotify(par2, par3, par4, 0); return false; } -@@ -89,15 +88,7 @@ +@@ -89,15 +89,7 @@ */ public void harvestBlock(World par1World, EntityPlayer par2EntityPlayer, int par3, int par4, int par5, int par6) { @@ -25,7 +35,7 @@ par2EntityPlayer.addStat(StatList.mineBlockStatArray[this.blockID], 1); } -@@ -114,7 +105,7 @@ +@@ -114,7 +106,7 @@ */ public int quantityDropped(Random par1Random) { @@ -34,7 +44,7 @@ } /** -@@ -124,7 +115,6 @@ +@@ -124,7 +116,6 @@ { if (par1World.getSavedLightValue(EnumSkyBlock.Block, par2, par3, par4) > 11) { diff --git a/forge/patches/minecraft/net/minecraft/src/EntityOcelot.java.patch b/forge/patches/minecraft/net/minecraft/src/EntityOcelot.java.patch new file mode 100644 index 000000000..cf3c914b1 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/EntityOcelot.java.patch @@ -0,0 +1,12 @@ +--- ../src_base/minecraft/net/minecraft/src/EntityOcelot.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/EntityOcelot.java 0000-00-00 00:00:00.000000000 -0000 +@@ -318,7 +318,8 @@ + + int var4 = this.worldObj.getBlockId(var1, var2 - 1, var3); + +- if (var4 == Block.grass.blockID || var4 == Block.leaves.blockID) ++ Block block = Block.blocksList[var4]; ++ if (var4 == Block.grass.blockID || (block != null && block.isLeaves(worldObj, var1, var2 - 1, var3))) + { + return true; + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenBigMushroom.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenBigMushroom.java.patch new file mode 100644 index 000000000..28c80fc4b --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenBigMushroom.java.patch @@ -0,0 +1,35 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenBigMushroom.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenBigMushroom.java 0000-00-00 00:00:00.000000000 -0000 +@@ -54,7 +54,9 @@ + { + var13 = par1World.getBlockId(var11, var9, var12); + +- if (var13 != 0 && var13 != Block.leaves.blockID) ++ Block block = Block.blocksList[var13]; ++ ++ if (var13 != 0 && block != null && !block.isLeaves(par1World, var11, var9, var12)) + { + var8 = false; + } +@@ -186,7 +188,9 @@ + var15 = 0; + } + +- if ((var15 != 0 || par4 >= par4 + var7 - 1) && !Block.opaqueCubeLookup[par1World.getBlockId(var13, var11, var14)]) ++ Block block = Block.blocksList[par1World.getBlockId(var13, var11, var14)]; ++ ++ if ((var15 != 0 || par4 >= par4 + var7 - 1) && (block != null && block.canBeReplacedByLeaves(par1World, var13, var11, var14))) + { + this.setBlockAndMetadata(par1World, var13, var11, var14, Block.mushroomCapBrown.blockID + var6, var15); + } +@@ -198,7 +202,9 @@ + { + var12 = par1World.getBlockId(par3, par4 + var11, par5); + +- if (!Block.opaqueCubeLookup[var12]) ++ Block block = Block.blocksList[var12]; ++ ++ if (block != null && block.canBeReplacedByLeaves(par1World, par3, par4 + var11, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, Block.mushroomCapBrown.blockID + var6, 10); + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenDeadBush.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenDeadBush.java.patch new file mode 100644 index 000000000..728e5ab5f --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenDeadBush.java.patch @@ -0,0 +1,22 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenDeadBush.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenDeadBush.java 0000-00-00 00:00:00.000000000 -0000 +@@ -16,10 +16,16 @@ + { + int var11; + +- for (boolean var6 = false; ((var11 = par1World.getBlockId(par3, par4, par5)) == 0 || var11 == Block.leaves.blockID) && par4 > 0; --par4) ++ Block block = null; ++ do + { +- ; +- } ++ block = Block.blocksList[par1World.getBlockId(par3, par4, par5)]; ++ if (block != null && !block.isLeaves(par1World, par3, par4, par5)) ++ { ++ break; ++ } ++ par4--; ++ } while (par4 > 0); + + for (int var7 = 0; var7 < 4; ++var7) + { diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenForest.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenForest.java.patch new file mode 100644 index 000000000..af4cb6b61 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenForest.java.patch @@ -0,0 +1,36 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenForest.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenForest.java 0000-00-00 00:00:00.000000000 -0000 +@@ -43,7 +43,9 @@ + { + var12 = par1World.getBlockId(var10, var8, var11); + +- if (var12 != 0 && var12 != Block.leaves.blockID) ++ Block block = Block.blocksList[var12]; ++ ++ if (var12 != 0 && (block != null && block.isLeaves(par1World, var10, var8, var11))) + { + var7 = false; + } +@@ -82,7 +84,10 @@ + { + int var15 = var14 - par5; + +- if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var12, var16, var14)]) ++ Block block = Block.blocksList[par1World.getBlockId(var12, var16, var14)]; ++ ++ if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && ++ (block != null && block.canBeReplacedByLeaves(par1World, var12, var16, var14))) + { + this.setBlockAndMetadata(par1World, var12, var16, var14, Block.leaves.blockID, 2); + } +@@ -94,7 +99,9 @@ + { + var10 = par1World.getBlockId(par3, par4 + var16, par5); + +- if (var10 == 0 || var10 == Block.leaves.blockID) ++ Block block = Block.blocksList[var10]; ++ ++ if (var10 == 0 || (block != null && block.isLeaves(par1World, par3, par4 + var16, par5))) + { + this.setBlockAndMetadata(par1World, par3, par4 + var16, par5, Block.wood.blockID, 2); + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenHugeTrees.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenHugeTrees.java.patch new file mode 100644 index 000000000..5630a49ec --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenHugeTrees.java.patch @@ -0,0 +1,66 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenHugeTrees.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenHugeTrees.java 0000-00-00 00:00:00.000000000 -0000 +@@ -54,7 +54,12 @@ + { + var12 = par1World.getBlockId(var10, var8, var11); + +- if (var12 != 0 && var12 != Block.leaves.blockID && var12 != Block.grass.blockID && var12 != Block.dirt.blockID && var12 != Block.wood.blockID && var12 != Block.sapling.blockID) ++ if (var12 != 0 && ++ (Block.blocksList[var12] != null && !Block.blocksList[var12].isLeaves(par1World, var10, var8, var11)) && ++ var12 != Block.grass.blockID && ++ var12 != Block.dirt.blockID && ++ (Block.blocksList[var12] != null && !Block.blocksList[var12].isWood(par1World, var10, var8, var11)) && ++ var12 != Block.sapling.blockID) + { + var7 = false; + } +@@ -102,7 +107,7 @@ + { + var11 = par1World.getBlockId(par3, par4 + var10, par5); + +- if (var11 == 0 || var11 == Block.leaves.blockID) ++ if (var11 == 0 || Block.blocksList[var11] == null || Block.blocksList[var11].isLeaves(par1World, par3, par4 + var10, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var10, par5, Block.wood.blockID, this.woodMetadata); + +@@ -124,7 +129,7 @@ + { + var11 = par1World.getBlockId(par3 + 1, par4 + var10, par5); + +- if (var11 == 0 || var11 == Block.leaves.blockID) ++ if (var11 == 0 || Block.blocksList[var11] == null || Block.blocksList[var11].isLeaves(par1World, par3 + 1, par4 + var10, par5)) + { + this.setBlockAndMetadata(par1World, par3 + 1, par4 + var10, par5, Block.wood.blockID, this.woodMetadata); + +@@ -144,7 +149,7 @@ + + var11 = par1World.getBlockId(par3 + 1, par4 + var10, par5 + 1); + +- if (var11 == 0 || var11 == Block.leaves.blockID) ++ if (var11 == 0 || Block.blocksList[var11] == null || Block.blocksList[var11].isLeaves(par1World, par3 + 1, par4 + var10, par5 + 1)) + { + this.setBlockAndMetadata(par1World, par3 + 1, par4 + var10, par5 + 1, Block.wood.blockID, this.woodMetadata); + +@@ -164,7 +169,7 @@ + + var11 = par1World.getBlockId(par3, par4 + var10, par5 + 1); + +- if (var11 == 0 || var11 == Block.leaves.blockID) ++ if (var11 == 0 || Block.blocksList[var11] == null || Block.blocksList[var11].isLeaves(par1World, par3, par4 + var10, par5 + 1)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var10, par5 + 1, Block.wood.blockID, this.woodMetadata); + +@@ -215,7 +220,12 @@ + { + int var14 = var13 - par3; + +- if ((var12 >= 0 || var14 >= 0 || var12 * var12 + var14 * var14 <= var10 * var10) && (var12 <= 0 && var14 <= 0 || var12 * var12 + var14 * var14 <= (var10 + 1) * (var10 + 1)) && (par6Random.nextInt(4) != 0 || var12 * var12 + var14 * var14 <= (var10 - 1) * (var10 - 1)) && !Block.opaqueCubeLookup[par1World.getBlockId(var11, var8, var13)]) ++ Block block = Block.blocksList[par1World.getBlockId(var11, var8, var13)]; ++ ++ if ((var12 >= 0 || var14 >= 0 || var12 * var12 + var14 * var14 <= var10 * var10) && ++ (var12 <= 0 && var14 <= 0 || var12 * var12 + var14 * var14 <= (var10 + 1) * (var10 + 1)) && ++ (par6Random.nextInt(4) != 0 || var12 * var12 + var14 * var14 <= (var10 - 1) * (var10 - 1)) && ++ (block == null || block.canBeReplacedByLeaves(par1World, var11, var8, var13))) + { + this.setBlockAndMetadata(par1World, var11, var8, var13, Block.leaves.blockID, this.leavesMetadata); + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenMinable.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenMinable.java.patch new file mode 100644 index 000000000..26520eeaa --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenMinable.java.patch @@ -0,0 +1,12 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenMinable.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenMinable.java 0000-00-00 00:00:00.000000000 -0000 +@@ -57,7 +57,8 @@ + { + double var45 = ((double)var44 + 0.5D - var24) / (var28 / 2.0D); + +- if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && par1World.getBlockId(var38, var41, var44) == Block.stone.blockID) ++ Block block = Block.blocksList[par1World.getBlockId(var38, var41, var44)]; ++ if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && (block != null && block.isGenMineableReplaceable(par1World, var38, var41, var44))) + { + par1World.setBlock(var38, var41, var44, this.minableBlockId); + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenShrub.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenShrub.java.patch new file mode 100644 index 000000000..da592d391 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenShrub.java.patch @@ -0,0 +1,33 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenShrub.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenShrub.java 0000-00-00 00:00:00.000000000 -0000 +@@ -17,10 +17,16 @@ + { + int var15; + +- for (boolean var6 = false; ((var15 = par1World.getBlockId(par3, par4, par5)) == 0 || var15 == Block.leaves.blockID) && par4 > 0; --par4) ++ Block block = null; ++ do + { +- ; +- } ++ block = Block.blocksList[par1World.getBlockId(par3, par4, par5)]; ++ if (block != null && !block.isLeaves(par1World, par3, par4, par5)) ++ { ++ break; ++ } ++ par4--; ++ } while (par4 > 0); + + int var7 = par1World.getBlockId(par3, par4, par5); + +@@ -42,7 +48,9 @@ + { + int var14 = var13 - par5; + +- if ((Math.abs(var12) != var10 || Math.abs(var14) != var10 || par2Random.nextInt(2) != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var11, var8, var13)]) ++ block = Block.blocksList[par1World.getBlockId(var11, var8, var13)]; ++ ++ if ((Math.abs(var12) != var10 || Math.abs(var14) != var10 || par2Random.nextInt(2) != 0) && (block != null && block.canBeReplacedByLeaves(par1World, var11, var8, var13))) + { + this.setBlockAndMetadata(par1World, var11, var8, var13, Block.leaves.blockID, this.field_48197_a); + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenSwamp.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenSwamp.java.patch new file mode 100644 index 000000000..72d85b61f --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenSwamp.java.patch @@ -0,0 +1,44 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenSwamp.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenSwamp.java 0000-00-00 00:00:00.000000000 -0000 +@@ -44,7 +44,7 @@ + { + var12 = par1World.getBlockId(var10, var8, var11); + +- if (var12 != 0 && var12 != Block.leaves.blockID) ++ if (var12 != 0 && (Block.blocksList[var12] != null && Block.blocksList[var12].isLeaves(par1World, var10, var8, var11))) + { + if (var12 != Block.waterStill.blockID && var12 != Block.waterMoving.blockID) + { +@@ -91,7 +91,10 @@ + { + int var15 = var14 - par5; + +- if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var12, var16, var14)]) ++ Block block = Block.blocksList[par1World.getBlockId(var12, var16, var14)]; ++ ++ if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && ++ (block != null && block.canBeReplacedByLeaves(par1World, var12, var16, var14))) + { + this.setBlock(par1World, var12, var16, var14, Block.leaves.blockID); + } +@@ -103,7 +106,9 @@ + { + var10 = par1World.getBlockId(par3, par4 + var16, par5); + +- if (var10 == 0 || var10 == Block.leaves.blockID || var10 == Block.waterMoving.blockID || var10 == Block.waterStill.blockID) ++ Block block = Block.blocksList[var10]; ++ ++ if (var10 == 0 || (block != null && block.isLeaves(par1World, par3, par4 + var16, par5)) || var10 == Block.waterMoving.blockID || var10 == Block.waterStill.blockID) + { + this.setBlock(par1World, par3, par4 + var16, par5, Block.wood.blockID); + } +@@ -118,7 +123,8 @@ + { + for (var13 = par5 - var11; var13 <= par5 + var11; ++var13) + { +- if (par1World.getBlockId(var12, var16, var13) == Block.leaves.blockID) ++ Block block = Block.blocksList[par1World.getBlockId(var12, var16, var13)]; ++ if (block != null && block.isLeaves(par1World, var12, var16, var13)) + { + if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var12 - 1, var16, var13) == 0) + { diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenTaiga1.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenTaiga1.java.patch new file mode 100644 index 000000000..be3997d8b --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenTaiga1.java.patch @@ -0,0 +1,36 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenTaiga1.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenTaiga1.java 0000-00-00 00:00:00.000000000 -0000 +@@ -41,7 +41,9 @@ + { + var15 = par1World.getBlockId(var13, var11, var14); + +- if (var15 != 0 && var15 != Block.leaves.blockID) ++ Block block = Block.blocksList[var15]; ++ ++ if (var15 != 0 && (block == null || !block.isLeaves(par1World, var13, var11, var14))) + { + var10 = false; + } +@@ -77,7 +79,10 @@ + { + int var17 = var16 - par5; + +- if ((Math.abs(var15) != var18 || Math.abs(var17) != var18 || var18 <= 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var14, var13, var16)]) ++ Block block = Block.blocksList[par1World.getBlockId(var14, var13, var16)]; ++ ++ if ((Math.abs(var15) != var18 || Math.abs(var17) != var18 || var18 <= 0) && ++ (block != null && block.canBeReplacedByLeaves(par1World, var14, var13, var16))) + { + this.setBlockAndMetadata(par1World, var14, var13, var16, Block.leaves.blockID, 1); + } +@@ -98,7 +103,9 @@ + { + var14 = par1World.getBlockId(par3, par4 + var13, par5); + +- if (var14 == 0 || var14 == Block.leaves.blockID) ++ Block block = Block.blocksList[var14]; ++ ++ if (var14 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var13, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var13, par5, Block.wood.blockID, 1); + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenTaiga2.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenTaiga2.java.patch new file mode 100644 index 000000000..cb2a78571 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenTaiga2.java.patch @@ -0,0 +1,35 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenTaiga2.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenTaiga2.java 0000-00-00 00:00:00.000000000 -0000 +@@ -45,7 +45,9 @@ + { + var15 = par1World.getBlockId(var13, var11, var14); + +- if (var15 != 0 && var15 != Block.leaves.blockID) ++ Block block = Block.blocksList[var15]; ++ ++ if (var15 != 0 && block != null && !block.isLeaves(par1World, var13, var11, var14)) + { + var10 = false; + } +@@ -87,7 +89,9 @@ + { + int var20 = var19 - par5; + +- if ((Math.abs(var18) != var21 || Math.abs(var20) != var21 || var21 <= 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var17, var16, var19)]) ++ Block block = Block.blocksList[par1World.getBlockId(var17, var16, var19)]; ++ ++ if ((Math.abs(var18) != var21 || Math.abs(var20) != var21 || var21 <= 0) && (block == null || block.canBeReplacedByLeaves(par1World, var17, var16, var19))) + { + this.setBlockAndMetadata(par1World, var17, var16, var19, Block.leaves.blockID, 1); + } +@@ -117,7 +121,9 @@ + { + var17 = par1World.getBlockId(par3, par4 + var16, par5); + +- if (var17 == 0 || var17 == Block.leaves.blockID) ++ Block block = Block.blocksList[var17]; ++ ++ if (var17 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var16, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var16, par5, Block.wood.blockID, 1); + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenTallGrass.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenTallGrass.java.patch new file mode 100644 index 000000000..d061ed8f5 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenTallGrass.java.patch @@ -0,0 +1,22 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenTallGrass.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenTallGrass.java 0000-00-00 00:00:00.000000000 -0000 +@@ -18,10 +18,16 @@ + { + int var11; + +- for (boolean var6 = false; ((var11 = par1World.getBlockId(par3, par4, par5)) == 0 || var11 == Block.leaves.blockID) && par4 > 0; --par4) ++ Block block = null; ++ do + { +- ; +- } ++ block = Block.blocksList[par1World.getBlockId(par3, par4, par5)]; ++ if (block != null && !block.isLeaves(par1World, par3, par4, par5)) ++ { ++ break; ++ } ++ par4--; ++ } while (par4 > 0); + + for (int var7 = 0; var7 < 128; ++var7) + { diff --git a/forge/patches/minecraft/net/minecraft/src/WorldGenTrees.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldGenTrees.java.patch new file mode 100644 index 000000000..69d8d4744 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldGenTrees.java.patch @@ -0,0 +1,50 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldGenTrees.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldGenTrees.java 0000-00-00 00:00:00.000000000 -0000 +@@ -64,7 +64,13 @@ + { + var12 = par1World.getBlockId(var10, var8, var11); + +- if (var12 != 0 && var12 != Block.leaves.blockID && var12 != Block.grass.blockID && var12 != Block.dirt.blockID && var12 != Block.wood.blockID) ++ Block block = Block.blocksList[var12]; ++ ++ if (var12 != 0 && ++ (block == null || !block.isLeaves(par1World, var10, var8, var11)) && ++ var12 != Block.grass.blockID && ++ var12 != Block.dirt.blockID && ++ (block == null || !block.isWood(par1World, var10, var8, var11))) + { + var7 = false; + } +@@ -107,7 +113,10 @@ + { + int var17 = var16 - par5; + +- if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var14, var11, var16)]) ++ Block block = Block.blocksList[par1World.getBlockId(var14, var11, var16)]; ++ ++ if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) && ++ (block == null || block.canBeReplacedByLeaves(par1World, var14, var11, var16))) + { + this.setBlockAndMetadata(par1World, var14, var11, var16, Block.leaves.blockID, this.metaLeaves); + } +@@ -119,7 +128,9 @@ + { + var12 = par1World.getBlockId(par3, par4 + var11, par5); + +- if (var12 == 0 || var12 == Block.leaves.blockID) ++ Block block = Block.blocksList[var12]; ++ ++ if (var12 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var11, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, Block.wood.blockID, this.metaWood); + +@@ -159,7 +170,8 @@ + { + for (var15 = par5 - var13; var15 <= par5 + var13; ++var15) + { +- if (par1World.getBlockId(var14, var11, var15) == Block.leaves.blockID) ++ Block block = Block.blocksList[par1World.getBlockId(var14, var11, var15)]; ++ if (block != null && block.isLeaves(par1World, var14, var11, var15)) + { + if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 - 1, var11, var15) == 0) + { diff --git a/forge/patches/minecraft_server/net/minecraft/src/Block.java.patch b/forge/patches/minecraft_server/net/minecraft/src/Block.java.patch index 7747c1b89..6180b72aa 100644 --- a/forge/patches/minecraft_server/net/minecraft/src/Block.java.patch +++ b/forge/patches/minecraft_server/net/minecraft/src/Block.java.patch @@ -68,7 +68,7 @@ { ItemStack var8 = this.createStackedBlock(par6); -@@ -974,6 +976,512 @@ +@@ -974,6 +976,592 @@ */ public void onFallenUpon(World par1World, int par2, int par3, int par4, Entity par5Entity, float par6) {} @@ -577,7 +577,87 @@ + { + return BlockBed.isBlockFootOfBed(world.getBlockMetadata(x, y, z)); + } ++ ++ /** ++ * Called when a leaf should start its decay process. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ */ ++ public void beginLeavesDecay(World world, int x, int y, int z){} + ++ /** ++ * Determines if this block can prevent leaves connected to it from decaying. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return true if the presence this block can prevent leaves from decaying. ++ */ ++ public boolean canSustainLeaves(World world, int x, int y, int z) ++ { ++ return false; ++ } ++ ++ /** ++ * Determines if this block is considered a leaf block, used to apply the leaf decay and generation system. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return true if this block is considered leaves. ++ */ ++ public boolean isLeaves(World world, int x, int y, int z) ++ { ++ return false; ++ } ++ ++ /** ++ * Used during tree growth to determine if newly generated leaves can replace this block. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return true if this block can be replaced by growing leaves. ++ */ ++ public boolean canBeReplacedByLeaves(World world, int x, int y, int z) ++ { ++ return !Block.opaqueCubeLookup[this.blockID]; ++ } ++ ++ /** ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return true if the block is wood (logs) ++ */ ++ public boolean isWood(World world, int x, int y, int z) ++ { ++ return false; ++ } ++ ++ /** ++ * Determines if the current block is replaceable by Ore veins during world generation. ++ * ++ * @param world The current world ++ * @param x X Position ++ * @param y Y Position ++ * @param z Z Position ++ * @return True to allow this block to be replaced by a ore ++ */ ++ public boolean isGenMineableReplaceable(World world, int x, int y, int z) ++ { ++ return blockID == stone.blockID; ++ } ++ ++ static { Item.itemsList[cloth.blockID] = (new ItemCloth(cloth.blockID - 256)).setItemName("cloth"); diff --git a/forge/patches/minecraft_server/net/minecraft/src/BlockLeaves.java.patch b/forge/patches/minecraft_server/net/minecraft/src/BlockLeaves.java.patch index 77351e125..3ff4b62b6 100644 --- a/forge/patches/minecraft_server/net/minecraft/src/BlockLeaves.java.patch +++ b/forge/patches/minecraft_server/net/minecraft/src/BlockLeaves.java.patch @@ -13,7 +13,37 @@ { /** * The base index in terrain.png corresponding to the fancy version of the leaf texture. This is stored so we can -@@ -216,15 +219,7 @@ +@@ -36,10 +39,9 @@ + { + int var10 = par1World.getBlockId(par2 + var7, par3 + var8, par4 + var9); + +- if (var10 == Block.leaves.blockID) ++ if (Block.blocksList[var10] != null) + { +- int var11 = par1World.getBlockMetadata(par2 + var7, par3 + var8, par4 + var9); +- par1World.setBlockMetadata(par2 + var7, par3 + var8, par4 + var9, var11 | 8); ++ Block.blocksList[var10].beginLeavesDecay(par1World, par2 + var7, par3 + var8, par4 + var9); + } + } + } +@@ -84,12 +86,14 @@ + for (var14 = -var7; var14 <= var7; ++var14) + { + var15 = par1World.getBlockId(par2 + var12, par3 + var13, par4 + var14); ++ ++ Block block = Block.blocksList[var15]; + +- if (var15 == Block.wood.blockID) ++ if (block != null && block.canSustainLeaves(par1World, par2 + var12, par3 + var13, par4 + var14)) + { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = 0; + } +- else if (var15 == Block.leaves.blockID) ++ else if (block != null && block.isLeaves(par1World, par2 + var12, par3 + var13, par4 + var14)) + { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -2; + } +@@ -216,15 +220,7 @@ */ public void harvestBlock(World par1World, EntityPlayer par2EntityPlayer, int par3, int par4, int par5, int par6) { @@ -30,7 +60,7 @@ } /** -@@ -259,4 +254,18 @@ +@@ -259,4 +255,30 @@ { super.onEntityWalking(par1World, par2, par3, par4, par5Entity); } @@ -47,5 +77,17 @@ + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this, 1, world.getBlockMetadata(x, y, z) & 3)); + return ret; ++ } ++ ++ @Override ++ public void beginLeavesDecay(World world, int x, int y, int z) ++ { ++ world.setBlockMetadata(x, y, z, world.getBlockMetadata(x, y, z) | 8); ++ } ++ ++ @Override ++ public boolean isLeaves(World world, int x, int y, int z) ++ { ++ return true; + } } diff --git a/forge/patches/minecraft_server/net/minecraft/src/BlockLog.java.patch b/forge/patches/minecraft_server/net/minecraft/src/BlockLog.java.patch new file mode 100644 index 000000000..c417d1cde --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/BlockLog.java.patch @@ -0,0 +1,36 @@ +--- ../src_base/minecraft_server/net/minecraft/src/BlockLog.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/BlockLog.java 0000-00-00 00:00:00.000000000 -0000 +@@ -53,14 +53,9 @@ + { + int var10 = par1World.getBlockId(par2 + var7, par3 + var8, par4 + var9); + +- if (var10 == Block.leaves.blockID) ++ if (Block.blocksList[var10] != null) + { +- int var11 = par1World.getBlockMetadata(par2 + var7, par3 + var8, par4 + var9); +- +- if ((var11 & 8) == 0) +- { +- par1World.setBlockMetadata(par2 + var7, par3 + var8, par4 + var9, var11 | 8); +- } ++ Block.blocksList[var10].beginLeavesDecay(par1World, par2 + var7, par3 + var8, par4 + var9); + } + } + } +@@ -83,4 +78,16 @@ + { + return par1; + } ++ ++ @Override ++ public boolean canSustainLeaves(World world, int x, int y, int z) ++ { ++ return true; ++ } ++ ++ @Override ++ public boolean isWood(World world, int x, int y, int z) ++ { ++ return true; ++ } + } diff --git a/forge/patches/minecraft_server/net/minecraft/src/BlockSnow.java.patch b/forge/patches/minecraft_server/net/minecraft/src/BlockSnow.java.patch index 713369962..c5c7b7734 100644 --- a/forge/patches/minecraft_server/net/minecraft/src/BlockSnow.java.patch +++ b/forge/patches/minecraft_server/net/minecraft/src/BlockSnow.java.patch @@ -1,6 +1,16 @@ --- ../src_base/minecraft_server/net/minecraft/src/BlockSnow.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft_server/net/minecraft/src/BlockSnow.java 0000-00-00 00:00:00.000000000 -0000 -@@ -73,7 +73,6 @@ +@@ -54,7 +54,8 @@ + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3 - 1, par4); +- return var5 != 0 && (var5 == Block.leaves.blockID || Block.blocksList[var5].isOpaqueCube()) ? par1World.getBlockMaterial(par2, par3 - 1, par4).blocksMovement() : false; ++ Block block = Block.blocksList[var5]; ++ return var5 != 0 && ((block != null && block.isLeaves(par1World, par2, par3 - 1, par4)) || Block.blocksList[var5].isOpaqueCube()) ? par1World.getBlockMaterial(par2, par3 - 1, par4).blocksMovement() : false; + } + + /** +@@ -73,7 +74,6 @@ { if (!this.canPlaceBlockAt(par1World, par2, par3, par4)) { @@ -8,7 +18,7 @@ par1World.setBlockWithNotify(par2, par3, par4, 0); return false; } -@@ -89,15 +88,7 @@ +@@ -89,15 +89,7 @@ */ public void harvestBlock(World par1World, EntityPlayer par2EntityPlayer, int par3, int par4, int par5, int par6) { @@ -25,7 +35,7 @@ par2EntityPlayer.addStat(StatList.mineBlockStatArray[this.blockID], 1); } -@@ -114,7 +105,7 @@ +@@ -114,7 +106,7 @@ */ public int quantityDropped(Random par1Random) { @@ -34,7 +44,7 @@ } /** -@@ -124,7 +115,6 @@ +@@ -124,7 +116,6 @@ { if (par1World.getSavedLightValue(EnumSkyBlock.Block, par2, par3, par4) > 11) { diff --git a/forge/patches/minecraft_server/net/minecraft/src/EntityOcelot.java.patch b/forge/patches/minecraft_server/net/minecraft/src/EntityOcelot.java.patch new file mode 100644 index 000000000..c02e7bfa4 --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/EntityOcelot.java.patch @@ -0,0 +1,12 @@ +--- ../src_base/minecraft_server/net/minecraft/src/EntityOcelot.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/EntityOcelot.java 0000-00-00 00:00:00.000000000 -0000 +@@ -298,7 +298,8 @@ + + int var4 = this.worldObj.getBlockId(var1, var2 - 1, var3); + +- if (var4 == Block.grass.blockID || var4 == Block.leaves.blockID) ++ Block block = Block.blocksList[var4]; ++ if (var4 == Block.grass.blockID || (block != null && block.isLeaves(worldObj, var1, var2 - 1, var3))) + { + return true; + } diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenBigMushroom.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenBigMushroom.java.patch new file mode 100644 index 000000000..b0328fe67 --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenBigMushroom.java.patch @@ -0,0 +1,35 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenBigMushroom.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenBigMushroom.java 0000-00-00 00:00:00.000000000 -0000 +@@ -54,7 +54,9 @@ + { + var13 = par1World.getBlockId(var11, var9, var12); + +- if (var13 != 0 && var13 != Block.leaves.blockID) ++ Block block = Block.blocksList[var13]; ++ ++ if (var13 != 0 && block != null && !block.isLeaves(par1World, var11, var9, var12)) + { + var8 = false; + } +@@ -186,7 +188,9 @@ + var15 = 0; + } + +- if ((var15 != 0 || par4 >= par4 + var7 - 1) && !Block.opaqueCubeLookup[par1World.getBlockId(var13, var11, var14)]) ++ Block block = Block.blocksList[par1World.getBlockId(var13, var11, var14)]; ++ ++ if ((var15 != 0 || par4 >= par4 + var7 - 1) && (block != null && block.canBeReplacedByLeaves(par1World, var13, var11, var14))) + { + this.setBlockAndMetadata(par1World, var13, var11, var14, Block.mushroomCapBrown.blockID + var6, var15); + } +@@ -198,7 +202,9 @@ + { + var12 = par1World.getBlockId(par3, par4 + var11, par5); + +- if (!Block.opaqueCubeLookup[var12]) ++ Block block = Block.blocksList[var12]; ++ ++ if (block != null && block.canBeReplacedByLeaves(par1World, par3, par4 + var11, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, Block.mushroomCapBrown.blockID + var6, 10); + } diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenDeadBush.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenDeadBush.java.patch new file mode 100644 index 000000000..b8d798be5 --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenDeadBush.java.patch @@ -0,0 +1,22 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenDeadBush.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenDeadBush.java 0000-00-00 00:00:00.000000000 -0000 +@@ -16,10 +16,16 @@ + { + int var11; + +- for (boolean var6 = false; ((var11 = par1World.getBlockId(par3, par4, par5)) == 0 || var11 == Block.leaves.blockID) && par4 > 0; --par4) ++ Block block = null; ++ do + { +- ; +- } ++ block = Block.blocksList[par1World.getBlockId(par3, par4, par5)]; ++ if (block != null && !block.isLeaves(par1World, par3, par4, par5)) ++ { ++ break; ++ } ++ par4--; ++ } while (par4 > 0); + + for (int var7 = 0; var7 < 4; ++var7) + { diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenForest.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenForest.java.patch new file mode 100644 index 000000000..1d68166a5 --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenForest.java.patch @@ -0,0 +1,36 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenForest.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenForest.java 0000-00-00 00:00:00.000000000 -0000 +@@ -43,7 +43,9 @@ + { + var12 = par1World.getBlockId(var10, var8, var11); + +- if (var12 != 0 && var12 != Block.leaves.blockID) ++ Block block = Block.blocksList[var12]; ++ ++ if (var12 != 0 && (block != null && block.isLeaves(par1World, var10, var8, var11))) + { + var7 = false; + } +@@ -82,7 +84,10 @@ + { + int var15 = var14 - par5; + +- if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var12, var16, var14)]) ++ Block block = Block.blocksList[par1World.getBlockId(var12, var16, var14)]; ++ ++ if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && ++ (block != null && block.canBeReplacedByLeaves(par1World, var12, var16, var14))) + { + this.setBlockAndMetadata(par1World, var12, var16, var14, Block.leaves.blockID, 2); + } +@@ -94,7 +99,9 @@ + { + var10 = par1World.getBlockId(par3, par4 + var16, par5); + +- if (var10 == 0 || var10 == Block.leaves.blockID) ++ Block block = Block.blocksList[var10]; ++ ++ if (var10 == 0 || (block != null && block.isLeaves(par1World, par3, par4 + var16, par5))) + { + this.setBlockAndMetadata(par1World, par3, par4 + var16, par5, Block.wood.blockID, 2); + } diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenHugeTrees.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenHugeTrees.java.patch new file mode 100644 index 000000000..e3d07ce5b --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenHugeTrees.java.patch @@ -0,0 +1,66 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenHugeTrees.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenHugeTrees.java 0000-00-00 00:00:00.000000000 -0000 +@@ -54,7 +54,12 @@ + { + var12 = par1World.getBlockId(var10, var8, var11); + +- if (var12 != 0 && var12 != Block.leaves.blockID && var12 != Block.grass.blockID && var12 != Block.dirt.blockID && var12 != Block.wood.blockID && var12 != Block.sapling.blockID) ++ if (var12 != 0 && ++ (Block.blocksList[var12] != null && !Block.blocksList[var12].isLeaves(par1World, var10, var8, var11)) && ++ var12 != Block.grass.blockID && ++ var12 != Block.dirt.blockID && ++ (Block.blocksList[var12] != null && !Block.blocksList[var12].isWood(par1World, var10, var8, var11)) && ++ var12 != Block.sapling.blockID) + { + var7 = false; + } +@@ -102,7 +107,7 @@ + { + var11 = par1World.getBlockId(par3, par4 + var10, par5); + +- if (var11 == 0 || var11 == Block.leaves.blockID) ++ if (var11 == 0 || Block.blocksList[var11] == null || Block.blocksList[var11].isLeaves(par1World, par3, par4 + var10, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var10, par5, Block.wood.blockID, this.woodMetadata); + +@@ -124,7 +129,7 @@ + { + var11 = par1World.getBlockId(par3 + 1, par4 + var10, par5); + +- if (var11 == 0 || var11 == Block.leaves.blockID) ++ if (var11 == 0 || Block.blocksList[var11] == null || Block.blocksList[var11].isLeaves(par1World, par3 + 1, par4 + var10, par5)) + { + this.setBlockAndMetadata(par1World, par3 + 1, par4 + var10, par5, Block.wood.blockID, this.woodMetadata); + +@@ -144,7 +149,7 @@ + + var11 = par1World.getBlockId(par3 + 1, par4 + var10, par5 + 1); + +- if (var11 == 0 || var11 == Block.leaves.blockID) ++ if (var11 == 0 || Block.blocksList[var11] == null && Block.blocksList[var11].isLeaves(par1World, par3 + 1, par4 + var10, par5 + 1)) + { + this.setBlockAndMetadata(par1World, par3 + 1, par4 + var10, par5 + 1, Block.wood.blockID, this.woodMetadata); + +@@ -164,7 +169,7 @@ + + var11 = par1World.getBlockId(par3, par4 + var10, par5 + 1); + +- if (var11 == 0 || var11 == Block.leaves.blockID) ++ if (var11 == 0 || Block.blocksList[var11] == null || Block.blocksList[var11].isLeaves(par1World, par3, par4 + var10, par5 + 1)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var10, par5 + 1, Block.wood.blockID, this.woodMetadata); + +@@ -215,7 +220,12 @@ + { + int var14 = var13 - par3; + +- if ((var12 >= 0 || var14 >= 0 || var12 * var12 + var14 * var14 <= var10 * var10) && (var12 <= 0 && var14 <= 0 || var12 * var12 + var14 * var14 <= (var10 + 1) * (var10 + 1)) && (par6Random.nextInt(4) != 0 || var12 * var12 + var14 * var14 <= (var10 - 1) * (var10 - 1)) && !Block.opaqueCubeLookup[par1World.getBlockId(var11, var8, var13)]) ++ Block block = Block.blocksList[par1World.getBlockId(var11, var8, var13)]; ++ ++ if ((var12 >= 0 || var14 >= 0 || var12 * var12 + var14 * var14 <= var10 * var10) && ++ (var12 <= 0 && var14 <= 0 || var12 * var12 + var14 * var14 <= (var10 + 1) * (var10 + 1)) && ++ (par6Random.nextInt(4) != 0 || var12 * var12 + var14 * var14 <= (var10 - 1) * (var10 - 1)) && ++ (block == null || block.canBeReplacedByLeaves(par1World, var11, var8, var13))) + { + this.setBlockAndMetadata(par1World, var11, var8, var13, Block.leaves.blockID, this.leavesMetadata); + } diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenMinable.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenMinable.java.patch new file mode 100644 index 000000000..1bcbfc6ab --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenMinable.java.patch @@ -0,0 +1,12 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenMinable.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenMinable.java 0000-00-00 00:00:00.000000000 -0000 +@@ -57,7 +57,8 @@ + { + double var45 = ((double)var44 + 0.5D - var24) / (var28 / 2.0D); + +- if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && par1World.getBlockId(var38, var41, var44) == Block.stone.blockID) ++ Block block = Block.blocksList[par1World.getBlockId(var38, var41, var44)]; ++ if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && (block != null && block.isGenMineableReplaceable(par1World, var38, var41, var44))) + { + par1World.setBlock(var38, var41, var44, this.minableBlockId); + } diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenShrub.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenShrub.java.patch new file mode 100644 index 000000000..71ab3d1f1 --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenShrub.java.patch @@ -0,0 +1,33 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenShrub.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenShrub.java 0000-00-00 00:00:00.000000000 -0000 +@@ -17,10 +17,16 @@ + { + int var15; + +- for (boolean var6 = false; ((var15 = par1World.getBlockId(par3, par4, par5)) == 0 || var15 == Block.leaves.blockID) && par4 > 0; --par4) ++ Block block = null; ++ do + { +- ; +- } ++ block = Block.blocksList[par1World.getBlockId(par3, par4, par5)]; ++ if (block != null && !block.isLeaves(par1World, par3, par4, par5)) ++ { ++ break; ++ } ++ par4--; ++ } while (par4 > 0); + + int var7 = par1World.getBlockId(par3, par4, par5); + +@@ -42,7 +48,9 @@ + { + int var14 = var13 - par5; + +- if ((Math.abs(var12) != var10 || Math.abs(var14) != var10 || par2Random.nextInt(2) != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var11, var8, var13)]) ++ block = Block.blocksList[par1World.getBlockId(var11, var8, var13)]; ++ ++ if ((Math.abs(var12) != var10 || Math.abs(var14) != var10 || par2Random.nextInt(2) != 0) && (block != null && block.canBeReplacedByLeaves(par1World, var11, var8, var13))) + { + this.setBlockAndMetadata(par1World, var11, var8, var13, Block.leaves.blockID, this.field_48408_a); + } diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenSwamp.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenSwamp.java.patch new file mode 100644 index 000000000..ffce7b976 --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenSwamp.java.patch @@ -0,0 +1,44 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenSwamp.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenSwamp.java 0000-00-00 00:00:00.000000000 -0000 +@@ -44,7 +44,7 @@ + { + var12 = par1World.getBlockId(var10, var8, var11); + +- if (var12 != 0 && var12 != Block.leaves.blockID) ++ if (var12 != 0 && (Block.blocksList[var12] != null && Block.blocksList[var12].isLeaves(par1World, var10, var8, var11))) + { + if (var12 != Block.waterStill.blockID && var12 != Block.waterMoving.blockID) + { +@@ -91,7 +91,10 @@ + { + int var15 = var14 - par5; + +- if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var12, var16, var14)]) ++ Block block = Block.blocksList[par1World.getBlockId(var12, var16, var14)]; ++ ++ if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && ++ (block != null && block.canBeReplacedByLeaves(par1World, var12, var16, var14))) + { + this.setBlock(par1World, var12, var16, var14, Block.leaves.blockID); + } +@@ -103,7 +106,9 @@ + { + var10 = par1World.getBlockId(par3, par4 + var16, par5); + +- if (var10 == 0 || var10 == Block.leaves.blockID || var10 == Block.waterMoving.blockID || var10 == Block.waterStill.blockID) ++ Block block = Block.blocksList[var10]; ++ ++ if (var10 == 0 || (block != null && block.isLeaves(par1World, par3, par4 + var16, par5)) || var10 == Block.waterMoving.blockID || var10 == Block.waterStill.blockID) + { + this.setBlock(par1World, par3, par4 + var16, par5, Block.wood.blockID); + } +@@ -118,7 +123,8 @@ + { + for (var13 = par5 - var11; var13 <= par5 + var11; ++var13) + { +- if (par1World.getBlockId(var12, var16, var13) == Block.leaves.blockID) ++ Block block = Block.blocksList[par1World.getBlockId(var12, var16, var13)]; ++ if (block != null && block.isLeaves(par1World, var12, var16, var13)) + { + if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var12 - 1, var16, var13) == 0) + { diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenTaiga1.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenTaiga1.java.patch new file mode 100644 index 000000000..c4d3c598c --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenTaiga1.java.patch @@ -0,0 +1,36 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenTaiga1.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenTaiga1.java 0000-00-00 00:00:00.000000000 -0000 +@@ -41,7 +41,9 @@ + { + var15 = par1World.getBlockId(var13, var11, var14); + +- if (var15 != 0 && var15 != Block.leaves.blockID) ++ Block block = Block.blocksList[var15]; ++ ++ if (var15 != 0 && (block == null || !block.isLeaves(par1World, var13, var11, var14))) + { + var10 = false; + } +@@ -77,7 +79,10 @@ + { + int var17 = var16 - par5; + +- if ((Math.abs(var15) != var18 || Math.abs(var17) != var18 || var18 <= 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var14, var13, var16)]) ++ Block block = Block.blocksList[par1World.getBlockId(var14, var13, var16)]; ++ ++ if ((Math.abs(var15) != var18 || Math.abs(var17) != var18 || var18 <= 0) && ++ (block != null && block.canBeReplacedByLeaves(par1World, var14, var13, var16))) + { + this.setBlockAndMetadata(par1World, var14, var13, var16, Block.leaves.blockID, 1); + } +@@ -98,7 +103,9 @@ + { + var14 = par1World.getBlockId(par3, par4 + var13, par5); + +- if (var14 == 0 || var14 == Block.leaves.blockID) ++ Block block = Block.blocksList[var14]; ++ ++ if (var14 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var13, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var13, par5, Block.wood.blockID, 1); + } diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenTaiga2.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenTaiga2.java.patch new file mode 100644 index 000000000..9f8cadbcd --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenTaiga2.java.patch @@ -0,0 +1,35 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenTaiga2.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenTaiga2.java 0000-00-00 00:00:00.000000000 -0000 +@@ -45,7 +45,9 @@ + { + var15 = par1World.getBlockId(var13, var11, var14); + +- if (var15 != 0 && var15 != Block.leaves.blockID) ++ Block block = Block.blocksList[var15]; ++ ++ if (var15 != 0 && block != null && !block.isLeaves(par1World, var13, var11, var14)) + { + var10 = false; + } +@@ -87,7 +89,9 @@ + { + int var20 = var19 - par5; + +- if ((Math.abs(var18) != var21 || Math.abs(var20) != var21 || var21 <= 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var17, var16, var19)]) ++ Block block = Block.blocksList[par1World.getBlockId(var17, var16, var19)]; ++ ++ if ((Math.abs(var18) != var21 || Math.abs(var20) != var21 || var21 <= 0) && (block == null || block.canBeReplacedByLeaves(par1World, var17, var16, var19))) + { + this.setBlockAndMetadata(par1World, var17, var16, var19, Block.leaves.blockID, 1); + } +@@ -117,7 +121,9 @@ + { + var17 = par1World.getBlockId(par3, par4 + var16, par5); + +- if (var17 == 0 || var17 == Block.leaves.blockID) ++ Block block = Block.blocksList[var17]; ++ ++ if (var17 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var16, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var16, par5, Block.wood.blockID, 1); + } diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenTallGrass.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenTallGrass.java.patch new file mode 100644 index 000000000..5819588d7 --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenTallGrass.java.patch @@ -0,0 +1,22 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenTallGrass.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenTallGrass.java 0000-00-00 00:00:00.000000000 -0000 +@@ -18,10 +18,16 @@ + { + int var11; + +- for (boolean var6 = false; ((var11 = par1World.getBlockId(par3, par4, par5)) == 0 || var11 == Block.leaves.blockID) && par4 > 0; --par4) ++ Block block = null; ++ do + { +- ; +- } ++ block = Block.blocksList[par1World.getBlockId(par3, par4, par5)]; ++ if (block != null && !block.isLeaves(par1World, par3, par4, par5)) ++ { ++ break; ++ } ++ par4--; ++ } while (par4 > 0); + + for (int var7 = 0; var7 < 128; ++var7) + { diff --git a/forge/patches/minecraft_server/net/minecraft/src/WorldGenTrees.java.patch b/forge/patches/minecraft_server/net/minecraft/src/WorldGenTrees.java.patch new file mode 100644 index 000000000..1415e591e --- /dev/null +++ b/forge/patches/minecraft_server/net/minecraft/src/WorldGenTrees.java.patch @@ -0,0 +1,50 @@ +--- ../src_base/minecraft_server/net/minecraft/src/WorldGenTrees.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft_server/net/minecraft/src/WorldGenTrees.java 0000-00-00 00:00:00.000000000 -0000 +@@ -64,7 +64,13 @@ + { + var12 = par1World.getBlockId(var10, var8, var11); + +- if (var12 != 0 && var12 != Block.leaves.blockID && var12 != Block.grass.blockID && var12 != Block.dirt.blockID && var12 != Block.wood.blockID) ++ Block block = Block.blocksList[var12]; ++ ++ if (var12 != 0 && ++ (block == null || !block.isLeaves(par1World, var10, var8, var11)) && ++ var12 != Block.grass.blockID && ++ var12 != Block.dirt.blockID && ++ (block == null || !block.isWood(par1World, var10, var8, var11))) + { + var7 = false; + } +@@ -107,7 +113,10 @@ + { + int var17 = var16 - par5; + +- if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var14, var11, var16)]) ++ Block block = Block.blocksList[par1World.getBlockId(var14, var11, var16)]; ++ ++ if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) && ++ (block == null || block.canBeReplacedByLeaves(par1World, var14, var11, var16))) + { + this.setBlockAndMetadata(par1World, var14, var11, var16, Block.leaves.blockID, this.metaLeaves); + } +@@ -119,7 +128,9 @@ + { + var12 = par1World.getBlockId(par3, par4 + var11, par5); + +- if (var12 == 0 || var12 == Block.leaves.blockID) ++ Block block = Block.blocksList[var12]; ++ ++ if (var12 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var11, par5)) + { + this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, Block.wood.blockID, this.metaWood); + +@@ -159,7 +170,8 @@ + { + for (var15 = par5 - var13; var15 <= par5 + var13; ++var15) + { +- if (par1World.getBlockId(var14, var11, var15) == Block.leaves.blockID) ++ Block block = Block.blocksList[par1World.getBlockId(var14, var11, var15)]; ++ if (block != null && block.isLeaves(par1World, var14, var11, var15)) + { + if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 - 1, var11, var15) == 0) + {