[Коротко] Своя генерация руд из «Ore Dictionary»

[Коротко] Своя генерация руд из «Ore Dictionary»

Версия(и) Minecraft
1.7.10
Источник
https://goo.gl/U6arzy
В данном очень маленьком ресурсе я постараюсь кратко в текстовом виде показать и рассказать как же генерировать руду из «Ore Dictionary».

  • Регестрация генератора блоков

  1. Для начала регистрируем новую переменную:
    Java:
     public static OreDictionaryBlockGenerator oreDictionaryBlockGenerator= new OreDictionaryBlockGenerator();
  2. Дальше регестрируем наш генератор:
    Java:
    GameRegistry.registerWorldGenerator(oreDictionaryBlockGenerator, 0);

  • Заполнение класса генератора

  1. Теперь в созданном классе после public class OreDictionaryBlockGenerator добавьте implements IWorldGenerator и в тело класса добавьте это:
    Java:
    @Override
        public void generate(Random rand, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
      
                generateOverworld(rand, chunkX, chunkZ, world);
                generateNether(rand, chunkX, chunkZ, world);
                generateEnd(rand, chunkX, chunkZ, world);
      
        }
    
        private void generateOverworld(Random rand, int chunkX, int chunkZ, World world) {
      
            generateOverworld(world, rand, chunkX * 16, chunkZ * 16);
    
        }
    
        private void generateNether(Random rand, int chunkX, int chunkZ, World world) {
      
            generateNether(world, rand, chunkX * 16, chunkZ * 16);
    
        }
    
        private void generateEnd(Random rand, int chunkX, int chunkZ, World world) {
      
            generateEnd(world, rand, chunkX * 16, chunkZ * 16);
    
        }
    
        public void generateOverworld(World world, Random rand, int blockXPos, int blockZPos) {
    
    
    
        }
    
        public void generateNether(World world, Random rand, int blockXPos, int blockZPos) {
    
    
    
        }
    
        public void generateEnd(World world, Random rand, int blockXPos, int blockZPos) {
    
    
    
        }
      
        public static void addOreSpawn(Block ore, Block replace, World world, Random rand, int blockXPos, int blockZPos, int maxX, int maxZ, int minVeinSize, int maxVeinSize, int minVeinsPerChunk, int maxVeinsPerChunk, int chanceToSpawn, int minY, int maxY) {
        /*
    
         * Просто воспользуйтесь этим методом для регистрации генерируемых руд.
    
         * @param block Блок, который хотите генерировать
    
         * @param block replace Блок, рядом с которым хотите генерировать
    
         * @param world Мир (не измерение), в котором этот блок должен генерироваться
    
         * @param random Случайное число для получения координат генерации блока
    
         * @param blockXPos Число для того, чтобы было пустое место по координатам X для метода генерации (использует кварцевая руда)
    
         * @param blockZPos Число для того, чтобы было пустое место по координатам Z для метода генерации (использует кварцевая руда)
    
         * @param maxX Число, которое настроит максимальную X координату для генерации руды на оси X на чанк
    
         * @param maxZ Число, которое настроит максимальную Z координату для генерации руды на оси Z на чанк
    
         * @param minVeinSize Минимальное число блоков руды в одной жиле
    
         * @param maxVeinSize Максимальное число блоков руды в одной жиле
    
         * @param minVeinsPerChunk Минимальное число жил в чанке
    
         * @param maxVeinsPerChunk Максимальное число жил в чанке
    
         * @param chancesToSpawn Шанс генерации блоков на чанк в процентах
    
         * @param minY Минимальная координата Y на которой руда может сгенерироваться
    
         * @param maxY Максимальная координата Y на которой руда может сгенерироваться
    
         */
    
            if (rand.nextInt(101) < (100 - chanceToSpawn)) return;
    
            int veins = rand.nextInt(maxVeinsPerChunk - minVeinsPerChunk + 1) + minVeinsPerChunk;
    
            for (int i = 0; i < veins; i++) {
    
                int posX = blockXPos + rand.nextInt(maxX);
                int posY = minY + rand.nextInt(maxY - minY);
                int posZ = blockZPos + rand.nextInt(maxZ);
      
                (new WorldGenMinable(ore, minVeinSize + rand.nextInt(maxVeinSize - minVeinSize + 1), replace)).generate(world, rand, posX, posY, posZ);
    
            }
        }

  • Генерация руд из «Ore Dictionary»

  1. Внутри любого из методов public void generateOverworld(World world, Random rand, int blockXPos, int blockZPos), public void generateNether(World world, Random rand, int blockXPos, int blockZPos), или public void generateEnd(World world, Random rand, int blockXPos, int blockZPos) (Как понятно с названия данные методы отвечают за генерацию в том или ином измерений) надо вписать данные строки кода:
    Java:
    List<ItemStack> oreCopper = OreDictionary.getOres("oreCopper"); //Берётся лист. В данном сличай "oreCopper" - это имя блока из «Ore Dictionary».
    if (!oreCopper.isEmpty()) addOreSpawn(Block.getBlockFromItem(oreCopper.get(0).getItem()), Blocks.stone, ores.get(0).getItemDamage(), world, rand, blockXPos, blockZPos, maxX, maxZ, minVeinSize, maxVeinSize, minVeinsPerChunk, maxVeinsPerChunk, chanceToSpawn, minY, maxY); //Тут идёт проверка что лист не пустой, достаётся первый стак("oreCopper") и генерируется.

  • Конец
Итого теперь если у вас установлен мод в котором есть блок с таким «Ore Dictionary», то они будут генерироваться в мире.

В качестве примера если кто-то, что-то не понял, могу привести генератор из своего мода Ore-Deposits-mod:
Java:
public class OresDepositsWorldGenerator implements IWorldGenerator {

    @Override
    public void generate(Random rand, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {

        generateOverworld(rand, chunkX, chunkZ, world);

    }

    private void generateOverworld(Random rand, int chunkX, int chunkZ, World world) {

        generateOverworld(world, rand, chunkX * 16, chunkZ * 16);

    }

    public void generateOverworld(World world, Random rand, int blockXPos, int blockZPos) {

        List<ItemStack> oreCopper = OreDictionary.getOres("oreCopper");
        if (!oreCopper.isEmpty()) addOreSpawn(Block.getBlockFromItem(oreCopper.get(0).getItem()), Blocks.stone, world, rand, blockXPos, blockZPos, 24, 24, 1, 6, 1, 8, 50, 5, 54);
                                      
    }

    public static void addOreSpawn(Block ore, Block replace, World world, Random rand, int blockXPos, int blockZPos, int maxX, int maxZ, int minVeinSize, int maxVeinSize, int minVeinsPerChunk, int maxVeinsPerChunk, int chanceToSpawn, int minY, int maxY) {

       if (rand.nextInt(101) < (100 - chanceToSpawn)) return;

        int veins = rand.nextInt(maxVeinsPerChunk - minVeinsPerChunk + 1) + minVeinsPerChunk;
  
            for (int i = 0; i < veins; i++){

            int posX = blockXPos + rand.nextInt(maxX);
            int posY = minY + rand.nextInt(maxY - minY);
            int posZ = blockZPos + rand.nextInt(maxZ);

            (new WorldGenMinable(ore, minVeinSize + rand.nextInt(maxVeinSize - minVeinSize + 1), replace)).generate(world, rand, posX, posY, posZ);

        }
    }
}
Автор
Garik
Просмотры
1,734
Первый выпуск
Обновление
Оценка
4.00 звёзд 3 оценок

Другие ресурсы пользователя Garik

Последние рецензии

Хороший тутор. Молодец, я доволен (с)
Garik
Garik
Спасибо (с)
Добавь про вес генератора как у меня в туторе по руде, и будет ОК)
Garik
Garik
Что простите? Вес? Что это?
Сверху