- 2,932
- 44
- 598
Доброго времени суток Земляне и Чужие!
Сегодня у меня появился вопрос: Вот я сделал генератор "цветов" допустим:
Потом сделал BiomeDecorator который использует этот генератор:
Теперь как его использовать в своём биоме?
По идей это должно вот так работать:
Но там я так понял запускается рекурсия из за чего мир просто не загружается.
Сегодня у меня появился вопрос: Вот я сделал генератор "цветов" допустим:
Java:
public class AshGen extends WorldGenerator
{
public AshGen(){}
@Override
public boolean generate(World worldIn, Random rand, BlockPos position)
{
BlockBush ash = (BlockBush) RegBlocks.ash;
for (int i = 0; i < 64; ++i)
{
BlockPos blockpos = position.add(rand.nextInt(8) - rand.nextInt(8), rand.nextInt(4) - rand.nextInt(4), rand.nextInt(8) - rand.nextInt(8));
if (worldIn.isAirBlock(blockpos) && (!worldIn.provider.isNether() || blockpos.getY() < 255) && ash.canBlockStay(worldIn, blockpos, ash.getDefaultState()))
{
worldIn.setBlockState(blockpos, ash.getDefaultState(), 2);
}
}
return true;
}
}
Java:
public class BiomeDecoratorBurnedWood extends BiomeDecorator {
protected AshGen ashGen;
public BiomeDecoratorBurnedWood() {super();}
@Override
public void decorate(World worldIn, Random random, Biome biome, BlockPos pos)
{
if (decorating)
{
throw new RuntimeException("Already decorating");
}
else
{
chunkPos = pos;
genDecorations(biome, worldIn, random);
decorating = false;
}
}
@Override
protected void genDecorations(Biome biomeIn, World worldIn, Random random)
{
MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(worldIn, random, chunkPos));
generateAsh(worldIn, biomeIn, random, chunkPos);
if (generateFalls)
{
generateFalls(worldIn, random, chunkPos);
}
MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Post(worldIn, random, chunkPos));
}
private void generateAsh(World worldIn, Biome biomeIn, Random random, BlockPos chunkPos)
{
if(TerrainGen.decorate(worldIn, random, chunkPos, DecorateBiomeEvent.Decorate.EventType.FLOWERS))
for (int numAshGenerated = 0; numAshGenerated < flowersPerChunk; ++numAshGenerated)
{
int ashX = random.nextInt(16) + 8;
int ashZ = random.nextInt(16) + 8;
int yRange = worldIn.getHeight(chunkPos.add(ashX, 0, ashZ)).getY() + 32;
ashGen = new AshGen();
if (yRange > 0)
{
int ashY = random.nextInt(yRange);
BlockPos ashBlockPos = chunkPos.add(ashX, ashY, ashZ);
ashGen.generate(worldIn, random, ashBlockPos);
}
}
}
private void generateFalls(World worldIn, Random random, BlockPos chunkPos)
{
if(TerrainGen.decorate(worldIn, random, chunkPos, DecorateBiomeEvent.Decorate.EventType.LAKE_WATER))
for (int k5 = 0; k5 < 50; ++k5)
{
int i10 = random.nextInt(16) + 8;
int l13 = random.nextInt(16) + 8;
int i17 = random.nextInt(248) + 8;
if (i17 > 0)
{
int k19 = random.nextInt(i17);
BlockPos blockpos6 = chunkPos.add(i10, k19, l13);
(new WorldGenLiquids(Blocks.FLOWING_WATER)).generate(worldIn, random, blockpos6);
}
}
if(TerrainGen.decorate(worldIn, random, chunkPos, DecorateBiomeEvent.Decorate.EventType.LAKE_LAVA))
for (int l5 = 0; l5 < 20; ++l5)
{
int j10 = random.nextInt(16) + 8;
int i14 = random.nextInt(16) + 8;
int j17 = random.nextInt(random.nextInt(random.nextInt(240) + 8) + 8);
BlockPos blockpos3 = chunkPos.add(j10, j17, i14);
(new WorldGenLiquids(Blocks.FLOWING_LAVA)).generate(worldIn, random, blockpos3);
}
}
private void generate(World worldIn, Random random, BlockPos chunkPos, EventType eventType, WorldGenerator generator, int countPerChunk)
{
if(TerrainGen.decorate(worldIn, random, chunkPos, eventType))
{
for (int count = 0; count < countPerChunk; ++count)
{
int randX = random.nextInt(16) + 8;
int randZ = random.nextInt(16) + 8;
generator.generate(worldIn, random, worldIn.getTopSolidOrLiquidBlock(chunkPos.add(randX, 0, randZ)));
}
}
}
}
По идей это должно вот так работать:
Java:
@Override
public BiomeDecorator createBiomeDecorator()
{
BiomeDecorator biomeDecorator = new BiomeDecoratorBurnedWood();
biomeDecorator.flowersPerChunk = 50;
return getModdedBiomeDecorator(biomeDecorator);
}