Guest User

Untitled

a guest
Nov 29th, 2015
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.24 KB | None | 0 0
  1. package com.halestormxv.worldALT;
  2.  
  3. import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.CAVE;
  4. import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.RAVINE;
  5. import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.SCATTERED_FEATURE;
  6. import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.ANIMALS;
  7. import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.DUNGEON;
  8. import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.ICE;
  9. import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAKE;
  10. import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAVA;
  11.  
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.Random;
  15. import java.util.logging.Level;
  16.  
  17.  
  18. import com.halestormxv.blocks.CelestialCraft_blocks;
  19. import com.halestormxv.entity.EntityCyclops;
  20. import com.halestormxv.entity.EntityLunarSpirit;
  21. import com.halestormxv.utilities.GameLogHelper;
  22. import com.halestormxv.worldALT.biomes.ModBiomes;
  23.  
  24. import net.minecraft.block.Block;
  25. import net.minecraft.block.BlockFalling;
  26. import net.minecraft.entity.EnumCreatureType;
  27. import net.minecraft.init.Blocks;
  28. import net.minecraft.util.IProgressUpdate;
  29. import net.minecraft.util.MathHelper;
  30. import net.minecraft.world.ChunkPosition;
  31. import net.minecraft.world.SpawnerAnimals;
  32. import net.minecraft.world.World;
  33. import net.minecraft.world.WorldType;
  34. import net.minecraft.world.biome.BiomeGenBase;
  35. import net.minecraft.world.chunk.Chunk;
  36. import net.minecraft.world.chunk.IChunkProvider;
  37. import net.minecraft.world.gen.ChunkProviderGenerate;
  38. import net.minecraft.world.gen.MapGenBase;
  39. import net.minecraft.world.gen.MapGenCaves;
  40. import net.minecraft.world.gen.MapGenRavine;
  41. import net.minecraft.world.gen.NoiseGenerator;
  42. import net.minecraft.world.gen.NoiseGeneratorOctaves;
  43. import net.minecraft.world.gen.NoiseGeneratorPerlin;
  44. import net.minecraft.world.gen.feature.WorldGenDungeons;
  45. import net.minecraft.world.gen.feature.WorldGenLakes;
  46. import net.minecraft.world.gen.structure.MapGenScatteredFeature;
  47. import net.minecraftforge.common.MinecraftForge;
  48. import net.minecraftforge.event.terraingen.ChunkProviderEvent;
  49. import net.minecraftforge.event.terraingen.PopulateChunkEvent;
  50. import net.minecraftforge.event.terraingen.TerrainGen;
  51. import cpw.mods.fml.common.eventhandler.Event.Result;
  52.  
  53.  
  54. public class ChunkProviderForest implements IChunkProvider {
  55.  
  56. /** RNG. */
  57. private Random rand;
  58.  
  59. /** A NoiseGeneratorOctaves used in generating terrain */
  60. private NoiseGeneratorOctaves noiseGen1;
  61. private NoiseGeneratorOctaves noiseGen2;
  62. private NoiseGeneratorOctaves noiseGen3;
  63. private NoiseGeneratorPerlin noisePerl;
  64.  
  65. /** A NoiseGeneratorOctaves used in generating terrain */
  66. public NoiseGeneratorOctaves noiseGen5;
  67.  
  68. /** A NoiseGeneratorOctaves used in generating terrain */
  69. public NoiseGeneratorOctaves noiseGen6;
  70. public NoiseGeneratorOctaves mobSpawnerNoise;
  71.  
  72. /** Reference to the World object. */
  73. private World worldObj;
  74.  
  75. /** are map structures going to be generated (e.g. strongholds) */
  76. private final boolean mapFeaturesEnabled;
  77.  
  78. private WorldType worldType;
  79. private final double[] noiseArray;
  80. private final float[] parabolicField;
  81. private double[] stoneNoise = new double[256];
  82. private MapGenBase caveGenerator = new MapGenCaves();
  83.  
  84. private MapGenScatteredFeature scatteredFeatureGenerator = new MapGenScatteredFeature();
  85.  
  86. /** Holds ravine generator */
  87. private MapGenBase ravineGenerator = new MapGenRavine();
  88.  
  89. /** The biomes that are used to generate the chunk */
  90. private BiomeGenBase[] biomesForGeneration;
  91.  
  92. /** A double array that hold terrain noise */
  93. double[] noise3;
  94. double[] noise1;
  95. double[] noise2;
  96. double[] noise5;
  97. int[][] field_73219_j = new int[32][32];
  98.  
  99. {
  100. caveGenerator = TerrainGen.getModdedMapGen(caveGenerator, CAVE);
  101. scatteredFeatureGenerator = (MapGenScatteredFeature) TerrainGen.getModdedMapGen(scatteredFeatureGenerator, SCATTERED_FEATURE);
  102. ravineGenerator = TerrainGen.getModdedMapGen(ravineGenerator, RAVINE);
  103. }
  104.  
  105. public ChunkProviderForest(World world, long seed, boolean mapFeaturesEnabled)
  106. {
  107. GameLogHelper.writeToLog(Level.INFO, "Loading Chunk Provider for dmension.");
  108. this.worldObj = world;
  109. this.mapFeaturesEnabled = mapFeaturesEnabled;
  110. this.worldType = world.getWorldInfo().getTerrainType();
  111. this.rand = new Random(seed);
  112. this.noiseGen1 = new NoiseGeneratorOctaves(this.rand, 16);
  113. this.noiseGen2 = new NoiseGeneratorOctaves(this.rand, 16);
  114. this.noiseGen3 = new NoiseGeneratorOctaves(this.rand, 8);
  115. this.noisePerl = new NoiseGeneratorPerlin(this.rand, 4);
  116. this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10);
  117. this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16);
  118. this.mobSpawnerNoise = new NoiseGeneratorOctaves(this.rand, 8);
  119. this.noiseArray = new double[825];
  120. this.parabolicField = new float[25];
  121. for (int j = -2; j <= 2; ++j) {
  122. for (int k = -2; k <= 2; ++k) {
  123. float f = 10.0F / MathHelper.sqrt_float((float)(j * j + k * k) + 0.2F);
  124. this.parabolicField[j + 2 + (k + 2) * 5] = f;
  125. }
  126. }
  127. NoiseGenerator[] noiseGens = {noiseGen1, noiseGen2, noiseGen3, noisePerl, noiseGen5, noiseGen6, mobSpawnerNoise};
  128. noiseGens = TerrainGen.getModdedNoiseGenerators(world, this.rand, noiseGens);
  129. this.noiseGen1 = (NoiseGeneratorOctaves)noiseGens[0];
  130. this.noiseGen2 = (NoiseGeneratorOctaves)noiseGens[1];
  131. this.noiseGen3 = (NoiseGeneratorOctaves)noiseGens[2];
  132. this.noisePerl = (NoiseGeneratorPerlin)noiseGens[3];
  133. this.noiseGen5 = (NoiseGeneratorOctaves)noiseGens[4];
  134. this.noiseGen6 = (NoiseGeneratorOctaves)noiseGens[5];
  135. this.mobSpawnerNoise = (NoiseGeneratorOctaves)noiseGens[6];
  136. }
  137.  
  138. /**
  139. * Generates the shape of the terrain for the chunk though its all stone
  140. * though the water is frozen if the temperature is low enough
  141. */
  142. // TODO: generateTerrain?
  143. public void func_147424_a(int par1, int par2, Block[] blocks) {
  144.  
  145. //DONT EDIT THS METHOD UNLES YOU KNOW WHAT UR DOING OR MAKE A COPY INCASE U MESS IT UP....
  146. //YOU HAVE BE WARNED !!!!!
  147.  
  148. byte b0 = 63;
  149. this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, par1 * 4 - 2, par2 * 4 - 2, 10, 10);
  150. this.func_147423_a(par1 * 4, 0, par2 * 4);
  151. for (int k = 0; k < 4; ++k) {
  152. int l = k * 5;
  153. int i1 = (k + 1) * 5;
  154. for (int j1 = 0; j1 < 4; ++j1) {
  155. int k1 = (l + j1) * 33;
  156. int l1 = (l + j1 + 1) * 33;
  157. int i2 = (i1 + j1) * 33;
  158. int j2 = (i1 + j1 + 1) * 33;
  159. for (int k2 = 0; k2 < 32; ++k2) {
  160. double d0 = 0.125D;
  161. double d1 = this.noiseArray[k1 + k2];
  162. double d2 = this.noiseArray[l1 + k2];
  163. double d3 = this.noiseArray[i2 + k2];
  164. double d4 = this.noiseArray[j2 + k2];
  165. double d5 = (this.noiseArray[k1 + k2 + 1] - d1) * d0;
  166. double d6 = (this.noiseArray[l1 + k2 + 1] - d2) * d0;
  167. double d7 = (this.noiseArray[i2 + k2 + 1] - d3) * d0;
  168. double d8 = (this.noiseArray[j2 + k2 + 1] - d4) * d0;
  169. for (int l2 = 0; l2 < 8; ++l2) {
  170. double d9 = 0.25D;
  171. double d10 = d1;
  172. double d11 = d2;
  173. double d12 = (d3 - d1) * d9;
  174. double d13 = (d4 - d2) * d9;
  175. for (int i3 = 0; i3 < 4; ++i3) {
  176. int j3 = i3 + k * 4 << 12 | 0 + j1 * 4 << 8 | k2 * 8 + l2;
  177. short short1 = 256;
  178. j3 -= short1;
  179. double d14 = 0.25D;
  180. double d16 = (d11 - d10) * d14;
  181. double d15 = d10 - d16;
  182. for (int k3 = 0; k3 < 4; ++k3) {
  183. if ((d15 += d16) > 0.0D) {
  184. blocks[j3 += short1] = CelestialCraft_blocks.CelFillStone;//these can be set to custom blocks
  185. } else if (k2 * 8 + l2 < b0) {
  186. blocks[j3 += short1] = Blocks.water;//these can be set to custom blocks
  187. } else {
  188. blocks[j3 += short1] = null;//this is the air block i think.
  189. }
  190. }
  191. d10 += d12;
  192. d11 += d13;
  193. }
  194. d1 += d5;
  195. d2 += d6;
  196. d3 += d7;
  197. d4 += d8;
  198. }
  199. }
  200. }
  201. }
  202. }
  203.  
  204. public void replaceBlocksForBiome(int par1, int par2, Block[] blocks, byte[] par3ArrayOfByte, BiomeGenBase[] par4ArrayOfBiomeGenBase) {
  205. GameLogHelper.writeToLog(Level.INFO, "Replacing block for biome.");
  206. @SuppressWarnings("deprecation")
  207. ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, par1, par2, blocks, par3ArrayOfByte, par4ArrayOfBiomeGenBase);
  208. MinecraftForge.EVENT_BUS.post(event);
  209. if (event.getResult() == Result.DENY) return;
  210. double d0 = 0.03125D;
  211. this.stoneNoise = this.noisePerl.func_151599_a(this.stoneNoise, (double)(par1 * 16), (double)(par2 * 16), 16, 16, d0 * 2.0D, d0 * 2.0D, 1.0D);
  212. for (int k = 0; k < 16; ++k) {
  213. for (int l = 0; l < 16; ++l) {
  214. ModBiomes biomegenbase = (ModBiomes) par4ArrayOfBiomeGenBase[l + k * 16];
  215. biomegenbase.genTerrainBlocks(this.worldObj, this.rand, blocks, par3ArrayOfByte, par1 * 16 + k, par2 * 16 + l, this.stoneNoise[l + k * 16]);
  216. }
  217. }
  218. }
  219.  
  220. /**
  221. * loads or generates the chunk at the chunk location specified
  222. */
  223. @Override
  224. public Chunk loadChunk(int par1, int par2) {
  225. return this.provideChunk(par1, par2);
  226. }
  227.  
  228. /**
  229. * Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the
  230. * specified chunk from the map seed and chunk seed
  231. */
  232. @Override
  233. public Chunk provideChunk(int par1, int par2) {
  234. this.rand.setSeed((long)par1 * 341873128712L + (long)par2 * 132897987541L);
  235. Block[] ablock = new Block[65536];
  236. byte[] abyte = new byte[65536];
  237. this.func_147424_a(par1, par2, ablock);
  238. this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, par1 * 16, par2 * 16, 16, 16);
  239. this.replaceBlocksForBiome(par1, par2, ablock, abyte, this.biomesForGeneration);
  240. this.caveGenerator.func_151539_a(this, this.worldObj, par1, par2, ablock);
  241. this.ravineGenerator.func_151539_a(this, this.worldObj, par1, par2, ablock);
  242. if (this.mapFeaturesEnabled) {
  243. this.scatteredFeatureGenerator.func_151539_a(this, this.worldObj, par1, par2, ablock);
  244. }
  245. Chunk chunk = new Chunk(this.worldObj, ablock, abyte, par1, par2);
  246. byte[] abyte1 = chunk.getBiomeArray();
  247. for (int k = 0; k < abyte1.length; ++k){
  248. abyte1[k] = (byte)this.biomesForGeneration[k].biomeID;
  249. }
  250. chunk.generateSkylightMap();
  251. return chunk;
  252. }
  253.  
  254. /**
  255. * generates a subset of the level's terrain data. Takes 7 arguments: the
  256. * [empty] noise array, the position, and the size.
  257. */
  258. // TODO: initializeNoiseField?
  259. private void func_147423_a(int p_147423_1_, int p_147423_2_, int p_147423_3_) {
  260.  
  261. //DONT EDIT THS METHOD UNLES YOU KNOW WHAT UR DOING OR MAKE A COPY INCASE U MESS IT UP....
  262. //YOU HAVE BE WARNED !!!!!
  263.  
  264. this.noise5 = this.noiseGen6.generateNoiseOctaves(this.noise5, p_147423_1_, p_147423_3_, 5, 5, 200.0D, 200.0D, 0.5D);
  265. this.noise3 = this.noiseGen3.generateNoiseOctaves(this.noise3, p_147423_1_, p_147423_2_, p_147423_3_, 5, 33, 5, 8.555150000000001D, 4.277575000000001D, 8.555150000000001D);
  266. this.noise1 = this.noiseGen1.generateNoiseOctaves(this.noise1, p_147423_1_, p_147423_2_, p_147423_3_, 5, 33, 5, 684.412D, 684.412D, 684.412D);
  267. this.noise2 = this.noiseGen2.generateNoiseOctaves(this.noise2, p_147423_1_, p_147423_2_, p_147423_3_, 5, 33, 5, 684.412D, 684.412D, 684.412D);
  268. int l = 0;
  269. int i1 = 0;
  270. for (int j1 = 0; j1 < 5; ++j1) {
  271. for (int k1 = 0; k1 < 5; ++k1) {
  272. float f = 0.0F;
  273. float f1 = 0.0F;
  274. float f2 = 0.0F;
  275. byte b0 = 2;
  276. BiomeGenBase biomegenbase = this.biomesForGeneration[j1 + 2 + (k1 + 2) * 10];
  277. for (int l1 = -b0; l1 <= b0; ++l1) {
  278. for (int i2 = -b0; i2 <= b0; ++i2) {
  279. BiomeGenBase biomegenbase1 = this.biomesForGeneration[j1 + l1 + 2 + (k1 + i2 + 2) * 10];
  280. float f3 = biomegenbase1.rootHeight;
  281. float f4 = biomegenbase1.heightVariation;
  282. if (this.worldType == WorldType.AMPLIFIED && f3 > 0.0F) {
  283. f3 = 1.0F + f3 * 2.0F;
  284. f4 = 1.0F + f4 * 4.0F;
  285. }
  286. float f5 = this.parabolicField[l1 + 2 + (i2 + 2) * 5] / (f3 + 2.0F);
  287. if (biomegenbase1.rootHeight > biomegenbase.rootHeight) {
  288. f5 /= 2.0F;
  289. }
  290. f += f4 * f5;
  291. f1 += f3 * f5;
  292. f2 += f5;
  293. }
  294. }
  295. f /= f2;
  296. f1 /= f2;
  297. f = f * 0.9F + 0.1F;
  298. f1 = (f1 * 4.0F - 1.0F) / 8.0F;
  299. double d12 = this.noise5[i1] / 8000.0D;
  300. if (d12 < 0.0D) {
  301. d12 = -d12 * 0.3D;
  302. }
  303. d12 = d12 * 3.0D - 2.0D;
  304. if (d12 < 0.0D) {
  305. d12 /= 2.0D;
  306. if (d12 < -1.0D) {
  307. d12 = -1.0D;
  308. }
  309. d12 /= 1.4D;
  310. d12 /= 2.0D;
  311. } else {
  312. if (d12 > 1.0D) {
  313. d12 = 1.0D;
  314. }
  315. d12 /= 8.0D;
  316. }
  317. ++i1;
  318. double d13 = (double)f1;
  319. double d14 = (double)f;
  320. d13 += d12 * 0.2D;
  321. d13 = d13 * 8.5D / 8.0D;
  322. double d5 = 8.5D + d13 * 4.0D;
  323. for (int j2 = 0; j2 < 33; ++j2) {
  324. double d6 = ((double)j2 - d5) * 12.0D * 128.0D / 256.0D / d14;
  325. if (d6 < 0.0D) {
  326. d6 *= 4.0D;
  327. }
  328. double d7 = this.noise1[l] / 512.0D;
  329. double d8 = this.noise2[l] / 512.0D;
  330. double d9 = (this.noise3[l] / 10.0D + 1.0D) / 2.0D;
  331. double d10 = MathHelper.denormalizeClamp(d7, d8, d9) - d6;
  332. if (j2 > 29) {
  333. double d11 = (double)((float)(j2 - 29) / 3.0F);
  334. d10 = d10 * (1.0D - d11) + -10.0D * d11;
  335. }
  336. this.noiseArray[l] = d10;
  337. ++l;
  338. }
  339. }
  340. }
  341. }
  342.  
  343. /**
  344. * Checks to see if a chunk exists at x, y
  345. */
  346. @Override
  347. public boolean chunkExists(int par1, int par2) {
  348. return true;
  349. }
  350.  
  351. /**
  352. * Populates chunk with ores etc etc
  353. */
  354. @Override
  355. public void populate(IChunkProvider par1IChunkProvider, int par2, int par3) {
  356. BlockFalling.fallInstantly = true;
  357. int k = par2 * 16;
  358. int l = par3 * 16;
  359. BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(k + 16, l + 16);
  360. this.rand.setSeed(this.worldObj.getSeed());
  361. long i1 = this.rand.nextLong() / 2L * 2L + 1L;
  362. long j1 = this.rand.nextLong() / 2L * 2L + 1L;
  363. this.rand.setSeed((long)par2 * i1 + (long)par3 * j1 ^ this.worldObj.getSeed());
  364. boolean flag = false;
  365. MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(par1IChunkProvider, worldObj, rand, par2, par3, flag));
  366.  
  367. //Enable map features ??
  368. if (this.mapFeaturesEnabled) {
  369. this.scatteredFeatureGenerator.generateStructuresInChunk(this.worldObj, this.rand, par2, par3);
  370. }
  371. int k1;
  372. int l1;
  373. int i2;
  374.  
  375. //Add Lakes ??
  376. if (biomegenbase != BiomeGenBase.desert && biomegenbase != BiomeGenBase.desertHills && !flag && this.rand.nextInt(4) == 0
  377. && TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, flag, LAKE)) {
  378. k1 = k + this.rand.nextInt(16) + 8;
  379. l1 = this.rand.nextInt(256);
  380. i2 = l + this.rand.nextInt(16) + 8;
  381. (new WorldGenLakes(Blocks.water)).generate(this.worldObj, this.rand, k1, l1, i2);
  382. }
  383.  
  384. //Add Lakes ??
  385. if (TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, flag, LAVA) && !flag && this.rand.nextInt(8) == 0) {
  386. k1 = k + this.rand.nextInt(16) + 8;
  387. l1 = this.rand.nextInt(this.rand.nextInt(248) + 8);
  388. i2 = l + this.rand.nextInt(16) + 8;
  389.  
  390. if (l1 < 63 || this.rand.nextInt(10) == 0) {
  391. (new WorldGenLakes(Blocks.lava)).generate(this.worldObj, this.rand, k1, l1, i2);
  392. }
  393. }
  394.  
  395. //Add Dungeons ??
  396. boolean doGen = TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, flag, DUNGEON);
  397. for (k1 = 0; doGen && k1 < 8; ++k1) {
  398. l1 = k + this.rand.nextInt(16) + 8;
  399. i2 = this.rand.nextInt(256);
  400. int j2 = l + this.rand.nextInt(16) + 8;
  401. (new WorldGenDungeons()).generate(this.worldObj, this.rand, l1, i2, j2);
  402. }
  403.  
  404. biomegenbase.decorate(this.worldObj, this.rand, k, l);
  405. MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(par1IChunkProvider, worldObj, rand, par2, par3, flag));
  406. BlockFalling.fallInstantly = false;
  407. }
  408.  
  409. /**
  410. * Two modes of operation: if passed true, save all Chunks in one go. If passed false, save up to two chunks.
  411. * Return true if all chunks have been saved.
  412. */
  413. @Override
  414. public boolean saveChunks(boolean par1, IProgressUpdate par2IProgressUpdate) {
  415. return true;
  416. }
  417.  
  418. /**
  419. * Save extra data not associated with any Chunk. Not saved during autosave, only during world unload. Currently
  420. * unimplemented.
  421. */
  422. @Override
  423. public void saveExtraData() {}
  424.  
  425. /**
  426. * Unloads chunks that are marked to be unloaded. This is not guaranteed to unload every such chunk.
  427. */
  428. @Override
  429. public boolean unloadQueuedChunks() {
  430. return false;
  431. }
  432.  
  433. /**
  434. * Returns if the IChunkProvider supports saving.
  435. */
  436. @Override
  437. public boolean canSave() {
  438. return true;
  439. }
  440.  
  441. /**
  442. * Converts the instance data to a readable string.
  443. */
  444. @Override
  445. public String makeString() {
  446. return "RandomLevelSource";
  447. }
  448.  
  449. /**
  450. * Returns a list of creatures of the specified type that can spawn at the given location.
  451. */
  452. @SuppressWarnings("rawtypes")
  453. @Override
  454. /*public List getPossibleCreatures(EnumCreatureType par1EnumCreatureType, int par2, int par3, int par4) {
  455. BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(par2, par4);
  456. return par1EnumCreatureType == EnumCreatureType.monster && this.scatteredFeatureGenerator.func_143030_a(par2, par3, par4) ? this.scatteredFeatureGenerator.getScatteredFeatureSpawnList() : biomegenbase.getSpawnableList(par1EnumCreatureType);
  457. }*/
  458. public List getPossibleCreatures(EnumCreatureType type, int x, int y, int z){
  459. List list = new ArrayList();
  460. if( (type == EnumCreatureType.monster) || (type == EnumCreatureType.creature) )
  461. list.add(new BiomeGenBase.SpawnListEntry(EntityCyclops.class, 23, 4, 6));//Usual values for vanilla mobs
  462. list.add(new BiomeGenBase.SpawnListEntry(EntityLunarSpirit.class, 8, 1, 2));
  463. return list;
  464. }
  465.  
  466. @Override
  467. public int getLoadedChunkCount() {
  468. return 0;
  469. }
  470.  
  471. @Override
  472. public void recreateStructures(int par1, int par2) {
  473. if (this.mapFeaturesEnabled) {
  474. //this.scatteredFeatureGenerator.func_151539_a(this, this.worldObj, par1, par2, (Block[])null);
  475. }
  476. }
  477.  
  478. /**
  479. * Returns the location of the closest structure of the specified type. If
  480. * not found returns null.
  481. */
  482. @Override
  483. // TODO: findClosestStructure
  484. public ChunkPosition func_147416_a(World world, String arg1, int arg2, int arg3, int arg4) {
  485. return null;
  486. }
  487. }
Advertisement
Add Comment
Please, Sign In to add comment