From cef99a063a23b63df830d49e1ebf1c6cd8af0b56 Mon Sep 17 00:00:00 2001 From: Sen Date: Tue, 29 Jul 2025 23:12:16 +0200 Subject: [PATCH] fix terra gen --- .../java/client/network/ClientPlayer.java | 1 - .../java/common/block/foliage/BlockBush.java | 2 +- .../java/server/init/UniverseRegistry.java | 4 +- .../main/java/server/world/WorldServer.java | 4 +- .../worldgen/feature/WorldGenBlockBlob.java | 2 +- .../server/worldgen/populator/Populator.java | 6 --- .../worldgen/populator/PopulatorBasic.java | 23 -------- .../worldgen/populator/PopulatorBiome.java | 52 +++++++++++++++++++ .../worldgen/populator/PopulatorDesert.java | 4 -- .../worldgen/tree/WorldGenBaseTree.java | 2 +- .../server/worldgen/tree/WorldGenBigTree.java | 2 +- .../server/worldgen/tree/WorldGenBirch.java | 2 +- .../server/worldgen/tree/WorldGenDarkOak.java | 2 +- .../worldgen/tree/WorldGenHugeTree.java | 2 +- .../server/worldgen/tree/WorldGenPine.java | 2 +- .../server/worldgen/tree/WorldGenSavanna.java | 2 +- .../server/worldgen/tree/WorldGenTaiga1.java | 2 +- .../server/worldgen/tree/WorldGenTaiga2.java | 2 +- .../server/worldgen/tree/WorldGenTree.java | 2 +- 19 files changed, 68 insertions(+), 50 deletions(-) create mode 100644 server/src/main/java/server/worldgen/populator/PopulatorBiome.java diff --git a/client/src/main/java/client/network/ClientPlayer.java b/client/src/main/java/client/network/ClientPlayer.java index 4e45e548..81fa862c 100755 --- a/client/src/main/java/client/network/ClientPlayer.java +++ b/client/src/main/java/client/network/ClientPlayer.java @@ -55,7 +55,6 @@ import common.inventory.InventoryBasic; import common.inventory.InventoryPlayer; import common.inventory.InventoryWarpChest; import common.item.ItemStack; -import common.item.material.ItemDye; import common.item.material.ItemGrindedBones; import common.log.Log; import common.network.IClientPlayer; diff --git a/common/src/main/java/common/block/foliage/BlockBush.java b/common/src/main/java/common/block/foliage/BlockBush.java index 8c7a8e96..34dbb758 100755 --- a/common/src/main/java/common/block/foliage/BlockBush.java +++ b/common/src/main/java/common/block/foliage/BlockBush.java @@ -38,7 +38,7 @@ public class BlockBush extends Block */ protected boolean canPlaceBlockOn(Block ground) { - return ground == Blocks.grass || ground == Blocks.dirt || ground == Blocks.farmland || ground == Blocks.tian_soil; + return ground == Blocks.grass || ground == Blocks.dirt || ground == Blocks.coarse_dirt || ground == Blocks.podzol || ground == Blocks.farmland || ground == Blocks.tian_soil; } /** diff --git a/server/src/main/java/server/init/UniverseRegistry.java b/server/src/main/java/server/init/UniverseRegistry.java index 72ea36c7..c883fb0a 100755 --- a/server/src/main/java/server/init/UniverseRegistry.java +++ b/server/src/main/java/server/init/UniverseRegistry.java @@ -71,9 +71,9 @@ import server.worldgen.caves.MapGenBigCaves; import server.worldgen.caves.MapGenCaves; import server.worldgen.caves.MapGenRavine; import server.worldgen.populator.PopulatorAsteroids; +import server.worldgen.populator.PopulatorBiome; import server.worldgen.populator.PopulatorBlackened; import server.worldgen.populator.PopulatorChaos; -import server.worldgen.populator.PopulatorDefault; import server.worldgen.populator.PopulatorForest; import server.worldgen.populator.PopulatorHell; import server.worldgen.populator.PopulatorMesa; @@ -512,7 +512,7 @@ public abstract class UniverseRegistry extends DimensionRegistry { registerPlanet("Terra", new Planet(6378136, 8766144L, 24000L, 28.0f, 9.81f, 259.15f, Blocks.stone.getState(), Blocks.water.getState(), 63), new GeneratorData() .setGenerator(new GeneratorPerlin(true)) .setReplacer(new ReplacerTerranian(Blocks.grass.getState(), Blocks.dirt.getState(), Blocks.gravel.getState(), Blocks.sand.getState())) - .setPopulator(new PopulatorDefault()) + .setPopulator(new PopulatorBiome()) .setBiomeGen(new BiomeGenerator(new Biome(8.0f, 80.0f), false, 4, 4, 6, 50, new Biome[] {new Biome(60.0f, 0.0f, Scaling.PLAINS_LOW), new Biome(60.0f, 0.0f, Scaling.PLAINS_LOW), new Biome(60.0f, 0.0f, Scaling.HILLS_LOW), new Biome(28.0f, 0.0f, Scaling.PLAINS_LOW), new Biome(20.0f, 0.0f, Scaling.HILLS_PLATEAU), new Biome(12.0f, 40.0f, Scaling.PLAINS_LOW)}, new Biome[] {new Biome(8.0f, 80.0f), new Biome(8.0f, 80.0f, 0.1F, 0.4F), new Biome(8.0f, 80.0f), new Biome(-12.0f, 30.0f, Scaling.HILLS_LARGE), new Biome(12.0f, 40.0f, Scaling.PLAINS_LOW), new Biome(4.0f, 60.0f), new Biome(12.0f, 90.0f, Scaling.SEA_POND), new Biome(18.0f, 90.0f)}, diff --git a/server/src/main/java/server/world/WorldServer.java b/server/src/main/java/server/world/WorldServer.java index d3cdbec2..039005cc 100755 --- a/server/src/main/java/server/world/WorldServer.java +++ b/server/src/main/java/server/world/WorldServer.java @@ -1275,7 +1275,7 @@ public final class WorldServer extends AWorldServer { } // TODO: check id lakes check on village is really necessary } - if(lakes && this.lakes != null && (this.populator == null || this.populator.canGenerateLakes())) { + if(lakes && this.lakes != null) { for(FeatureLakes lake : this.lakes) { lake.generate(this, this.grng, pos); } @@ -1293,7 +1293,7 @@ public final class WorldServer extends AWorldServer { if(this.populator != null) { this.populator.decorate(this, this.grng, pos); } - if(this.liquids != null && (this.populator == null || this.populator.canGenerateLiquids())) { + if(this.liquids != null) { for(FeatureLiquids liquid : this.liquids) { liquid.generate(this, this.grng, pos); } diff --git a/server/src/main/java/server/worldgen/feature/WorldGenBlockBlob.java b/server/src/main/java/server/worldgen/feature/WorldGenBlockBlob.java index bdc74675..57957760 100755 --- a/server/src/main/java/server/worldgen/feature/WorldGenBlockBlob.java +++ b/server/src/main/java/server/worldgen/feature/WorldGenBlockBlob.java @@ -34,7 +34,7 @@ public class WorldGenBlockBlob extends FeatureGenerator Block block = worldIn.getState(position.down()).getBlock(); - if (block != Blocks.grass && block != Blocks.dirt && block != Blocks.stone) + if (block != Blocks.grass && block != Blocks.dirt && block != Blocks.podzol && block != Blocks.coarse_dirt && block != Blocks.stone) { break label0; } diff --git a/server/src/main/java/server/worldgen/populator/Populator.java b/server/src/main/java/server/worldgen/populator/Populator.java index b5147df2..495fe1d8 100644 --- a/server/src/main/java/server/worldgen/populator/Populator.java +++ b/server/src/main/java/server/worldgen/populator/Populator.java @@ -6,10 +6,4 @@ import server.world.WorldServer; public interface Populator { void decorate(WorldServer world, Random rand, BlockPos pos); - default boolean canGenerateLakes() { - return true; - } - default boolean canGenerateLiquids() { - return true; - } } diff --git a/server/src/main/java/server/worldgen/populator/PopulatorBasic.java b/server/src/main/java/server/worldgen/populator/PopulatorBasic.java index 27da49a4..8486a8e4 100755 --- a/server/src/main/java/server/worldgen/populator/PopulatorBasic.java +++ b/server/src/main/java/server/worldgen/populator/PopulatorBasic.java @@ -25,29 +25,6 @@ import server.worldgen.tree.WorldGenBigTree; import server.worldgen.tree.WorldGenTree; public abstract class PopulatorBasic implements Populator { - public static final PopulatorBasic plains = (new PopulatorPlains()); - public static final PopulatorBasic desert = (new PopulatorDesert()); - public static final PopulatorBasic extremeHills = (new PopulatorHills(false)); - public static final PopulatorBasic extremeHillsPlus = (new PopulatorHills(true)); - public static final PopulatorBasic taiga = (new PopulatorTaiga(0)); - public static final PopulatorBasic megaTaiga = (new PopulatorTaiga(1)); - public static final PopulatorBasic tallTreeTaiga = new PopulatorTaiga(2); - public static final PopulatorBasic swampland = (new PopulatorSwamp()); - public static final PopulatorBasic river = (new PopulatorDefault()); - public static final PopulatorBasic icePlains = (new PopulatorSnow(false)); - public static final PopulatorBasic iceSpikes = new PopulatorSnow(true); - public static final PopulatorBasic beach = (new PopulatorBeach()); - public static final PopulatorBasic jungle = (new PopulatorTropical(false)); - public static final PopulatorBasic jungleEdge = (new PopulatorTropical(true)); - public static final PopulatorBasic stoneBeach = (new PopulatorRocky()); - public static final PopulatorBasic savanna = (new PopulatorSavanna(true)); - public static final PopulatorBasic savannaNoDPlants = new PopulatorSavanna(false); - public static final PopulatorBasic forest = (new PopulatorForest(0)); - public static final PopulatorBasic flowerForest = new PopulatorForest(1); - public static final PopulatorBasic birchForest = (new PopulatorForest(2)); - public static final PopulatorBasic roofedForest = (new PopulatorForest(3)); - public static final PopulatorBasic tallBirchForest = new PopulatorForest(5); - protected static final PerlinGen TREE_NOISE = new PerlinGen(new Random(726528729282625L), 8); protected static final PerlinGen GRASS_NOISE = new PerlinGen(new Random(297363826225L), 1); protected static final FeatureDoublePlant DOUBLE_PLANT_GEN = new FeatureDoublePlant(); diff --git a/server/src/main/java/server/worldgen/populator/PopulatorBiome.java b/server/src/main/java/server/worldgen/populator/PopulatorBiome.java new file mode 100644 index 00000000..b4c70803 --- /dev/null +++ b/server/src/main/java/server/worldgen/populator/PopulatorBiome.java @@ -0,0 +1,52 @@ +package server.worldgen.populator; + +import common.rng.Random; +import common.util.BlockPos; +import server.world.WorldServer; + +public class PopulatorBiome implements Populator { + private final Populator plains = (new PopulatorPlains()); + private final Populator desert = (new PopulatorDesert()); + private final Populator extremeHills = (new PopulatorHills(false)); + private final Populator extremeHillsPlus = (new PopulatorHills(true)); + private final Populator taiga = (new PopulatorTaiga(0)); + private final Populator megaTaiga = (new PopulatorTaiga(1)); + private final Populator tallTreeTaiga = new PopulatorTaiga(2); + private final Populator swampland = (new PopulatorSwamp()); + private final Populator river = (new PopulatorDefault()); + private final Populator icePlains = (new PopulatorSnow(false)); + private final Populator iceSpikes = new PopulatorSnow(true); + private final Populator beach = (new PopulatorBeach()); + private final Populator jungle = (new PopulatorTropical(false)); + private final Populator jungleEdge = (new PopulatorTropical(true)); + private final Populator stoneBeach = (new PopulatorRocky()); + private final Populator savanna = (new PopulatorSavanna(true)); + private final Populator savannaNoDPlants = new PopulatorSavanna(false); + private final Populator forest = (new PopulatorForest(0)); + private final Populator flowerForest = new PopulatorForest(1); + private final Populator birchForest = (new PopulatorForest(2)); + private final Populator roofedForest = (new PopulatorForest(3)); + private final Populator tallBirchForest = new PopulatorForest(5); + + public void decorate(WorldServer world, Random rand, BlockPos pos) { + float absTemp = world.getGenTemperature(pos.getX(), pos.getZ()); + float humidity = world.getGenHumidity(pos.getX(), pos.getZ()); + + Populator gen = this.forest; + + if(absTemp >= 50.0f) + gen = this.desert; + else if(absTemp >= 38.0f && humidity < 50.0f) + gen = this.savanna; + else if(absTemp <= 10.0f && humidity <= 10.0f) + gen = this.stoneBeach; + else if(absTemp <= 10.0f && humidity < 60.0f) + gen = this.extremeHills; + else if(absTemp < 5.0f && humidity >= 70.0f) + gen = this.taiga; + else if(absTemp < 22.0f && humidity >= 85.0f) + gen = this.swampland; + + gen.decorate(world, rand, pos); + } +} diff --git a/server/src/main/java/server/worldgen/populator/PopulatorDesert.java b/server/src/main/java/server/worldgen/populator/PopulatorDesert.java index e147f466..86f91108 100755 --- a/server/src/main/java/server/worldgen/populator/PopulatorDesert.java +++ b/server/src/main/java/server/worldgen/populator/PopulatorDesert.java @@ -14,10 +14,6 @@ public class PopulatorDesert extends PopulatorBasic this.reedsPerChunk = 50; this.cactiPerChunk = 10; } - - public boolean canGenerateLakes() { - return false; - } public void decorate(WorldServer worldIn, Random rand, BlockPos pos) { diff --git a/server/src/main/java/server/worldgen/tree/WorldGenBaseTree.java b/server/src/main/java/server/worldgen/tree/WorldGenBaseTree.java index e2b3a6aa..a1312b96 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenBaseTree.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenBaseTree.java @@ -91,7 +91,7 @@ public class WorldGenBaseTree extends WorldGenTree { Block block1 = worldIn.getState(position.down()).getBlock(); - if ((block1 == Blocks.grass || block1 == Blocks.dirt || block1 == Blocks.farmland || block1 == Blocks.tian_soil) && position.getY() < 512 - i - 1) + if ((block1 == Blocks.grass || block1 == Blocks.dirt || block1 == Blocks.coarse_dirt || block1 == Blocks.podzol || block1 == Blocks.farmland || block1 == Blocks.tian_soil) && position.getY() < 512 - i - 1) { this.setBaseBlock(worldIn, position.down()); int k2 = 3; diff --git a/server/src/main/java/server/worldgen/tree/WorldGenBigTree.java b/server/src/main/java/server/worldgen/tree/WorldGenBigTree.java index 7242ca49..da9ac1bc 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenBigTree.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenBigTree.java @@ -356,7 +356,7 @@ public class WorldGenBigTree extends WorldGenTree { Block block = this.world.getState(this.basePos.down()).getBlock(); - if (block != Blocks.dirt && block != Blocks.grass && block != Blocks.farmland && block != Blocks.tian_soil) + if (block != Blocks.dirt && block != Blocks.coarse_dirt && block != Blocks.podzol && block != Blocks.grass && block != Blocks.farmland && block != Blocks.tian_soil) { return false; } diff --git a/server/src/main/java/server/worldgen/tree/WorldGenBirch.java b/server/src/main/java/server/worldgen/tree/WorldGenBirch.java index 54378827..6fb934a6 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenBirch.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenBirch.java @@ -79,7 +79,7 @@ public class WorldGenBirch extends WorldGenTree { Block block1 = worldIn.getState(position.down()).getBlock(); - if ((block1 == Blocks.grass || block1 == Blocks.dirt || block1 == Blocks.farmland) && position.getY() < 512 - i - 1) + if ((block1 == Blocks.grass || block1 == Blocks.dirt || block1 == Blocks.coarse_dirt || block1 == Blocks.podzol || block1 == Blocks.farmland) && position.getY() < 512 - i - 1) { this.setBaseBlock(worldIn, position.down()); diff --git a/server/src/main/java/server/worldgen/tree/WorldGenDarkOak.java b/server/src/main/java/server/worldgen/tree/WorldGenDarkOak.java index e8b95ac4..5ed0ba55 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenDarkOak.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenDarkOak.java @@ -34,7 +34,7 @@ public class WorldGenDarkOak extends WorldGenTree BlockPos blockpos = position.down(); Block block = worldIn.getState(blockpos).getBlock(); - if (block != Blocks.grass && block != Blocks.dirt) + if (block != Blocks.grass && block != Blocks.dirt && block != Blocks.coarse_dirt && block != Blocks.podzol) { return false; } diff --git a/server/src/main/java/server/worldgen/tree/WorldGenHugeTree.java b/server/src/main/java/server/worldgen/tree/WorldGenHugeTree.java index 5f661fc6..b2a09d1b 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenHugeTree.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenHugeTree.java @@ -87,7 +87,7 @@ public abstract class WorldGenHugeTree extends WorldGenTree BlockPos blockpos = p_175927_1_.down(); Block block = worldIn.getState(blockpos).getBlock(); - if ((block == Blocks.grass || block == Blocks.dirt) && p_175927_1_.getY() >= 2) + if ((block == Blocks.grass || block == Blocks.dirt || block == Blocks.coarse_dirt || block == Blocks.podzol) && p_175927_1_.getY() >= 2) { this.setBaseBlock(worldIn, blockpos); this.setBaseBlock(worldIn, blockpos.east()); diff --git a/server/src/main/java/server/worldgen/tree/WorldGenPine.java b/server/src/main/java/server/worldgen/tree/WorldGenPine.java index c48176c7..344dd6b4 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenPine.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenPine.java @@ -129,7 +129,7 @@ public class WorldGenPine extends WorldGenHugeTree BlockPos blockpos = p_175934_2_.up(i); Block block = worldIn.getState(blockpos).getBlock(); - if (block == Blocks.grass || block == Blocks.dirt) + if (block == Blocks.grass || block == Blocks.dirt || block == Blocks.coarse_dirt || block == Blocks.podzol) { this.setBlockAndNotifyAdequately(worldIn, blockpos, field_181635_g); break; diff --git a/server/src/main/java/server/worldgen/tree/WorldGenSavanna.java b/server/src/main/java/server/worldgen/tree/WorldGenSavanna.java index 757f98d4..a1772468 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenSavanna.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenSavanna.java @@ -73,7 +73,7 @@ public class WorldGenSavanna extends WorldGenTree { Block block = worldIn.getState(position.down()).getBlock(); - if ((block == Blocks.grass || block == Blocks.dirt) && position.getY() < 512 - i - 1) + if ((block == Blocks.grass || block == Blocks.dirt || block == Blocks.coarse_dirt || block == Blocks.podzol) && position.getY() < 512 - i - 1) { this.setBaseBlock(worldIn, position.down()); Facing enumfacing = Facing.Plane.HORIZONTAL.random(rand); diff --git a/server/src/main/java/server/worldgen/tree/WorldGenTaiga1.java b/server/src/main/java/server/worldgen/tree/WorldGenTaiga1.java index efb87ba1..bbff9623 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenTaiga1.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenTaiga1.java @@ -74,7 +74,7 @@ public class WorldGenTaiga1 extends WorldGenTree { Block block = worldIn.getState(position.down()).getBlock(); - if ((block == Blocks.grass || block == Blocks.dirt) && position.getY() < 512 - i - 1) + if ((block == Blocks.grass || block == Blocks.dirt || block == Blocks.coarse_dirt || block == Blocks.podzol) && position.getY() < 512 - i - 1) { this.setBaseBlock(worldIn, position.down()); int k2 = 0; diff --git a/server/src/main/java/server/worldgen/tree/WorldGenTaiga2.java b/server/src/main/java/server/worldgen/tree/WorldGenTaiga2.java index 78f01240..04b218b5 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenTaiga2.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenTaiga2.java @@ -76,7 +76,7 @@ public class WorldGenTaiga2 extends WorldGenTree { Block block1 = worldIn.getState(position.down()).getBlock(); - if ((block1 == Blocks.grass || block1 == Blocks.dirt || block1 == Blocks.farmland) && position.getY() < 512 - i - 1) + if ((block1 == Blocks.grass || block1 == Blocks.dirt || block1 == Blocks.coarse_dirt || block1 == Blocks.podzol || block1 == Blocks.farmland) && position.getY() < 512 - i - 1) { this.setBaseBlock(worldIn, position.down()); int i3 = rand.zrange(2); diff --git a/server/src/main/java/server/worldgen/tree/WorldGenTree.java b/server/src/main/java/server/worldgen/tree/WorldGenTree.java index 5d64b252..f3381a33 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenTree.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenTree.java @@ -20,7 +20,7 @@ public abstract class WorldGenTree extends FeatureGenerator protected boolean canBeReplaced(Block block) { - return block == Blocks.air || block.getMaterial() == Material.LEAVES || block == Blocks.grass || block == Blocks.swamp || block == Blocks.dry_leaves || block == Blocks.dirt || block instanceof BlockLog || block instanceof BlockSapling || block instanceof BlockVine; + return block == Blocks.air || block.getMaterial() == Material.LEAVES || block == Blocks.grass || block == Blocks.swamp || block == Blocks.dry_leaves || block == Blocks.dirt || block == Blocks.coarse_dirt || block == Blocks.podzol || block instanceof BlockLog || block instanceof BlockSapling || block instanceof BlockVine; } public void prepare()