Files
MinecraftCommunityEdition-c…/Minecraft.World/AetherBiomeDecorator.cpp
2026-03-03 11:12:53 -06:00

106 lines
3.0 KiB
C++

#include "stdafx.h"
#include "AetherBiomeDecorator.h"
#include "net.minecraft.world.level.h"
#include "net.minecraft.world.level.tile.h"
#include "net.minecraft.world.level.levelgen.feature.h"
#include "net.minecraft.world.level.biome.h"
#include "QuicksoilShelfFeature.h"
AetherBiomeDecorator::AetherBiomeDecorator(Biome *biome) : BiomeDecorator(biome)
{
// Aether ores replace holystone instead of stone
ambrosiumOreFeature = new OreFeature(Tile::ambrosiumOre_Id, 16, Tile::holystone_Id);
zaniteOreFeature = new OreFeature(Tile::zaniteOre_Id, 8, Tile::holystone_Id);
gravititeOreFeature = new OreFeature(Tile::gravititeOre_Id, 4, Tile::holystone_Id);
// Quicksoil shelves on island undersides
quicksoilShelfFeature = new QuicksoilShelfFeature();
// Aether decoration counts
treeCount = 2;
grassCount = 5;
flowerCount = 2;
// Disable overworld-specific features
sandCount = 0;
clayCount = 0;
gravelCount = 0;
deadBushCount = 0;
mushroomCount = 0;
reedsCount = 0;
cactusCount = 0;
waterlilyCount = 0;
hugeMushrooms = 0;
liquids = false;
}
void AetherBiomeDecorator::decorate()
{
PIXBeginNamedEvent(0, "Decorate Aether ores");
decorateAetherOres();
PIXEndNamedEvent();
PIXBeginNamedEvent(0, "Decorate Aether forests");
int forests = treeCount;
if (random->nextInt(10) == 0) forests += 1;
for (int i = 0; i < forests; i++)
{
int x = xo + random->nextInt(16) + 8;
int z = zo + random->nextInt(16) + 8;
Feature *tree = biome->getTreeFeature(random);
tree->init(1, 1, 1);
tree->place(level, random, x, level->getHeightmap(x, z), z);
delete tree;
}
PIXEndNamedEvent();
PIXBeginNamedEvent(0, "Decorate Aether flowers/grass");
for (int i = 0; i < flowerCount; i++)
{
int x = xo + random->nextInt(16) + 8;
int y = random->nextInt(Level::genDepth);
int z = zo + random->nextInt(16) + 8;
yellowFlowerFeature->place(level, random, x, y, z);
}
for (int i = 0; i < grassCount; i++)
{
int x = xo + random->nextInt(16) + 8;
int y = random->nextInt(Level::genDepth);
int z = zo + random->nextInt(16) + 8;
MemSect(50);
Feature *grassFeature = biome->getGrassFeature(random);
MemSect(0);
grassFeature->place(level, random, x, y, z);
delete grassFeature;
}
PIXEndNamedEvent();
PIXBeginNamedEvent(0, "Decorate Aether quicksoil shelves");
// Place quicksoil shelves on the undersides of islands
for (int i = 0; i < 3; i++)
{
int x = xo + random->nextInt(16) + 8;
int z = zo + random->nextInt(16) + 8;
int y = level->getHeightmap(x, z);
if (y > 0)
{
quicksoilShelfFeature->place(level, random, x, y, z);
}
}
PIXEndNamedEvent();
}
void AetherBiomeDecorator::decorateAetherOres()
{
level->setInstaTick(true);
// Ambrosium: common, full height range
decorateDepthSpan(20, ambrosiumOreFeature, 0, Level::genDepth);
// Zanite: moderate, lower half
decorateDepthSpan(10, zaniteOreFeature, 0, Level::genDepth / 2);
// Gravitite: rare, bottom quarter
decorateDepthSpan(4, gravititeOreFeature, 0, Level::genDepth / 4);
level->setInstaTick(false);
}