diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/MinecraftAddon.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/MinecraftAddon.java index fa1214389..e41141f1f 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/MinecraftAddon.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/MinecraftAddon.java @@ -19,6 +19,13 @@ package com.dfsek.terra.mod; import ca.solostudios.strata.Versions; import ca.solostudios.strata.version.Version; + +import com.dfsek.terra.api.config.ConfigPack; + +import com.dfsek.terra.mod.config.VanillaWorldProperties; + +import com.dfsek.terra.mod.util.MinecraftUtil; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,6 +51,15 @@ public abstract class MinecraftAddon implements BaseAddon { @Override public void initialize() { + modPlatform.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigurationLoadEvent.class) + .then(event -> { + if(event.is(ConfigPack.class)) { + event.getLoadedObject(ConfigPack.class).getContext().put(event.load(new VanillaWorldProperties())); + } + }) + .global(); modPlatform.getEventManager() .getHandler(FunctionalEventHandler.class) .register(this, ConfigPackPreLoadEvent.class) diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/FertilizableConfig.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/FertilizableConfig.java index aa8f495d2..b16c39e93 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/FertilizableConfig.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/FertilizableConfig.java @@ -3,14 +3,11 @@ package com.dfsek.terra.mod.config; import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; - -import com.dfsek.terra.api.structure.Structure; - import net.minecraft.util.Identifier; import java.util.Map; -import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.structure.Structure; import com.dfsek.terra.api.util.collection.ProbabilityCollection; @@ -27,9 +24,9 @@ public class FertilizableConfig implements ObjectTemplate { @Default private Structure canGrow = null; - @Value("villager-fertilizable") + @Value("villager-farmable") @Default - private Boolean villagerFertilizable = null; + private Boolean villagerFarmable = null; public ProbabilityCollection getStructures() { return structures; @@ -43,8 +40,8 @@ public class FertilizableConfig implements ObjectTemplate { return canGrow; } - public Boolean isVillagerFertilizable() { - return villagerFertilizable; + public Boolean isVillagerFarmable() { + return villagerFarmable; } @Override diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MonsterSettingsTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MonsterSettingsTemplate.java new file mode 100644 index 000000000..e585fe43a --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MonsterSettingsTemplate.java @@ -0,0 +1,38 @@ +package com.dfsek.terra.mod.config; + +import com.dfsek.tectonic.api.config.template.annotations.Default; +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; + +import com.dfsek.terra.api.util.ConstantRange; +import com.dfsek.terra.api.util.Range; + +import com.dfsek.terra.mod.implmentation.TerraIntProvider; + +import net.minecraft.world.dimension.DimensionType.MonsterSettings; + + +public class MonsterSettingsTemplate implements ObjectTemplate { + @Value("piglin-safe") + @Default + private Boolean piglinSafe = false; + + @Value("has-raids") + @Default + private Boolean hasRaids = false; + + @Value("monster-spawn-light") + @Default + private Range monsterSpawnLight = new ConstantRange(0, 1); + + @Value("monster-spawn-block-light-limit") + @Default + private int monsterSpawnBlockLightLimit = 0; + + + @Override + public MonsterSettings get() { + return new MonsterSettings(piglinSafe, hasRaids, new TerraIntProvider(monsterSpawnLight), monsterSpawnBlockLightLimit); + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaWorldProperties.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaWorldProperties.java new file mode 100644 index 000000000..8ee95432b --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaWorldProperties.java @@ -0,0 +1,141 @@ +package com.dfsek.terra.mod.config; + +import com.dfsek.tectonic.api.config.template.ConfigTemplate; +import com.dfsek.tectonic.api.config.template.annotations.Default; +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import com.dfsek.terra.mod.implmentation.TerraIntProvider; + +import net.minecraft.client.gl.Uniform; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.intprovider.IntProvider; +import net.minecraft.util.math.intprovider.IntProviderType; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.dimension.DimensionType.MonsterSettings; + +import com.dfsek.terra.api.properties.Properties; +import com.dfsek.terra.api.util.ConstantRange; +import com.dfsek.terra.api.util.Range; + + +public class VanillaWorldProperties implements ConfigTemplate, Properties { + @Value("minecraft.fixed-time") + @Default + private Long fixedTime = null; + + @Value("minecraft.has-sky-light") + @Default + private Boolean hasSkyLight = false; + + @Value("minecraft.has-ceiling") + @Default + private Boolean hasCeiling = false; + + @Value("minecraft.ultra-warm") + @Default + private Boolean ultraWarm = false; + + @Value("minecraft.natural") + @Default + private Boolean natural = false; + + @Value("minecraft.coordinate-scale") + @Default + private Double coordinateScale = 1.0E-5d; + + @Value("minecraft.bed-works") + @Default + private Boolean bedWorks = false; + + @Value("minecraft.respawn-anchor-works") + @Default + private Boolean respawnAnchorWorks = false; + + @Value("minecraft.height") + @Default + private Range height = new ConstantRange(0, 16); + + @Value("minecraft.height.logical") + @Default + private Integer logicalHeight = 0; + + @Value("minecraft.infiniburn") + @Default + private Identifier infiniburn = new Identifier(""); + + @Value("minecraft.effects") + @Default + private Identifier effects = new Identifier(""); + + @Value("minecraft.ambient-light") + @Default + private Float ambientLight = Float.MAX_VALUE; + + @Value("minecraft.monster-settings") + @Default + private MonsterSettings monsterSettings = new MonsterSettings(false, false, new TerraIntProvider(new ConstantRange(0, 1)), 0); + + @Value("minecraft.sealevel") + @Default + private Integer sealevel = 0; + + public Long getFixedTime() { + return fixedTime; + } + + public Boolean getHasSkyLight() { + return hasSkyLight; + } + + public Boolean getHasCeiling() { + return hasCeiling; + } + + public Boolean getUltraWarm() { + return ultraWarm; + } + + public Boolean getNatural() { + return natural; + } + + public Double getCoordinateScale() { + return coordinateScale; + } + + public Boolean getBedWorks() { + return bedWorks; + } + + public Boolean getRespawnAnchorWorks() { + return respawnAnchorWorks; + } + + public Range getHeight() { + return height; + } + + public Integer getLogicalHeight() { + return logicalHeight; + } + + public Identifier getInfiniburn() { + return infiniburn; + } + + public Identifier getEffects() { + return effects; + } + + public Float getAmbientLight() { + return ambientLight; + } + + public MonsterSettings getMonsterSettings() { + return monsterSettings; + } + + public Integer getSealevel() { + return sealevel; + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java index 5f5dd615a..66e668cbf 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java @@ -1,5 +1,10 @@ package com.dfsek.terra.mod.data; +import com.dfsek.terra.api.util.ConstantRange; +import com.dfsek.terra.api.util.Range; + +import com.dfsek.terra.mod.implmentation.TerraIntProvider; + import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.util.dynamic.RegistryOps; @@ -62,4 +67,9 @@ public final class Codecs { .forGetter(MinecraftChunkGeneratorWrapper::getSettings) ).apply(instance, instance.stable(MinecraftChunkGeneratorWrapper::new)) ); + + public static final Codec TERRA_CONSTANT_RANGE_INT_PROVIDER_TYPE = RecordCodecBuilder.create(range -> range.group( + Codec.INT.fieldOf("min").stable().forGetter(TerraIntProvider::getMin), + Codec.INT.fieldOf("max").stable().forGetter(TerraIntProvider::getMax)).apply(range, range.stable((min, max) -> new TerraIntProvider(new ConstantRange( + min, max))))); } 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 5742120d6..03a7c8f6f 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 @@ -17,6 +17,9 @@ package com.dfsek.terra.mod.generation; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.config.VanillaWorldProperties; + import com.mojang.serialization.Codec; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -76,6 +79,8 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun private ChunkGenerator delegate; private ConfigPack pack; + private VanillaWorldProperties vanillaWorldProperties; + public MinecraftChunkGeneratorWrapper(Registry noiseRegistry, TerraBiomeSource biomeSource, ConfigPack configPack, RegistryEntry settingsSupplier) { super(noiseRegistry, Optional.empty(), biomeSource); @@ -86,6 +91,11 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun this.delegate = pack.getGeneratorProvider().newInstance(pack); logger.info("Loading world with config pack {}", pack.getID()); this.biomeSource = biomeSource; + if (pack.getContext().has(VanillaBiomeProperties.class)) { + vanillaWorldProperties = pack.getContext().get(VanillaWorldProperties.class); + } else { + vanillaWorldProperties = new VanillaWorldProperties(); + } } public Registry getNoiseRegistry() { @@ -115,7 +125,7 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun @Override public int getWorldHeight() { - return settings.value().generationShapeConfig().height(); + return vanillaWorldProperties.getHeight().getMax(); } @@ -174,12 +184,12 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun @Override public int getSeaLevel() { - return settings.value().seaLevel(); + return vanillaWorldProperties.getSealevel(); } @Override public int getMinimumY() { - return settings.value().generationShapeConfig().minimumY(); + return vanillaWorldProperties.getHeight().getMin(); } @@ -209,7 +219,7 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun @Override public void getDebugHudText(List text, NoiseConfig noiseConfig, BlockPos pos) { - + // no op } public ConfigPack getPack() { @@ -220,6 +230,12 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun this.pack = pack; this.delegate = pack.getGeneratorProvider().newInstance(pack); biomeSource.setPack(pack); + + if (pack.getContext().has(VanillaBiomeProperties.class)) { + vanillaWorldProperties = pack.getContext().get(VanillaWorldProperties.class); + } else { + vanillaWorldProperties = new VanillaWorldProperties(); + } logger.debug("Loading world with config pack {}", pack.getID()); } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/implmentation/TerraIntProvider.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/implmentation/TerraIntProvider.java new file mode 100644 index 000000000..dd5d51687 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/implmentation/TerraIntProvider.java @@ -0,0 +1,43 @@ +package com.dfsek.terra.mod.implmentation; + +import com.dfsek.terra.api.util.Range; + +import com.dfsek.terra.mod.util.MinecraftAdapter; + +import net.minecraft.util.math.intprovider.IntProvider; +import net.minecraft.util.math.intprovider.IntProviderType; +import net.minecraft.util.math.random.Random; + +import java.util.HashMap; +import java.util.Map; + + +public class TerraIntProvider extends IntProvider { + public static final Map TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE = new HashMap<>(); + + public Range delegate; + + public TerraIntProvider(Range delegate) { + this.delegate = delegate; + } + + @Override + public int get(Random random) { + return delegate.get(MinecraftAdapter.adapt(random)); + } + + @Override + public int getMin() { + return delegate.getMin(); + } + + @Override + public int getMax() { + return delegate.getMax(); + } + + @Override + public IntProviderType getType() { + return TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE.get(delegate.getClass()); + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealTaskMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealTaskMixin.java index 3eb8d813b..62a50c376 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealTaskMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealTaskMixin.java @@ -1,8 +1,6 @@ package com.dfsek.terra.mod.mixin.gameplay; -import com.dfsek.terra.mod.util.MinecraftAdapter; - import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.ai.brain.task.BoneMealTask; @@ -24,6 +22,7 @@ import com.dfsek.terra.api.util.vector.Vector3Int; import com.dfsek.terra.api.world.WritableWorld; import com.dfsek.terra.mod.config.FertilizableConfig; import com.dfsek.terra.mod.util.BiomeUtil; +import com.dfsek.terra.mod.util.MinecraftAdapter; @Mixin(BoneMealTask.class) @@ -37,9 +36,9 @@ public class BoneMealTaskMixin { Block block = blockState.getBlock(); FertilizableConfig config = map.get(Registry.BLOCK.getId(block)); if(config != null) { - Boolean villagerFertilizable = config.isVillagerFertilizable(); - if(villagerFertilizable != null) { - if(villagerFertilizable) { + Boolean villagerFarmable = config.isVillagerFarmable(); + if(villagerFarmable != null) { + if(villagerFarmable) { Structure canGrow = config.getCanGrow(); if(canGrow != null) { RandomGenerator random = MinecraftAdapter.adapt(world.getRandom()); diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java index d1c470076..237a9e550 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java @@ -1,5 +1,7 @@ package com.dfsek.terra.mod.mixin.lifecycle; +import com.dfsek.terra.mod.util.MinecraftUtil; + import net.minecraft.server.DataPackContents; import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; 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 new file mode 100644 index 000000000..234ea2940 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/DimensionUtil.java @@ -0,0 +1,62 @@ +package com.dfsek.terra.mod.util; + +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.config.VanillaWorldProperties; + +import net.minecraft.tag.TagKey; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.world.dimension.DimensionOptions; +import net.minecraft.world.dimension.DimensionType; + +import java.util.OptionalLong; + + +public class DimensionUtil { + protected static RegistryKey registerDimension(Identifier identifier, + DimensionType dimension) { + BuiltinRegistries.add(BuiltinRegistries.DIMENSION_TYPE, + registerKey(identifier) + .getValue(), + dimension); + return getDimensionKey(identifier); + } + + public static RegistryKey registerKey(Identifier identifier) { + return RegistryKey.of(Registry.DIMENSION_KEY, identifier); + } + public static RegistryKey getDimensionKey(Identifier identifier) { + return BuiltinRegistries.DIMENSION_TYPE.getKey(BuiltinRegistries.DIMENSION_TYPE.get(identifier)).orElseThrow(); + } + + protected static RegistryKey registerDimension(ConfigPack pack) { + VanillaWorldProperties vanillaWorldProperties; + if (pack.getContext().has(VanillaBiomeProperties.class)) { + vanillaWorldProperties = pack.getContext().get(VanillaWorldProperties.class); + } else { + vanillaWorldProperties = new VanillaWorldProperties(); + } + + DimensionType overworldDimensionType = new DimensionType( + vanillaWorldProperties.getFixedTime() == null ? OptionalLong.empty() : OptionalLong.of(vanillaWorldProperties.getFixedTime()), + vanillaWorldProperties.getHasSkyLight(), + vanillaWorldProperties.getHasCeiling(), + vanillaWorldProperties.getUltraWarm(), + vanillaWorldProperties.getNatural(), + vanillaWorldProperties.getCoordinateScale(), + vanillaWorldProperties.getBedWorks(), + vanillaWorldProperties.getRespawnAnchorWorks(), + vanillaWorldProperties.getHeight().getMin(), + vanillaWorldProperties.getHeight().getMax(), + vanillaWorldProperties.getLogicalHeight(), + TagKey.of(Registry.BLOCK_KEY, vanillaWorldProperties.getInfiniburn()), + vanillaWorldProperties.getEffects(), + vanillaWorldProperties.getAmbientLight(), + vanillaWorldProperties.getMonsterSettings()); + + return registerDimension(new Identifier("terra", pack.getID().toLowerCase()), overworldDimensionType); + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java index 941f85b2c..fc623fa6c 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java @@ -1,10 +1,17 @@ package com.dfsek.terra.mod.util; +import com.dfsek.terra.api.util.ConstantRange; +import com.dfsek.terra.mod.data.Codecs; + +import com.dfsek.terra.mod.implmentation.TerraIntProvider; + import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.block.entity.MobSpawnerBlockEntity; import net.minecraft.block.entity.SignBlockEntity; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.intprovider.ConstantIntProvider; +import net.minecraft.util.math.intprovider.IntProviderType; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; import net.minecraft.util.registry.RegistryKey; @@ -12,6 +19,7 @@ import net.minecraft.world.WorldAccess; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome.Builder; import net.minecraft.world.biome.BiomeEffects; +import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; import net.minecraft.world.biome.GenerationSettings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,6 +62,13 @@ public final class MinecraftUtil { return null; } + public static void registerIntProviderTypes() { + IntProviderType CONSTANT = IntProviderType.register("terra:constant_range", + Codecs.TERRA_CONSTANT_RANGE_INT_PROVIDER_TYPE); + + TerraIntProvider.TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE.put(ConstantRange.class, CONSTANT); + } + public static RegistryKey registerKey(Identifier identifier) { return RegistryKey.of(Registry.BIOME_KEY, identifier); } 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 f4fd942c8..7618678ce 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,11 +1,16 @@ package com.dfsek.terra.mod.util; +import net.minecraft.client.gui.screen.CustomizeBuffetLevelScreen; +import net.minecraft.client.gui.screen.CustomizeFlatLevelScreen; +import net.minecraft.client.gui.screen.world.LevelScreenProvider; import net.minecraft.structure.StructureSet; import net.minecraft.util.Identifier; import net.minecraft.util.math.noise.DoublePerlinNoiseSampler.NoiseParameters; import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; +import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.source.MultiNoiseBiomeSource; import net.minecraft.world.biome.source.TheEndBiomeSource; @@ -13,8 +18,11 @@ import net.minecraft.world.dimension.DimensionOptions; import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionTypes; import net.minecraft.world.gen.WorldPreset; +import net.minecraft.world.gen.WorldPresets; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; +import net.minecraft.world.gen.chunk.FlatChunkGenerator; +import net.minecraft.world.gen.chunk.FlatChunkGeneratorConfig; import net.minecraft.world.gen.chunk.NoiseChunkGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,6 +31,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.util.generic.pair.Pair; @@ -34,6 +43,15 @@ public class PresetUtil { private static final Logger LOGGER = LoggerFactory.getLogger(PresetUtil.class); private static final List PRESETS = new ArrayList<>(); + public static RegistryKey getPresetKey(Identifier identifier) { + return RegistryKey.of(Registry.WORLD_PRESET_KEY, identifier); + } + +// public static void addPreset() { +// LevelScreenProvider +// LevelScreenProvider.WORLD_PRESET_TO_SCREEN_PROVIDER.put(Optional.ofNullable(getPresetKey(new Identifier("terra", "terra"))), new TerraPresetScreen()); +// } + public static Pair createDefault(ConfigPack pack) { Registry dimensionTypeRegistry = BuiltinRegistries.DIMENSION_TYPE; Registry chunkGeneratorSettingsRegistry = BuiltinRegistries.CHUNK_GENERATOR_SETTINGS; @@ -58,7 +76,7 @@ public class PresetUtil { new TheEndBiomeSource(biomeRegistry), endChunkGeneratorSettings)); - RegistryEntry overworldDimensionType = dimensionTypeRegistry.getOrCreateEntry(DimensionTypes.OVERWORLD); + RegistryEntry overworldDimensionType = dimensionTypeRegistry.getOrCreateEntry(DimensionUtil.registerDimension(pack)); RegistryEntry overworld = chunkGeneratorSettingsRegistry.getOrCreateEntry(ChunkGeneratorSettings.OVERWORLD); diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/RegistryUtil.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/RegistryUtil.java index 9f17b89e3..aeb57b484 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/RegistryUtil.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/RegistryUtil.java @@ -1,5 +1,7 @@ package com.dfsek.terra.lifecycle.util; +import com.dfsek.terra.mod.util.MinecraftUtil; + import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -12,6 +14,7 @@ public final class RegistryUtil { } public static void register() { + MinecraftUtil.registerIntProviderTypes(); Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), Codecs.MINECRAFT_CHUNK_GENERATOR_WRAPPER); Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), Codecs.TERRA_BIOME_SOURCE); }