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.registry.key.RegistryKey;
import com.dfsek.terra.fabric.FabricEntryPoint;
import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper;
import com.dfsek.terra.fabric.generation.TerraBiomeSource;
import com.mojang.serialization.Codec;
import com.mojang.serialization.Lifecycle;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.util.dynamic.RegistryElementCodec;
import net.minecraft.util.dynamic.RegistryLoader;
import net.minecraft.structure.StructureSet;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryCodecs;
import net.minecraft.util.registry.RegistryFixedCodec;
@@ -38,26 +36,28 @@ public final class Codecs {
id)))));
public static final Codec<TerraBiomeSource> TERRA_BIOME_SOURCE = RecordCodecBuilder
.create(instance -> instance.group(RegistryCodecs.entryList(Registry.BIOME_KEY)
.fieldOf("biome_registry")
.create(instance -> instance.group(RegistryCodecs.dynamicRegistry(Registry.BIOME_KEY, Lifecycle.stable(), Biome.CODEC)
.fieldOf("biome_registry")
.forGetter(TerraBiomeSource::getBiomeRegistry),
Codec.LONG.fieldOf("seed").stable()
.forGetter(TerraBiomeSource::getSeed),
CONFIG_PACK.fieldOf("pack").stable()
.forGetter(TerraBiomeSource::getPack))
.apply(instance, instance.stable(
TerraBiomeSource::new)));
.apply(instance, instance.stable(TerraBiomeSource::new)));
public static final Codec<FabricChunkGeneratorWrapper> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
RegistryCodecs.dynamicRegistry(Registry.STRUCTURE_SET_KEY, Lifecycle.stable(), StructureSet.CODEC)
.fieldOf("structures")
.forGetter(FabricChunkGeneratorWrapper::getNoiseRegistry),
TERRA_BIOME_SOURCE.fieldOf("biome_source")
.forGetter(FabricChunkGeneratorWrapper::getBiomeSource),
Codec.LONG.fieldOf("seed").stable()
.forGetter(FabricChunkGeneratorWrapper::getSeed),
CONFIG_PACK.fieldOf("pack").stable()
.forGetter(FabricChunkGeneratorWrapper::getPack),
.forGetter(FabricChunkGeneratorWrapper::getPack),
ChunkGeneratorSettings.REGISTRY_CODEC.fieldOf("settings")
.forGetter(FabricChunkGeneratorWrapper::getSettingsSupplier)
.forGetter(FabricChunkGeneratorWrapper::getSettings)
).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 final Registry<StructureSet> noiseRegistry;
private ConfigPack pack;
private final Supplier<ChunkGeneratorSettings> settingsSupplier;
private final RegistryEntry<ChunkGeneratorSettings> settings;
public FabricChunkGeneratorWrapper(Registry<StructureSet> noiseRegistry, TerraBiomeSource biomeSource, long seed, ConfigPack configPack,
Supplier<ChunkGeneratorSettings> settingsSupplier) {
RegistryEntry<ChunkGeneratorSettings> settingsSupplier) {
super(noiseRegistry, Optional.empty(), biomeSource, biomeSource, seed);
this.noiseRegistry = noiseRegistry;
this.pack = configPack;
this.settingsSupplier = settingsSupplier;
this.settings = settingsSupplier;
this.delegate = pack.getGeneratorProvider().newInstance(pack);
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;
}
public Registry<StructureSet> getNoiseRegistry() {
return noiseRegistry;
}
@Override
protected Codec<? extends net.minecraft.world.gen.chunk.ChunkGenerator> getCodec() {
return Codecs.CODEC;
@@ -94,7 +98,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
@Override
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
@@ -118,7 +122,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
@Override
public int getWorldHeight() {
return settingsSupplier.get().generationShapeConfig().height();
return settings.value().generationShapeConfig().height();
}
@Override
@@ -148,12 +152,12 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
@Override
public int getSeaLevel() {
return settingsSupplier.get().seaLevel();
return settings.value().seaLevel();
}
@Override
public int getMinimumY() {
return settingsSupplier.get().generationShapeConfig().minimumY();
return settings.value().generationShapeConfig().minimumY();
}
@Override
@@ -209,8 +213,8 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
return seed;
}
public Supplier<ChunkGeneratorSettings> getSettingsSupplier() {
return settingsSupplier;
public RegistryEntry<ChunkGeneratorSettings> getSettings() {
return settings;
}
@Override

View File

@@ -23,6 +23,7 @@ import net.minecraft.client.world.GeneratorType;
import net.minecraft.structure.StructureSet;
import net.minecraft.util.registry.DynamicRegistryManager;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryEntry;
import net.minecraft.world.gen.GeneratorOptions;
import net.minecraft.world.gen.chunk.ChunkGenerator;
@@ -47,7 +48,8 @@ public class TerraGeneratorType extends GeneratorType {
@Override
protected ChunkGenerator getChunkGenerator(DynamicRegistryManager manager, long seed) {
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);
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.util.registry.DynamicRegistryManager;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryEntry;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.dimension.DimensionOptions;
import net.minecraft.world.dimension.DimensionType;
@@ -79,8 +80,8 @@ public abstract class GeneratorOptionsMixin {
Registry<DimensionOptions> dimensionOptions = DimensionType.createDefaultDimensionOptions(manager, seed, false);
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);
String pack = levelType.substring(levelType.indexOf(":") + 1);