Advertisement
alexbegt

Untitled

Mar 17th, 2014
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.21 KB | None | 0 0
  1. package mods.natura.worldgen;
  2.  
  3. import java.util.Random;
  4.  
  5. import mods.natura.common.NContent;
  6. import mods.natura.common.PHNatura;
  7. import net.minecraft.block.Block;
  8. import net.minecraft.init.Blocks;
  9. import net.minecraft.util.MathHelper;
  10. import net.minecraft.world.World;
  11. import net.minecraft.world.gen.feature.WorldGenerator;
  12.  
  13. public class BushTreeGen extends WorldGenerator
  14. {
  15. /** The base height of the tree */
  16. private final int baseHeight;
  17.  
  18. /** Sets the metadata for the wood blocks used */
  19. private final int woodMetadata;
  20.  
  21. /** Sets the metadata for the leaves used in huge trees */
  22. private final int leavesMetadata;
  23.  
  24. public BushTreeGen(boolean par1, int height, int mdwood, int mdleaves)
  25. {
  26. super(par1);
  27. this.baseHeight = height;
  28. this.woodMetadata = mdwood;
  29. this.leavesMetadata = mdleaves;
  30. }
  31.  
  32. int findGround (World world, int x, int y, int z)
  33. {
  34. boolean foundGround = false;
  35. int height = PHNatura.seaLevel + 64;
  36. do
  37. {
  38. height--;
  39. Block underID = world.getBlock(x, height, z);
  40. if (underID == Blocks.dirt || underID == Blocks.grass || height < PHNatura.seaLevel)
  41. foundGround = true;
  42. } while (!foundGround);
  43. return height + 1;
  44. }
  45.  
  46. @Override
  47. public boolean generate (World world, Random random, int x, int y, int z)
  48. {
  49. int var6 = random.nextInt(3) + this.baseHeight;
  50. boolean var7 = true;
  51.  
  52. y = findGround(world, x, y, z);
  53.  
  54. if (y >= 1 && y + var6 + 1 <= 256)
  55. {
  56. int var8;
  57. int var10;
  58. Block var11;
  59. int var12;
  60.  
  61. for (var8 = y; var8 <= y + 1 + var6; ++var8)
  62. {
  63. byte var9 = 2;
  64.  
  65. if (var8 == y)
  66. {
  67. var9 = 1;
  68. }
  69.  
  70. if (var8 >= y + 1 + var6 - 2)
  71. {
  72. var9 = 2;
  73. }
  74.  
  75. for (var10 = x - var9; var10 <= x + var9 && var7; ++var10)
  76. {
  77. for (int var111 = z - var9; var111 <= z + var9 && var7; ++var111)
  78. {
  79. if (var8 >= 0 && var8 < 256)
  80. {
  81. Block block12 = world.getBlock(var10, var8, var111);
  82.  
  83. if (block12 != null && !block12.isLeaves(world, var10, var8, var111) && block12 != Blocks.grass && block12 != Blocks.dirt && !block12.isWood(world, var10, var8, var111)
  84. && block12 != Blocks.sapling)
  85. {
  86. var7 = false;
  87. }
  88. }
  89. else
  90. {
  91. var7 = false;
  92. }
  93. }
  94. }
  95. }
  96.  
  97. if (!var7)
  98. {
  99. return false;
  100. }
  101. else
  102. {
  103. Block b8 = world.getBlock(x, y - 1, z);
  104.  
  105. if ((b8 == Blocks.grass || b8 == Blocks.dirt) && y < 256 - var6 - 1)
  106. {
  107. world.setBlock(x, y - 1, z, Blocks.dirt);
  108. world.setBlock(x + 1, y - 1, z, Blocks.dirt);
  109. world.setBlock(x, y - 1, z + 1, Blocks.dirt);
  110. world.setBlock(x + 1, y - 1, z + 1, Blocks.dirt);
  111. this.growLeaves(world, x, z, y + var6, 2, random);
  112.  
  113. for (int var14 = y + var6 - 2 - random.nextInt(4); var14 > y + var6 / 2; var14 -= 2 + random.nextInt(4))
  114. {
  115. float var15 = random.nextFloat() * (float) Math.PI * 2.0F;
  116. int tempx1 = x + (int) (0.5F + MathHelper.cos(var15) * 4.0F);
  117. int tempz1 = z + (int) (0.5F + MathHelper.sin(var15) * 4.0F);
  118. //TODO should this actually be var8???
  119. this.growLeaves(world, tempx1, var8, tempz1, 0, random);
  120.  
  121. for (int var13 = 0; var13 < 5; ++var13)
  122. {
  123. int tempx = x + (int) (1.5F + MathHelper.cos(var15) * var13);
  124. int tempz = z + (int) (1.5F + MathHelper.sin(var15) * var13);
  125. world.setBlock(tempx, var14 - 3 + var13 / 2, tempz, NContent.tree, this.woodMetadata, 0);
  126. }
  127. }
  128.  
  129. for (var10 = 0; var10 < var6; ++var10)
  130. {
  131. var11 = world.getBlock(x, y + var10, z);
  132.  
  133. if (var11 == null || var11.isLeaves(world, x, y + var10, z))
  134. {
  135. world.setBlock(x, y + var10, z, NContent.tree, this.woodMetadata, 0);
  136.  
  137. /*if (var10 > 0)
  138. {
  139. if (random.nextInt(3) > 0 && world.isAirBlock(x - 1, y + var10, z))
  140. {
  141. world.setBlock( x - 1, y + var10, z, Block.vine , 8);
  142. }
  143.  
  144. if (random.nextInt(3) > 0 && world.isAirBlock(x, y + var10, z - 1))
  145. {
  146. world.setBlock( x, y + var10, z - 1, Block.vine , 1);
  147. }
  148. }*/
  149. }
  150.  
  151. if (var10 < var6 - 1)
  152. {
  153. var11 = world.getBlock(x + 1, y + var10, z);
  154.  
  155. if (var11 == null || var11.isLeaves(world, x + 1, y + var10, z))
  156. {
  157. world.setBlock(x + 1, y + var10, z, NContent.tree, this.woodMetadata, 0);
  158.  
  159. /*if (var10 > 0)
  160. {
  161. if (random.nextInt(3) > 0 && world.isAirBlock(x + 2, y + var10, z))
  162. {
  163. world.setBlock( x + 2, y + var10, z, Block.vine , 2);
  164. }
  165.  
  166. if (random.nextInt(3) > 0 && world.isAirBlock(x + 1, y + var10, z - 1))
  167. {
  168. world.setBlock( x + 1, y + var10, z - 1, Block.vine , 1);
  169. }
  170. }*/
  171. }
  172.  
  173. var11 = world.getBlock(x + 1, y + var10, z + 1);
  174.  
  175. if (var11 == null || var11.isLeaves(world, x + 1, y + var10, z + 1))
  176. {
  177. world.setBlock(x + 1, y + var10, z + 1, NContent.tree, this.woodMetadata, 0);
  178.  
  179. /*if (var10 > 0)
  180. {
  181. if (random.nextInt(3) > 0 && world.isAirBlock(x + 2, y + var10, z + 1))
  182. {
  183. world.setBlock( x + 2, y + var10, z + 1, Block.vine , 2);
  184. }
  185.  
  186. if (random.nextInt(3) > 0 && world.isAirBlock(x + 1, y + var10, z + 2))
  187. {
  188. world.setBlock( x + 1, y + var10, z + 2, Block.vine , 4);
  189. }
  190. }*/
  191. }
  192.  
  193. var11 = world.getBlock(x, y + var10, z + 1);
  194.  
  195. if (var11 == null || var11.isLeaves(world, x, y + var10, z + 1))
  196. {
  197. world.setBlock(x, y + var10, z + 1, NContent.tree, this.woodMetadata, 0);
  198.  
  199. /*if (var10 > 0)
  200. {
  201. if (random.nextInt(3) > 0 && world.isAirBlock(x - 1, y + var10, z + 1))
  202. {
  203. world.setBlock( x - 1, y + var10, z + 1, Block.vine , 8);
  204. }
  205.  
  206. if (random.nextInt(3) > 0 && world.isAirBlock(x, y + var10, z + 2))
  207. {
  208. world.setBlock( x, y + var10, z + 2, Block.vine , 4);
  209. }
  210. }*/
  211. }
  212. }
  213. }
  214.  
  215. return true;
  216. }
  217. else
  218. {
  219. return false;
  220. }
  221. }
  222. }
  223. else
  224. {
  225. return false;
  226. }
  227. }
  228.  
  229. private void growLeaves (World par1World, int par2, int par3, int par4, int par5, Random par6Random)
  230. {
  231. byte var7 = 2;
  232.  
  233. for (int var8 = par4 - var7; var8 <= par4; ++var8)
  234. {
  235. int var9 = var8 - par4;
  236. int var10 = par5 + 1 - var9;
  237.  
  238. for (int var11 = par2 - var10; var11 <= par2 + var10 + 1; ++var11)
  239. {
  240. int var12 = var11 - par2;
  241.  
  242. for (int var13 = par3 - var10; var13 <= par3 + var10 + 1; ++var13)
  243. {
  244. int var14 = var13 - par3;
  245.  
  246. Block block = par1World.getBlock(var11, var8, var13);
  247.  
  248. if ((var12 >= 0 || var14 >= 0 || var12 * var12 + var14 * var14 <= var10 * var10) && (var12 <= 0 && var14 <= 0 || var12 * var12 + var14 * var14 <= (var10 + 1) * (var10 + 1))
  249. && (par6Random.nextInt(4) != 0 || var12 * var12 + var14 * var14 <= (var10 - 1) * (var10 - 1))
  250. && (block == null || block.canBeReplacedByLeaves(par1World, var11, var8, var13)))
  251. {
  252. par1World.setBlock(var11, var8, var13, NContent.floraLeaves, this.leavesMetadata, 0);
  253. }
  254. }
  255. }
  256. }
  257. }
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement