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.

This commit is contained in:
LexManos 2012-06-03 00:32:37 -07:00
parent 63453137b3
commit 3b523d57a9
32 changed files with 1156 additions and 14 deletions

View File

@ -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
{

View File

@ -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<ItemStack> ret = new ArrayList<ItemStack>();
+ 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;
+ }
}

View File

@ -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;
+ }
}

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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)
{

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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)
{

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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");

View File

@ -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<ItemStack> ret = new ArrayList<ItemStack>();
+ 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;
+ }
}

View File

@ -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;
+ }
}

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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)
{

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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)
{

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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)
{

View File

@ -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)
{