Added some missing air checks to world gen features.

This commit is contained in:
Lex Manos 2013-10-09 02:47:05 -07:00
parent 1a6743331b
commit 43a16d5389
6 changed files with 82 additions and 41 deletions

View file

@ -7,7 +7,7 @@
- if (i2 != 0 && i2 != Block.leaves.blockID) - if (i2 != 0 && i2 != Block.leaves.blockID)
+ Block block = Block.blocksList[i2]; + Block block = Block.blocksList[i2];
+ +
+ if (i2 != 0 && block != null && !block.isLeaves(par1World, k1, j1, l1)) + if (block != null && !block.isAirBlock(par1World, k1, j1, l1) && !block.isLeaves(par1World, k1, j1, l1))
{ {
flag = false; flag = false;
} }

View file

@ -13,7 +13,35 @@
public class WorldGenBigTree extends WorldGenerator public class WorldGenBigTree extends WorldGenerator
{ {
@@ -442,7 +445,9 @@ @@ -163,8 +166,11 @@
{
aint1[b2] = aint[b2] + k1;
int l1 = this.worldObj.getBlockId(aint1[0], aint1[1], aint1[2]);
-
- if (l1 != 0 && l1 != Block.leaves.blockID)
+ Block block = Block.blocksList[l1];
+
+ if (block != null &&
+ !block.isAirBlock(worldObj, aint1[0], aint1[1], aint1[2]) &&
+ !block.isLeaves(worldObj, aint1[0], aint1[1], aint1[2]))
{
++k1;
}
@@ -421,8 +427,11 @@
aint3[b2] = MathHelper.floor_double((double)par1ArrayOfInteger[b2] + (double)i * d0);
aint3[b3] = MathHelper.floor_double((double)par1ArrayOfInteger[b3] + (double)i * d1);
int k = this.worldObj.getBlockId(aint3[0], aint3[1], aint3[2]);
-
- if (k != 0 && k != Block.leaves.blockID)
+ Block block = Block.blocksList[k];
+
+ if (block != null &&
+ !block.isAirBlock(worldObj, aint3[0], aint3[1], aint3[2]) &&
+ !block.isLeaves(worldObj, aint3[0], aint3[1], aint3[2]))
{
break;
}
@@ -442,7 +451,9 @@
int[] aint1 = new int[] {this.basePos[0], this.basePos[1] + this.heightLimit - 1, this.basePos[2]}; int[] aint1 = new int[] {this.basePos[0], this.basePos[1] + this.heightLimit - 1, this.basePos[2]};
int i = this.worldObj.getBlockId(this.basePos[0], this.basePos[1] - 1, this.basePos[2]); int i = this.worldObj.getBlockId(this.basePos[0], this.basePos[1] - 1, this.basePos[2]);

View file

@ -10,18 +10,20 @@
public class WorldGenForest extends WorldGenerator public class WorldGenForest extends WorldGenerator
{ {
@@ -45,7 +47,9 @@ @@ -45,7 +47,11 @@
{ {
l1 = par1World.getBlockId(j1, i1, k1); l1 = par1World.getBlockId(j1, i1, k1);
- if (l1 != 0 && l1 != Block.leaves.blockID) - if (l1 != 0 && l1 != Block.leaves.blockID)
+ Block block = Block.blocksList[l1]; + Block block = Block.blocksList[l1];
+ +
+ if (l1 != 0 && (block != null && !block.isLeaves(par1World, j1, i1, k1))) + if (block != null &&
+ !block.isAirBlock(par1World, j1, i1, k1) &&
+ !block.isLeaves(par1World, j1, i1, k1))
{ {
flag = false; flag = false;
} }
@@ -65,10 +69,12 @@ @@ -65,10 +71,12 @@
else else
{ {
i1 = par1World.getBlockId(par3, par4 - 1, par5); i1 = par1World.getBlockId(par3, par4 - 1, par5);
@ -36,7 +38,7 @@
int i2; int i2;
for (i2 = par4 - 3 + l; i2 <= par4 + l; ++i2) for (i2 = par4 - 3 + l; i2 <= par4 + l; ++i2)
@@ -87,8 +93,9 @@ @@ -87,8 +95,9 @@
if (Math.abs(j2) != k1 || Math.abs(l2) != k1 || par2Random.nextInt(2) != 0 && j1 != 0) if (Math.abs(j2) != k1 || Math.abs(l2) != k1 || par2Random.nextInt(2) != 0 && j1 != 0)
{ {
int i3 = par1World.getBlockId(l1, i2, k2); int i3 = par1World.getBlockId(l1, i2, k2);
@ -47,14 +49,16 @@
{ {
this.setBlockAndMetadata(par1World, l1, i2, k2, Block.leaves.blockID, 2); this.setBlockAndMetadata(par1World, l1, i2, k2, Block.leaves.blockID, 2);
} }
@@ -101,7 +108,9 @@ @@ -101,7 +110,11 @@
{ {
j1 = par1World.getBlockId(par3, par4 + i2, par5); j1 = par1World.getBlockId(par3, par4 + i2, par5);
- if (j1 == 0 || j1 == Block.leaves.blockID) - if (j1 == 0 || j1 == Block.leaves.blockID)
+ Block block = Block.blocksList[j1]; + Block block = Block.blocksList[j1];
+ +
+ if (j1 == 0 || block == null || block.isLeaves(par1World, par3, par4 + i2, par5)) + if (block == null ||
+ block.isAirBlock(par1World, par3, par4 + i2, par5) ||
+ block.isLeaves(par1World, par3, par4 + i2, par5))
{ {
this.setBlockAndMetadata(par1World, par3, par4 + i2, par5, Block.wood.blockID, 2); this.setBlockAndMetadata(par1World, par3, par4 + i2, par5, Block.wood.blockID, 2);
} }

View file

@ -11,21 +11,25 @@
public class WorldGenHugeTrees extends WorldGenerator public class WorldGenHugeTrees extends WorldGenerator
{ {
@@ -58,7 +60,12 @@ @@ -57,8 +59,15 @@
if (i1 >= 0 && i1 < 256)
{ {
l1 = par1World.getBlockId(j1, i1, k1); l1 = par1World.getBlockId(j1, i1, k1);
-
- if (l1 != 0 && l1 != Block.leaves.blockID && l1 != Block.grass.blockID && l1 != Block.dirt.blockID && l1 != Block.wood.blockID && l1 != Block.sapling.blockID) - if (l1 != 0 && l1 != Block.leaves.blockID && l1 != Block.grass.blockID && l1 != Block.dirt.blockID && l1 != Block.wood.blockID && l1 != Block.sapling.blockID)
+ if (l1 != 0 && + Block block = Block.blocksList[l1];
+ (Block.blocksList[l1] != null && !Block.blocksList[l1].isLeaves(par1World, j1, i1, k1)) && +
+ l1 != Block.grass.blockID && + if (block != null &&
+ l1 != Block.dirt.blockID && + !block.isAirBlock(par1World, j1, i1, k1) &&
+ (Block.blocksList[l1] != null && !Block.blocksList[l1].isWood(par1World, j1, i1, k1)) && + !block.isLeaves(par1World, j1, i1, k1) &&
+ l1 != Block.sapling.blockID) + !block.isWood(par1World, j1, i1, k1) &&
+ block != Block.grass &&
+ block != Block.dirt &&
+ block != Block.sapling)
{ {
flag = false; flag = false;
} }
@@ -79,12 +86,15 @@ @@ -79,12 +88,15 @@
{ {
i1 = par1World.getBlockId(par3, par4 - 1, par5); i1 = par1World.getBlockId(par3, par4 - 1, par5);
@ -47,43 +51,43 @@
this.growLeaves(par1World, par3, par5, par4 + l, 2, par2Random); this.growLeaves(par1World, par3, par5, par4 + l, 2, par2Random);
for (int i2 = par4 + l - 2 - par2Random.nextInt(4); i2 > par4 + l / 2; i2 -= 2 + par2Random.nextInt(4)) for (int i2 = par4 + l - 2 - par2Random.nextInt(4); i2 > par4 + l / 2; i2 -= 2 + par2Random.nextInt(4))
@@ -106,7 +116,7 @@ @@ -106,7 +118,7 @@
{ {
k1 = par1World.getBlockId(par3, par4 + j1, par5); k1 = par1World.getBlockId(par3, par4 + j1, par5);
- if (k1 == 0 || k1 == Block.leaves.blockID) - if (k1 == 0 || k1 == Block.leaves.blockID)
+ if (k1 == 0 || Block.blocksList[k1] == null || Block.blocksList[k1].isLeaves(par1World, par3, par4 + j1, par5)) + if (isReplaceable(par1World, par3, par4 + j1, par5))
{ {
this.setBlockAndMetadata(par1World, par3, par4 + j1, par5, Block.wood.blockID, this.woodMetadata); this.setBlockAndMetadata(par1World, par3, par4 + j1, par5, Block.wood.blockID, this.woodMetadata);
@@ -128,7 +138,7 @@ @@ -128,7 +140,7 @@
{ {
k1 = par1World.getBlockId(par3 + 1, par4 + j1, par5); k1 = par1World.getBlockId(par3 + 1, par4 + j1, par5);
- if (k1 == 0 || k1 == Block.leaves.blockID) - if (k1 == 0 || k1 == Block.leaves.blockID)
+ if (k1 == 0 || Block.blocksList[k1] == null || Block.blocksList[k1].isLeaves(par1World, par3 + 1, par4 + j1, par5)) + if (isReplaceable(par1World, par3 + 1, par4 + j1, par5))
{ {
this.setBlockAndMetadata(par1World, par3 + 1, par4 + j1, par5, Block.wood.blockID, this.woodMetadata); this.setBlockAndMetadata(par1World, par3 + 1, par4 + j1, par5, Block.wood.blockID, this.woodMetadata);
@@ -148,7 +158,7 @@ @@ -148,7 +160,7 @@
k1 = par1World.getBlockId(par3 + 1, par4 + j1, par5 + 1); k1 = par1World.getBlockId(par3 + 1, par4 + j1, par5 + 1);
- if (k1 == 0 || k1 == Block.leaves.blockID) - if (k1 == 0 || k1 == Block.leaves.blockID)
+ if (k1 == 0 || Block.blocksList[k1] == null || Block.blocksList[k1].isLeaves(par1World, par3 + 1, par4 + j1, par5 + 1)) + if (isReplaceable(par1World, par3 + 1, par4 + j1, par5 + 1))
{ {
this.setBlockAndMetadata(par1World, par3 + 1, par4 + j1, par5 + 1, Block.wood.blockID, this.woodMetadata); this.setBlockAndMetadata(par1World, par3 + 1, par4 + j1, par5 + 1, Block.wood.blockID, this.woodMetadata);
@@ -168,7 +178,7 @@ @@ -168,7 +180,7 @@
k1 = par1World.getBlockId(par3, par4 + j1, par5 + 1); k1 = par1World.getBlockId(par3, par4 + j1, par5 + 1);
- if (k1 == 0 || k1 == Block.leaves.blockID) - if (k1 == 0 || k1 == Block.leaves.blockID)
+ if (k1 == 0 || Block.blocksList[k1] == null || Block.blocksList[k1].isLeaves(par1World, par3, par4 + j1, par5 + 1)) + if (isReplaceable(par1World, par3, par4 + j1, par5 + 1))
{ {
this.setBlockAndMetadata(par1World, par3, par4 + j1, par5 + 1, Block.wood.blockID, this.woodMetadata); this.setBlockAndMetadata(par1World, par3, par4 + j1, par5 + 1, Block.wood.blockID, this.woodMetadata);
@@ -222,8 +232,9 @@ @@ -222,8 +234,9 @@
if ((i2 >= 0 || k2 >= 0 || i2 * i2 + k2 * k2 <= k1 * k1) && (i2 <= 0 && k2 <= 0 || i2 * i2 + k2 * k2 <= (k1 + 1) * (k1 + 1)) && (par6Random.nextInt(4) != 0 || i2 * i2 + k2 * k2 <= (k1 - 1) * (k1 - 1))) if ((i2 >= 0 || k2 >= 0 || i2 * i2 + k2 * k2 <= k1 * k1) && (i2 <= 0 && k2 <= 0 || i2 * i2 + k2 * k2 <= (k1 + 1) * (k1 + 1)) && (par6Random.nextInt(4) != 0 || i2 * i2 + k2 * k2 <= (k1 - 1) * (k1 - 1)))
{ {
int l2 = par1World.getBlockId(l1, i1, j2); int l2 = par1World.getBlockId(l1, i1, j2);
@ -95,7 +99,7 @@
{ {
this.setBlockAndMetadata(par1World, l1, i1, j2, Block.leaves.blockID, this.leavesMetadata); this.setBlockAndMetadata(par1World, l1, i1, j2, Block.leaves.blockID, this.leavesMetadata);
} }
@@ -232,4 +243,13 @@ @@ -232,4 +245,19 @@
} }
} }
} }
@ -107,5 +111,11 @@
+ { + {
+ block.onPlantGrow(world, x, y, z, sourceX, sourceY, sourceZ); + block.onPlantGrow(world, x, y, z, sourceX, sourceY, sourceZ);
+ } + }
+ }
+
+ private boolean isReplaceable(World world, int x, int y, int z)
+ {
+ Block block = Block.blocksList[world.getBlockId(x, y, z)];
+ return (block == null || block.isAirBlock(world, x, y, z) || block.isLeaves(world, x, y, z));
+ } + }
} }

View file

@ -11,7 +11,7 @@
- ; - ;
- } - }
+ block = Block.blocksList[par1World.getBlockId(par3, par4, par5)]; + block = Block.blocksList[par1World.getBlockId(par3, par4, par5)];
+ if (block != null && !block.isLeaves(par1World, par3, par4, par5)) + if (block != null && !block.isAirBlock(par1World, par3, par4, par5) && !block.isLeaves(par1World, par3, par4, par5))
+ { + {
+ break; + break;
+ } + }

View file

@ -11,23 +11,22 @@
public class WorldGenTrees extends WorldGenerator public class WorldGenTrees extends WorldGenerator
{ {
@@ -67,7 +69,14 @@ @@ -67,7 +69,13 @@
{ {
k1 = par1World.getBlockId(l1, i1, j1); k1 = par1World.getBlockId(l1, i1, j1);
- if (k1 != 0 && k1 != Block.leaves.blockID && k1 != Block.grass.blockID && k1 != Block.dirt.blockID && k1 != Block.wood.blockID) - if (k1 != 0 && k1 != Block.leaves.blockID && k1 != Block.grass.blockID && k1 != Block.dirt.blockID && k1 != Block.wood.blockID)
+ Block block = Block.blocksList[k1]; + Block block = Block.blocksList[k1];
+ boolean isAir = par1World.isAirBlock(l1, i1, j1);
+ +
+ if (!isAir && + if (!par1World.isAirBlock(l1, i1, j1) &&
+ !block.isLeaves(par1World, l1, i1, j1) && + !block.isLeaves(par1World, l1, i1, j1) &&
+ k1 != Block.grass.blockID && + k1 != Block.grass.blockID &&
+ k1 != Block.dirt.blockID && + k1 != Block.dirt.blockID &&
+ !block.isWood(par1World, l1, i1, j1)) + !block.isWood(par1World, l1, i1, j1))
{ {
flag = false; flag = false;
} }
@@ -87,10 +96,12 @@ @@ -87,10 +95,12 @@
else else
{ {
i1 = par1World.getBlockId(par3, par4 - 1, par5); i1 = par1World.getBlockId(par3, par4 - 1, par5);
@ -44,7 +43,7 @@
b0 = 3; b0 = 3;
byte b1 = 0; byte b1 = 0;
int i2; int i2;
@@ -113,8 +124,9 @@ @@ -113,8 +123,9 @@
if (Math.abs(k2) != i2 || Math.abs(i3) != i2 || par2Random.nextInt(2) != 0 && k1 != 0) if (Math.abs(k2) != i2 || Math.abs(i3) != i2 || par2Random.nextInt(2) != 0 && k1 != 0)
{ {
int j3 = par1World.getBlockId(j2, j1, l2); int j3 = par1World.getBlockId(j2, j1, l2);
@ -56,18 +55,18 @@
{ {
this.setBlockAndMetadata(par1World, j2, j1, l2, Block.leaves.blockID, this.metaLeaves); this.setBlockAndMetadata(par1World, j2, j1, l2, Block.leaves.blockID, this.metaLeaves);
} }
@@ -127,7 +139,9 @@ @@ -127,7 +138,9 @@
{ {
k1 = par1World.getBlockId(par3, par4 + j1, par5); k1 = par1World.getBlockId(par3, par4 + j1, par5);
- if (k1 == 0 || k1 == Block.leaves.blockID) - if (k1 == 0 || k1 == Block.leaves.blockID)
+ Block block = Block.blocksList[k1]; + Block block = Block.blocksList[k1];
+ +
+ if (k1 == 0 || block == null || block.isLeaves(par1World, par3, par4 + j1, par5)) + if (block == null || block.isAirBlock(par1World, par3, par4 + j1, par5) || block.isLeaves(par1World, par3, par4 + j1, par5))
{ {
this.setBlockAndMetadata(par1World, par3, par4 + j1, par5, Block.wood.blockID, this.metaWood); this.setBlockAndMetadata(par1World, par3, par4 + j1, par5, Block.wood.blockID, this.metaWood);
@@ -167,24 +181,25 @@ @@ -167,24 +180,25 @@
{ {
for (k2 = par5 - i2; k2 <= par5 + i2; ++k2) for (k2 = par5 - i2; k2 <= par5 + i2; ++k2)
{ {
@ -98,7 +97,7 @@
{ {
this.growVines(par1World, j2, j1, k2 + 1, 4); this.growVines(par1World, j2, j1, k2 + 1, 4);
} }
@@ -235,7 +250,7 @@ @@ -235,7 +249,7 @@
{ {
--par3; --par3;