Guest User

Untitled

a guest
Apr 19th, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.04 KB | None | 0 0
  1. package net.minecraft.src;
  2.  
  3. import java.util.List;
  4. import java.util.Random;
  5. import net.minecraft.src.BiomeGenBase;
  6. import net.minecraft.src.Block;
  7. import net.minecraft.src.BlockSand;
  8. import net.minecraft.src.Chunk;
  9. import net.minecraft.src.ChunkCoordIntPair;
  10. import net.minecraft.src.ChunkPosition;
  11. import net.minecraft.src.EnumCreatureType;
  12. import net.minecraft.src.IChunkProvider;
  13. import net.minecraft.src.IProgressUpdate;
  14. import net.minecraft.src.MapGenBase;
  15. import net.minecraft.src.MapGenCaves;
  16. import net.minecraft.src.MapGenMineshaft;
  17. import net.minecraft.src.MapGenRavine;
  18. import net.minecraft.src.MapGenStronghold;
  19. import net.minecraft.src.MapGenVillage;
  20. import net.minecraft.src.MathHelper;
  21. import net.minecraft.src.NoiseGeneratorOctaves;
  22. import net.minecraft.src.SpawnerAnimals;
  23. import net.minecraft.src.World;
  24. import net.minecraft.src.WorldChunkManager;
  25. import net.minecraft.src.WorldGenDungeons;
  26. import net.minecraft.src.WorldGenLakes;
  27.  
  28. public class ChunkProviderGenerate implements IChunkProvider {
  29.  
  30. private Random rand;
  31. private NoiseGeneratorOctaves noiseGen1;
  32. private NoiseGeneratorOctaves noiseGen2;
  33. private NoiseGeneratorOctaves noiseGen3;
  34. private NoiseGeneratorOctaves noiseGen4;
  35. public NoiseGeneratorOctaves noiseGen5;
  36. public NoiseGeneratorOctaves noiseGen6;
  37. public NoiseGeneratorOctaves mobSpawnerNoise;
  38. private World worldObj;
  39. private final boolean mapFeaturesEnabled;
  40. private double[] field_4180_q;
  41. private double[] stoneNoise = new double[256];
  42. private MapGenBase caveGenerator = new MapGenCaves();
  43. public MapGenStronghold strongholdGenerator = new MapGenStronghold();
  44. public MapGenVillage villageGenerator = new MapGenVillage();
  45. public MapGenMineshaft mineshaftGenerator = new MapGenMineshaft();
  46. private MapGenBase ravineGenerator = new MapGenRavine();
  47. private BiomeGenBase[] biomesForGeneration;
  48. double[] noise3;
  49. double[] noise1;
  50. double[] noise2;
  51. double[] noise5;
  52. double[] noise6;
  53. float[] field_35388_l;
  54. int[][] unusedIntArray32x32 = new int[32][32];
  55.  
  56.  
  57. public ChunkProviderGenerate(World var1, long var2, boolean var4) {
  58. this.worldObj = var1;
  59. this.mapFeaturesEnabled = var4;
  60. this.rand = new Random(var2);
  61. this.noiseGen1 = new NoiseGeneratorOctaves(this.rand, 16);
  62. this.noiseGen2 = new NoiseGeneratorOctaves(this.rand, 16);
  63. this.noiseGen3 = new NoiseGeneratorOctaves(this.rand, 8);
  64. this.noiseGen4 = new NoiseGeneratorOctaves(this.rand, 4);
  65. this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10);
  66. this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16);
  67. this.mobSpawnerNoise = new NoiseGeneratorOctaves(this.rand, 8);
  68. }
  69.  
  70. public void generateTerrain(int var1, int var2, byte[] var3) {
  71. byte var4 = 4;
  72. int var5 = this.worldObj.field_35472_c / 8;
  73. int var6 = this.worldObj.field_35470_e;
  74. int var7 = var4 + 1;
  75. int var8 = this.worldObj.field_35472_c / 8 + 1;
  76. int var9 = var4 + 1;
  77. this.biomesForGeneration = this.worldObj.getWorldChunkManager().func_35557_b(this.biomesForGeneration, var1 * 4 - 2, var2 * 4 - 2, var7 + 5, var9 + 5);
  78. this.field_4180_q = this.initializeNoiseField(this.field_4180_q, var1 * var4, 0, var2 * var4, var7, var8, var9);
  79.  
  80. for(int var10 = 0; var10 < var4; ++var10) {
  81. for(int var11 = 0; var11 < var4; ++var11) {
  82. for(int var12 = 0; var12 < var5; ++var12) {
  83. double var13 = 0.125D;
  84. double var15 = this.field_4180_q[((var10 + 0) * var9 + var11 + 0) * var8 + var12 + 0];
  85. double var17 = this.field_4180_q[((var10 + 0) * var9 + var11 + 1) * var8 + var12 + 0];
  86. double var19 = this.field_4180_q[((var10 + 1) * var9 + var11 + 0) * var8 + var12 + 0];
  87. double var21 = this.field_4180_q[((var10 + 1) * var9 + var11 + 1) * var8 + var12 + 0];
  88. double var23 = (this.field_4180_q[((var10 + 0) * var9 + var11 + 0) * var8 + var12 + 1] - var15) * var13;
  89. double var25 = (this.field_4180_q[((var10 + 0) * var9 + var11 + 1) * var8 + var12 + 1] - var17) * var13;
  90. double var27 = (this.field_4180_q[((var10 + 1) * var9 + var11 + 0) * var8 + var12 + 1] - var19) * var13;
  91. double var29 = (this.field_4180_q[((var10 + 1) * var9 + var11 + 1) * var8 + var12 + 1] - var21) * var13;
  92.  
  93. for(int var31 = 0; var31 < 8; ++var31) {
  94. double var32 = 0.25D;
  95. double var34 = var15;
  96. double var36 = var17;
  97. double var38 = (var19 - var15) * var32;
  98. double var40 = (var21 - var17) * var32;
  99.  
  100. for(int var42 = 0; var42 < 4; ++var42) {
  101. int var43 = var42 + var10 * 4 << this.worldObj.field_35471_b | 0 + var11 * 4 << this.worldObj.field_35473_a | var12 * 8 + var31;
  102. int var44 = 1 << this.worldObj.field_35473_a;
  103. var43 -= var44;
  104. double var45 = 0.25D;
  105. double var49 = (var36 - var34) * var45;
  106. double var47 = var34 - var49;
  107.  
  108. for(int var51 = 0; var51 < 4; ++var51) {
  109. if((var47 += var49) > 0.0D) {
  110. var3[var43 += var44] = (byte)Block.stone.blockID;
  111. } else if(var12 * 8 + var31 < var6) {
  112. var3[var43 += var44] = (byte)Block.waterStill.blockID;
  113. } else {
  114. var3[var43 += var44] = 0;
  115. }
  116. }
  117.  
  118. var34 += var38;
  119. var36 += var40;
  120. }
  121.  
  122. var15 += var23;
  123. var17 += var25;
  124. var19 += var27;
  125. var21 += var29;
  126. }
  127. }
  128. }
  129. }
  130.  
  131. }
  132.  
  133. public void replaceBlocksForBiome(int var1, int var2, byte[] var3, BiomeGenBase[] var4) {
  134. int var5 = this.worldObj.field_35470_e;
  135. double var6 = 0.03125D;
  136. this.stoneNoise = this.noiseGen4.generateNoiseOctaves(this.stoneNoise, var1 * 16, var2 * 16, 0, 16, 16, 1, var6 * 2.0D, var6 * 2.0D, var6 * 2.0D);
  137. float[] var8 = this.worldObj.getWorldChunkManager().func_40539_b(var1 * 16, var2 * 16, 16, 16);
  138.  
  139. for(int var9 = 0; var9 < 16; ++var9) {
  140. for(int var10 = 0; var10 < 16; ++var10) {
  141. float var11 = var8[var10 + var9 * 16];
  142. BiomeGenBase var12 = var4[var10 + var9 * 16];
  143. int var13 = (int)(this.stoneNoise[var9 + var10 * 16] / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D);
  144. int var14 = -1;
  145. byte var15 = var12.topBlock;
  146. byte var16 = var12.fillerBlock;
  147.  
  148. for(int var17 = this.worldObj.field_35469_d; var17 >= 0; --var17) {
  149. int var18 = (var10 * 16 + var9) * this.worldObj.field_35472_c + var17;
  150. if(var17 <= 0 + this.rand.nextInt(5)) {
  151. var3[var18] = (byte)Block.bedrock.blockID;
  152. } else {
  153. byte var19 = var3[var18];
  154. if(var19 == 0) {
  155. var14 = -1;
  156. } else if(var19 == Block.stone.blockID) {
  157. if(var14 == -1) {
  158. if(var13 <= 0) {
  159. var15 = 0;
  160. var16 = (byte)Block.stone.blockID;
  161. } else if(var17 >= var5 - 4 && var17 <= var5 + 1) {
  162. var15 = var12.topBlock;
  163. var16 = var12.fillerBlock;
  164. }
  165.  
  166. if(var17 < var5 && var15 == 0) {
  167. if(var11 < 0.15F) {
  168. var15 = (byte)Block.ice.blockID;
  169. } else {
  170. var15 = (byte)Block.waterStill.blockID;
  171. }
  172. }
  173.  
  174. var14 = var13;
  175. if(var17 >= var5 - 1) {
  176. var3[var18] = var15;
  177. } else {
  178. var3[var18] = var16;
  179. }
  180. } else if(var14 > 0) {
  181. --var14;
  182. var3[var18] = var16;
  183. if(var14 == 0 && var16 == Block.sand.blockID) {
  184. var14 = this.rand.nextInt(4);
  185. var16 = (byte)Block.sandStone.blockID;
  186. }
  187. }
  188. }
  189. }
  190. }
  191. }
  192. }
  193.  
  194. }
  195.  
  196. public Chunk loadChunk(int var1, int var2) {
  197. return this.provideChunk(var1, var2);
  198. }
  199.  
  200. public Chunk provideChunk(int var1, int var2) {
  201. this.rand.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L);
  202. byte[] var3 = new byte[16 * this.worldObj.field_35472_c * 16];
  203. Chunk var4 = new Chunk(this.worldObj, var3, var1, var2);
  204. this.generateTerrain(var1, var2, var3);
  205. this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, var1 * 16, var2 * 16, 16, 16);
  206. this.replaceBlocksForBiome(var1, var2, var3, this.biomesForGeneration);
  207. this.caveGenerator.generate(this, this.worldObj, var1, var2, var3);
  208. this.ravineGenerator.generate(this, this.worldObj, var1, var2, var3);
  209. if(this.mapFeaturesEnabled) {
  210. this.mineshaftGenerator.generate(this, this.worldObj, var1, var2, var3);
  211. this.villageGenerator.generate(this, this.worldObj, var1, var2, var3);
  212. this.strongholdGenerator.generate(this, this.worldObj, var1, var2, var3);
  213. }
  214.  
  215. var4.generateSkylightMap();
  216. return var4;
  217. }
  218.  
  219. private double[] initializeNoiseField(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7) {
  220. if(var1 == null) {
  221. var1 = new double[var5 * var6 * var7];
  222. }
  223.  
  224. if(this.field_35388_l == null) {
  225. this.field_35388_l = new float[25];
  226.  
  227. for(int var8 = -2; var8 <= 2; ++var8) {
  228. for(int var9 = -2; var9 <= 2; ++var9) {
  229. float var10 = 10.0F / MathHelper.sqrt_float((float)(var8 * var8 + var9 * var9) + 0.2F);
  230. this.field_35388_l[var8 + 2 + (var9 + 2) * 5] = var10;
  231. }
  232. }
  233. }
  234.  
  235. double var44 = 684.412D;
  236. double var45 = 684.412D;
  237. this.noise5 = this.noiseGen5.func_4109_a(this.noise5, var2, var4, var5, var7, 1.121D, 1.121D, 0.5D);
  238. this.noise6 = this.noiseGen6.func_4109_a(this.noise6, var2, var4, var5, var7, 200.0D, 200.0D, 0.5D);
  239. this.noise3 = this.noiseGen3.generateNoiseOctaves(this.noise3, var2, var3, var4, var5, var6, var7, var44 / 80.0D, var45 / 160.0D, var44 / 80.0D);
  240. this.noise1 = this.noiseGen1.generateNoiseOctaves(this.noise1, var2, var3, var4, var5, var6, var7, var44, var45, var44);
  241. this.noise2 = this.noiseGen2.generateNoiseOctaves(this.noise2, var2, var3, var4, var5, var6, var7, var44, var45, var44);
  242. boolean var43 = false;
  243. boolean var42 = false;
  244. int var12 = 0;
  245. int var13 = 0;
  246.  
  247. for(int var14 = 0; var14 < var5; ++var14) {
  248. for(int var15 = 0; var15 < var7; ++var15) {
  249. float var16 = 0.0F;
  250. float var17 = 0.0F;
  251. float var18 = 0.0F;
  252. byte var19 = 2;
  253. BiomeGenBase var20 = this.biomesForGeneration[var14 + 2 + (var15 + 2) * (var5 + 5)];
  254.  
  255. for(int var21 = -var19; var21 <= var19; ++var21) {
  256. for(int var22 = -var19; var22 <= var19; ++var22) {
  257. BiomeGenBase var23 = this.biomesForGeneration[var14 + var21 + 2 + (var15 + var22 + 2) * (var5 + 5)];
  258. float var24 = this.field_35388_l[var21 + 2 + (var22 + 2) * 5] / (var23.minHeight + 2.0F);
  259. if(var23.minHeight > var20.minHeight) {
  260. var24 /= 2.0F;
  261. }
  262.  
  263. var16 += var23.maxHeight * var24;
  264. var17 += var23.minHeight * var24;
  265. var18 += var24;
  266. }
  267. }
  268.  
  269. var16 /= var18;
  270. var17 /= var18;
  271. var16 = var16 * 0.9F + 0.1F;
  272. var17 = (var17 * 4.0F - 1.0F) / 8.0F;
  273. double var47 = this.noise6[var13] / 8000.0D;
  274. if(var47 < 0.0D) {
  275. var47 = -var47 * 0.3D;
  276. }
  277.  
  278. var47 = var47 * 3.0D - 2.0D;
  279. if(var47 < 0.0D) {
  280. var47 /= 2.0D;
  281. if(var47 < -1.0D) {
  282. var47 = -1.0D;
  283. }
  284.  
  285. var47 /= 1.4D;
  286. var47 /= 2.0D;
  287. } else {
  288. if(var47 > 1.0D) {
  289. var47 = 1.0D;
  290. }
  291.  
  292. var47 /= 8.0D;
  293. }
  294.  
  295. ++var13;
  296.  
  297. for(int var46 = 0; var46 < var6; ++var46) {
  298. double var48 = (double)var17;
  299. double var26 = (double)var16;
  300. var48 += var47 * 0.2D;
  301. var48 = var48 * (double)var6 / 16.0D;
  302. double var28 = (double)var6 / 2.0D + var48 * 4.0D;
  303. double var30 = 0.0D;
  304. double var32 = ((double)var46 - var28) * 12.0D * 128.0D / (double)this.worldObj.field_35472_c / var26;
  305. if(var32 < 0.0D) {
  306. var32 *= 4.0D;
  307. }
  308.  
  309. double var34 = this.noise1[var12] / 512.0D;
  310. double var36 = this.noise2[var12] / 512.0D;
  311. double var38 = (this.noise3[var12] / 10.0D + 1.0D) / 2.0D;
  312. if(var38 < 0.0D) {
  313. var30 = var34;
  314. } else if(var38 > 1.0D) {
  315. var30 = var36;
  316. } else {
  317. var30 = var34 + (var36 - var34) * var38;
  318. }
  319.  
  320. var30 -= var32;
  321. if(var46 > var6 - 4) {
  322. double var40 = (double)((float)(var46 - (var6 - 4)) / 3.0F);
  323. var30 = var30 * (1.0D - var40) + -10.0D * var40;
  324. }
  325.  
  326. var1[var12] = var30;
  327. ++var12;
  328. }
  329. }
  330. }
  331.  
  332. return var1;
  333. }
  334.  
  335. public boolean chunkExists(int var1, int var2) {
  336. return true;
  337. }
  338.  
  339. public void populate(IChunkProvider var1, int var2, int var3) {
  340. BlockSand.fallInstantly = true;
  341. int var4 = var2 * 16;
  342. int var5 = var3 * 16;
  343. BiomeGenBase var6 = this.worldObj.getWorldChunkManager().getBiomeGenAt(var4 + 16, var5 + 16);
  344. this.rand.setSeed(this.worldObj.getWorldSeed());
  345. long var7 = this.rand.nextLong() / 2L * 2L + 1L;
  346. long var9 = this.rand.nextLong() / 2L * 2L + 1L;
  347. this.rand.setSeed((long)var2 * var7 + (long)var3 * var9 ^ this.worldObj.getWorldSeed());
  348. boolean var11 = false;
  349. if(this.mapFeaturesEnabled) {
  350. this.mineshaftGenerator.generateStructuresInChunk(this.worldObj, this.rand, var2, var3);
  351. var11 = this.villageGenerator.generateStructuresInChunk(this.worldObj, this.rand, var2, var3);
  352. this.strongholdGenerator.generateStructuresInChunk(this.worldObj, this.rand, var2, var3);
  353. }
  354.  
  355. int var12;
  356. int var13;
  357. int var14;
  358. if(!var11 && this.rand.nextInt(4) == 0) {
  359. var12 = var4 + this.rand.nextInt(16) + 8;
  360. var13 = this.rand.nextInt(this.worldObj.field_35472_c);
  361. var14 = var5 + this.rand.nextInt(16) + 8;
  362. (new WorldGenLakes(Block.waterStill.blockID)).generate(this.worldObj, this.rand, var12, var13, var14);
  363. }
  364.  
  365. if(!var11 && this.rand.nextInt(8) == 0) {
  366. var12 = var4 + this.rand.nextInt(16) + 8;
  367. var13 = this.rand.nextInt(this.rand.nextInt(this.worldObj.field_35472_c - 8) + 8);
  368. var14 = var5 + this.rand.nextInt(16) + 8;
  369. if(var13 < this.worldObj.field_35470_e || this.rand.nextInt(10) == 0) {
  370. (new WorldGenLakes(Block.lavaStill.blockID)).generate(this.worldObj, this.rand, var12, var13, var14);
  371. }
  372. }
  373.  
  374. for(var12 = 0; var12 < 8; ++var12) {
  375. var13 = var4 + this.rand.nextInt(16) + 8;
  376. var14 = this.rand.nextInt(this.worldObj.field_35472_c);
  377. int var15 = var5 + this.rand.nextInt(16) + 8;
  378. if((new WorldGenDungeons()).generate(this.worldObj, this.rand, var13, var14, var15)) {
  379. ;
  380. }
  381. }
  382.  
  383. var6.func_35477_a(this.worldObj, this.rand, var4, var5);
  384. SpawnerAnimals.func_35957_a(this.worldObj, var6, var4 + 8, var5 + 8, 16, 16, this.rand);
  385. var4 += 8;
  386. var5 += 8;
  387.  
  388. for(var12 = 0; var12 < 16; ++var12) {
  389. for(var13 = 0; var13 < 16; ++var13) {
  390. var14 = this.worldObj.func_35461_e(var4 + var12, var5 + var13);
  391. if(this.worldObj.func_40471_p(var12 + var4, var14 - 1, var13 + var5)) {
  392. this.worldObj.setBlockWithNotify(var12 + var4, var14 - 1, var13 + var5, Block.ice.blockID);
  393. }
  394.  
  395. if(this.worldObj.func_40478_r(var12 + var4, var14, var13 + var5)) {
  396. this.worldObj.setBlockWithNotify(var12 + var4, var14, var13 + var5, Block.snow.blockID);
  397. }
  398. }
  399. }
  400.  
  401. BlockSand.fallInstantly = false;
  402. }
  403.  
  404. public boolean saveChunks(boolean var1, IProgressUpdate var2) {
  405. return true;
  406. }
  407.  
  408. public boolean unload100OldestChunks() {
  409. return false;
  410. }
  411.  
  412. public boolean canSave() {
  413. return true;
  414. }
  415.  
  416. public String makeString() {
  417. return "RandomLevelSource";
  418. }
  419.  
  420. public List func_40377_a(EnumCreatureType var1, int var2, int var3, int var4) {
  421. WorldChunkManager var5 = this.worldObj.getWorldChunkManager();
  422. if(var5 == null) {
  423. return null;
  424. } else {
  425. BiomeGenBase var6 = var5.getBiomeGenAtChunkCoord(new ChunkCoordIntPair(var2 >> 4, var4 >> 4));
  426. return var6 == null?null:var6.getSpawnableList(var1);
  427. }
  428. }
  429.  
  430. public ChunkPosition func_40376_a(World var1, String var2, int var3, int var4, int var5) {
  431. return "Stronghold".equals(var2) && this.strongholdGenerator != null?this.strongholdGenerator.func_40484_a(var1, var3, var4, var5):null;
  432. }
  433. }
Add Comment
Please, Sign In to add comment