Advertisement
tehrelt

GenerateOre

Aug 31st, 2019
1,569
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.23 KB | None | 0 0
  1. package com.relt.toten.world.generate;
  2.  
  3. import java.util.Random;
  4.  
  5. import com.google.common.base.Predicate;
  6. import com.relt.toten.init.InitBlocks;
  7.  
  8. import net.minecraft.block.state.IBlockState;
  9. import net.minecraft.block.state.pattern.BlockMatcher;
  10. import net.minecraft.init.Blocks;
  11. import net.minecraft.util.math.BlockPos;
  12. import net.minecraft.world.World;
  13. import net.minecraft.world.chunk.IChunkProvider;
  14. import net.minecraft.world.gen.IChunkGenerator;
  15. import net.minecraft.world.gen.feature.WorldGenMinable;
  16. import net.minecraftforge.fml.common.IWorldGenerator;
  17.  
  18. public class GenerateOre implements IWorldGenerator {
  19.  
  20.     @Override
  21.     public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
  22.  
  23.         switch(world.provider.getDimension()) { //Получение ID измерения
  24.    
  25.             case -1: //Нэзер
  26.                 break;
  27.             case 0: //Обычний мир
  28.                 runGenerator(InitBlocks.DREMIDIY_ORE.getDefaultState(), 1, 8, 0, 16, BlockMatcher.forBlock(Blocks.STONE), world, random, chunkX, chunkZ); //Вызов генератора с заданными параметрами
  29.                 break;
  30.             case 1: //Край
  31.                 break;
  32.              
  33.         /*
  34.             BlocksInit.TEST_ORE.getDefaultState() - генерируемый блок
  35.             1 - максимальное количество блоков в месторождении, можно задать вариацию записью 1 + random.nextInt(4) для генерации от 1-го до 5-ти блоков в месторождении
  36.             8 - количество месторождений на чанк
  37.             0 - минимальная высота генерации
  38.             16 - максимальная высота генерации
  39.             BlockMatcher.forBlock(Blocks.STONE) - блок, который можно заменить на руду
  40.         */
  41.  
  42.         }
  43.      
  44.     }
  45.  
  46.     private void runGenerator(IBlockState blockToGen, int blockAmount,  int chancesToSpawn, int minHeight, int maxHeight, Predicate<IBlockState> blockToReplace, World world, Random rand, int chunk_X, int chunk_Z){ //Объявление генератора
  47.  
  48.         if (minHeight < 0 || maxHeight > 256 || minHeight > maxHeight) //Проверка на правильность координаты Y
  49.          
  50.             throw new IllegalArgumentException("Illegal Height Arguments for WorldGenerator"); //Если неправильно то будет ошибка в консоли
  51.  
  52.     WorldGenMinable generator = new WorldGenMinable(blockToGen, blockAmount, blockToReplace); //Новый экземпляр генератора
  53.  
  54.     int heightdiff = maxHeight - minHeight + 1;
  55.  
  56.     for (int i = 0; i < chancesToSpawn; i++){ //Запуск генератора в каждом чанке с заданным параметрами
  57.  
  58.             int x = chunk_X * 16 +rand.nextInt(16);
  59.             int y = minHeight + rand.nextInt(heightdiff);
  60.             int z = chunk_Z * 16 + rand.nextInt(16);
  61.  
  62.             generator.generate(world, rand, new BlockPos(x, y, z));  
  63.         }
  64.     }
  65.  
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement