Create/Load of Worlds with WorldPreset appears to work

This commit is contained in:
Frank 2022-10-26 17:01:26 +02:00
parent 409534e6f1
commit 416ff1644e
27 changed files with 187 additions and 195 deletions

View file

@ -81,7 +81,7 @@ public class BCLib implements ModInitializer {
VersionChecker.registerMod(MOD_ID); VersionChecker.registerMod(MOD_ID);
if (false && isDevEnvironment()) { if (true && isDevEnvironment()) {
BCLBiome theYellow = BCLBiomeBuilder BCLBiome theYellow = BCLBiomeBuilder
.start(makeID("the_yellow")) .start(makeID("the_yellow"))
.precipitation(Biome.Precipitation.NONE) .precipitation(Biome.Precipitation.NONE)

View file

@ -30,7 +30,6 @@ import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.RandomState; import net.minecraft.world.level.levelgen.RandomState;
import net.minecraft.world.level.levelgen.WorldDimensions;
import net.minecraft.world.level.levelgen.structure.StructureSet; import net.minecraft.world.level.levelgen.structure.StructureSet;
import net.minecraft.world.level.levelgen.synth.NormalNoise; import net.minecraft.world.level.levelgen.synth.NormalNoise;
@ -157,12 +156,12 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto
} }
@Override @Override
public WorldDimensions enforceGeneratorInWorldGenSettings( public Registry<LevelStem> enforceGeneratorInWorldGenSettings(
RegistryAccess access, RegistryAccess access,
ResourceKey<LevelStem> dimensionKey, ResourceKey<LevelStem> dimensionKey,
ResourceKey<DimensionType> dimensionTypeKey, ResourceKey<DimensionType> dimensionTypeKey,
ChunkGenerator loadedChunkGenerator, ChunkGenerator loadedChunkGenerator,
WorldDimensions worldDims Registry<LevelStem> dimensionRegistry
) { ) {
BCLib.LOGGER.info("Enforcing Correct Generator for " + dimensionKey.location().toString() + "."); BCLib.LOGGER.info("Enforcing Correct Generator for " + dimensionKey.location().toString() + ".");
@ -195,7 +194,7 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto
dimensionKey, dimensionKey,
dimensionTypeKey, dimensionTypeKey,
access, access,
worldDims, dimensionRegistry,
referenceGenerator referenceGenerator
); );

View file

@ -15,6 +15,7 @@ import org.betterx.worlds.together.world.event.WorldEvents;
import org.betterx.worlds.together.worldPreset.TogetherWorldPreset; import org.betterx.worlds.together.worldPreset.TogetherWorldPreset;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess; import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -22,7 +23,6 @@ import net.minecraft.tags.TagLoader;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.WorldDimensions;
import net.minecraft.world.level.levelgen.WorldGenSettings;
import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.LevelStorageSource;
@ -149,14 +149,14 @@ public class LevelGenEvents {
} }
private static void finalizeStem( private static void finalizeStem(
WorldGenSettings settings, Registry<LevelStem> dimensionRegistry,
ResourceKey<LevelStem> dimension, ResourceKey<LevelStem> dimension,
LevelStem levelStem LevelStem levelStem
) { ) {
InternalBiomeAPI.applyModifications(levelStem.generator().getBiomeSource(), dimension); InternalBiomeAPI.applyModifications(levelStem.generator().getBiomeSource(), dimension);
} }
private static void finalizedWorldLoad(WorldGenSettings worldGenSettings) { private static void finalizedWorldLoad(Registry<LevelStem> dimensionRegistry) {
PoiManager.updateStates(); PoiManager.updateStates();
} }
} }

View file

@ -22,7 +22,6 @@ import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldDimensions;
import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.minecraft.world.level.levelgen.presets.WorldPresets; import net.minecraft.world.level.levelgen.presets.WorldPresets;
@ -64,11 +63,11 @@ public class LevelGenUtil {
} }
public static WorldDimensions replaceGenerator( public static Registry<LevelStem> replaceGenerator(
ResourceKey<LevelStem> dimensionKey, ResourceKey<LevelStem> dimensionKey,
ResourceKey<DimensionType> dimensionTypeKey, ResourceKey<DimensionType> dimensionTypeKey,
RegistryAccess registryAccess, RegistryAccess registryAccess,
WorldDimensions worldDimensions, Registry<LevelStem> dimensionRegistry,
ChunkGenerator generator ChunkGenerator generator
) { ) {
Registry<DimensionType> dimensionTypeRegistry = registryAccess.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); Registry<DimensionType> dimensionTypeRegistry = registryAccess.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY);
@ -76,10 +75,10 @@ public class LevelGenUtil {
dimensionKey, dimensionKey,
dimensionTypeKey, dimensionTypeKey,
dimensionTypeRegistry, dimensionTypeRegistry,
worldDimensions.dimensions(), dimensionRegistry,
generator generator
); );
return new WorldDimensions(newDimensions); return newDimensions;
} }
public static Registry<LevelStem> withDimension( public static Registry<LevelStem> withDimension(

View file

@ -44,7 +44,7 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData {
instance, instance,
BCLBiome::new BCLBiome::new
)); ));
public static final KeyDispatchDataCodec<BCLBiome> KEY_CODEC = KeyDispatchDataCodec.of(CODEC); public static final KeyDispatchDataCodec<? extends BCLBiome> KEY_CODEC = KeyDispatchDataCodec.of(CODEC);
public KeyDispatchDataCodec<? extends BCLBiome> codec() { public KeyDispatchDataCodec<? extends BCLBiome> codec() {
return KEY_CODEC; return KEY_CODEC;
@ -425,7 +425,7 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData {
} }
public ResourceKey<BCLBiome> getBCLBiomeKey() { public ResourceKey<BCLBiome> getBCLBiomeKey() {
return ResourceKey.create(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, biomeID); return (ResourceKey<BCLBiome>) (Object) ResourceKey.create(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, biomeID);
} }
/** /**

View file

@ -16,7 +16,6 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.KeyDispatchDataCodec; import net.minecraft.util.KeyDispatchDataCodec;
import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.biome.Biomes;
import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
@ -81,6 +80,7 @@ public class BCLBiomeRegistry {
return ResourceKey.createRegistryKey(location); return ResourceKey.createRegistryKey(location);
} }
private static Codec<? extends BCLBiome> bootstrapCodecs(Registry<Codec<? extends BCLBiome>> registry) { private static Codec<? extends BCLBiome> bootstrapCodecs(Registry<Codec<? extends BCLBiome>> registry) {
return Registry.register(registry, BCLib.makeID("biome"), BCLBiome.KEY_CODEC.codec()); return Registry.register(registry, BCLib.makeID("biome"), BCLBiome.KEY_CODEC.codec());
} }
@ -153,8 +153,8 @@ public class BCLBiomeRegistry {
private static Registry<BCLBiome> getBclBiomesRegistry(RegistryAccess access) { private static Registry<BCLBiome> getBclBiomesRegistry(RegistryAccess access) {
if (access != null) { if (access != null) {
return ((Optional<Registry<BCLBiome>>) access return access
.registry(BCLBiomeRegistry.BCL_BIOMES_REGISTRY)) .registry(BCLBiomeRegistry.BCL_BIOMES_REGISTRY)
.orElse(BUILTIN_BCL_BIOMES); .orElse(BUILTIN_BCL_BIOMES);
} else { } else {
return BUILTIN_BCL_BIOMES; return BUILTIN_BCL_BIOMES;

View file

@ -26,6 +26,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.dimension.BuiltinDimensionTypes;
import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldDimensions;
import net.minecraft.world.level.levelgen.presets.WorldPresets; import net.minecraft.world.level.levelgen.presets.WorldPresets;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
@ -269,13 +270,13 @@ public class WorldSetupScreen extends LayoutScreen {
ChunkGenerator chunkGenerator ChunkGenerator chunkGenerator
) { ) {
createWorldScreen.worldGenSettingsComponent.updateSettings( createWorldScreen.worldGenSettingsComponent.updateSettings(
(registryAccess, worldDimensions) -> LevelGenUtil.replaceGenerator( (registryAccess, worldDimensions) -> new WorldDimensions(LevelGenUtil.replaceGenerator(
dimensionKey, dimensionKey,
dimensionTypeKey, dimensionTypeKey,
registryAccess, registryAccess,
worldDimensions, worldDimensions.dimensions(),
chunkGenerator chunkGenerator
) ))
); );
} }

View file

@ -16,7 +16,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
@Mixin(RegistryDataLoader.class) @Mixin(RegistryDataLoader.class)
public interface RegistryDataLoaderMixin { public class RegistryDataLoaderMixin {
@Accessor("WORLDGEN_REGISTRIES") @Accessor("WORLDGEN_REGISTRIES")
@Mutable @Mutable
static void wt_set_WORLDGEN_REGISTRIES(List<RegistryDataLoader.RegistryData<?>> list) { static void wt_set_WORLDGEN_REGISTRIES(List<RegistryDataLoader.RegistryData<?>> list) {

View file

@ -1,7 +1,7 @@
package org.betterx.worlds.together; package org.betterx.worlds.together;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry;
import org.betterx.bclib.api.v2.levelgen.biomes.BiomeData;
import org.betterx.worlds.together.surfaceRules.AssignedSurfaceRule; import org.betterx.worlds.together.surfaceRules.AssignedSurfaceRule;
import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry; import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry;
@ -42,7 +42,7 @@ public class WorldsTogetherDatagen implements DataGeneratorEntrypoint {
public static class CustomRegistriesDataProvider implements DataProvider { public static class CustomRegistriesDataProvider implements DataProvider {
public static final List<RegistryDataLoader.RegistryData<?>> REGISTRIES = List.of( public static final List<RegistryDataLoader.RegistryData<?>> REGISTRIES = List.of(
new RegistryDataLoader.RegistryData<>(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BCLBiome.CODEC), new RegistryDataLoader.RegistryData<>(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BiomeData.CODEC),
new RegistryDataLoader.RegistryData<>( new RegistryDataLoader.RegistryData<>(
SurfaceRuleRegistry.SURFACE_RULES_REGISTRY, SurfaceRuleRegistry.SURFACE_RULES_REGISTRY,
AssignedSurfaceRule.CODEC AssignedSurfaceRule.CODEC

View file

@ -1,12 +1,12 @@
package org.betterx.worlds.together.chunkgenerator; package org.betterx.worlds.together.chunkgenerator;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldGenSettings;
public class ChunkGeneratorUtils { public class ChunkGeneratorUtils {
public static void restoreOriginalBiomeSourceInAllDimension(WorldGenSettings settings) { public static void restoreOriginalBiomeSourceInAllDimension(Registry<LevelStem> dimensionRegistry) {
for (var entry : settings.dimensions().dimensions().entrySet()) { for (var entry : dimensionRegistry.entrySet()) {
ResourceKey<LevelStem> key = entry.getKey(); ResourceKey<LevelStem> key = entry.getKey();
LevelStem stem = entry.getValue(); LevelStem stem = entry.getValue();

View file

@ -4,21 +4,21 @@ import org.betterx.worlds.together.biomesource.BiomeSourceFromRegistry;
import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig; import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig;
import org.betterx.worlds.together.biomesource.MergeableBiomeSource; import org.betterx.worlds.together.biomesource.MergeableBiomeSource;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess; import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldDimensions;
public interface EnforceableChunkGenerator<G extends ChunkGenerator> { public interface EnforceableChunkGenerator<G extends ChunkGenerator> {
WorldDimensions enforceGeneratorInWorldGenSettings( Registry<LevelStem> enforceGeneratorInWorldGenSettings(
RegistryAccess access, RegistryAccess access,
ResourceKey<LevelStem> dimensionKey, ResourceKey<LevelStem> dimensionKey,
ResourceKey<DimensionType> dimensionTypeKey, ResourceKey<DimensionType> dimensionTypeKey,
ChunkGenerator loadedChunkGenerator, ChunkGenerator loadedChunkGenerator,
WorldDimensions worldDims Registry<LevelStem> dimensionRegistry
); );
default boolean togetherShouldRepair(ChunkGenerator chunkGenerator) { default boolean togetherShouldRepair(ChunkGenerator chunkGenerator) {

View file

@ -4,7 +4,6 @@ import org.betterx.worlds.together.WorldsTogether;
import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig; import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig;
import org.betterx.worlds.together.biomesource.ReloadableBiomeSource; import org.betterx.worlds.together.biomesource.ReloadableBiomeSource;
import org.betterx.worlds.together.chunkgenerator.EnforceableChunkGenerator; import org.betterx.worlds.together.chunkgenerator.EnforceableChunkGenerator;
import org.betterx.worlds.together.mixin.common.WorldPresetAccessor;
import org.betterx.worlds.together.world.BiomeSourceWithNoiseRelatedSettings; import org.betterx.worlds.together.world.BiomeSourceWithNoiseRelatedSettings;
import org.betterx.worlds.together.world.BiomeSourceWithSeed; import org.betterx.worlds.together.world.BiomeSourceWithSeed;
import org.betterx.worlds.together.world.WorldConfig; import org.betterx.worlds.together.world.WorldConfig;
@ -30,8 +29,6 @@ import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.minecraft.world.level.levelgen.structure.StructureSet; import net.minecraft.world.level.levelgen.structure.StructureSet;
import net.minecraft.world.level.levelgen.synth.NormalNoise; import net.minecraft.world.level.levelgen.synth.NormalNoise;
import java.util.HashMap;
import java.util.Map;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
public class WorldGenUtil { public class WorldGenUtil {
@ -80,7 +77,7 @@ public class WorldGenUtil {
); );
} }
@ApiStatus.Internal // @ApiStatus.Internal
//TODO: 1.19.3 Disabled for now //TODO: 1.19.3 Disabled for now
// public static Pair<WorldDimensions, RegistryAccess.Frozen> defaultWorldDataSupplier( // public static Pair<WorldDimensions, RegistryAccess.Frozen> defaultWorldDataSupplier(
// RegistryOps<JsonElement> loaderOps, // RegistryOps<JsonElement> loaderOps,
@ -106,28 +103,28 @@ public class WorldGenUtil {
// return Pair.of(worldGenSettings, frozen); // return Pair.of(worldGenSettings, frozen);
// } // }
private static final Map<ResourceKey<WorldPreset>, Map<ResourceKey<LevelStem>, LevelStem>> WORLD_PRESET_MAP = new HashMap<>(); // private static final Map<ResourceKey<WorldPreset>, Map<ResourceKey<LevelStem>, LevelStem>> WORLD_PRESET_MAP = new HashMap<>();
//
@ApiStatus.Internal // @ApiStatus.Internal
public static Map<ResourceKey<LevelStem>, LevelStem> getDimensionsWithModData(ResourceKey<WorldPreset> preset) { // public static Map<ResourceKey<LevelStem>, LevelStem> getDimensionsWithModData(ResourceKey<WorldPreset> preset) {
var data = WORLD_PRESET_MAP.get(preset); // var data = WORLD_PRESET_MAP.get(preset);
if (data == null) return new HashMap<>(); // if (data == null) return new HashMap<>();
return data; // return data;
} // }
@ApiStatus.Internal @ApiStatus.Internal
public static Holder<WorldPreset> reloadWithModData(Holder<WorldPreset> preset) { public static Holder<WorldPreset> reloadWithModData(Holder<WorldPreset> preset) {
if (preset.value() instanceof WorldPresetAccessor acc) { // if (preset.value() instanceof WorldPresetAccessor acc) {
var data = WORLD_PRESET_MAP.get(preset.unwrapKey().orElseThrow()); // var data = WORLD_PRESET_MAP.get(preset.unwrapKey().orElseThrow());
if (data != null) { // if (data != null) {
acc.bcl_setDimensions(data); // acc.bcl_setDimensions(data);
} // }
} // }
return preset; return preset;
} }
public static void clearPreloadedWorldPresets() { public static void clearPreloadedWorldPresets() {
WORLD_PRESET_MAP.clear(); // WORLD_PRESET_MAP.clear();
} }
// public static void preloadWorldPresets(ResourceManager resourceManager, RegistryAccess.Writable writable) { // public static void preloadWorldPresets(ResourceManager resourceManager, RegistryAccess.Writable writable) {
@ -227,12 +224,12 @@ public class WorldGenUtil {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ApiStatus.Internal @ApiStatus.Internal
public static WorldDimensions repairBiomeSourceInAllDimensions( public static Registry<LevelStem> repairBiomeSourceInAllDimensions(
RegistryAccess registryAccess, RegistryAccess registryAccess,
WorldDimensions settings Registry<LevelStem> dimensionRegistry
) { ) {
var dimensions = TogetherWorldPreset.loadWorldDimensions(); var dimensions = TogetherWorldPreset.loadWorldDimensions();
for (var entry : settings.dimensions().entrySet()) { for (var entry : dimensionRegistry.entrySet()) {
boolean didRepair = false; boolean didRepair = false;
ResourceKey<LevelStem> key = entry.getKey(); ResourceKey<LevelStem> key = entry.getKey();
LevelStem loadedStem = entry.getValue(); LevelStem loadedStem = entry.getValue();
@ -262,12 +259,12 @@ public class WorldGenUtil {
final ChunkGenerator loadedChunkGenerator = loadedStem.generator(); final ChunkGenerator loadedChunkGenerator = loadedStem.generator();
if (enforcer.togetherShouldRepair(loadedChunkGenerator)) { if (enforcer.togetherShouldRepair(loadedChunkGenerator)) {
settings = enforcer.enforceGeneratorInWorldGenSettings( dimensionRegistry = enforcer.enforceGeneratorInWorldGenSettings(
registryAccess, registryAccess,
key, key,
loadedStem.type().unwrapKey().orElseThrow(), loadedStem.type().unwrapKey().orElseThrow(),
loadedChunkGenerator, loadedChunkGenerator,
settings dimensionRegistry
); );
didRepair = true; didRepair = true;
} else if (loadedChunkGenerator.getBiomeSource() instanceof BiomeSourceWithConfig bs) { } else if (loadedChunkGenerator.getBiomeSource() instanceof BiomeSourceWithConfig bs) {
@ -287,7 +284,7 @@ public class WorldGenUtil {
} }
} }
return settings; return dimensionRegistry;
} }
public static ResourceLocation getBiomeID(Biome biome) { public static ResourceLocation getBiomeID(Biome biome) {

View file

@ -7,9 +7,7 @@ import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen;
import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent; import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.server.WorldLoader;
import net.minecraft.world.level.WorldDataConfiguration; import net.minecraft.world.level.WorldDataConfiguration;
import net.minecraft.world.level.levelgen.WorldGenSettings;
import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.LevelStorageSource;
@ -46,40 +44,6 @@ public class CreateWorldScreenMixin {
private static Optional<ResourceKey<WorldPreset>> wt_NewDefault(Optional<ResourceKey<WorldPreset>> preset) { private static Optional<ResourceKey<WorldPreset>> wt_NewDefault(Optional<ResourceKey<WorldPreset>> preset) {
return Optional.of(WorldPresets.getDEFAULT()); return Optional.of(WorldPresets.getDEFAULT());
} }
//
// @Redirect(method = "method_41854", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/RegistryAccess$Writable;freeze()Lnet/minecraft/core/RegistryAccess$Frozen;"))
// private static RegistryAccess.Frozen loadDynamicRegistry(
// RegistryAccess.Writable mutableRegistryManager,
// ResourceManager dataPackManager
// ) {
// // This loads the dynamic registry from the data pack
// RegistryOps.createAndLoad(JsonOps.INSTANCE, mutableRegistryManager, dataPackManager);
// return mutableRegistryManager.freeze();
// }
//Make sure the WorldGenSettings used to populate the create screen match the default WorldPreset
@ModifyArg(method = "openFresh", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/WorldLoader;load(Lnet/minecraft/server/WorldLoader$InitConfig;Lnet/minecraft/server/WorldLoader$WorldDataSupplier;Lnet/minecraft/server/WorldLoader$ResultFactory;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"))
private static WorldLoader.WorldDataSupplier<WorldGenSettings> wt_NewDefaultSettings(WorldLoader.WorldDataSupplier<WorldGenSettings> worldDataSupplier) {
return worldDataSupplier;
//TODO: 1.19.3 New DataProviders might handle this edge case automatically?
// return (resourceManager, dataPackConfig) -> {
//// Pair<WorldGenSettings, RegistryAccess.Frozen> res = worldDataSupplier.get(resourceManager, dataPackConfig);
//// WorldGenSettings defaultGen = net.minecraft.world.level.levelgen.presets.WorldPresets.createNormalWorldFromPreset(frozen);
//// WorldBootstrap.InGUI.setDefaultCreateWorldSettings(defaultGen);
// RegistryAccess.Writable writable = RegistryAccess.builtinCopy();
//
//
// WorldGenUtil.preloadWorldPresets(resourceManager, writable);
// RegistryOps<JsonElement> registryOps = RegistryOps.createAndLoad(
// JsonOps.INSTANCE, writable, resourceManager
// );
// RegistryAccess.Frozen frozen = writable.freeze();
// WorldBootstrap.InGUI.registryReady(frozen);
//
//
// return WorldGenUtil.defaultWorldDataSupplier(registryOps, frozen);
// };
}
//this is called when a new world is first created //this is called when a new world is first created
@Inject(method = "createNewWorldDirectory", at = @At("RETURN")) @Inject(method = "createNewWorldDirectory", at = @At("RETURN"))
@ -87,4 +51,9 @@ public class CreateWorldScreenMixin {
WorldBootstrap.InGUI.registryReadyOnNewWorld(this.worldGenSettingsComponent); WorldBootstrap.InGUI.registryReadyOnNewWorld(this.worldGenSettingsComponent);
WorldBootstrap.InGUI.setupNewWorld(cir.getReturnValue(), this.worldGenSettingsComponent); WorldBootstrap.InGUI.setupNewWorld(cir.getReturnValue(), this.worldGenSettingsComponent);
} }
@Inject(method = "onCreate", at = @At("HEAD"))
void wt_onCreate(CallbackInfo ci) {
System.out.println("there");
}
} }

View file

@ -12,11 +12,14 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.OptionalLong;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -33,6 +36,25 @@ public abstract class WorldGenSettingsComponentMixin implements WorldGenSettings
@Shadow @Shadow
private WorldCreationContext settings; private WorldCreationContext settings;
@Shadow
public abstract void updateSettings(WorldCreationContext.DimensionsUpdater dimensionsUpdater);
@Shadow
private Optional<Holder<WorldPreset>> preset;
@Inject(method = "<init>", at = @At("TAIL"))
public void wt_init(
WorldCreationContext worldCreationContext,
Optional worldPreset,
OptionalLong seed,
CallbackInfo ci
) {
if (this.preset.isPresent()) {
//make sure the initial dimensions are in sync with the selected World Preset
this.updateSettings((frozen, worldDimensions) -> this.preset.get().value().createWorldDimensions());
}
}
@ModifyArg(method = "init", index = 0, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/CycleButton$Builder;withValues(Ljava/util/List;Ljava/util/List;)Lnet/minecraft/client/gui/components/CycleButton$Builder;")) @ModifyArg(method = "init", index = 0, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/CycleButton$Builder;withValues(Ljava/util/List;Ljava/util/List;)Lnet/minecraft/client/gui/components/CycleButton$Builder;"))
public List<Holder<WorldPreset>> bcl_SortLists(List<Holder<WorldPreset>> list) { public List<Holder<WorldPreset>> bcl_SortLists(List<Holder<WorldPreset>> list) {
final Predicate<Holder<WorldPreset>> vanilla = (p -> p.unwrapKey() final Predicate<Holder<WorldPreset>> vanilla = (p -> p.unwrapKey()
@ -40,7 +62,7 @@ public abstract class WorldGenSettingsComponentMixin implements WorldGenSettings
.location() .location()
.getNamespace() .getNamespace()
.equals("minecraft")); .equals("minecraft"));
List<Holder<WorldPreset>> custom = list List<Holder<WorldPreset>> custom = list
.stream() .stream()

View file

@ -5,15 +5,11 @@ import org.betterx.worlds.together.world.event.WorldBootstrap;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.worldselection.WorldOpenFlows; import net.minecraft.client.gui.screens.worldselection.WorldOpenFlows;
import net.minecraft.core.LayeredRegistryAccess;
import net.minecraft.core.RegistryAccess; import net.minecraft.core.RegistryAccess;
import net.minecraft.server.RegistryLayer;
import net.minecraft.server.ReloadableServerResources;
import net.minecraft.world.level.LevelSettings; import net.minecraft.world.level.LevelSettings;
import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.WorldDimensions;
import net.minecraft.world.level.levelgen.WorldOptions; import net.minecraft.world.level.levelgen.WorldOptions;
import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.LevelStorageSource;
import net.minecraft.world.level.storage.WorldData;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@ -38,7 +34,6 @@ public abstract class WorldOpenFlowsMixin {
private void wt_callFixerOnLoad(Screen screen, String levelID, CallbackInfo ci) { private void wt_callFixerOnLoad(Screen screen, String levelID, CallbackInfo ci) {
WorldBootstrap.InGUI.setupLoadedWorld(levelID, this.levelSource); WorldBootstrap.InGUI.setupLoadedWorld(levelID, this.levelSource);
//if (DataFixerAPI.fixData(this.levelSource, levelID, true, (appliedFixes) -> {
if (WorldBootstrap.InGUI.applyWorldPatches(levelSource, levelID, (appliedFixes) -> { if (WorldBootstrap.InGUI.applyWorldPatches(levelSource, levelID, (appliedFixes) -> {
WorldBootstrap.InGUI.finishedWorldLoad(levelID, this.levelSource); WorldBootstrap.InGUI.finishedWorldLoad(levelID, this.levelSource);
this.doLoadLevel(screen, levelID, false, false); this.doLoadLevel(screen, levelID, false, false);
@ -63,19 +58,8 @@ public abstract class WorldOpenFlowsMixin {
Function<RegistryAccess, WorldDimensions> function, Function<RegistryAccess, WorldDimensions> function,
CallbackInfo ci CallbackInfo ci
) { ) {
WorldsTogether.LOGGER.info("called createFreshLevel...");
//TODO: 1.19.3 no mor dimensions at this stage... //TODO: 1.19.3 no mor dimensions at this stage...
//WorldBootstrap.InFreshLevel.setupNewWorld(levelID, worldGenSettings, this.levelSource, Optional.empty()); //WorldBootstrap.InFreshLevel.setupNewWorld(levelID, worldGenSettings, this.levelSource, Optional.empty());
} }
@Inject(method = "createLevelFromExistingSettings", at = @At("HEAD"))
public void wt_createLevelFromExistingSettings(
LevelStorageSource.LevelStorageAccess levelStorageAccess,
ReloadableServerResources reloadableServerResources,
LayeredRegistryAccess<RegistryLayer> layeredRegistryAccess,
WorldData worldData,
CallbackInfo ci
) {
//called from the CreateWorldScreenMixin now
//LifeCycleAPI.newWorldSetup(levelStorageAccess, worldData.worldGenSettings());
}
} }

View file

@ -1,9 +1,17 @@
package org.betterx.worlds.together.mixin.common; package org.betterx.worlds.together.mixin.common;
import net.minecraft.server.MinecraftServer; import org.betterx.worlds.together.world.event.WorldBootstrap;
import net.minecraft.server.level.progress.ChunkProgressListener;
import net.minecraft.core.LayeredRegistryAccess;
import net.minecraft.core.Registry;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.RegistryLayer;
import net.minecraft.server.level.progress.ChunkProgressListener;
import net.minecraft.world.level.dimension.LevelStem;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@ -14,17 +22,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
*/ */
@Mixin(value = MinecraftServer.class, priority = 2000) @Mixin(value = MinecraftServer.class, priority = 2000)
public class MinecraftServerMixin { public class MinecraftServerMixin {
// @Shadow @Shadow
// @Final @Final
// private RegistryAccess.Frozen registryHolder; private LayeredRegistryAccess<RegistryLayer> registries;
// @Shadow
// @Final
// protected WorldData worldData;
@Inject(method = "createLevels", at = @At(value = "HEAD")) @Inject(method = "createLevels", at = @At(value = "HEAD"))
private void together_addSurfaceRules(ChunkProgressListener worldGenerationProgressListener, CallbackInfo ci) { private void together_addSurfaceRules(ChunkProgressListener worldGenerationProgressListener, CallbackInfo ci) {
//TODO: 1.19.3 Dimensions are handled differently now final Registry<LevelStem> dimensionRegistry = this.registries.compositeAccess()
//WorldBootstrap.finalizeWorldGenSettings(this.worldData.worldGenSettings()); .registryOrThrow(Registry.LEVEL_STEM_REGISTRY);
WorldBootstrap.finalizeWorldGenSettings(dimensionRegistry);
} }
} }

View file

@ -1,14 +1,22 @@
package org.betterx.worlds.together.mixin.common; package org.betterx.worlds.together.mixin.common;
import org.betterx.worlds.together.chunkgenerator.ChunkGeneratorUtils;
import com.mojang.datafixers.DataFixer; import com.mojang.datafixers.DataFixer;
import net.minecraft.core.LayeredRegistryAccess;
import net.minecraft.core.Registry;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.RegistryLayer;
import net.minecraft.server.Services; import net.minecraft.server.Services;
import net.minecraft.server.WorldStem; import net.minecraft.server.WorldStem;
import net.minecraft.server.level.progress.ChunkProgressListenerFactory; import net.minecraft.server.level.progress.ChunkProgressListenerFactory;
import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.PackRepository;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.LevelStorageSource;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@ -17,6 +25,10 @@ import java.net.Proxy;
@Mixin(value = MinecraftServer.class, priority = 2000) @Mixin(value = MinecraftServer.class, priority = 2000)
public class MinecraftServerMixinLate { public class MinecraftServerMixinLate {
@Shadow
@Final
private LayeredRegistryAccess<RegistryLayer> registries;
@Inject(at = @At("RETURN"), method = "<init>") @Inject(at = @At("RETURN"), method = "<init>")
private void bcl_restoreBiomeSource( private void bcl_restoreBiomeSource(
Thread thread, Thread thread,
@ -29,7 +41,8 @@ public class MinecraftServerMixinLate {
ChunkProgressListenerFactory chunkProgressListenerFactory, ChunkProgressListenerFactory chunkProgressListenerFactory,
CallbackInfo ci CallbackInfo ci
) { ) {
//TODO: 1.19.3 Dimensions are handled differently now final Registry<LevelStem> dimensionRegistry = this.registries.compositeAccess()
//ChunkGeneratorUtils.restoreOriginalBiomeSourceInAllDimension(worldStem.worldData().worldGenSettings()); .registryOrThrow(Registry.LEVEL_STEM_REGISTRY);
ChunkGeneratorUtils.restoreOriginalBiomeSourceInAllDimension(dimensionRegistry);
} }
} }

View file

@ -1,42 +1,61 @@
package org.betterx.worlds.together.mixin.common; package org.betterx.worlds.together.mixin.common;
import org.betterx.worlds.together.world.event.WorldBootstrap;
import com.mojang.datafixers.DataFixer;
import com.mojang.serialization.Dynamic;
import com.mojang.serialization.Lifecycle;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
import net.minecraft.resources.RegistryOps;
import net.minecraft.world.level.LevelSettings;
import net.minecraft.world.level.levelgen.WorldOptions;
import net.minecraft.world.level.storage.LevelVersion;
import net.minecraft.world.level.storage.PrimaryLevelData; import net.minecraft.world.level.storage.PrimaryLevelData;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Optional;
import org.jetbrains.annotations.Nullable;
@Mixin(PrimaryLevelData.class) @Mixin(PrimaryLevelData.class)
public class PrimaryLevelDataMixin { public class PrimaryLevelDataMixin {
//TODO: 1.19.3 This was changed completley //TODO: 1.19.3 This was changed completley, Replaced by WorldDimensions.bake
// @Shadow // @Shadow
// @Final // @Final
// private WorldGenSettings worldGenSettings; // private WorldGenSettings worldGenSettings;
// private static final ThreadLocal<Optional<RegistryOps<Tag>>> bcl_lastRegistryAccess = ThreadLocal.withInitial( private static final ThreadLocal<Optional<RegistryOps<Tag>>> bcl_lastRegistryAccess = ThreadLocal.withInitial(
// () -> Optional.empty()); () -> Optional.empty());
//
// //This is the way a created (new) world is initializing the PrimaryLevelData // //This is the way a created (new) world is initializing the PrimaryLevelData
// @ModifyArg(method = "<init>(Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;<init>(Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/nbt/CompoundTag;ZIIIFJJIIIZIZZZLnet/minecraft/world/level/border/WorldBorder$Settings;IILjava/util/UUID;Ljava/util/Set;Lnet/minecraft/world/level/timers/TimerQueue;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V")) // @ModifyArg(method = "<init>(Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldOptions;Lnet/minecraft/world/level/storage/PrimaryLevelData$SpecialWorldProperty;Lcom/mojang/serialization/Lifecycle;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;<init>(Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/nbt/CompoundTag;ZIIIFJJIIIZIZZZLnet/minecraft/world/level/border/WorldBorder$Settings;IILjava/util/UUID;Ljava/util/Set;Lnet/minecraft/world/level/timers/TimerQueue;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V"))
// private static WorldGenSettings bcl_fixOtherSettings(WorldGenSettings worldGenSettings) { // private static WorldGenSettings bcl_fixOtherSettings(WorldGenSettings worldGenSettings) {
// return WorldBootstrap.enforceInNewWorld(worldGenSettings); // return WorldBootstrap.enforceInNewWorld(worldGenSettings);
// } // }
// //
// @Inject(method = "parse", at = @At("HEAD")) @Inject(method = "parse", at = @At("HEAD"))
// private static void bcl_parse( private static void bcl_parse(
// Dynamic<Tag> dynamic, Dynamic<Tag> dynamic,
// DataFixer dataFixer, DataFixer dataFixer,
// int i, int i,
// @Nullable CompoundTag compoundTag, @Nullable CompoundTag compoundTag,
// LevelSettings levelSettings, LevelSettings levelSettings,
// LevelVersion levelVersion, LevelVersion levelVersion,
// WorldGenSettings worldGenSettings, PrimaryLevelData.SpecialWorldProperty specialWorldProperty,
// Lifecycle lifecycle, WorldOptions worldOptions,
// CallbackInfoReturnable<PrimaryLevelData> cir Lifecycle lifecycle,
// ) { CallbackInfoReturnable<PrimaryLevelData> cir
// if (dynamic.getOps() instanceof RegistryOps<Tag> regOps) { ) {
// bcl_lastRegistryAccess.set(Optional.of(regOps)); if (dynamic.getOps() instanceof RegistryOps<Tag> regOps) {
// } //bcl_lastRegistryAccess.set(Optional.of(regOps));
// } WorldBootstrap.InGUI.registryReadyOnLoadedWorld(Optional.of(regOps));
// }
// }
// //This is the way a loaded (existing) world is initializing the PrimaryLevelData // //This is the way a loaded (existing) world is initializing the PrimaryLevelData
// @ModifyArg(method = "parse", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;<init>(Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/nbt/CompoundTag;ZIIIFJJIIIZIZZZLnet/minecraft/world/level/border/WorldBorder$Settings;IILjava/util/UUID;Ljava/util/Set;Lnet/minecraft/world/level/timers/TimerQueue;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V")) // @ModifyArg(method = "parse", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;<init>(Lcom/mojang/datafixers/DataFixer;ILnet/minecraft/nbt/CompoundTag;ZIIIFJJIIIZIZZZLnet/minecraft/world/level/border/WorldBorder$Settings;IILjava/util/UUID;Ljava/util/Set;Lnet/minecraft/world/level/timers/TimerQueue;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/level/LevelSettings;Lnet/minecraft/world/level/levelgen/WorldGenSettings;Lcom/mojang/serialization/Lifecycle;)V"))
// private static WorldGenSettings bcl_fixSettings(WorldGenSettings settings) { // private static WorldGenSettings bcl_fixSettings(WorldGenSettings settings) {

View file

@ -0,0 +1,15 @@
package org.betterx.worlds.together.mixin.common;
import net.minecraft.world.level.levelgen.WorldDimensions;
import org.spongepowered.asm.mixin.Mixin;
@Mixin(value = WorldDimensions.class, priority = 100)
public class WorldDimensionsMixin {
//TODO:1.19.3 no general registry access available yet as the layerd access is generated after this
// @ModifyVariable(method = "bake", argsOnly = true, at = @At("HEAD"))
// Registry<LevelStem> wt_bake(Registry<LevelStem> dimensionRegistry) {
// final Registry<LevelStem> changedRegistry = WorldBootstrap.enforceInNewWorld(dimensionRegistry);
// return changedRegistry;
// }
}

View file

@ -14,7 +14,6 @@ public class WorldLoaderMixin {
//this is the place a new Registry access gets first istantiated //this is the place a new Registry access gets first istantiated
//either when a new Datapack was added to a world on the create-screen //either when a new Datapack was added to a world on the create-screen
//or because we did start world loading //or because we did start world loading
//TODO: 1.19.3 This might get replaced by the data Providers...
@ModifyArg(method = "load", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/ReloadableServerResources;loadResources(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/core/RegistryAccess$Frozen;Lnet/minecraft/world/flag/FeatureFlagSet;Lnet/minecraft/commands/Commands$CommandSelection;ILjava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;")) @ModifyArg(method = "load", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/ReloadableServerResources;loadResources(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/core/RegistryAccess$Frozen;Lnet/minecraft/world/flag/FeatureFlagSet;Lnet/minecraft/commands/Commands$CommandSelection;ILjava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"))
private static RegistryAccess.Frozen wt_newRegistry(RegistryAccess.Frozen frozen) { private static RegistryAccess.Frozen wt_newRegistry(RegistryAccess.Frozen frozen) {
WorldBootstrap.InGUI.registryReady(frozen); WorldBootstrap.InGUI.registryReady(frozen);

View file

@ -21,6 +21,4 @@ public class AssignedSurfaceRule {
this.ruleSource = ruleSource; this.ruleSource = ruleSource;
this.biomeID = biomeID; this.biomeID = biomeID;
} }
} }

View file

@ -11,7 +11,6 @@ import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.SurfaceRules;
import net.minecraft.world.level.levelgen.WorldGenSettings;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -83,8 +82,8 @@ public class SurfaceRuleUtil {
} }
} }
public static void injectSurfaceRulesToAllDimensions(WorldGenSettings settings) { public static void injectSurfaceRulesToAllDimensions(Registry<LevelStem> dimensionRegistry) {
for (var entry : settings.dimensions().dimensions().entrySet()) { for (var entry : dimensionRegistry.entrySet()) {
ResourceKey<LevelStem> key = entry.getKey(); ResourceKey<LevelStem> key = entry.getKey();
LevelStem stem = entry.getValue(); LevelStem stem = entry.getValue();

View file

@ -1,10 +1,10 @@
package org.betterx.worlds.together.world.event; package org.betterx.worlds.together.world.event;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldGenSettings;
@FunctionalInterface @FunctionalInterface
public interface OnFinalizeLevelStem { public interface OnFinalizeLevelStem {
void now(WorldGenSettings worldGenSettings, ResourceKey<LevelStem> dimensionKey, LevelStem stem); void now(Registry<LevelStem> dimensionRegistry, ResourceKey<LevelStem> dimensionKey, LevelStem stem);
} }

View file

@ -1,7 +1,8 @@
package org.betterx.worlds.together.world.event; package org.betterx.worlds.together.world.event;
import net.minecraft.world.level.levelgen.WorldGenSettings; import net.minecraft.core.Registry;
import net.minecraft.world.level.dimension.LevelStem;
public interface OnFinalizeWorldLoad { public interface OnFinalizeWorldLoad {
void done(WorldGenSettings settings); void done(Registry<LevelStem> dimensionRegistry);
} }

View file

@ -22,7 +22,6 @@ import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.WorldDimensions;
import net.minecraft.world.level.levelgen.WorldGenSettings;
import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.minecraft.world.level.levelgen.presets.WorldPreset;
import net.minecraft.world.level.storage.LevelResource; import net.minecraft.world.level.storage.LevelResource;
import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.LevelStorageSource;
@ -42,9 +41,8 @@ public class WorldBootstrap {
} }
public static RegistryAccess getLastRegistryAccessOrElseBuiltin() { public static RegistryAccess getLastRegistryAccessOrElseBuiltin() {
//TODO: 1.19.3 ther no longer is a general builtin ACCESS if (LAST_REGISTRY_ACCESS == null)
// if (LAST_REGISTRY_ACCESS == null) WorldsTogether.LOGGER.error("Tried to read from global registry!");
// return BuiltinRegistries.;
return LAST_REGISTRY_ACCESS; return LAST_REGISTRY_ACCESS;
} }
@ -173,7 +171,6 @@ public class WorldBootstrap {
Optional<Holder<WorldPreset>> newPreset = setupNewWorldCommon( Optional<Holder<WorldPreset>> newPreset = setupNewWorldCommon(
levelStorageAccess.get(), levelStorageAccess.get(),
currentPreset, currentPreset,
//TODO: 1.19.13 see if this is the correct Dimensions list
worldGenSettingsComponent.settings().selectedDimensions() worldGenSettingsComponent.settings().selectedDimensions()
); );
if (newPreset != currentPreset) { if (newPreset != currentPreset) {
@ -298,11 +295,11 @@ public class WorldBootstrap {
} }
} }
public static void finalizeWorldGenSettings(WorldGenSettings worldGenSettings) { public static void finalizeWorldGenSettings(Registry<LevelStem> dimensionRegistry) {
String output = "World Dimensions: "; String output = "World Dimensions: ";
for (var entry : worldGenSettings.dimensions().dimensions().entrySet()) { for (var entry : dimensionRegistry.entrySet()) {
WorldEventsImpl.ON_FINALIZE_LEVEL_STEM.emit(e -> e.now( WorldEventsImpl.ON_FINALIZE_LEVEL_STEM.emit(e -> e.now(
worldGenSettings, dimensionRegistry,
entry.getKey(), entry.getKey(),
entry.getValue() entry.getValue()
)); ));
@ -318,26 +315,12 @@ public class WorldBootstrap {
} }
if (Configs.MAIN_CONFIG.verboseLogging()) if (Configs.MAIN_CONFIG.verboseLogging())
BCLib.LOGGER.info(output); BCLib.LOGGER.info(output);
SurfaceRuleUtil.injectSurfaceRulesToAllDimensions(worldGenSettings); SurfaceRuleUtil.injectSurfaceRulesToAllDimensions(dimensionRegistry);
WorldEventsImpl.ON_FINALIZED_WORLD_LOAD.emit(e -> e.done(worldGenSettings)); WorldEventsImpl.ON_FINALIZED_WORLD_LOAD.emit(e -> e.done(dimensionRegistry));
} }
public static WorldDimensions enforceInNewWorld(WorldDimensions worldGenSettings) { public static Registry<LevelStem> enforceInNewWorld(Registry<LevelStem> dimensionRegistry) {
return WorldGenUtil.repairBiomeSourceInAllDimensions(LAST_REGISTRY_ACCESS, worldGenSettings); return WorldGenUtil.repairBiomeSourceInAllDimensions(LAST_REGISTRY_ACCESS, dimensionRegistry);
} }
public static WorldDimensions enforceInLoadedWorld(
Optional<RegistryOps<Tag>> registryOps,
WorldDimensions worldGenSettings
) {
if (registryOps.orElse(null) instanceof RegistryOpsAccessor acc) {
return WorldGenUtil.repairBiomeSourceInAllDimensions(acc.bcl_getRegistryAccess(), worldGenSettings);
//.repairSettingsOnLoad(LAST_REGISTRY_ACCESS, worldGenSettings);
} else {
WorldsTogether.LOGGER.error("Unable to obtain registryAccess when enforcing generators.");
}
return worldGenSettings;
}
} }

View file

@ -1,7 +1,6 @@
package org.betterx.worlds.together.worldPreset; package org.betterx.worlds.together.worldPreset;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.config.Configs;
import org.betterx.worlds.together.WorldsTogether; import org.betterx.worlds.together.WorldsTogether;
import org.betterx.worlds.together.levelgen.WorldGenUtil; import org.betterx.worlds.together.levelgen.WorldGenUtil;
import org.betterx.worlds.together.mixin.common.WorldPresetAccessor; import org.betterx.worlds.together.mixin.common.WorldPresetAccessor;
@ -106,24 +105,13 @@ public class TogetherWorldPreset extends WorldPreset {
public static @NotNull Map<ResourceKey<LevelStem>, ChunkGenerator> loadWorldDimensions() { public static @NotNull Map<ResourceKey<LevelStem>, ChunkGenerator> loadWorldDimensions() {
try { try {
final RegistryAccess registryAccess = WorldBootstrap.getLastRegistryAccessOrElseBuiltin(); final RegistryAccess registryAccess = WorldBootstrap.getLastRegistryAccessOrElseBuiltin();
boolean globalRegistry = false;
//TODO: 1.19.3 there is no longer a builtin registry acccess
/*if (registryAccess == BuiltinRegistries.ACCESS) {
if (Configs.MAIN_CONFIG.verboseLogging())
BCLib.LOGGER.info("Loading from builtin Registry");
globalRegistry = true;
} else */
{
if (Configs.MAIN_CONFIG.verboseLogging())
BCLib.LOGGER.info("Loading from datapack Registry");
}
final RegistryOps<Tag> registryOps = RegistryOps.create(NbtOps.INSTANCE, registryAccess); final RegistryOps<Tag> registryOps = RegistryOps.create(NbtOps.INSTANCE, registryAccess);
if (DEFAULT_DIMENSIONS_WRAPPER == null) { if (DEFAULT_DIMENSIONS_WRAPPER == null) {
DEFAULT_DIMENSIONS_WRAPPER = new DimensionsWrapper(TogetherWorldPreset.getDimensionsMap(WorldPresets.getDEFAULT())); DEFAULT_DIMENSIONS_WRAPPER = new DimensionsWrapper(TogetherWorldPreset.getDimensionsMap(WorldPresets.getDEFAULT()));
} }
CompoundTag presetNBT = WorldGenUtil.getPresetsNbt(); CompoundTag presetNBT = WorldGenUtil.getPresetsNbt();
if (!presetNBT.contains("dimensions") || globalRegistry) { if (!presetNBT.contains("dimensions")) {
return DEFAULT_DIMENSIONS_WRAPPER.dimensions; return DEFAULT_DIMENSIONS_WRAPPER.dimensions;
} }

View file

@ -18,6 +18,7 @@
"RegistryDataLoaderMixin", "RegistryDataLoaderMixin",
"RegistryOpsAccessor", "RegistryOpsAccessor",
"TagLoaderMixin", "TagLoaderMixin",
"WorldDimensionsMixin",
"WorldGenPropertiesMixin", "WorldGenPropertiesMixin",
"WorldLoaderMixin", "WorldLoaderMixin",
"WorldPresetAccessor", "WorldPresetAccessor",