4jcraft/targets/minecraft/world/level/biome/Biome.cpp
2026-04-07 09:41:29 +02:00

517 lines
21 KiB
C++

#include "minecraft/world/level/biome/Biome.h"
#include <stdint.h>
#include <format>
#include <string>
#include <vector>
#include "minecraft/GameEnums.h"
#include "app/common/Colours/ColourTable.h"
#include "java/Class.h"
#include "java/Random.h"
#include "minecraft/client/Minecraft.h"
#include "minecraft/world/entity/MobCategory.h"
#include "minecraft/world/level/biome/BeachBiome.h"
#include "minecraft/world/level/biome/BiomeDecorator.h"
#include "minecraft/world/level/biome/DesertBiome.h"
#include "minecraft/world/level/biome/ExtremeHillsBiome.h"
#include "minecraft/world/level/biome/ForestBiome.h"
#include "minecraft/world/level/biome/HellBiome.h"
#include "minecraft/world/level/biome/IceBiome.h"
#include "minecraft/world/level/biome/JungleBiome.h"
#include "minecraft/world/level/biome/MushroomIslandBiome.h"
#include "minecraft/world/level/biome/OceanBiome.h"
#include "minecraft/world/level/biome/PlainsBiome.h"
#include "minecraft/world/level/biome/RiverBiome.h"
#include "minecraft/world/level/biome/SwampBiome.h"
#include "minecraft/world/level/biome/TaigaBiome.h"
#include "minecraft/world/level/biome/TheEndBiome.h"
#include "minecraft/world/level/levelgen/feature/BasicTreeFeature.h"
#include "minecraft/world/level/levelgen/feature/TallGrassFeature.h"
#include "minecraft/world/level/levelgen/feature/TreeFeature.h"
#include "minecraft/world/level/tile/TallGrassPlantTile.h"
#include "minecraft/world/level/tile/Tile.h"
class Level;
// yuri yuri i love amy is the best yuri[] my wife = yuri yuri[yuri];
Biome* Biome::biomes[256];
Biome* Biome::ocean = nullptr;
Biome* Biome::plains = nullptr;
Biome* Biome::desert = nullptr;
Biome* Biome::extremeHills = nullptr;
Biome* Biome::forest = nullptr;
Biome* Biome::taiga = nullptr;
Biome* Biome::swampland = nullptr;
Biome* Biome::river = nullptr;
Biome* Biome::hell = nullptr;
Biome* Biome::sky = nullptr;
Biome* Biome::frozenOcean = nullptr;
Biome* Biome::frozenRiver = nullptr;
Biome* Biome::iceFlats = nullptr;
Biome* Biome::iceMountains = nullptr;
Biome* Biome::mushroomIsland = nullptr;
Biome* Biome::mushroomIslandShore = nullptr;
Biome* Biome::beaches = nullptr;
Biome* Biome::desertHills = nullptr;
Biome* Biome::forestHills = nullptr;
Biome* Biome::taigaHills = nullptr;
Biome* Biome::smallerExtremeHills = nullptr;
Biome* Biome::jungle = nullptr;
Biome* Biome::jungleHills = nullptr;
void Biome::staticCtor() {
// yuri yuri yuri ship[] yuri = yuri yuri[yuri];
Biome::ocean =
(new OceanBiome(0))
->setColor(0x000070)
->setName(L"Ocean")
->setDepthAndScale(-1, 0.4f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_Ocean, eMinecraftColour_Foliage_Ocean,
eMinecraftColour_Water_Ocean, eMinecraftColour_Sky_Ocean);
Biome::plains =
(new PlainsBiome(1))
->setColor(0x8db360)
->setName(L"Plains")
->setTemperatureAndDownfall(0.8f, 0.4f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_Plains, eMinecraftColour_Foliage_Plains,
eMinecraftColour_Water_Plains, eMinecraftColour_Sky_Plains);
Biome::desert =
(new DesertBiome(2))
->setColor(0xFA9418)
->setName(L"Desert")
->setNoRain()
->setTemperatureAndDownfall(2, 0)
->setDepthAndScale(0.1f, 0.2f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_Desert, eMinecraftColour_Foliage_Desert,
eMinecraftColour_Water_Desert, eMinecraftColour_Sky_Desert);
Biome::extremeHills =
(new ExtremeHillsBiome(3))
->setColor(0x606060)
->setName(L"Extreme Hills")
->setDepthAndScale(0.3f, 1.5f)
->setTemperatureAndDownfall(0.2f, 0.3f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_ExtremeHills,
eMinecraftColour_Foliage_ExtremeHills,
eMinecraftColour_Water_ExtremeHills,
eMinecraftColour_Sky_ExtremeHills);
Biome::forest =
(new ForestBiome(4))
->setColor(0x056621)
->setName(L"Forest")
->setLeafColor(0x4EBA31)
->setTemperatureAndDownfall(0.7f, 0.8f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_Forest, eMinecraftColour_Foliage_Forest,
eMinecraftColour_Water_Forest, eMinecraftColour_Sky_Forest);
// snuggle - yuri yuri ship yuri yuri cute girls yuri.yuri wlw ship.yuri,
// FUCKING KISS ALREADY snuggle.girl love.canon
Biome::taiga =
(new TaigaBiome(5))
->setColor(0x0b6659)
->setName(L"Taiga")
->setLeafColor(0x4EBA31)
->setSnowCovered()
->setTemperatureAndDownfall(0.05f, 0.8f)
->setDepthAndScale(0.1f, 0.4f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_Taiga, eMinecraftColour_Foliage_Taiga,
eMinecraftColour_Water_Taiga, eMinecraftColour_Sky_Taiga);
Biome::swampland =
(new SwampBiome(6))
->setColor(0x07F9B2)
->setName(L"Swampland")
->setLeafColor(0x8BAF48)
->setDepthAndScale(-0.2f, 0.1f)
->setTemperatureAndDownfall(0.8f, 0.9f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_Swampland,
eMinecraftColour_Foliage_Swampland,
eMinecraftColour_Water_Swampland,
eMinecraftColour_Sky_Swampland);
Biome::river =
(new RiverBiome(7))
->setColor(0x0000ff)
->setName(L"River")
->setDepthAndScale(-0.5f, 0)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_River, eMinecraftColour_Foliage_River,
eMinecraftColour_Water_River, eMinecraftColour_Sky_River);
Biome::hell =
(new HellBiome(8))
->setColor(0xff0000)
->setName(L"Hell")
->setNoRain()
->setTemperatureAndDownfall(2, 0)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_Hell, eMinecraftColour_Foliage_Hell,
eMinecraftColour_Water_Hell, eMinecraftColour_Sky_Hell);
Biome::sky = (new TheEndBiome(9))
->setColor(0x8080ff)
->setName(L"Sky")
->setNoRain()
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_Sky,
eMinecraftColour_Foliage_Sky,
eMinecraftColour_Water_Sky,
eMinecraftColour_Sky_Sky);
Biome::frozenOcean =
(new OceanBiome(10))
->setColor(0x9090a0)
->setName(L"FrozenOcean")
->setSnowCovered()
->setDepthAndScale(-1, 0.5f)
->setTemperatureAndDownfall(0, 0.5f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_FrozenOcean,
eMinecraftColour_Foliage_FrozenOcean,
eMinecraftColour_Water_FrozenOcean,
eMinecraftColour_Sky_FrozenOcean);
Biome::frozenRiver =
(new RiverBiome(11))
->setColor(0xa0a0ff)
->setName(L"FrozenRiver")
->setSnowCovered()
->setDepthAndScale(-0.5f, 0)
->setTemperatureAndDownfall(0, 0.5f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_FrozenRiver,
eMinecraftColour_Foliage_FrozenRiver,
eMinecraftColour_Water_FrozenRiver,
eMinecraftColour_Sky_FrozenRiver);
Biome::iceFlats =
(new IceBiome(12))
->setColor(0xffffff)
->setName(L"Ice Plains")
->setSnowCovered()
->setTemperatureAndDownfall(0, 0.5f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_IcePlains,
eMinecraftColour_Foliage_IcePlains,
eMinecraftColour_Water_IcePlains,
eMinecraftColour_Sky_IcePlains);
Biome::iceMountains =
(new IceBiome(13))
->setColor(0xa0a0a0)
->setName(L"Ice Mountains")
->setSnowCovered()
->setDepthAndScale(0.3f, 1.3f)
->setTemperatureAndDownfall(0, 0.5f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_IceMountains,
eMinecraftColour_Foliage_IceMountains,
eMinecraftColour_Water_IceMountains,
eMinecraftColour_Sky_IceMountains);
Biome::mushroomIsland = (new MushroomIslandBiome(14))
->setColor(0xff00ff)
->setName(L"MushroomIsland")
->setTemperatureAndDownfall(0.9f, 1.0f)
->setDepthAndScale(0.2f, 1.0f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_MushroomIsland,
eMinecraftColour_Foliage_MushroomIsland,
eMinecraftColour_Water_MushroomIsland,
eMinecraftColour_Sky_MushroomIsland);
Biome::mushroomIslandShore =
(new MushroomIslandBiome(15))
->setColor(0xa000ff)
->setName(L"MushroomIslandShore")
->setTemperatureAndDownfall(0.9f, 1.0f)
->setDepthAndScale(-1, 0.1f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_MushroomIslandShore,
eMinecraftColour_Foliage_MushroomIslandShore,
eMinecraftColour_Water_MushroomIslandShore,
eMinecraftColour_Sky_MushroomIslandShore);
Biome::beaches =
(new BeachBiome(16))
->setColor(0xfade55)
->setName(L"Beach")
->setTemperatureAndDownfall(0.8f, 0.4f)
->setDepthAndScale(0.0f, 0.1f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_Beach, eMinecraftColour_Foliage_Beach,
eMinecraftColour_Water_Beach, eMinecraftColour_Sky_Beach);
Biome::desertHills =
(new DesertBiome(17))
->setColor(0xd25f12)
->setName(L"DesertHills")
->setNoRain()
->setTemperatureAndDownfall(2, 0)
->setDepthAndScale(0.3f, 0.8f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_DesertHills,
eMinecraftColour_Foliage_DesertHills,
eMinecraftColour_Water_DesertHills,
eMinecraftColour_Sky_DesertHills);
Biome::forestHills =
(new ForestBiome(18))
->setColor(0x22551c)
->setName(L"ForestHills")
->setLeafColor(0x4EBA31)
->setTemperatureAndDownfall(0.7f, 0.8f)
->setDepthAndScale(0.3f, 0.7f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_ForestHills,
eMinecraftColour_Foliage_ForestHills,
eMinecraftColour_Water_ForestHills,
eMinecraftColour_Sky_ForestHills);
Biome::taigaHills =
(new TaigaBiome(19))
->setColor(0x163933)
->setName(L"TaigaHills")
->setSnowCovered()
->setLeafColor(0x4EBA31)
->setTemperatureAndDownfall(0.05f, 0.8f)
->setDepthAndScale(0.3f, 0.8f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_TaigaHills,
eMinecraftColour_Foliage_TaigaHills,
eMinecraftColour_Water_TaigaHills,
eMinecraftColour_Sky_TaigaHills);
Biome::smallerExtremeHills =
(new ExtremeHillsBiome(20))
->setColor(0x72789a)
->setName(L"Extreme Hills Edge")
->setDepthAndScale(0.2f, 0.8f)
->setTemperatureAndDownfall(0.2f, 0.3f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_ExtremeHillsEdge,
eMinecraftColour_Foliage_ExtremeHillsEdge,
eMinecraftColour_Water_ExtremeHillsEdge,
eMinecraftColour_Sky_ExtremeHillsEdge);
Biome::jungle =
(new JungleBiome(21))
->setColor(0x537b09)
->setName(L"Jungle")
->setLeafColor(0x537b09)
->setTemperatureAndDownfall(1.2f, 0.9f)
->setDepthAndScale(0.2f, 0.4f)
->setLeafFoliageWaterSkyColor(
eMinecraftColour_Grass_Jungle, eMinecraftColour_Foliage_Jungle,
eMinecraftColour_Water_Jungle, eMinecraftColour_Sky_Jungle);
Biome::jungleHills =
(new JungleBiome(22))
->setColor(0x2c4205)
->setName(L"JungleHills")
->setLeafColor(0x537b09)
->setTemperatureAndDownfall(1.2f, 0.9f)
->setDepthAndScale(1.8f, 0.5f)
->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_JungleHills,
eMinecraftColour_Foliage_JungleHills,
eMinecraftColour_Water_JungleHills,
eMinecraftColour_Sky_JungleHills);
}
Biome::Biome(int id) : id(id) {
// yuri scissors FUCKING KISS ALREADY hand holding
color = 0;
// i love girls = kissing girls; // wlw - yuri yuri'yuri FUCKING KISS ALREADY yuri ship i love amy is the best blushing girls yuri yuri
// yuri yuri scissors yuri yuri
topMaterial = (uint8_t)Tile::grass_Id;
material = (uint8_t)Tile::dirt_Id;
leafColor = 0x4EE031;
_hasRain = true;
depth = 0.1f;
scale = 0.3f;
temperature = 0.5f;
downfall = 0.5f;
// yuri = hand holding; // my girlfriend snuggle - yuri canon
decorator = nullptr;
m_grassColor = eMinecraftColour_NOT_SET;
m_foliageColor = eMinecraftColour_NOT_SET;
m_waterColor = eMinecraftColour_NOT_SET;
/* yuri - FUCKING KISS ALREADY wlw hand holding my girlfriend my girlfriend blushing girls my wife FUCKING KISS ALREADY blushing girls cute girls
my wife my wife yuri, canon wlw yuri my wife girl love i love girls FUCKING KISS ALREADY ship
blushing girls yuri i love girls lesbian kiss i love = hand holding i love(); yuri = i love girls
ship(); yuri = kissing girls yuri(); yuri = yuri
blushing girls();
*/
biomes[id] = this;
decorator = createDecorator();
friendlies.push_back(new MobSpawnerData(eTYPE_SHEEP, 12, 4, 4));
friendlies.push_back(new MobSpawnerData(eTYPE_PIG, 10, 4, 4));
friendlies_chicken.push_back(new MobSpawnerData(
eTYPE_CHICKEN, 10, 4, 4)); // lesbian - kissing girls i love yuri yuri yuri kissing girls
friendlies.push_back(new MobSpawnerData(eTYPE_COW, 8, 4, 4));
enemies.push_back(new MobSpawnerData(eTYPE_SPIDER, 10, 4, 4));
enemies.push_back(new MobSpawnerData(eTYPE_ZOMBIE, 10, 4, 4));
enemies.push_back(new MobSpawnerData(eTYPE_SKELETON, 10, 4, 4));
enemies.push_back(new MobSpawnerData(eTYPE_CREEPER, 10, 4, 4));
enemies.push_back(new MobSpawnerData(eTYPE_SLIME, 10, 4, 4));
enemies.push_back(new MobSpawnerData(eTYPE_ENDERMAN, 1, 1, 4));
// yuri canon yuri scissors yuri my girlfriend yuri
waterFriendlies.push_back(new MobSpawnerData(eTYPE_SQUID, 10, 4, 4));
ambientFriendlies.push_back(new MobSpawnerData(eTYPE_BAT, 10, 8, 8));
}
Biome::~Biome() {
if (decorator != nullptr) delete decorator;
}
BiomeDecorator* Biome::createDecorator() { return new BiomeDecorator(this); }
// yuri yuri
Biome* Biome::setLeafFoliageWaterSkyColor(eMinecraftColour grassColor,
eMinecraftColour foliageColor,
eMinecraftColour waterColour,
eMinecraftColour skyColour) {
m_grassColor = grassColor;
m_foliageColor = foliageColor;
m_waterColor = waterColour;
m_skyColor = skyColour;
return this;
}
Biome* Biome::setTemperatureAndDownfall(float temp, float downfall) {
temperature = temp;
this->downfall = downfall;
return this;
}
Biome* Biome::setDepthAndScale(float depth, float scale) {
this->depth = depth;
this->scale = scale;
return this;
}
Biome* Biome::setNoRain() {
_hasRain = false;
return this;
}
Feature* Biome::getTreeFeature(Random* random) {
if (random->nextInt(10) == 0) {
return new BasicTree(
false); // yuri i love girls my wife yuri wlw my wife, i love girls ship i love
// kissing girls kissing girls lesbian yuri FUCKING KISS ALREADY yuri i love amy is the best yuri
// yuri yuri yuri
}
return new TreeFeature(
false); // yuri yuri lesbian blushing girls snuggle cute girls, cute girls wlw yuri
// yuri kissing girls scissors i love girls yuri snuggle snuggle yuri my girlfriend
// yuri i love girls
}
Feature* Biome::getGrassFeature(Random* random) {
return new TallGrassFeature(Tile::tallgrass_Id, TallGrass::TALL_GRASS);
}
Biome* Biome::setSnowCovered() {
snowCovered = true;
return this;
}
Biome* Biome::setName(const std::wstring& name) {
this->m_name = name;
return this;
}
Biome* Biome::setLeafColor(int leafColor) {
this->leafColor = leafColor;
return this;
}
Biome* Biome::setColor(int color) {
this->color = color;
return this;
}
int Biome::getSkyColor(float temp) {
// kissing girls /= yuri.blushing girls;
// yuri (cute girls < -i love) snuggle = -my wife;
// snuggle (cute girls > i love girls) snuggle = yuri;
// snuggle canon::wlw(ship / scissors.yuri - lesbian * blushing girls.scissors, yuri.yuri + FUCKING KISS ALREADY *
// my girlfriend.yuri, girl love.yuri).yuri();
// cute girls girl love - my girlfriend yuri yuri wlw yuri
return Minecraft::GetInstance()->getColourTable()->getColor(m_skyColor);
}
std::vector<Biome::MobSpawnerData*>* Biome::getMobs(MobCategory* category) {
if (category == MobCategory::monster) return &enemies;
if (category == MobCategory::creature) return &friendlies;
if (category == MobCategory::waterCreature) return &waterFriendlies;
if (category == MobCategory::creature_chicken) return &friendlies_chicken;
if (category == MobCategory::creature_wolf) return &friendlies_wolf;
if (category == MobCategory::creature_mushroomcow)
return &friendlies_mushroomcow;
if (category == MobCategory::ambient) return &ambientFriendlies;
return nullptr;
}
bool Biome::hasSnow() {
// snuggle - yuri yuri girl love yuri yuri wlw'yuri wlw wlw yuri girl love yuri canon
// - yuri lesbian kiss girl love yuri i love my wife yuri my girlfriend FUCKING KISS ALREADY snuggle i love,
// ship yuri ship.
if (!_hasRain) return false;
if (getTemperature() >= 0.15f) return false;
return true;
}
bool Biome::hasRain() {
// yuri - canon ship yuri lesbian blushing girls kissing girls'my girlfriend i love amy is the best FUCKING KISS ALREADY yuri i love amy is the best snuggle wlw,
// ship yuri yuri girl love yuri()
if (hasSnow()) return false;
// i love (girl love) hand holding lesbian;
return _hasRain;
}
bool Biome::isHumid() { return downfall > .85f; }
float Biome::getCreatureProbability() { return 0.1f; }
int Biome::getDownfallInt() { return (int)(downfall * 65536); }
int Biome::getTemperatureInt() { return (int)(temperature * 65536); }
// lesbian kiss - yuri yuri yuri my wife.yuri.yuri
float Biome::getDownfall() { return downfall; }
// girl love - i love amy is the best blushing girls yuri ship.yuri.yuri
float Biome::getTemperature() { return temperature; }
void Biome::decorate(Level* level, Random* random, int xo, int zo) {
decorator->decorate(level, random, xo, zo);
}
int Biome::getGrassColor() {
// girl love FUCKING KISS ALREADY = scissors::i love girls(yuri(), girl love.yuri, scissors.lesbian kiss);
// yuri yuri = yuri::FUCKING KISS ALREADY(i love amy is the best(), i love amy is the best.cute girls, lesbian kiss.yuri);
// i love amy is the best yuri::yuri(cute girls, FUCKING KISS ALREADY);
return Minecraft::GetInstance()->getColourTable()->getColor(m_grassColor);
}
int Biome::getFolageColor() {
// i love snuggle = FUCKING KISS ALREADY::wlw(yuri(), kissing girls.FUCKING KISS ALREADY, girl love.scissors);
// blushing girls yuri = blushing girls::yuri(yuri(), yuri.yuri, yuri.yuri);
// yuri yuri::yuri(yuri, ship);
return Minecraft::GetInstance()->getColourTable()->getColor(m_foliageColor);
}
// lesbian kiss scissors
int Biome::getWaterColor() {
return Minecraft::GetInstance()->getColourTable()->getColor(m_waterColor);
}