Advertisement
Guest User

WorldGenIoLava

a guest
Dec 25th, 2014
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. package blessentumble.moons.io.world.gen;
  2.  
  3. import java.util.Random;
  4.  
  5. import net.minecraft.block.Block;
  6. import net.minecraft.block.material.Material;
  7. import net.minecraft.init.Blocks;
  8. import net.minecraft.world.EnumSkyBlock;
  9. import net.minecraft.world.World;
  10. import net.minecraft.world.gen.feature.WorldGenerator;
  11.  
  12. public class WorldGenIoLava extends WorldGenerator
  13. {
  14. private Block block;
  15. private Block spreadBlock;
  16. private int spreadBlockMeta;
  17.  
  18. public WorldGenIoLava(Block block, Block spreadBlock)
  19. {
  20. this.block = block;
  21. this.spreadBlock = spreadBlock;
  22. }
  23.  
  24. @Override
  25. public boolean generate(World world, Random rand, int x, int y, int z)
  26. {
  27. x -= 16;
  28. z -= 16;
  29.  
  30. while (y > 5 && world.isAirBlock(x, y, z))
  31. {
  32. y--;
  33. }
  34. if (y <= 4)
  35. {
  36. return false;
  37. }
  38.  
  39. y -= 4;
  40. boolean[] arrayOfBoolean = new boolean[2048];
  41. int i = rand.nextInt(4) + 4;
  42.  
  43. for (int j = 0; j < i; j++)
  44. {
  45. double d1 = rand.nextDouble() * 6.0D + 3.0D;
  46. double d2 = rand.nextDouble() * 4.0D + 2.0D;
  47. double d3 = rand.nextDouble() * 6.0D + 3.0D;
  48. double d4 = rand.nextDouble() * (16.0D - d1 - 2.0D) + 1.0D + d1 / 2.0D;
  49. double d5 = rand.nextDouble() * (8.0D - d2 - 4.0D) + 2.0D + d2 / 2.0D;
  50. double d6 = rand.nextDouble() * (16.0D - d3 - 2.0D) + 1.0D + d3 / 2.0D;
  51.  
  52. for (int i2 = 1; i2 < 15; i2++)
  53. {
  54. for (int i3 = 1; i3 < 15; i3++)
  55. {
  56. for (int i4 = 1; i4 < 7; i4++)
  57. {
  58. double d7 = (i2 - d4) / (d1 / 2.0D);
  59. double d8 = (i4 - d5) / (d2 / 2.0D);
  60. double d9 = (i3 - d6) / (d3 / 2.0D);
  61. double d10 = d7 * d7 + d8 * d8 + d9 * d9;
  62.  
  63. if (d10 < 1.0D)
  64. {
  65. arrayOfBoolean[(i2 * 16 + i3) * 8 + i4] = true;
  66. }
  67. }
  68. }
  69. }
  70. }
  71.  
  72. int k;
  73. int m;
  74.  
  75. for (int j = 0; j < 16; j++)
  76. {
  77. for (k = 0; k < 16; k++)
  78. {
  79. for (m = 0; m < 8; m++)
  80. {
  81. int n = arrayOfBoolean[(j * 16 + k) * 8 + m] && (j < 15 && arrayOfBoolean[((j + 1) * 16 + k) * 8 + m] || j > 0 && arrayOfBoolean[((j - 1) * 16 + k) * 8 + m] || k < 15 && arrayOfBoolean[(j * 16 + k + 1) * 8 + m] || k > 0 && arrayOfBoolean[(j * 16 + k - 1) * 8 + m] || m < 7 && arrayOfBoolean[(j * 16 + k) * 8 + m + 1] || m > 0 && arrayOfBoolean[(j * 16 + k) * 8 + m - 1]) ? 1 : 0;
  82.  
  83. if (n != 0)
  84. {
  85. Material localMaterial = world.getBlock(x + j, y + m, z + k).getMaterial();
  86.  
  87. if (m >= 4 && localMaterial.isLiquid())
  88. {
  89. return false;
  90. }
  91. if (m < 4 && !localMaterial.isSolid() && world.getBlock(x + j, y + m, z + k) != this.block)
  92. {
  93. return false;
  94. }
  95. }
  96. }
  97. }
  98. }
  99. for (int j = 0; j < 16; j++)
  100. {
  101. for (k = 0; k < 16; k++)
  102. {
  103. for (m = 0; m < 8; m++)
  104. {
  105. if (arrayOfBoolean[(j * 16 + k) * 8 + m])
  106. {
  107. world.setBlock(x + j, y + m, z + k, m >= 4 ? Blocks.air : this.block, 0, 2);
  108. }
  109. }
  110. }
  111. }
  112. for (int j = 0; j < 16; j++)
  113. {
  114. for (k = 0; k < 16; k++)
  115. {
  116. for (m = 4; m < 8; m++)
  117. {
  118. if (arrayOfBoolean[(j * 16 + k) * 8 + m] && world.getBlock(x + j, y + m - 1, z + k) == Blocks.dirt && world.getSavedLightValue(EnumSkyBlock.Sky, x + j, y + m, z + k) > 0)
  119. {
  120. world.setBlock(x + j, y + m - 1, z + k, Blocks.grass, 0, 2);
  121. }
  122. }
  123. }
  124. }
  125. if (this.block.getMaterial() == Material.lava)
  126. {
  127. for (int j = 0; j < 16; j++)
  128. {
  129. for (k = 0; k < 16; k++)
  130. {
  131. for (m = 0; m < 8; m++)
  132. {
  133. int i1 = arrayOfBoolean[(j * 16 + k) * 8 + m] && (j < 15 && arrayOfBoolean[((j + 1) * 16 + k) * 8 + m] || j > 0 && arrayOfBoolean[((j - 1) * 16 + k) * 8 + m] || k < 15 && arrayOfBoolean[(j * 16 + k + 1) * 8 + m] || k > 0 && arrayOfBoolean[(j * 16 + k - 1) * 8 + m] || m < 7 && arrayOfBoolean[(j * 16 + k) * 8 + m + 1] || m > 0 && arrayOfBoolean[(j * 16 + k) * 8 + m - 1]) ? 1 : 0;
  134.  
  135. if (i1 != 0 && (m < 4 || rand.nextInt(2) != 0) && world.getBlock(x + j, y + m, z + k).getMaterial().isSolid())
  136. {
  137. world.setBlock(x + j, y + m, z + k, this.spreadBlock, this.spreadBlockMeta, 2);
  138. }
  139. }
  140. }
  141. }
  142. }
  143. return true;
  144. }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement