Понедельник, 04.08.2025Приветствую Вас, Гость! | RSS

Генерация блоков

Для того, чтобы сгенерировать какой-нибудь блок, необходимо создать и зарегистрировать новую генерацию.


GameRegistry.registerWorldGenerator(new WorldGenTest(), 0);


Теперь создаём файл WorldGenTest.java и пишем приблизительно так:


package net.tutmod.worldgen;

import java.util.Random;

import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;

import net.tutmod.Main;

import cpw.mods.fml.common.IWorldGenerator;

public class WorldGenTest implements IWorldGenerator {
     
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        switch(world.provider.dimensionId) {
        case 0:
        generateOverworld(world, random, chunkX*16, chunkZ*16);
        }
    }
 
        public void generateOverworld(World world, Random rand, int chunkX, int chunkZ) {
        for (int i = 0; i < 20; i++) {
        int randPosX = chunkX + rand.nextInt(16);
        int randPosY = rand.nextInt(64);
        int randPosZ = chunkZ + rand.nextInt(16);
 
        (new WorldGenMinable(Main.testOre, 10)).generate(world, rand,
        randPosX, randPosY, randPosZ);
        }
        }
        
}


Частота генерации

То, насколько часто будет встречаться блок, зависит от переменной i. Вместо числа 20 необходимо подставить своё.

Высота генерации

Максимальная высота регулируется параметром int randPosY.

Размер жилы

В параметре new WorldGenMinable указывается блок и максимальное количество в одной жиле.

Генерация в Нижнем мире


    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        switch(world.provider.dimensionId) {

        case 1:

        generateNether(world, random, chunkX*16, chunkZ*16);
        }
    }

        public void generateNether(World world, Random rand, int chunkX, int chunkZ) {
        for (int i = 0; i < 10; i++) {
        int randPosX = chunkX + rand.nextInt(16);
        int randPosY = rand.nextInt(64);
        int randPosZ = chunkZ + rand.nextInt(16);
 
        (new WorldGenMinable(Main.testOre, 8)).generate(world, rand,
        randPosX, randPosY, randPosZ);
        }
        }


Генерация в Крае


    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        switch(world.provider.dimensionId) {

        case 2:

        generateEnd(world, random, chunkX*16, chunkZ*16);
        }
    }

        public void generateEnd(World world, Random rand, int chunkX, int chunkZ) {
        for (int i = 0; i < 10; i++) {
        int randPosX = chunkX + rand.nextInt(16);
        int randPosY = rand.nextInt(64);
        int randPosZ = chunkZ + rand.nextInt(16);
 
        (new WorldGenMinable(Main.testOre, 10)).generate(world, rand,
        randPosX, randPosY, randPosZ);
        }
        }


 

Теперь блок будет генерироваться с указанными параметрами.