fix codecs

This commit is contained in:
dfsek
2022-03-23 22:14:40 -07:00
parent 61797170b6
commit c8a58ce702
4 changed files with 29 additions and 22 deletions

View File

@@ -2,16 +2,14 @@ package com.dfsek.terra.fabric.data;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.registry.key.RegistryKey; import com.dfsek.terra.api.registry.key.RegistryKey;
import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.FabricEntryPoint;
import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper;
import com.dfsek.terra.fabric.generation.TerraBiomeSource; import com.dfsek.terra.fabric.generation.TerraBiomeSource;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.Lifecycle;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.util.dynamic.RegistryElementCodec; import net.minecraft.structure.StructureSet;
import net.minecraft.util.dynamic.RegistryLoader;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryCodecs; import net.minecraft.util.registry.RegistryCodecs;
import net.minecraft.util.registry.RegistryFixedCodec; import net.minecraft.util.registry.RegistryFixedCodec;
@@ -38,26 +36,28 @@ public final class Codecs {
id))))); id)))));
public static final Codec<TerraBiomeSource> TERRA_BIOME_SOURCE = RecordCodecBuilder public static final Codec<TerraBiomeSource> TERRA_BIOME_SOURCE = RecordCodecBuilder
.create(instance -> instance.group(RegistryCodecs.entryList(Registry.BIOME_KEY) .create(instance -> instance.group(RegistryCodecs.dynamicRegistry(Registry.BIOME_KEY, Lifecycle.stable(), Biome.CODEC)
.fieldOf("biome_registry") .fieldOf("biome_registry")
.forGetter(TerraBiomeSource::getBiomeRegistry), .forGetter(TerraBiomeSource::getBiomeRegistry),
Codec.LONG.fieldOf("seed").stable() Codec.LONG.fieldOf("seed").stable()
.forGetter(TerraBiomeSource::getSeed), .forGetter(TerraBiomeSource::getSeed),
CONFIG_PACK.fieldOf("pack").stable() CONFIG_PACK.fieldOf("pack").stable()
.forGetter(TerraBiomeSource::getPack)) .forGetter(TerraBiomeSource::getPack))
.apply(instance, instance.stable( .apply(instance, instance.stable(TerraBiomeSource::new)));
TerraBiomeSource::new)));
public static final Codec<FabricChunkGeneratorWrapper> CODEC = RecordCodecBuilder.create( public static final Codec<FabricChunkGeneratorWrapper> CODEC = RecordCodecBuilder.create(
instance -> instance.group( instance -> instance.group(
RegistryCodecs.dynamicRegistry(Registry.STRUCTURE_SET_KEY, Lifecycle.stable(), StructureSet.CODEC)
.fieldOf("structures")
.forGetter(FabricChunkGeneratorWrapper::getNoiseRegistry),
TERRA_BIOME_SOURCE.fieldOf("biome_source") TERRA_BIOME_SOURCE.fieldOf("biome_source")
.forGetter(FabricChunkGeneratorWrapper::getBiomeSource), .forGetter(FabricChunkGeneratorWrapper::getBiomeSource),
Codec.LONG.fieldOf("seed").stable() Codec.LONG.fieldOf("seed").stable()
.forGetter(FabricChunkGeneratorWrapper::getSeed), .forGetter(FabricChunkGeneratorWrapper::getSeed),
CONFIG_PACK.fieldOf("pack").stable() CONFIG_PACK.fieldOf("pack").stable()
.forGetter(FabricChunkGeneratorWrapper::getPack), .forGetter(FabricChunkGeneratorWrapper::getPack),
ChunkGeneratorSettings.REGISTRY_CODEC.fieldOf("settings") ChunkGeneratorSettings.REGISTRY_CODEC.fieldOf("settings")
.forGetter(FabricChunkGeneratorWrapper::getSettingsSupplier) .forGetter(FabricChunkGeneratorWrapper::getSettings)
).apply(instance, instance.stable(FabricChunkGeneratorWrapper::new)) ).apply(instance, instance.stable(FabricChunkGeneratorWrapper::new))
); );
} }

View File

@@ -71,14 +71,14 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
private ChunkGenerator delegate; private ChunkGenerator delegate;
private final Registry<StructureSet> noiseRegistry; private final Registry<StructureSet> noiseRegistry;
private ConfigPack pack; private ConfigPack pack;
private final Supplier<ChunkGeneratorSettings> settingsSupplier; private final RegistryEntry<ChunkGeneratorSettings> settings;
public FabricChunkGeneratorWrapper(Registry<StructureSet> noiseRegistry, TerraBiomeSource biomeSource, long seed, ConfigPack configPack, public FabricChunkGeneratorWrapper(Registry<StructureSet> noiseRegistry, TerraBiomeSource biomeSource, long seed, ConfigPack configPack,
Supplier<ChunkGeneratorSettings> settingsSupplier) { RegistryEntry<ChunkGeneratorSettings> settingsSupplier) {
super(noiseRegistry, Optional.empty(), biomeSource, biomeSource, seed); super(noiseRegistry, Optional.empty(), biomeSource, biomeSource, seed);
this.noiseRegistry = noiseRegistry; this.noiseRegistry = noiseRegistry;
this.pack = configPack; this.pack = configPack;
this.settingsSupplier = settingsSupplier; this.settings = settingsSupplier;
this.delegate = pack.getGeneratorProvider().newInstance(pack); this.delegate = pack.getGeneratorProvider().newInstance(pack);
logger.info("Loading world with config pack {}", pack.getID()); logger.info("Loading world with config pack {}", pack.getID());
@@ -87,6 +87,10 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
this.seed = seed; this.seed = seed;
} }
public Registry<StructureSet> getNoiseRegistry() {
return noiseRegistry;
}
@Override @Override
protected Codec<? extends net.minecraft.world.gen.chunk.ChunkGenerator> getCodec() { protected Codec<? extends net.minecraft.world.gen.chunk.ChunkGenerator> getCodec() {
return Codecs.CODEC; return Codecs.CODEC;
@@ -94,7 +98,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
@Override @Override
public net.minecraft.world.gen.chunk.ChunkGenerator withSeed(long seed) { public net.minecraft.world.gen.chunk.ChunkGenerator withSeed(long seed) {
return new FabricChunkGeneratorWrapper(noiseRegistry, (TerraBiomeSource) this.biomeSource.withSeed(seed), seed, pack, settingsSupplier); return new FabricChunkGeneratorWrapper(noiseRegistry, (TerraBiomeSource) this.biomeSource.withSeed(seed), seed, pack, settings);
} }
@Override @Override
@@ -118,7 +122,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
@Override @Override
public int getWorldHeight() { public int getWorldHeight() {
return settingsSupplier.get().generationShapeConfig().height(); return settings.value().generationShapeConfig().height();
} }
@Override @Override
@@ -148,12 +152,12 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
@Override @Override
public int getSeaLevel() { public int getSeaLevel() {
return settingsSupplier.get().seaLevel(); return settings.value().seaLevel();
} }
@Override @Override
public int getMinimumY() { public int getMinimumY() {
return settingsSupplier.get().generationShapeConfig().minimumY(); return settings.value().generationShapeConfig().minimumY();
} }
@Override @Override
@@ -209,8 +213,8 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
return seed; return seed;
} }
public Supplier<ChunkGeneratorSettings> getSettingsSupplier() { public RegistryEntry<ChunkGeneratorSettings> getSettings() {
return settingsSupplier; return settings;
} }
@Override @Override

View File

@@ -23,6 +23,7 @@ import net.minecraft.client.world.GeneratorType;
import net.minecraft.structure.StructureSet; import net.minecraft.structure.StructureSet;
import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.DynamicRegistryManager;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryEntry;
import net.minecraft.world.gen.GeneratorOptions; import net.minecraft.world.gen.GeneratorOptions;
import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.ChunkGenerator;
@@ -47,7 +48,8 @@ public class TerraGeneratorType extends GeneratorType {
@Override @Override
protected ChunkGenerator getChunkGenerator(DynamicRegistryManager manager, long seed) { protected ChunkGenerator getChunkGenerator(DynamicRegistryManager manager, long seed) {
Registry<ChunkGeneratorSettings> chunkGeneratorSettingsRegistry = manager.get(Registry.CHUNK_GENERATOR_SETTINGS_KEY); Registry<ChunkGeneratorSettings> chunkGeneratorSettingsRegistry = manager.get(Registry.CHUNK_GENERATOR_SETTINGS_KEY);
Supplier<ChunkGeneratorSettings> settingsSupplier = () -> chunkGeneratorSettingsRegistry.getOrThrow(ChunkGeneratorSettings.OVERWORLD); RegistryEntry<ChunkGeneratorSettings>
settingsSupplier = chunkGeneratorSettingsRegistry.getEntry(ChunkGeneratorSettings.OVERWORLD).orElseThrow();
Registry<StructureSet> noiseRegistry = manager.get(Registry.STRUCTURE_SET_KEY); Registry<StructureSet> noiseRegistry = manager.get(Registry.STRUCTURE_SET_KEY);
return new FabricChunkGeneratorWrapper(noiseRegistry, new TerraBiomeSource(manager.get(Registry.BIOME_KEY), seed, pack), seed, pack, settingsSupplier); return new FabricChunkGeneratorWrapper(noiseRegistry, new TerraBiomeSource(manager.get(Registry.BIOME_KEY), seed, pack), seed, pack, settingsSupplier);
} }

View File

@@ -27,6 +27,7 @@ import net.minecraft.server.dedicated.ServerPropertiesHandler;
import net.minecraft.structure.StructureSet; import net.minecraft.structure.StructureSet;
import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.DynamicRegistryManager;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryEntry;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.dimension.DimensionOptions; import net.minecraft.world.dimension.DimensionOptions;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
@@ -79,8 +80,8 @@ public abstract class GeneratorOptionsMixin {
Registry<DimensionOptions> dimensionOptions = DimensionType.createDefaultDimensionOptions(manager, seed, false); Registry<DimensionOptions> dimensionOptions = DimensionType.createDefaultDimensionOptions(manager, seed, false);
Registry<ChunkGeneratorSettings> chunkGeneratorSettingsRegistry = manager.get(Registry.CHUNK_GENERATOR_SETTINGS_KEY); Registry<ChunkGeneratorSettings> chunkGeneratorSettingsRegistry = manager.get(Registry.CHUNK_GENERATOR_SETTINGS_KEY);
Supplier<ChunkGeneratorSettings> RegistryEntry<ChunkGeneratorSettings>
settingsSupplier = () -> chunkGeneratorSettingsRegistry.getOrThrow(ChunkGeneratorSettings.OVERWORLD); settingsSupplier = chunkGeneratorSettingsRegistry.getEntry(ChunkGeneratorSettings.OVERWORLD).orElseThrow();
Registry<StructureSet> noiseRegistry = manager.get(Registry.STRUCTURE_SET_KEY); Registry<StructureSet> noiseRegistry = manager.get(Registry.STRUCTURE_SET_KEY);
String pack = levelType.substring(levelType.indexOf(":") + 1); String pack = levelType.substring(levelType.indexOf(":") + 1);