- Баллы
- 61
- Имя в Minecraft
- sidey383
Цель: Сделать сложный генератор мира, похожий на генератор мира из стандартного майнкрафта
Проблема: Генерация сложных ландшафтов и плавных переходов между биомов с разной высотой (к примеру, горы и равнины)
На данный момент имеется это:
Буду благодарен, если кто-то направит на какую-то статью, поделиться своими идеями или отправит какие-то примеры подобных генераторов.
Проблема: Генерация сложных ландшафтов и плавных переходов между биомов с разной высотой (к примеру, горы и равнины)
На данный момент имеется это:
Код:
public class WorldGenerator extends ChunkGenerator {
@Override
public ChunkData generateChunkData(World world, Random random, int chunkX, int chunkZ, BiomeGrid biome) {
SimplexOctaveGenerator generator = new SimplexOctaveGenerator(new Random(world.getSeed()), 8);
SimplexOctaveGenerator secondgenerator = new SimplexOctaveGenerator(new Random(world.getSeed()+101), 8);
ChunkData chunk = createChunkData(world);
generator.setScale(0.005D);
secondgenerator.setScale(0.01D);
for (int X = 0; X < 16; X++)
for (int Z = 0; Z < 16; Z++) {
double h2 = secondgenerator.noise(chunkX*16+X, chunkZ*16+Z, 0.5D, 0.5D);
double h1 = generator.noise(chunkX*16+X, chunkZ*16+Z, 0.5D, 0.5D);
int currentHeight = (int) (h1*h1*h2*15+90);
for (int i = currentHeight-1; i > 0; i--)
chunk.setBlock(X, i, Z, Material.STONE);
chunk.setBlock(X, 0, Z, Material.BEDROCK);
int dirt = (int) (4);
currentHeight = currentHeight + dirt;
if(currentHeight < 80)
{
for(int y = currentHeight-dirt; y <= currentHeight; y++)
chunk.setBlock(X, y, Z, Material.GRAVEL);
for(int y = currentHeight+1; y <= 80; y++)
chunk.setBlock(X, y, Z, Material.WATER);
}else {
for(int y = currentHeight-dirt; y <= currentHeight; y++)
{
chunk.setBlock(X, y, Z, y == currentHeight?Material.GRASS_BLOCK: Material.DIRT);
}
}
}
return chunk;
}
@Override
public List<BlockPopulator> getDefaultPopulators(World world) {
ArrayList<BlockPopulator> populators = new ArrayList<>();
populators.add(new TreePopulator());
return populators;
}
}
Код:
public class TreePopulator extends BlockPopulator{
@Override
public void populate(World world, Random random, Chunk chunk) {
int amount = random.nextInt(4)+1;
for (int i = 1; i < amount; i++) {
int X = random.nextInt(15);
int Z = random.nextInt(15);
int Y;
for (Y = world.getMaxHeight()-1; chunk.getBlock(X, Y, Z).getType() == Material.AIR; Y--);
world.generateTree(chunk.getBlock(X, Y, Z).getLocation(), TreeType.BIRCH);
}
}
}
только щас посмотрел что он уже дохлый. Года 3-4 назад был нормальный