diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MonsterSettingsConfig.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MonsterSettingsConfig.java index 372c40926..416ab57d6 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MonsterSettingsConfig.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MonsterSettingsConfig.java @@ -29,7 +29,6 @@ public class MonsterSettingsConfig implements ObjectTemplate TERRA_CONSTANT_RANGE = RecordCodecBuilder.create(range -> range.group( + Codec.INT.fieldOf("min").stable().forGetter(ConstantRange::getMin), + Codec.INT.fieldOf("max").stable().forGetter(ConstantRange::getMax)).apply(range, range.stable(ConstantRange::new))); + + public static final Codec TERRA_GENERATION_SETTINGS = RecordCodecBuilder + .create(instance -> instance.group( + TERRA_CONSTANT_RANGE.fieldOf("height").stable().forGetter(GenerationSettings::height), + Codec.INT.fieldOf("sealevel").forGetter(GenerationSettings::sealevel), + Codec.BOOL.fieldOf("mob_generation").forGetter(GenerationSettings::mobGeneration)) + .apply(instance, instance.stable(GenerationSettings::new))); + + public static final Codec MINECRAFT_CHUNK_GENERATOR_WRAPPER = RecordCodecBuilder .create( instance -> instance.group( @@ -53,7 +66,7 @@ public final class Codecs { CONFIG_PACK.fieldOf("pack") .stable() .forGetter(MinecraftChunkGeneratorWrapper::getPack), - ChunkGeneratorSettings.REGISTRY_CODEC.fieldOf("settings") + TERRA_GENERATION_SETTINGS.fieldOf("settings") .stable() .forGetter(MinecraftChunkGeneratorWrapper::getSettings) ).apply(instance, instance.stable( diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/GenerationSettings.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/GenerationSettings.java new file mode 100644 index 000000000..bb936e7d6 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/GenerationSettings.java @@ -0,0 +1,8 @@ +package com.dfsek.terra.mod.generation; + +import com.dfsek.terra.api.util.ConstantRange; +import com.dfsek.terra.api.util.Range; + + +public record GenerationSettings(ConstantRange height, Integer sealevel, Boolean mobGeneration) { +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java index 54284ecaf..b6e4b4818 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java @@ -74,13 +74,13 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun private static final Logger logger = LoggerFactory.getLogger(MinecraftChunkGeneratorWrapper.class); private final TerraBiomeSource biomeSource; - private final RegistryEntry settings; + private final GenerationSettings settings; private ChunkGenerator delegate; private ConfigPack pack; public MinecraftChunkGeneratorWrapper(TerraBiomeSource biomeSource, ConfigPack configPack, - RegistryEntry settingsSupplier) { + GenerationSettings settingsSupplier) { super(biomeSource); this.pack = configPack; this.settings = settingsSupplier; @@ -102,7 +102,7 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun @Override public void populateEntities(ChunkRegion region) { - if(!this.settings.value().mobGenerationDisabled()) { + if(this.settings.mobGeneration()) { ChunkPos chunkPos = region.getCenterPos(); RegistryEntry registryEntry = region.getBiome(chunkPos.getStartPos().withY(region.getTopY() - 1)); ChunkRandom chunkRandom = new ChunkRandom(new CheckedRandom(RandomSeed.getSeed())); @@ -113,7 +113,7 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun @Override public int getWorldHeight() { - return settings.value().generationShapeConfig().height(); + return settings.height().getRange(); } @@ -173,12 +173,12 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun @Override public int getSeaLevel() { - return settings.value().seaLevel(); + return settings.sealevel(); } @Override public int getMinimumY() { - return settings.value().generationShapeConfig().minimumY(); + return settings.height().getMin(); } @Override @@ -233,7 +233,7 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun return delegate; } - public RegistryEntry getSettings() { + public GenerationSettings getSettings() { return settings; } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/DimensionUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/DimensionUtil.java index 37f1442b7..cb3afeb50 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/DimensionUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/DimensionUtil.java @@ -25,7 +25,7 @@ import java.util.OptionalLong; public class DimensionUtil { - public static DimensionType createDimension(VanillaWorldProperties vanillaWorldProperties, ModPlatform platform) { + public static DimensionType createDimension(VanillaWorldProperties vanillaWorldProperties, DimensionType defaultDimension, ModPlatform platform) { MonsterSettingsConfig monsterSettingsConfig; if (vanillaWorldProperties.getMonsterSettings() != null) { @@ -34,11 +34,6 @@ public class DimensionUtil { monsterSettingsConfig = new MonsterSettingsConfig(); } - Registry dimensionTypeRegistry = platform.dimensionTypeRegistry(); - - DimensionType defaultDimension = dimensionTypeRegistry.get(new Identifier(vanillaWorldProperties.getVanillaDimension())); - - assert defaultDimension != null; MonsterSettings monsterSettings = getMonsterSettings(defaultDimension, monsterSettingsConfig); return new DimensionType( @@ -52,7 +47,7 @@ public class DimensionUtil { vanillaWorldProperties.getBedWorks() == null ? defaultDimension.bedWorks() : vanillaWorldProperties.getBedWorks(), vanillaWorldProperties.getRespawnAnchorWorks() == null ? defaultDimension.respawnAnchorWorks() : vanillaWorldProperties.getRespawnAnchorWorks(), vanillaWorldProperties.getHeight() == null ? defaultDimension.minY() : vanillaWorldProperties.getHeight().getMin(), - vanillaWorldProperties.getHeight() == null ? defaultDimension.height() : vanillaWorldProperties.getHeight().getMax(), + vanillaWorldProperties.getHeight() == null ? defaultDimension.height() : vanillaWorldProperties.getHeight().getRange(), vanillaWorldProperties.getLogicalHeight() == null ? defaultDimension.logicalHeight() : vanillaWorldProperties.getLogicalHeight(), vanillaWorldProperties.getInfiniburn() == null ? defaultDimension.infiniburn() : TagKey.of(RegistryKeys.BLOCK, vanillaWorldProperties.getInfiniburn()), vanillaWorldProperties.getEffects() == null ? defaultDimension.effects() : vanillaWorldProperties.getEffects(), diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/PresetUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/PresetUtil.java index 95d1184df..aa521ef17 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/PresetUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/PresetUtil.java @@ -1,7 +1,10 @@ package com.dfsek.terra.mod.util; +import com.dfsek.terra.api.util.ConstantRange; import com.dfsek.terra.mod.config.VanillaWorldProperties; +import com.dfsek.terra.mod.generation.GenerationSettings; + import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; @@ -100,7 +103,11 @@ public class PresetUtil { vanillaWorldProperties = new VanillaWorldProperties(); } - DimensionType dimensionType = DimensionUtil.createDimension(vanillaWorldProperties, platform); + DimensionType defaultDimension = dimensionTypeRegistry.get(new Identifier(vanillaWorldProperties.getVanillaDimension())); + + assert defaultDimension != null; + + DimensionType dimensionType = DimensionUtil.createDimension(vanillaWorldProperties, defaultDimension, platform); RegistryKey dimensionTypeRegistryKey = MinecraftUtil.registerDimensionTypeKey(new Identifier("terra", pack.getID().toLowerCase( Locale.ROOT))); @@ -110,11 +117,12 @@ public class PresetUtil { TerraBiomeSource biomeSource = new TerraBiomeSource(pack); - RegistryEntry generatorSettings = chunkGeneratorSettingsRegistry.getEntry(chunkGeneratorSettingsRegistry.get(demensionIdentifier)); - if (key.equals("minecraft:the_nether") || key.equals("minecraft:the_end")) { //TODO REMOVE WHEN ADDING CUSTOM GEN SETTINGS - Identifier demensionIdentifier2 = new Identifier(key.replace("the_", "")); - generatorSettings = chunkGeneratorSettingsRegistry.getEntry(chunkGeneratorSettingsRegistry.get(demensionIdentifier2)); - } + RegistryEntry defaultGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(chunkGeneratorSettingsRegistry.get(new Identifier(vanillaWorldProperties.getVanillaGeneration()))); + + GenerationSettings generatorSettings = new GenerationSettings( + vanillaWorldProperties.getHeight() == null ? new ConstantRange(defaultGeneratorSettings.value().generationShapeConfig().minimumY(), defaultGeneratorSettings.value().generationShapeConfig().height()) : vanillaWorldProperties.getHeight(), + vanillaWorldProperties.getSealevel() == null ? defaultGeneratorSettings.value().seaLevel() : vanillaWorldProperties.getSealevel(), + vanillaWorldProperties.getMobGeneration() == null ? !defaultGeneratorSettings.value().mobGenerationDisabled() : vanillaWorldProperties.getMobGeneration()); ChunkGenerator generator = new MinecraftChunkGeneratorWrapper(biomeSource, pack, generatorSettings);