This commit is contained in:
Zoë Gidiere 2023-12-12 17:19:32 -07:00
parent 7ca24faad3
commit 56b428d501
2 changed files with 42 additions and 46 deletions

View File

@ -25,14 +25,9 @@ import java.util.OptionalLong;
public class DimensionUtil {
public static DimensionType createDimension(ConfigPack pack, ModPlatform platform) {
VanillaWorldProperties vanillaWorldProperties;
public static DimensionType createDimension(VanillaWorldProperties vanillaWorldProperties, ModPlatform platform) {
MonsterSettingsConfig monsterSettingsConfig;
if (pack.getContext().has(VanillaWorldProperties.class)) {
vanillaWorldProperties = pack.getContext().get(VanillaWorldProperties.class);
} else {
vanillaWorldProperties = new VanillaWorldProperties();
}
if (vanillaWorldProperties.getMonsterSettings() != null) {
monsterSettingsConfig = vanillaWorldProperties.getMonsterSettings();
} else {

View File

@ -1,5 +1,7 @@
package com.dfsek.terra.mod.util;
import com.dfsek.terra.mod.config.VanillaWorldProperties;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
@ -45,30 +47,14 @@ public class PresetUtil {
platform.multiNoiseBiomeSourceParameterListRegistry();
DimensionType dimensionType = DimensionUtil.createDimension(pack, platform);
RegistryKey<DimensionType> dimensionTypeRegistryKey = MinecraftUtil.registerDimensionTypeKey(new Identifier("overworld"));
Registry.registerReference(dimensionTypeRegistry, dimensionTypeRegistryKey, dimensionType);
RegistryEntry<DimensionType> dimensionTypeRegistryEntry = dimensionTypeRegistry.getEntry(dimensionType);
RegistryEntry<ChunkGeneratorSettings> overworld = chunkGeneratorSettingsRegistry.getEntry(ChunkGeneratorSettings.OVERWORLD)
.orElseThrow();
Identifier generatorID = Identifier.of("terra", pack.getID().toLowerCase(Locale.ROOT) + "/" + pack.getNamespace().toLowerCase(
Locale.ROOT));
PRESETS.add(generatorID);
TerraBiomeSource biomeSource = new TerraBiomeSource(pack);
ChunkGenerator generator = new MinecraftChunkGeneratorWrapper(biomeSource, pack, overworld);
DimensionOptions dimensionOptions = new DimensionOptions(dimensionTypeRegistryEntry, generator);
HashMap<RegistryKey<DimensionOptions>, DimensionOptions> dimensionMap = new HashMap<>();
dimensionMap.put(DimensionOptions.OVERWORLD, dimensionOptions);
insertCustom(platform, "minecraft:overworld", pack, dimensionTypeRegistry, chunkGeneratorSettingsRegistry, dimensionMap);
insertDefaults(dimensionTypeRegistry, chunkGeneratorSettingsRegistry, multiNoiseBiomeSourceParameterLists, platform.biomeRegistry(), dimensionMap);
@ -91,28 +77,7 @@ public class PresetUtil {
HashMap<RegistryKey<DimensionOptions>, DimensionOptions> dimensionMap = new HashMap<>();
metaPack.packs().forEach((key, pack) -> {
Identifier demensionIdentifier = new Identifier(key);
DimensionType dimensionType = DimensionUtil.createDimension(pack, platform);
RegistryKey<DimensionType> dimensionTypeRegistryKey = MinecraftUtil.registerDimensionTypeKey(new Identifier("terra", pack.getID().toLowerCase(
Locale.ROOT)));
Registry.registerReference(dimensionTypeRegistry, dimensionTypeRegistryKey, dimensionType);
RegistryEntry<DimensionType> dimensionTypeRegistryEntry = dimensionTypeRegistry.getEntry(dimensionType);
TerraBiomeSource biomeSource = new TerraBiomeSource(pack);
RegistryEntry<ChunkGeneratorSettings> 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));
}
ChunkGenerator generator = new MinecraftChunkGeneratorWrapper(biomeSource, pack, generatorSettings);
DimensionOptions dimensionOptions = new DimensionOptions(dimensionTypeRegistryEntry, generator);
RegistryKey<DimensionOptions> dimensionOptionsRegistryKey = RegistryKey.of(RegistryKeys.DIMENSION, demensionIdentifier);
dimensionMap.put(dimensionOptionsRegistryKey, dimensionOptions);
insertCustom(platform, key, pack, dimensionTypeRegistry, chunkGeneratorSettingsRegistry, dimensionMap);
});
insertDefaults(dimensionTypeRegistry, chunkGeneratorSettingsRegistry, multiNoiseBiomeSourceParameterLists, platform.biomeRegistry(), dimensionMap);
@ -122,6 +87,42 @@ public class PresetUtil {
return Pair.of(generatorID, preset);
}
private static void insertCustom(ModPlatform platform, String key, ConfigPack pack, Registry<DimensionType> dimensionTypeRegistry,
Registry<ChunkGeneratorSettings> chunkGeneratorSettingsRegistry,
HashMap<RegistryKey<DimensionOptions>, DimensionOptions> dimensionMap) {
Identifier demensionIdentifier = new Identifier(key);
VanillaWorldProperties vanillaWorldProperties;
if (pack.getContext().has(VanillaWorldProperties.class)) {
vanillaWorldProperties = pack.getContext().get(VanillaWorldProperties.class);
} else {
vanillaWorldProperties = new VanillaWorldProperties();
}
DimensionType dimensionType = DimensionUtil.createDimension(vanillaWorldProperties, platform);
RegistryKey<DimensionType> dimensionTypeRegistryKey = MinecraftUtil.registerDimensionTypeKey(new Identifier("terra", pack.getID().toLowerCase(
Locale.ROOT)));
Registry.registerReference(dimensionTypeRegistry, dimensionTypeRegistryKey, dimensionType);
RegistryEntry<DimensionType> dimensionTypeRegistryEntry = dimensionTypeRegistry.getEntry(dimensionType);
TerraBiomeSource biomeSource = new TerraBiomeSource(pack);
RegistryEntry<ChunkGeneratorSettings> 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));
}
ChunkGenerator generator = new MinecraftChunkGeneratorWrapper(biomeSource, pack, generatorSettings);
DimensionOptions dimensionOptions = new DimensionOptions(dimensionTypeRegistryEntry, generator);
RegistryKey<DimensionOptions> dimensionOptionsRegistryKey = RegistryKey.of(RegistryKeys.DIMENSION, demensionIdentifier);
dimensionMap.put(dimensionOptionsRegistryKey, dimensionOptions);
}
private static void insertDefaults(Registry<DimensionType> dimensionTypeRegistry, Registry<ChunkGeneratorSettings> chunkGeneratorSettingsRegistry, Registry<MultiNoiseBiomeSourceParameterList> multiNoiseBiomeSourceParameterLists, Registry<Biome> biomeRegistry, HashMap<RegistryKey<DimensionOptions>, DimensionOptions> map) {
if (!map.containsKey(DimensionOptions.OVERWORLD)) {
RegistryEntry<DimensionType> overworldDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.OVERWORLD).orElseThrow();