Removed WorldPresetSettings

This commit is contained in:
Frank 2022-06-24 01:56:25 +02:00
parent 877691011f
commit fb19ebaae6
23 changed files with 291 additions and 543 deletions

View file

@ -7,18 +7,12 @@ import org.betterx.worlds.together.world.BiomeSourceWithSeed;
import org.betterx.worlds.together.world.WorldConfig;
import org.betterx.worlds.together.worldPreset.TogetherWorldPreset;
import org.betterx.worlds.together.worldPreset.WorldPresets;
import org.betterx.worlds.together.worldPreset.settings.WorldPresetSettings;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Dynamic;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
import net.minecraft.data.BuiltinRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.Tag;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceKey;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.biome.Biome;
@ -31,8 +25,6 @@ import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.minecraft.world.level.levelgen.structure.StructureSet;
import net.minecraft.world.level.levelgen.synth.NormalNoise;
import java.util.Optional;
public class WorldGenUtil {
public static final String TAG_GENERATOR = "generator";
@ -65,7 +57,7 @@ public class WorldGenUtil {
boolean generateBonusChest
) {
return createWorldFromPreset(
WorldPresets.DEFAULT.orElseThrow(),
WorldPresets.DEFAULT,
registryAccess,
seed,
generateStructures,
@ -90,22 +82,12 @@ public class WorldGenUtil {
return WorldConfig.getCompoundTag(WorldsTogether.MOD_ID, TAG_GENERATOR);
}
public static WorldPresetSettings getWorldSettings() {
final RegistryAccess registryAccess = BuiltinRegistries.ACCESS;
final RegistryOps<Tag> registryOps = RegistryOps.create(NbtOps.INSTANCE, registryAccess);
Optional<WorldPresetSettings> oLevelStem = WorldPresetSettings.CODEC
.parse(new Dynamic<>(registryOps, getSettingsNbt()))
.resultOrPartial(WorldsTogether.LOGGER::error);
return oLevelStem.orElse(WorldPresetSettings.DEFAULT);
}
public static class Context extends StemContext {
public final Registry<Biome> biomes;
public Context(
Registry<Biome> biomes, Holder<DimensionType> dimension,
Registry<Biome> biomes,
Holder<DimensionType> dimension,
Registry<StructureSet> structureSets,
Registry<NormalNoise.NoiseParameters> noiseParameters,
Holder<NoiseGeneratorSettings> generatorSettings

View file

@ -46,7 +46,7 @@ public class CreateWorldScreenMixin {
//Change the WorldPreset that is selected by default on the Create World Screen
@ModifyArg(method = "openFresh", index = 1, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent;<init>(Lnet/minecraft/client/gui/screens/worldselection/WorldCreationContext;Ljava/util/Optional;Ljava/util/OptionalLong;)V"))
private static Optional<ResourceKey<WorldPreset>> bcl_NewDefault(Optional<ResourceKey<WorldPreset>> preset) {
return WorldPresets.DEFAULT;
return Optional.of(WorldPresets.DEFAULT);
}
//Make sure the WorldGenSettings used to populate the create screen match the default WorldPreset

View file

@ -20,6 +20,6 @@ public class WorldGenPropertiesMixin {
//Make sure Servers use our Default World Preset
@ModifyArg(method = "create", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/core/Registry;getHolder(Lnet/minecraft/resources/ResourceKey;)Ljava/util/Optional;"))
private ResourceKey<WorldPreset> bcl_foo(ResourceKey<WorldPreset> resourceKey) {
return WorldPresets.DEFAULT.orElseThrow();
return WorldPresets.DEFAULT;
}
}

View file

@ -1,7 +1,6 @@
package org.betterx.worlds.together.mixin.common;
import org.betterx.worlds.together.worldPreset.TogetherWorldPreset;
import org.betterx.worlds.together.worldPreset.settings.WorldPresetSettings;
import com.mojang.datafixers.kinds.App;
import com.mojang.serialization.Codec;
@ -44,14 +43,8 @@ public class WorldPresetMixin {
? Optional.of(((TogetherWorldPreset) wp).sortOrder)
: Optional.empty());
RecordCodecBuilder<WorldPreset, Optional<WorldPresetSettings>> settingsBuilder = WorldPresetSettings.CODEC
.optionalFieldOf("settings")
.forGetter(wp -> (wp instanceof TogetherWorldPreset)
? Optional.of(((TogetherWorldPreset) wp).settings)
: Optional.empty());
return builderInstance
.group(dimensionsBuilder, sortBuilder, settingsBuilder)
.group(dimensionsBuilder, sortBuilder)
.apply(builderInstance, TogetherWorldPreset::new);
};

View file

@ -2,7 +2,6 @@ package org.betterx.worlds.together.mixin.common;
import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.worldPreset.WorldPresets;
import org.betterx.worlds.together.worldPreset.settings.WorldPresetSettings;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
@ -51,7 +50,6 @@ public abstract class WorldPresetsBootstrapMixin {
@ModifyArg(method = "run", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/world/level/levelgen/presets/WorldPresets$Bootstrap;registerCustomOverworldPreset(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/dimension/LevelStem;)Lnet/minecraft/core/Holder;"))
private LevelStem bcl_getOverworldStem(LevelStem overworldStem) {
WorldPresetSettings.bootstrap();
WorldGenUtil.Context netherContext = new WorldGenUtil.Context(
this.biomes,
this.netherDimensionType,

View file

@ -1,14 +1,17 @@
package org.betterx.worlds.together.world.event;
import org.betterx.worlds.together.worldPreset.settings.WorldPresetSettings;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.storage.LevelStorageSource;
import java.util.Map;
@FunctionalInterface
public interface BeforeServerWorldLoad {
void prepareWorld(
LevelStorageSource.LevelStorageAccess storageAccess,
WorldPresetSettings settings,
Map<ResourceKey<LevelStem>, ChunkGenerator> dimension,
boolean isNewWorld
);
}

View file

@ -1,13 +1,16 @@
package org.betterx.worlds.together.world.event;
import org.betterx.worlds.together.worldPreset.settings.WorldPresetSettings;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.storage.LevelStorageSource;
import java.util.Map;
public interface BeforeWorldLoad {
void prepareWorld(
LevelStorageSource.LevelStorageAccess storageAccess,
WorldPresetSettings settings,
Map<ResourceKey<LevelStem>, ChunkGenerator> settings,
boolean isNewWorld
);
}

View file

@ -9,21 +9,24 @@ import org.betterx.worlds.together.world.WorldConfig;
import org.betterx.worlds.together.worldPreset.TogetherWorldPreset;
import org.betterx.worlds.together.worldPreset.WorldGenSettingsComponentAccessor;
import org.betterx.worlds.together.worldPreset.WorldPresets;
import org.betterx.worlds.together.worldPreset.settings.VanillaWorldPresetSettings;
import org.betterx.worlds.together.worldPreset.settings.WorldPresetSettings;
import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
import net.minecraft.data.BuiltinRegistries;
import net.minecraft.nbt.Tag;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldGenSettings;
import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.minecraft.world.level.storage.LevelResource;
import net.minecraft.world.level.storage.LevelStorageSource;
import java.io.File;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;
import org.jetbrains.annotations.ApiStatus;
@ -36,6 +39,11 @@ public class WorldBootstrap {
return LAST_REGISTRY_ACCESS;
}
public static RegistryAccess getLastRegistryAccessOrElseBuiltin() {
if (LAST_REGISTRY_ACCESS == null) return BuiltinRegistries.ACCESS;
return LAST_REGISTRY_ACCESS;
}
public static class Helpers {
private static void initializeWorldConfig(
LevelStorageSource.LevelStorageAccess levelStorageAccess,
@ -63,31 +71,34 @@ public class WorldBootstrap {
private static Holder<WorldPreset> defaultServerPreset() {
return WorldPresets.get(
LAST_REGISTRY_ACCESS,
WorldPresets.DEFAULT.orElseThrow()
WorldPresets.DEFAULT
);
}
private static WorldPresetSettings defaultServerSettings() {
private static Map<ResourceKey<LevelStem>, ChunkGenerator> defaultServerDimensions() {
final Holder<WorldPreset> defaultPreset = defaultServerPreset();
return defaultServerSettings(defaultPreset);
return defaultServerDimensions(defaultPreset);
}
private static WorldPresetSettings defaultServerSettings(Holder<WorldPreset> defaultPreset) {
final WorldPresetSettings settings;
private static Map<ResourceKey<LevelStem>, ChunkGenerator> defaultServerDimensions(Holder<WorldPreset> defaultPreset) {
final Map<ResourceKey<LevelStem>, ChunkGenerator> dimensions;
if (defaultPreset.value() instanceof TogetherWorldPreset t) {
settings = t.settings;
dimensions = t.getDimensionsMap();
} else {
settings = VanillaWorldPresetSettings.DEFAULT;
dimensions = TogetherWorldPreset.getDimensionsMap(net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL);
}
return settings;
return dimensions;
}
private static Optional<Holder<WorldPreset>> presetFromDatapack(Optional<Holder<WorldPreset>> currentPreset) {
if (currentPreset.isPresent() && LAST_REGISTRY_ACCESS != null) {
Optional<Holder<WorldPreset>> newPreset = LAST_REGISTRY_ACCESS
.registryOrThrow(Registry.WORLD_PRESET_REGISTRY)
.getHolder(currentPreset.map(h -> h.unwrapKey()).map(h -> h.orElseThrow()).orElseThrow());
if (newPreset.isPresent()) currentPreset = newPreset;
var presetKey = currentPreset.get().unwrapKey();
if (presetKey.isPresent()) {
Optional<Holder<WorldPreset>> newPreset = LAST_REGISTRY_ACCESS
.registryOrThrow(Registry.WORLD_PRESET_REGISTRY)
.getHolder(presetKey.get());
if (newPreset.isPresent()) currentPreset = newPreset;
}
}
return currentPreset;
}
@ -104,7 +115,7 @@ public class WorldBootstrap {
File levelDat = levelStorageAccess.getLevelPath(LevelResource.LEVEL_DATA_FILE).toFile();
if (!levelDat.exists()) {
BCLib.LOGGER.info("Creating a new World, no fixes needed");
final WorldPresetSettings settings = Helpers.defaultServerSettings();
final Map<ResourceKey<LevelStem>, ChunkGenerator> settings = Helpers.defaultServerDimensions();
Helpers.initializeWorldConfig(levelStorageAccess, true);
WorldEventsImpl.BEFORE_SERVER_WORLD_LOAD.emit(e -> e.prepareWorld(
@ -114,7 +125,7 @@ public class WorldBootstrap {
Helpers.initializeWorldConfig(levelStorageAccess, false);
WorldEventsImpl.BEFORE_SERVER_WORLD_LOAD.emit(e -> e.prepareWorld(
levelStorageAccess,
WorldGenUtil.getWorldSettings(),
TogetherWorldPreset.getWorldDimensions(),
false
));
WorldEventsImpl.ON_WORLD_LOAD.emit(OnWorldLoad::onLoad);
@ -124,18 +135,13 @@ public class WorldBootstrap {
//Needs to get called after setupWorld
public static void applyDatapackChangesOnNewWorld(WorldGenSettings worldGenSettings) {
Optional<Holder<WorldPreset>> currentPreset = Optional.of(Helpers.defaultServerPreset());
var settings = Helpers.defaultServerSettings(currentPreset.orElseThrow());
currentPreset = WorldEventsImpl.ADAPT_WORLD_PRESET.emit(currentPreset, worldGenSettings);
if (currentPreset.map(h -> h.value()).orElse(null) instanceof TogetherWorldPreset t) {
settings = t.settings;
}
TogetherWorldPreset.writeWorldPresetSettings(settings);
if (currentPreset.map(h -> h.value()).orElse(null) instanceof WorldPresetAccessor acc) {
if (currentPreset.map(Holder::value).orElse(null) instanceof WorldPresetAccessor acc) {
TogetherWorldPreset.writeWorldPresetSettings(acc.bcl_getDimensions());
} else {
WorldsTogether.LOGGER.error("Failed writing together File");
//TogetherWorldPreset.writeWorldPresetSettings(worldGenSettings);
TogetherWorldPreset.writeWorldPresetSettings(worldGenSettings.dimensions());
}
WorldEventsImpl.ON_WORLD_LOAD.emit(OnWorldLoad::onLoad);
}
@ -185,29 +191,28 @@ public class WorldBootstrap {
Helpers.initializeWorldConfig(levelStorageAccess, true);
final WorldPresetSettings settings;
final Map<ResourceKey<LevelStem>, ChunkGenerator> dimensions;
if (currentPreset.map(Holder::value).orElse(null) instanceof TogetherWorldPreset t) {
settings = t.settings;
dimensions = t.getDimensionsMap();
} else {
settings = VanillaWorldPresetSettings.DEFAULT;
dimensions = TogetherWorldPreset.getDimensionsMap(net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL);
}
// Helpers.setupWorld();
// DataFixerAPI.initializePatchData();
WorldEventsImpl.BEFORE_WORLD_LOAD.emit(e -> e.prepareWorld(
levelStorageAccess,
settings,
dimensions,
true
));
currentPreset = WorldEventsImpl.ADAPT_WORLD_PRESET.emit(currentPreset, worldGenSettings);
TogetherWorldPreset.writeWorldPresetSettings(currentPreset);
if (currentPreset.map(h -> h.value()).orElse(null) instanceof WorldPresetAccessor acc) {
if (currentPreset.map(Holder::value).orElse(null) instanceof WorldPresetAccessor acc) {
TogetherWorldPreset.writeWorldPresetSettings(acc.bcl_getDimensions());
} else {
WorldsTogether.LOGGER.error("Failed writing together File");
//TogetherWorldPreset.writeWorldPresetSettings(worldGenSettings);
TogetherWorldPreset.writeWorldPresetSettings(worldGenSettings.dimensions());
}
//LifeCycleAPI._runBeforeLevelLoad();
@ -230,7 +235,7 @@ public class WorldBootstrap {
//Helpers.setupWorld();
WorldEventsImpl.BEFORE_WORLD_LOAD.emit(e -> e.prepareWorld(
levelStorageAccess,
WorldGenUtil.getWorldSettings(),
TogetherWorldPreset.getWorldDimensions(),
false
));
levelStorageAccess.close();

View file

@ -5,8 +5,6 @@ import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.mixin.common.WorldPresetAccessor;
import org.betterx.worlds.together.world.WorldConfig;
import org.betterx.worlds.together.world.event.WorldBootstrap;
import org.betterx.worlds.together.worldPreset.settings.VanillaWorldPresetSettings;
import org.betterx.worlds.together.worldPreset.settings.WorldPresetSettings;
import com.mojang.serialization.Codec;
import com.mojang.serialization.Dynamic;
@ -29,7 +27,6 @@ import java.util.Optional;
import org.jetbrains.annotations.NotNull;
public class TogetherWorldPreset extends WorldPreset {
public final WorldPresetSettings settings;
public final int sortOrder;
private static final String TAG_GENERATOR = WorldGenUtil.TAG_GENERATOR;
@ -38,41 +35,57 @@ public class TogetherWorldPreset extends WorldPreset {
public TogetherWorldPreset(
Map<ResourceKey<LevelStem>, LevelStem> map,
Optional<Integer> sortOrder,
Optional<WorldPresetSettings> settings
Optional<Integer> sortOrder
) {
this(map, sortOrder.orElse(NEXT_IN_SORT_ORDER++), settings.orElse(VanillaWorldPresetSettings.DEFAULT));
this(map, sortOrder.orElse(NEXT_IN_SORT_ORDER++));
}
public TogetherWorldPreset(
Map<ResourceKey<LevelStem>, LevelStem> map,
int sortOrder,
WorldPresetSettings settings
int sortOrder
) {
super(map);
this.sortOrder = sortOrder;
this.settings = settings;
}
public TogetherWorldPreset withSettings(WorldPresetSettings settings) {
return new TogetherWorldPreset(getDimensions(), sortOrder, settings);
public TogetherWorldPreset withDimensions(Registry<LevelStem> dimensions) {
Map<ResourceKey<LevelStem>, LevelStem> map = new HashMap<>();
for (var entry : dimensions.entrySet()) {
ResourceKey<LevelStem> key = entry.getKey();
LevelStem stem = entry.getValue();
map.put(key, stem);
}
return new TogetherWorldPreset(map, sortOrder);
}
private Map<ResourceKey<LevelStem>, LevelStem> getDimensions() {
return ((WorldPresetAccessor) this).bcl_getDimensions();
}
public Map<ResourceKey<LevelStem>, ChunkGenerator> getDimensionsMap() {
return DimensionsWrapper.build(getDimensions());
}
public LevelStem getDimension(ResourceKey<LevelStem> key) {
return getDimensions().get(key);
}
public static void writeWorldPresetSettings(Registry<LevelStem> dimensions) {
DimensionsWrapper wrapper = new DimensionsWrapper(dimensions);
writeWorldPresetSettings(wrapper);
}
public static void writeWorldPresetSettings(Map<ResourceKey<LevelStem>, LevelStem> settings) {
DimensionsWrapper wrapper = new DimensionsWrapper(DimensionsWrapper.build(settings));
writeWorldPresetSettings(wrapper);
}
private static void writeWorldPresetSettings(DimensionsWrapper wrapper) {
final RegistryOps<Tag> registryOps = RegistryOps.create(
NbtOps.INSTANCE,
WorldBootstrap.getLastRegistryAccess()
);
DimensionsWrapper wrapper = new DimensionsWrapper(DimensionsWrapper.build(settings));
final var encodeResult = wrapper.CODEC.encodeStart(registryOps, wrapper);
final var encodeResult = DimensionsWrapper.CODEC.encodeStart(registryOps, wrapper);
if (encodeResult.result().isPresent()) {
final CompoundTag settingsNbt = WorldConfig.getRootTag(WorldsTogether.MOD_ID);
@ -87,7 +100,6 @@ public class TogetherWorldPreset extends WorldPreset {
private static DimensionsWrapper DEFAULT_DIMENSIONS_WRAPPER = null;
public static @NotNull Map<ResourceKey<LevelStem>, ChunkGenerator> getWorldDimensions() {
if (BuiltinRegistries.ACCESS == null) return null;
final RegistryAccess registryAccess;
if (WorldBootstrap.getLastRegistryAccess() != null) {
registryAccess = WorldBootstrap.getLastRegistryAccess();
@ -104,7 +116,7 @@ public class TogetherWorldPreset extends WorldPreset {
DEFAULT_DIMENSIONS_WRAPPER = new DimensionsWrapper(WorldPresets
.get(
registryAccess,
WorldPresets.DEFAULT.orElseThrow()
WorldPresets.DEFAULT
)
.value()
.createWorldGenSettings(0, true, true)
@ -114,6 +126,27 @@ public class TogetherWorldPreset extends WorldPreset {
return oLevelStem.orElse(DEFAULT_DIMENSIONS_WRAPPER).dimensions;
}
public static Registry<LevelStem> getDimensions(ResourceKey<WorldPreset> key) {
RegistryAccess access = WorldBootstrap.getLastRegistryAccessOrElseBuiltin();
var preset = access.registryOrThrow(Registry.WORLD_PRESET_REGISTRY).getHolder(key);
if (preset.isEmpty()) return null;
return preset
.get()
.value()
.createWorldGenSettings(
0,
true,
true
)
.dimensions();
}
public static @NotNull Map<ResourceKey<LevelStem>, ChunkGenerator> getDimensionsMap(ResourceKey<WorldPreset> key) {
Registry<LevelStem> reg = getDimensions(key);
if (reg == null) return new HashMap<>();
return DimensionsWrapper.build(reg);
}
private static class DimensionsWrapper {
public static final Codec<DimensionsWrapper> CODEC = RecordCodecBuilder.create(instance -> instance
.group(Codec.unboundedMap(
@ -146,6 +179,7 @@ public class TogetherWorldPreset extends WorldPreset {
return map;
}
DimensionsWrapper(Registry<LevelStem> dimensions) {
this(build(dimensions));
}

View file

@ -2,12 +2,10 @@ package org.betterx.worlds.together.worldPreset;
import org.betterx.bclib.registry.PresetsRegistry;
import org.betterx.worlds.together.WorldsTogether;
import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.tag.v3.TagManager;
import org.betterx.worlds.together.tag.v3.TagRegistry;
import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.worldPreset.client.WorldPresetsClient;
import org.betterx.worlds.together.worldPreset.settings.VanillaWorldPresetSettings;
import org.betterx.worlds.together.worldPreset.settings.WorldPresetSettings;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
@ -22,15 +20,13 @@ import net.minecraft.world.level.levelgen.presets.WorldPreset;
import com.google.common.collect.Maps;
import java.util.Map;
import java.util.Optional;
public class WorldPresets {
public static final TagRegistry.Simple<WorldPreset> WORLD_PRESETS =
TagManager.registerType(BuiltinRegistries.WORLD_PRESET, "tags/worldgen/world_preset");
private static Map<ResourceKey<WorldPreset>, PresetBuilder> BUILDERS = Maps.newHashMap();
private static final Map<ResourceKey<WorldPreset>, WorldPresetSettings> SETTINGS = Maps.newHashMap();
public static Optional<ResourceKey<WorldPreset>> DEFAULT = Optional.of(net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL);
public static ResourceKey<WorldPreset> DEFAULT = net.minecraft.world.level.levelgen.presets.WorldPresets.NORMAL;
public static Holder<WorldPreset> get(RegistryAccess access, ResourceKey<WorldPreset> key) {
return ((access != null) ? access : BuiltinRegistries.ACCESS)
@ -87,15 +83,11 @@ public class WorldPresets {
for (Map.Entry<ResourceKey<WorldPreset>, PresetBuilder> e : BUILDERS.entrySet()) {
TogetherWorldPreset preset = e.getValue().create(overworldStem, netherContext, endContext);
SETTINGS.put(e.getKey(), preset.settings);
BuiltinRegistries.register(presets, e.getKey(), preset);
}
BUILDERS = null;
}
public static WorldPresetSettings getSettingsForPreset(ResourceKey<WorldPreset> key) {
return SETTINGS.getOrDefault(key, VanillaWorldPresetSettings.DEFAULT);
}
@FunctionalInterface
public interface PresetBuilder {

View file

@ -1,30 +0,0 @@
package org.betterx.worlds.together.worldPreset.settings;
import com.mojang.serialization.Codec;
import net.minecraft.core.Holder;
import net.minecraft.core.RegistryAccess;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.levelgen.WorldGenSettings;
import java.util.Set;
public class VanillaWorldPresetSettings extends WorldPresetSettings {
public static final VanillaWorldPresetSettings DEFAULT = new VanillaWorldPresetSettings();
public static final Codec<VanillaWorldPresetSettings> CODEC = Codec.unit(VanillaWorldPresetSettings::new);
@Override
public Codec<? extends WorldPresetSettings> codec() {
return CODEC;
}
@Override
public WorldGenSettings repairSettingsOnLoad(RegistryAccess registryAccess, WorldGenSettings settings) {
return settings;
}
@Override
public BiomeSource addDatapackBiomes(BiomeSource biomeSource, Set<Holder<Biome>> datapackBiomes) {
return biomeSource;
}
}

View file

@ -1,56 +0,0 @@
package org.betterx.worlds.together.worldPreset.settings;
import org.betterx.worlds.together.WorldsTogether;
import com.mojang.serialization.Codec;
import com.mojang.serialization.Lifecycle;
import net.minecraft.core.Holder;
import net.minecraft.core.MappedRegistry;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.levelgen.WorldGenSettings;
import java.util.Set;
import java.util.function.Function;
public abstract class WorldPresetSettings {
public static WorldPresetSettings DEFAULT = VanillaWorldPresetSettings.DEFAULT;
public static final ResourceKey<Registry<Codec<? extends WorldPresetSettings>>> WORLD_PRESET_SETTINGS_REGISTRY =
createRegistryKey(WorldsTogether.makeID("worldgen/world_preset_settings"));
public static final Registry<Codec<? extends WorldPresetSettings>> WORLD_PRESET_SETTINGS =
registerSimple(WORLD_PRESET_SETTINGS_REGISTRY);
public static final Codec<WorldPresetSettings> CODEC = WORLD_PRESET_SETTINGS
.byNameCodec()
.dispatchStable(WorldPresetSettings::codec, Function.identity());
private static <T> ResourceKey<Registry<T>> createRegistryKey(ResourceLocation location) {
return ResourceKey.createRegistryKey(location);
}
private static <T> Registry<T> registerSimple(ResourceKey<? extends Registry<T>> resourceKey) {
return new MappedRegistry<>(resourceKey, Lifecycle.stable(), null);
}
public static Codec<? extends WorldPresetSettings> register(
ResourceLocation loc,
Codec<? extends WorldPresetSettings> codec
) {
return Registry.register(WORLD_PRESET_SETTINGS, loc, codec);
}
public static void bootstrap() {
register(WorldsTogether.makeID("vanilla_world_preset_settings"), VanillaWorldPresetSettings.CODEC);
}
public abstract Codec<? extends WorldPresetSettings> codec();
public abstract WorldGenSettings repairSettingsOnLoad(RegistryAccess registryAccess, WorldGenSettings settings);
public abstract BiomeSource addDatapackBiomes(BiomeSource biomeSource, Set<Holder<Biome>> datapackBiomes);
}