From b9d62c225358cbc910344eea0aae57943e0bb334 Mon Sep 17 00:00:00 2001 From: Sen Date: Wed, 23 Jul 2025 16:04:55 +0200 Subject: [PATCH] initial populator reimplementation --- .../common/block/foliage/BlockCactus.java | 2 +- .../common/block/foliage/BlockDeadBush.java | 2 +- .../main/java/common/dimension/Dimension.java | 18 ++++++++-- .../src/main/java/common/dimension/Space.java | 2 +- .../java/common/init/UniverseRegistry.java | 16 +++++---- .../main/java/server/world/WorldServer.java | 35 ++++++++++++++++++- .../java/server/worldgen/ReplacerMesa.java | 6 ++-- .../server/worldgen/ReplacerTerranian.java | 4 +-- .../server/worldgen/caves/MapGenCaves.java | 2 +- .../worldgen/populator/PopulatorBasic.java | 12 ------- .../worldgen/populator/PopulatorMesa.java | 19 +++++++--- .../worldgen/tree/WorldGenBaseTree.java | 5 ++- .../server/worldgen/tree/WorldGenTree.java | 2 +- 13 files changed, 86 insertions(+), 39 deletions(-) diff --git a/common/src/main/java/common/block/foliage/BlockCactus.java b/common/src/main/java/common/block/foliage/BlockCactus.java index 5bca281a..acd8bd27 100755 --- a/common/src/main/java/common/block/foliage/BlockCactus.java +++ b/common/src/main/java/common/block/foliage/BlockCactus.java @@ -128,7 +128,7 @@ public class BlockCactus extends Block } Block block = worldIn.getState(pos.down()).getBlock(); - return block == Blocks.cactus || block == Blocks.sand; + return block == Blocks.cactus || block == Blocks.sand || block == Blocks.red_sand; } /** diff --git a/common/src/main/java/common/block/foliage/BlockDeadBush.java b/common/src/main/java/common/block/foliage/BlockDeadBush.java index 37174a09..640b3b40 100755 --- a/common/src/main/java/common/block/foliage/BlockDeadBush.java +++ b/common/src/main/java/common/block/foliage/BlockDeadBush.java @@ -41,7 +41,7 @@ public class BlockDeadBush extends BlockBush */ protected boolean canPlaceBlockOn(Block ground) { - return ground == Blocks.sand || ground == Blocks.hardened_clay || ground instanceof BlockColoredClay || ground == Blocks.dirt; + return ground == Blocks.sand || ground == Blocks.red_sand || ground == Blocks.hardened_clay || ground instanceof BlockColoredClay || ground == Blocks.dirt || ground == Blocks.coarse_dirt; } /** diff --git a/common/src/main/java/common/dimension/Dimension.java b/common/src/main/java/common/dimension/Dimension.java index b0c04609..7cc3ac8d 100755 --- a/common/src/main/java/common/dimension/Dimension.java +++ b/common/src/main/java/common/dimension/Dimension.java @@ -99,7 +99,20 @@ public abstract class Dimension extends Section { } public static enum PopulatorType { - NONE("none"), TERRANIAN("terranian"), MESARIAN("mesarian"); + NONE("none"), + TERRANIAN("terranian"), + MESARIAN("mesarian"), + FOREST("forest"), + ELVEN_FOREST("elven_forest"), + ASTEROIDS("asteroids"), + MUSHROOMS("mushrooms"), + HELL("hell"), + BLACKENED("blackened"), + NO_MUSHROOMS("no_mushrooms"), + TIAN("tian"), + CHEESE("cheese"), + CHAOS("chaos"), + BASIC("basic"); private static final Map LOOKUP = Maps.newHashMap(); @@ -440,8 +453,9 @@ public abstract class Dimension extends Section { return this; } - public final Dimension setMesarianReplacer(State surface) { + public final Dimension setMesarianReplacer(State surface, State top) { this.surface = surface; + this.top = top; this.replacerType = ReplacerType.MESARIAN; return this; } diff --git a/common/src/main/java/common/dimension/Space.java b/common/src/main/java/common/dimension/Space.java index 66858652..665cadbc 100755 --- a/common/src/main/java/common/dimension/Space.java +++ b/common/src/main/java/common/dimension/Space.java @@ -8,7 +8,7 @@ public final class Space extends Dimension { private Space() { super(false); this.setPhysics(World.MAX_SIZE, 1L, 1L, 0.0f, 0.0f, 2.7f, 15); - this.setStarBrightness(1.0f).setDeepStarBrightness(1.0f); + this.setStarBrightness(1.0f).setDeepStarBrightness(1.0f).setPopulator(PopulatorType.ASTEROIDS); } public final DimType getType() { diff --git a/common/src/main/java/common/init/UniverseRegistry.java b/common/src/main/java/common/init/UniverseRegistry.java index 1f956ca0..6a0b5344 100755 --- a/common/src/main/java/common/init/UniverseRegistry.java +++ b/common/src/main/java/common/init/UniverseRegistry.java @@ -13,6 +13,7 @@ import common.dimension.Area; import common.dimension.CloudType; import common.dimension.DimType; import common.dimension.Dimension; +import common.dimension.Dimension.PopulatorType; import common.dimension.Domain; import common.dimension.Galaxy; import common.dimension.Moon; @@ -490,6 +491,7 @@ public abstract class UniverseRegistry { registerPlanet("Terra", new Planet(6378136, 8766144L, 24000L, 28.0f, 9.81f, 259.15f) .setPerlinGen(Blocks.stone.getState(), Blocks.water.getState(), 63) .setTerranianReplacer(Blocks.grass.getState(), Blocks.dirt.getState(), Blocks.gravel.getState(), Blocks.sand.getState()) + .setPopulator(PopulatorType.BASIC) .setBiomeGen(new Biome(8.0f, 80.0f), false, 4, 4, 6, 50).enableSnow() .setFrostBiomes(new Biome(-20.0f, 50.0f, Scaling.PLAINS_LOW), new Biome(-20.0f, 50.0f, Scaling.PLAINS_LOW), new Biome(-20.0f, 50.0f, Scaling.PLAINS_LOW), new Biome(-40.0f, 40.0f, Scaling.PLAINS_MEDIUM), new Biome(-8.0f, 80.0f, Scaling.PLAINS_MEDIUM)) .setColdBiomes(new Biome(8.0f, 80.0f), new Biome(-12.0f, 30.0f, Scaling.HILLS_LARGE), new Biome(-10.0f, 80.0f, Scaling.PLAINS_MEDIUM), new Biome(12.0f, 40.0f, Scaling.PLAINS_LOW)) @@ -595,7 +597,7 @@ public abstract class UniverseRegistry { registerPlanet("gharoth", "Elbenplanet Gharoth", new Planet(2806382, 4837386L, 52960L, 30.0f, 10.0f, 257.3f + 8.0f) //TODO: check temp .setSimpleGen(Blocks.dirt.getState(), Blocks.water.getState(), 64) .setSimpleReplacer(Blocks.grass.getState(), Blocks.dirt.getState(), Blocks.gravel.getState(), Blocks.sand.getState()) - .enableCaves(Blocks.air.getState()).setDungeons(4).enableSnow() + .setPopulator(PopulatorType.ELVEN_FOREST).enableCaves(Blocks.air.getState()).setDungeons(4).enableSnow() .addLake(Blocks.water.getState(), null, Blocks.grass.getState(), 4, 0, 255, false) .addLake(Blocks.lava.getState(), null, null, 8, 8, 255, true) .addLiquid(Blocks.flowing_water.getState(), 50, 8, 255, false) @@ -612,7 +614,7 @@ public abstract class UniverseRegistry { registerPlanet("transylvania", "Vampirplanet Transsylvanien", new Planet(8374921, 33850466L, 49760L, 20.0f, 10.0f, 255.5f) .setPerlinGen(Blocks.rock.getState(), Blocks.water.getState(), 63) .setTerranianReplacer(Blocks.grass.getState(), Blocks.dirt.getState(), Blocks.gravel.getState(), Blocks.sand.getState()).setBiomeGen(new Biome(8.0f, 80.0f), true, 5, 3, 3, 30) - .enableCavesRavines(Blocks.lava.getState()).setDungeons(10).enableSnow() + .setPopulator(PopulatorType.FOREST).enableCavesRavines(Blocks.lava.getState()).setDungeons(10).enableSnow() .addLake(Blocks.water.getState(), null, Blocks.grass.getState(), 4, 0, 255, false) .addLake(Blocks.lava.getState(), null, null, 8, 8, 255, true) .addLiquid(Blocks.flowing_water.getState(), 50, 8, 255, false) @@ -642,7 +644,7 @@ public abstract class UniverseRegistry { }); registerPlanet("mesar", "Wüstenplanet Me'sar", new Planet(0xff7f3f, 0xff6022, 0xff6f00, 9823183, 56643366L, 87340L, 11.0f, 333.15f) .setPerlinGen(Blocks.rock.getState(), Blocks.air.getState(), 63, 0.2f, 0.4f) - .setMesarianReplacer(Blocks.red_sand.getState()) + .setMesarianReplacer(Blocks.red_sand.getState(), Blocks.dirt.getState()).setPopulator(PopulatorType.MESARIAN) .enableCavesRavines(Blocks.lava.getState()) .addLake(Blocks.lava.getState(), null, null, 8, 8, 255, true) .addLiquid(Blocks.flowing_lava.getState(), 20, 8, 255, true) @@ -661,6 +663,7 @@ public abstract class UniverseRegistry { registerPlanet("blackplanet", "Der Schwarze Planet", new Planet(0x000000, 0x000000, 0x000000, 13038204, 4632918508L, 204556L, 12.0f, 0.0f) .setPerlinGen(Blocks.blackened_stone.getState(), Blocks.goo.getState(), 63) .setSimpleAltReplacer(Blocks.blackened_soil.getState(), Blocks.blackened_dirt.getState(), Blocks.blackened_cobble.getState()) + .setPopulator(PopulatorType.BLACKENED) .enableCaves(Blocks.air.getState()).setDungeons(4) .addLake(Blocks.goo.getState(), null, null, 8, 8, 255, true) // .addOre(Blocks.PLACEHOLDER_ore.getState(), 0, 2, 3, 0, 12, false) @@ -671,7 +674,7 @@ public abstract class UniverseRegistry { }); Dimension warp = new Semi(0x0c001f, 0x190033, 124072917, 285.0f, 3).setCloudTexture(CloudType.DENSE).setCloudHeight(238.0f) - .setPerlinGen(Blocks.obsidian.getState(), Blocks.lava.getState(), 63, 1.0F, 2.0F) + .setPerlinGen(Blocks.obsidian.getState(), Blocks.lava.getState(), 63, 1.0F, 2.0F).setPopulator(PopulatorType.CHAOS) .enableCavesRavines(Blocks.air.getState()).enableLongCaves().enableSnow() .addLake(Blocks.water.getState(), null, Blocks.obsidian.getState(), 8, 0, 255, false) .addLake(Blocks.lava.getState(), null, null, 1, 8, 255, false) @@ -688,7 +691,8 @@ public abstract class UniverseRegistry { registerDomain("Tian'Xin", () -> { registerArea("Ni'enrath", new Area(0x7f00ff, 532109, 276.15f, 1).setLightColor(0x07000f).setBlockColor(0xcf6fff) .setPerlinGen(Blocks.tian.getState(), Blocks.spring_water.getState(), 63, 0.1F, 1.0F) - .setSimpleAltReplacer(Blocks.tian_soil.getState(), Blocks.tian.getState()).enableLongCaves().enableSnow() + .setSimpleAltReplacer(Blocks.tian_soil.getState(), Blocks.tian.getState()) + .setPopulator(PopulatorType.TIAN).enableLongCaves().enableSnow() .addLake(Blocks.spring_water.getState(), Blocks.tian.getState(), Blocks.tian.getState(), 4, 0, 255, false) .addLiquid(Blocks.flowing_spring_water.getState(), 50, 8, 255, false) .addSpawn(EntityCultivator.class, 50, 1, 1) @@ -705,7 +709,7 @@ public abstract class UniverseRegistry { registerArea("thedric", "Kreis Thedric", new Area(0x330707, 105639735, 347.15f, 2).enableLongCaves().enableFortresses() .enableWorldCeiling().enableDenseFog() .setCavernGen(Blocks.hellrock.getState(), Blocks.lava.getState(), 63) - .setSurfaceReplacer(Blocks.gravel.getState(), Blocks.soul_sand.getState()) + .setSurfaceReplacer(Blocks.gravel.getState(), Blocks.soul_sand.getState()).setPopulator(PopulatorType.HELL) .addSpawn(EntityFireDemon.class, 50, 4, 4) .addSpawn(EntityTiefling.class, 100, 4, 4) .addSpawn(EntityBloodElf.class, 10, 1, 2) diff --git a/server/src/main/java/server/world/WorldServer.java b/server/src/main/java/server/world/WorldServer.java index 99991153..7a2596ae 100755 --- a/server/src/main/java/server/world/WorldServer.java +++ b/server/src/main/java/server/world/WorldServer.java @@ -114,7 +114,18 @@ import server.worldgen.caves.MapGenCaves; import server.worldgen.caves.MapGenRavine; import server.worldgen.foliage.WorldGenBigMushroom; import server.worldgen.populator.Populator; +import server.worldgen.populator.PopulatorAsteroids; +import server.worldgen.populator.PopulatorBasic; +import server.worldgen.populator.PopulatorBlackened; +import server.worldgen.populator.PopulatorChaos; +import server.worldgen.populator.PopulatorCheese; +import server.worldgen.populator.PopulatorDefault; +import server.worldgen.populator.PopulatorForest; +import server.worldgen.populator.PopulatorHell; import server.worldgen.populator.PopulatorMesa; +import server.worldgen.populator.PopulatorMushrooms; +import server.worldgen.populator.PopulatorNoMushrooms; +import server.worldgen.populator.PopulatorTian; import server.worldgen.structure.MapGenBridge; import server.worldgen.structure.MapGenMineshaft; import server.worldgen.structure.MapGenScatteredFeature; @@ -272,10 +283,32 @@ public final class WorldServer extends AWorldServer { case NONE: return null; case MESARIAN: - return new PopulatorMesa(true); + return new PopulatorMesa(); case TERRANIAN: default: return null; + case FOREST: + return new PopulatorForest(0); + case ELVEN_FOREST: + return new PopulatorForest(4); + case ASTEROIDS: + return new PopulatorAsteroids(); + case MUSHROOMS: + return new PopulatorMushrooms(); + case HELL: + return new PopulatorHell(); + case BLACKENED: + return new PopulatorBlackened(); + case NO_MUSHROOMS: + return new PopulatorNoMushrooms(); + case TIAN: + return new PopulatorTian(); + case CHEESE: + return new PopulatorCheese(); + case CHAOS: + return new PopulatorChaos(); + case BASIC: + return new PopulatorDefault(); } } diff --git a/server/src/main/java/server/worldgen/ReplacerMesa.java b/server/src/main/java/server/worldgen/ReplacerMesa.java index 53c966dc..a40ffa28 100644 --- a/server/src/main/java/server/worldgen/ReplacerMesa.java +++ b/server/src/main/java/server/worldgen/ReplacerMesa.java @@ -40,8 +40,8 @@ public class ReplacerMesa extends ReplacerBiome public void genTerrainBlocks(WorldServer world, Random rand, ChunkPrimer primer, int x, int z, double noise) { - boolean soil = this.soilGen.generate((double)x * 0.5D, (double)z * 0.5D) > 0.1; - boolean peak = this.peakGen.generate((double)x * 0.5D, (double)z * 0.5D) > 0.1; + boolean soil = this.soilGen.generate((double)((x & ~15) | (z & 15)) * 0.5D, (double)((z & ~15) | (x & 15)) * 0.5D) > 0.1; + boolean peak = this.peakGen.generate((double)((x & ~15) | (z & 15)) * 0.5D, (double)((z & ~15) | (x & 15)) * 0.5D) > 0.1; double d4 = 0.0D; @@ -130,7 +130,7 @@ public class ReplacerMesa extends ReplacerBiome } else { - primer.set(by, i1, bx, Blocks.grass.getState()); + primer.set(by, i1, bx, Blocks.dirt.getState()); } } else if (i1 <= this.seaLevel + 3 + rng) diff --git a/server/src/main/java/server/worldgen/ReplacerTerranian.java b/server/src/main/java/server/worldgen/ReplacerTerranian.java index 4120d4c7..2cabeec2 100644 --- a/server/src/main/java/server/worldgen/ReplacerTerranian.java +++ b/server/src/main/java/server/worldgen/ReplacerTerranian.java @@ -61,7 +61,7 @@ public class ReplacerTerranian extends ReplacerAltSimple { fillerBlock = this.filler; } } - else if (absTemp >= 25.0f && humidity >= 70.0f) + else if (absTemp < 5.0f && humidity >= 70.0f) { if (noise > 1.75D) { @@ -72,7 +72,7 @@ public class ReplacerTerranian extends ReplacerAltSimple { topBlock = Blocks.podzol.getState(); } } - else if(absTemp < 22.0f && humidity >= 65.0f) { + else if(absTemp < 22.0f && humidity >= 85.0f) { topBlock = Blocks.swamp.getState(); int sea = world.getSeaLevel() - 1; double d0 = grassNoiseGen.generate((double)x * 0.25D, (double)z * 0.25D); diff --git a/server/src/main/java/server/worldgen/caves/MapGenCaves.java b/server/src/main/java/server/worldgen/caves/MapGenCaves.java index c5e6c470..01a44bc0 100755 --- a/server/src/main/java/server/worldgen/caves/MapGenCaves.java +++ b/server/src/main/java/server/worldgen/caves/MapGenCaves.java @@ -249,7 +249,7 @@ public class MapGenCaves extends MapGenBase : (state.getBlock() == Blocks.sandstone ? true : /* (p_175793_1_.getBlock() == Blocks.red_sandstone ? true : */ (state.getBlock() == Blocks.mycelium ? true : (state.getBlock() == Blocks.snow_layer ? true - : (state.getBlock() == Blocks.sand || state.getBlock() == this.alt) && !above.getBlock().getMaterial().isColdLiquid()))))))); // ); + : (state.getBlock() == Blocks.sand || state.getBlock() == Blocks.red_sand || state.getBlock() == this.alt) && !above.getBlock().getMaterial().isColdLiquid()))))))); // ); } /** diff --git a/server/src/main/java/server/worldgen/populator/PopulatorBasic.java b/server/src/main/java/server/worldgen/populator/PopulatorBasic.java index 775e84f6..c9c9f44d 100755 --- a/server/src/main/java/server/worldgen/populator/PopulatorBasic.java +++ b/server/src/main/java/server/worldgen/populator/PopulatorBasic.java @@ -47,18 +47,6 @@ public abstract class PopulatorBasic implements Populator { public static final PopulatorBasic birchForest = (new PopulatorForest(2)); public static final PopulatorBasic roofedForest = (new PopulatorForest(3)); public static final PopulatorBasic tallBirchForest = new PopulatorForest(5); - - public static final PopulatorBasic elvenForest = (new PopulatorForest(4)); - public static final PopulatorBasic mesa = (new PopulatorMesa(false)); - public static final PopulatorBasic mesaPlateau_F = (new PopulatorMesa(true)); - public static final PopulatorBasic space = (new PopulatorAsteroids()); - public static final PopulatorBasic mushroomPlains = (new PopulatorMushrooms()); - public static final PopulatorBasic upperHell = (new PopulatorHell()); - public static final PopulatorBasic blackened = (new PopulatorBlackened()); - public static final PopulatorBasic snowLand = (new PopulatorNoMushrooms()); - public static final PopulatorBasic tian = (new PopulatorTian()); - public static final PopulatorBasic moon = (new PopulatorCheese()); - public static final PopulatorBasic chaos = (new PopulatorChaos()); protected static final PerlinGen TREE_NOISE = new PerlinGen(new Random(726528729282625L), 8); protected static final PerlinGen GRASS_NOISE = new PerlinGen(new Random(297363826225L), 1); diff --git a/server/src/main/java/server/worldgen/populator/PopulatorMesa.java b/server/src/main/java/server/worldgen/populator/PopulatorMesa.java index 14ff8e30..3d5950a0 100755 --- a/server/src/main/java/server/worldgen/populator/PopulatorMesa.java +++ b/server/src/main/java/server/worldgen/populator/PopulatorMesa.java @@ -1,23 +1,32 @@ package server.worldgen.populator; +import common.init.Blocks; import common.rng.Random; +import server.worldgen.FeatureGenerator; +import server.worldgen.foliage.WorldGenTallGrass; +import server.worldgen.tree.WorldGenBaseTree; import server.worldgen.tree.WorldGenTree; public class PopulatorMesa extends PopulatorBasic { - public PopulatorMesa(boolean soil) + protected final WorldGenBaseTree treeGen = new WorldGenBaseTree(false, Blocks.oak_log.getState(), null); + + public PopulatorMesa() { - this.treesPerChunk = -999; this.deadBushPerChunk = 20; this.reedsPerChunk = 3; this.cactiPerChunk = 5; this.flowersPerChunk = 0; - if (soil) - this.treesPerChunk = 5; + this.treesPerChunk = 5; } protected WorldGenTree genBigTreeChance(Random rand) { - return this.worldGeneratorTrees; + return this.treeGen; + } + + protected FeatureGenerator getRandomWorldGenForGrass(Random rand) + { + return new WorldGenTallGrass(Blocks.dead_bush); } } diff --git a/server/src/main/java/server/worldgen/tree/WorldGenBaseTree.java b/server/src/main/java/server/worldgen/tree/WorldGenBaseTree.java index 17f45fb1..e2b3a6aa 100755 --- a/server/src/main/java/server/worldgen/tree/WorldGenBaseTree.java +++ b/server/src/main/java/server/worldgen/tree/WorldGenBaseTree.java @@ -9,7 +9,6 @@ import common.init.WoodType; import common.properties.PropertyBool; import common.rng.Random; import common.util.BlockPos; -import common.util.Facing; import common.world.State; import server.world.WorldServer; @@ -118,7 +117,7 @@ public class WorldGenBaseTree extends WorldGenTree if (block == Blocks.air || block.getMaterial() == Material.LEAVES || block.getMaterial() == Material.BUSH) { - this.setBlockAndNotifyAdequately(worldIn, blockpos, BlockLeaves.getLeavesBlock(this.metaLeaves, worldIn.getLeavesGen(blockpos)).getState().withProperty(BlockLeaves.DECAY, Boolean.valueOf(false))); + this.setBlockAndNotifyAdequately(worldIn, blockpos, this.metaLeaves == null ? Blocks.dry_leaves.getState() : BlockLeaves.getLeavesBlock(this.metaLeaves, worldIn.getLeavesGen(blockpos)).getState().withProperty(BlockLeaves.DECAY, Boolean.valueOf(false))); } } } @@ -129,7 +128,7 @@ public class WorldGenBaseTree extends WorldGenTree { Block block2 = worldIn.getState(position.up(j3)).getBlock(); - if (block2 == Blocks.air || block2.getMaterial() == Material.LEAVES || block2.getMaterial() == Material.BUSH) + if (block2 == Blocks.air || block2.getMaterial() == Material.LEAVES || block2.getMaterial() == Material.BUSH || block2 == Blocks.dry_leaves) { this.setBlockAndNotifyAdequately(worldIn, position.up(j3), this.metaWood); diff --git a/server/src/main/java/server/worldgen/tree/WorldGenTree.java b/server/src/main/java/server/worldgen/tree/WorldGenTree.java index a28c3995..c61c54b3 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.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 instanceof BlockLog || block instanceof BlockSapling || block instanceof BlockVine; } public void prepare()