diff --git a/build.gradle b/build.gradle index ffd26df89..b79c60da5 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "0.11.0-SNAPSHOT" apply false + id "dev.architectury.loom" version "0.12.0-SNAPSHOT" apply false } def writeBuildGradlePredefine(List mcVers, int mcIndex) { @@ -115,6 +115,7 @@ subprojects { p -> // Toml implementation("com.electronwill.night-config:toml:${rootProject.toml_version}") + implementation("com.googlecode.json-simple:json-simple:1.1.1") if (p != project(":forge")) { // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies @@ -122,10 +123,11 @@ subprojects { p -> modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" } - if (p != project(":core")) + //if (p != project(":core")) + if (p == project(":common")) { common(project(":core")) { transitive false } - if (p == project(":common")) shadowMe(project(":core")) { transitive false } + } } // Allows the jar to run standalone diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/world/BiomeWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/world/BiomeWrapper.java index ec323fae8..c55ad81fd 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/world/BiomeWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/world/BiomeWrapper.java @@ -20,14 +20,24 @@ package com.seibel.lod.common.wrappers.world; import java.awt.Color; +import java.util.List; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.function.Function; +import java.util.function.Supplier; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableList; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper; +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.data.worldgen.biome.EndBiomes; +import net.minecraft.data.worldgen.biome.NetherBiomes; +import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.material.MaterialColor; @@ -58,18 +68,13 @@ public class BiomeWrapper implements IBiomeWrapper return biomeWrapper; } - /** Returns a color int for the given biome. */ + #if PRE_MC_1_19 @Override public int getColorForBiome(int x, int z) { int colorInt; - - #if PRE_MC_1_19 switch (biome.biomeCategory) - #else - switch (biome.biomeCategory) // FIXME[1.19] - #endif { case NETHER: @@ -125,7 +130,140 @@ public class BiomeWrapper implements IBiomeWrapper return colorInt; } - + #else + + + private static int _colorEnd(Biome b) { + return Blocks.END_STONE.defaultMaterialColor().col; + } + private static int _colorNether(Biome b) { + return Blocks.NETHERRACK.defaultMaterialColor().col; + } + private static int _colorSand(Biome b) { + return Blocks.SAND.defaultMaterialColor().col; + } + private static int _colorStone(Biome b) { + return Blocks.STONE.defaultMaterialColor().col; + } + private static int _colorGravel(Biome b) { + return Blocks.GRAVEL.defaultMaterialColor().col; + } + private static int _colorDripStone(Biome b) { + return Blocks.DRIPSTONE_BLOCK.defaultMaterialColor().col; + } + private static int _colorMoss(Biome b) { + return Blocks.MOSS_BLOCK.defaultMaterialColor().col; + } + private static int _colorSculk(Biome b) { + return Blocks.SCULK.defaultMaterialColor().col; + } + private static int _colorMushoom(Biome b) { + return Blocks.MYCELIUM.defaultMaterialColor().col; + } + private static int _colorBamboo(Biome b) { + return Blocks.BAMBOO.defaultMaterialColor().col; + } + private static int _colorSnow(Biome b) { + return Blocks.SNOW.defaultMaterialColor().col; + } + private static int _colorIce(Biome b) { + return Blocks.ICE.defaultMaterialColor().col; + } + private static int _colorRedSand(Biome b) { + return Blocks.RED_SAND.defaultMaterialColor().col; + } + private static int _colorSoulSand(Biome b) { + return Blocks.SOUL_SAND.defaultMaterialColor().col; + } + private static int _colorBasalt(Biome b) { + return Blocks.BASALT.defaultMaterialColor().col; + } + private static int _colorWater(Biome b) { + return b.getWaterColor(); + } + private static int _colorFoliage(Biome b) { + return b.getFoliageColor(); + } + + private static Biome _get(ResourceKey r) { + return BuiltinRegistries.BIOME.getOrThrow(r); + } + + //FIXME: THIS IS HELL! + private static final ImmutableBiMap> BIOME_COLOR_MAP = + ImmutableBiMap.>builder() + .put(_get(Biomes.SNOWY_PLAINS), BiomeWrapper::_colorSnow) + .put(_get(Biomes.ICE_SPIKES), BiomeWrapper::_colorIce) + .put(_get(Biomes.DESERT), BiomeWrapper::_colorSand) + .put(_get(Biomes.SWAMP), BiomeWrapper::_colorWater) + .put(_get(Biomes.MANGROVE_SWAMP), BiomeWrapper::_colorWater) + .put(_get(Biomes.FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.FLOWER_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.BIRCH_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.DARK_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.OLD_GROWTH_BIRCH_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.OLD_GROWTH_PINE_TAIGA), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.OLD_GROWTH_SPRUCE_TAIGA), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.TAIGA), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.SNOWY_TAIGA), BiomeWrapper::_colorSnow) + .put(_get(Biomes.WINDSWEPT_GRAVELLY_HILLS), BiomeWrapper::_colorGravel) + .put(_get(Biomes.WINDSWEPT_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.JUNGLE), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.BAMBOO_JUNGLE), BiomeWrapper::_colorBamboo) + .put(_get(Biomes.BADLANDS), BiomeWrapper::_colorRedSand) + .put(_get(Biomes.ERODED_BADLANDS), BiomeWrapper::_colorRedSand) + .put(_get(Biomes.WOODED_BADLANDS), BiomeWrapper::_colorStone) + .put(_get(Biomes.GROVE), BiomeWrapper::_colorSnow) + .put(_get(Biomes.SNOWY_SLOPES), BiomeWrapper::_colorSnow) + .put(_get(Biomes.FROZEN_PEAKS), BiomeWrapper::_colorIce) + .put(_get(Biomes.JAGGED_PEAKS), BiomeWrapper::_colorSnow) + .put(_get(Biomes.STONY_PEAKS), BiomeWrapper::_colorStone) + .put(_get(Biomes.RIVER), BiomeWrapper::_colorWater) + .put(_get(Biomes.FROZEN_RIVER), BiomeWrapper::_colorIce) + .put(_get(Biomes.BEACH), BiomeWrapper::_colorSand) + .put(_get(Biomes.SNOWY_BEACH), BiomeWrapper::_colorSnow) + .put(_get(Biomes.STONY_SHORE), BiomeWrapper::_colorStone) + .put(_get(Biomes.WARM_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.LUKEWARM_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.DEEP_LUKEWARM_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.DEEP_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.COLD_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.DEEP_COLD_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.FROZEN_OCEAN), BiomeWrapper::_colorIce) + .put(_get(Biomes.DEEP_FROZEN_OCEAN), BiomeWrapper::_colorIce) + .put(_get(Biomes.MUSHROOM_FIELDS), BiomeWrapper::_colorMushoom) + .put(_get(Biomes.DRIPSTONE_CAVES), BiomeWrapper::_colorDripStone) + .put(_get(Biomes.LUSH_CAVES), BiomeWrapper::_colorMoss) + .put(_get(Biomes.DEEP_DARK), BiomeWrapper::_colorSculk) + .put(_get(Biomes.NETHER_WASTES), BiomeWrapper::_colorNether) + .put(_get(Biomes.WARPED_FOREST), BiomeWrapper::_colorNether) + .put(_get(Biomes.CRIMSON_FOREST), BiomeWrapper::_colorNether) + .put(_get(Biomes.SOUL_SAND_VALLEY), BiomeWrapper::_colorSoulSand) + .put(_get(Biomes.BASALT_DELTAS), BiomeWrapper::_colorBasalt) + .put(_get(Biomes.THE_END), BiomeWrapper::_colorEnd) + .put(_get(Biomes.END_HIGHLANDS), BiomeWrapper::_colorEnd) + .put(_get(Biomes.END_MIDLANDS), BiomeWrapper::_colorEnd) + .put(_get(Biomes.SMALL_END_ISLANDS), BiomeWrapper::_colorEnd) + .put(_get(Biomes.END_BARRENS), BiomeWrapper::_colorEnd) + .build(); + + @Override + public int getColorForBiome(int x, int z) + { + int colorInt; + Function colorFunction = BIOME_COLOR_MAP.get(biome); + if (colorFunction != null) + { + colorInt = colorFunction.apply(biome); + } + else + { + colorInt = biome.getGrassColor(x, z); + } + return colorInt; + } + #endif @Override public String getName() { return biome.toString(); diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java index a5fbc8315..d99287776 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java @@ -367,7 +367,11 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv CompoundTag chunkData = null; try { + #if POST_MC_1_19 + chunkData = level.getChunkSource().chunkMap.readChunk(chunkPos).get().orElse(null); + #else chunkData = level.getChunkSource().chunkMap.readChunk(chunkPos); + #endif } catch (Exception e) { diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GlobalParameters.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GlobalParameters.java index 35dbfb8f1..1f65b91d9 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GlobalParameters.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GlobalParameters.java @@ -34,6 +34,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator; #if POST_MC_1_18_1 import net.minecraft.world.level.chunk.storage.ChunkScanAccess; #endif +import net.minecraft.world.level.levelgen.RandomState; import net.minecraft.world.level.levelgen.WorldGenSettings; #if PRE_MC_1_19 import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; @@ -49,6 +50,7 @@ public final class GlobalParameters public final StructureManager structures; #else public final StructureTemplateManager structures; + public final RandomState randomState; #endif public final WorldGenSettings worldGenSettings; public final ThreadedLevelLightEngine lightEngine; @@ -83,5 +85,8 @@ public final class GlobalParameters structures = server.getStructureManager(); generator = level.getChunkSource().getGenerator(); fixerUpper = server.getFixerUpper(); + #if POST_MC_1_19 + randomState = level.getChunkSource().randomState(); + #endif } } \ No newline at end of file diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ThreadedParameters.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ThreadedParameters.java index fa531ef6d..5e84aec39 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ThreadedParameters.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ThreadedParameters.java @@ -66,8 +66,8 @@ public final class ThreadedParameters param.fixerUpper); #else structCheck = new StructureCheck(param.chunkScanner, param.registry, param.structures, - param.level.dimension(), param.generator, /*FIXME[1.19]*/, level, param.generator.getBiomeSource(), param.worldSeed, - param.fixerUpper); + param.level.dimension(), param.generator, param.randomState, level, param.generator.getBiomeSource(), param.worldSeed, + param.fixerUpper); #endif } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepBiomes.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepBiomes.java index 1ab989d2b..d68f9bc9c 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepBiomes.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepBiomes.java @@ -77,7 +77,7 @@ public final class StepBiomes { chunk = environment.joinSync(environment.params.generator.createBiomes(environment.params.biomes, Runnable::run, Blender.of(worldGenRegion), tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk)); #else - chunk = environment.joinSync(environment.params.generator.createBiomes(environment.params.biomes, Runnable::run, /*FIXME[1.19]*/, Blender.of(worldGenRegion), + chunk = environment.joinSync(environment.params.generator.createBiomes(environment.params.biomes, Runnable::run, environment.params.randomState, Blender.of(worldGenRegion), tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk)); #endif } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepNoise.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepNoise.java index 1fa7dfb43..07bf9471c 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepNoise.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepNoise.java @@ -85,7 +85,7 @@ public final class StepNoise { chunk = environment.joinSync(environment.params.generator.fillFromNoise(Runnable::run, Blender.of(worldGenRegion), tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk)); #else - chunk = environment.joinSync(environment.params.generator.fillFromNoise(Runnable::run, Blender.of(worldGenRegion), /*FIXME[1.19]*/, + chunk = environment.joinSync(environment.params.generator.fillFromNoise(Runnable::run, Blender.of(worldGenRegion), environment.params.randomState, tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk)); #endif LodUtil.checkInterruptsUnchecked(); // Speed up termination responsiveness diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureStart.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureStart.java index f7bed8cdf..cb88c2d9a 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureStart.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureStart.java @@ -70,7 +70,7 @@ public final class StepStructureStart { #if PRE_MC_1_19 if (environment.params.worldGenSettings.generateFeatures()) { #elif POST_MC_1_19 - if (environment.params.worldGenSettings.generateStructures()) + if (environment.params.worldGenSettings.generateStructures()) { #endif for (ChunkAccess chunk : chunksToDo) { // System.out.println("StepStructureStart: "+chunk.getPos()); @@ -78,7 +78,7 @@ public final class StepStructureStart { environment.params.generator.createStructures(environment.params.registry, tParams.structFeat, chunk, environment.params.structures, environment.params.worldSeed); #elif POST_MC_1_19 - environment.params.generator.createStructures(environment.params.registry, /*FIXME[1.19]*/, tParams.structFeat, chunk, environment.params.structures, + environment.params.generator.createStructures(environment.params.registry, environment.params.randomState, tParams.structFeat, chunk, environment.params.structures, environment.params.worldSeed); #endif #if POST_MC_1_18_1 diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepSurface.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepSurface.java index e30b0820d..92c10645b 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepSurface.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepSurface.java @@ -63,7 +63,7 @@ public final class StepSurface { #elif PRE_MC_1_19 environment.params.generator.buildSurface(worldGenRegion, tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk); #else - environment.params.generator.buildSurface(worldGenRegion, tParams.structFeat.forWorldGenRegion(worldGenRegion), /*FIXME[1.19]*/, chunk); + environment.params.generator.buildSurface(worldGenRegion, tParams.structFeat.forWorldGenRegion(worldGenRegion), environment.params.randomState, chunk); #endif } } diff --git a/common/src/main/resources/1_19.lod.accesswidener b/common/src/main/resources/1_19.lod.accesswidener index 826be244f..143356a82 100644 --- a/common/src/main/resources/1_19.lod.accesswidener +++ b/common/src/main/resources/1_19.lod.accesswidener @@ -23,9 +23,10 @@ accessible field net/minecraft/world/level/lighting/LevelLightEngine skyEngine L # world generation accessible method net/minecraft/world/level/levelgen/Heightmap setHeight (III)V accessible field net/minecraft/world/level/biome/Biome generationSettings Lnet/minecraft/world/level/biome/BiomeGenerationSettings; -#accessible field net/minecraft/world/level/biome/Biome biomeCategory Lnet/minecraft/world/level/biome/Biome$BiomeCategory; #FIXME[1.19] What is the 1.19 alternative to this # accessible field net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator settings Lnet/minecraft/core/Holder; accessible method net/minecraft/world/level/lighting/LayerLightEngine queueSectionData (JLnet/minecraft/world/level/chunk/DataLayer;Z)V +accessible method net/minecraft/server/level/ChunkMap readChunk (Lnet/minecraft/world/level/ChunkPos;)Ljava/util/concurrent/CompletableFuture; + # lod generation from save file accessible field net/minecraft/server/level/ChunkMap mainThreadExecutor Lnet/minecraft/util/thread/BlockableEventLoop;