Advertisement
ButterAleks

WorldGenCustomStructures

Feb 13th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.15 KB | None | 0 0
  1. package com.ButterAleks.RandomIdeas.world;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Random;
  5.  
  6. import com.ButterAleks.RandomIdeas.blocks.BlockOfPastry;
  7. import com.ButterAleks.RandomIdeas.init.ModBlocks;
  8. import com.ButterAleks.RandomIdeas.world.biomes.BiomePastry;
  9.  
  10. import net.minecraft.block.Block;
  11. import net.minecraft.init.Blocks;
  12. import net.minecraft.util.math.BlockPos;
  13. import net.minecraft.world.World;
  14. import net.minecraft.world.WorldType;
  15. import net.minecraft.world.biome.BiomeSnow;
  16. import net.minecraft.world.chunk.IChunkProvider;
  17. import net.minecraft.world.gen.IChunkGenerator;
  18. import net.minecraft.world.gen.feature.WorldGenerator;
  19. import net.minecraftforge.fml.common.IWorldGenerator;
  20. import scala.actors.threadpool.Arrays;
  21.  
  22. public class WorldGenCustomSturctures implements IWorldGenerator
  23. {
  24. public static final WorldGenSturcture DEATH_CAKE = new WorldGenSturcture("death_cake");
  25. public static final WorldGenSturcture FAKE_STEAK = new WorldGenSturcture("fake_steak");
  26. public static final WorldGenSturcture APPLE_CAKE = new WorldGenSturcture("apple_cake");
  27. public static final WorldGenSturcture LEMON_CAKE = new WorldGenSturcture("lemon_cake");
  28. public static final WorldGenSturcture LIME_CAKE = new WorldGenSturcture("lime_cake");
  29. public static final WorldGenSturcture BLUEBERRY_CAKE = new WorldGenSturcture("blueberry_cake");
  30. public static final WorldGenSturcture BLACKBERRY_CAKE = new WorldGenSturcture("blackberry_cake");
  31. public static final WorldGenSturcture RASPBERRY_CAKE = new WorldGenSturcture("raspberry_cake");
  32. public static final WorldGenSturcture COCONUT_CAKE = new WorldGenSturcture("coconut_cake");
  33. public static final WorldGenSturcture ORANGE_CAKE = new WorldGenSturcture("orange_cake");
  34.  
  35.  
  36. @Override
  37. public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider)
  38. {
  39. switch(world.provider.getDimension())
  40. {
  41. case 3:
  42. break;
  43. case 2:
  44. break;
  45. case 1:
  46. break;
  47. case 0:
  48. generateStructure(DEATH_CAKE, world, random, chunkX, chunkZ, 100, Blocks.SNOW_LAYER, BiomeSnow.class);
  49. generateStructure(FAKE_STEAK, world, random, chunkX, chunkZ, 100, Blocks.SNOW_LAYER, BiomeSnow.class);
  50. generateStructure(APPLE_CAKE, world, random, chunkX, chunkZ, 100, Blocks.SNOW_LAYER, BiomeSnow.class);
  51. generateStructure(LEMON_CAKE, world, random, chunkX, chunkZ, 100, Blocks.SNOW_LAYER, BiomeSnow.class);
  52. generateStructure(LIME_CAKE, world, random, chunkX, chunkZ, 100, Blocks.SNOW_LAYER, BiomeSnow.class);
  53. generateStructure(BLUEBERRY_CAKE, world, random, chunkX, chunkZ, 100, Blocks.SNOW_LAYER, BiomeSnow.class);
  54. generateStructure(BLACKBERRY_CAKE, world, random, chunkX, chunkZ, 100, Blocks.SNOW_LAYER, BiomeSnow.class);
  55. generateStructure(RASPBERRY_CAKE, world, random, chunkX, chunkZ, 100, Blocks.SNOW_LAYER, BiomeSnow.class);
  56. generateStructure(COCONUT_CAKE, world, random, chunkX, chunkZ, 100, Blocks.SNOW_LAYER, BiomeSnow.class);
  57. generateStructure(ORANGE_CAKE, world, random, chunkX, chunkZ, 9999, Blocks.SNOW_LAYER, BiomeSnow.class);
  58. break;
  59. case -1:
  60. }
  61. }
  62. private void generateStructure(WorldGenerator generator, World world, Random random, int chunkX, int chunkZ, int chance, Block topBlock, Class<?>... classes)
  63. {
  64. ArrayList<Class<?>> classesList = new ArrayList<Class<?>>(Arrays.asList(classes));
  65.  
  66. int x = (chunkX * 16) + random.nextInt(15);
  67. int z = (chunkZ * 16) + random.nextInt(15);
  68. int y = calculateGenerationHeight(world, x, z, topBlock);
  69. BlockPos pos = new BlockPos(x, y, z);
  70. Class<?> biome = world.provider.getBiomeForCoords(pos).getClass();
  71.  
  72. if(world.getWorldType() != WorldType.FLAT)
  73. {
  74. if(classesList.contains(biome))
  75. {
  76. if(random.nextInt(chance) == 0)
  77. {
  78. generator.generate(world, random, pos);
  79. }
  80. }
  81. }
  82. }
  83. private static int calculateGenerationHeight(World world, int x, int z, Block topBlock)
  84. {
  85. int y = world.getHeight();
  86. boolean foundGround = false;
  87. while(! foundGround && --y >= 0)
  88. {
  89. Block block = world.getBlockState(new BlockPos(x, y, z)).getBlock();
  90. foundGround = block == topBlock;
  91. }
  92. return y;
  93. }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement