From 416ff1644e3130592e1512611ea387e6ceecc28e Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 26 Oct 2022 17:01:26 +0200 Subject: [PATCH] Create/Load of Worlds with WorldPreset appears to work --- src/main/java/org/betterx/bclib/BCLib.java | 2 +- .../api/v2/generator/BCLChunkGenerator.java | 7 +- .../bclib/api/v2/levelgen/LevelGenEvents.java | 6 +- .../bclib/api/v2/levelgen/LevelGenUtil.java | 9 ++- .../api/v2/levelgen/biomes/BCLBiome.java | 4 +- .../v2/levelgen/biomes/BCLBiomeRegistry.java | 6 +- .../client/gui/screens/WorldSetupScreen.java | 7 +- .../mixin/common/RegistryDataLoaderMixin.java | 2 +- .../together/WorldsTogetherDatagen.java | 4 +- .../chunkgenerator/ChunkGeneratorUtils.java | 6 +- .../EnforceableChunkGenerator.java | 6 +- .../together/levelgen/WorldGenUtil.java | 47 ++++++------- .../mixin/client/CreateWorldScreenMixin.java | 41 ++---------- .../WorldGenSettingsComponentMixin.java | 24 ++++++- .../mixin/client/WorldOpenFlowsMixin.java | 18 +---- .../mixin/common/MinecraftServerMixin.java | 27 +++++--- .../common/MinecraftServerMixinLate.java | 17 ++++- .../mixin/common/PrimaryLevelDataMixin.java | 67 ++++++++++++------- .../mixin/common/WorldDimensionsMixin.java | 15 +++++ .../mixin/common/WorldLoaderMixin.java | 1 - .../surfaceRules/AssignedSurfaceRule.java | 2 - .../surfaceRules/SurfaceRuleUtil.java | 5 +- .../world/event/OnFinalizeLevelStem.java | 4 +- .../world/event/OnFinalizeWorldLoad.java | 5 +- .../together/world/event/WorldBootstrap.java | 35 +++------- .../worldPreset/TogetherWorldPreset.java | 14 +--- .../resources/together.mixins.common.json | 1 + 27 files changed, 187 insertions(+), 195 deletions(-) create mode 100644 src/main/java/org/betterx/worlds/together/mixin/common/WorldDimensionsMixin.java diff --git a/src/main/java/org/betterx/bclib/BCLib.java b/src/main/java/org/betterx/bclib/BCLib.java index de1bf196..c4389436 100644 --- a/src/main/java/org/betterx/bclib/BCLib.java +++ b/src/main/java/org/betterx/bclib/BCLib.java @@ -81,7 +81,7 @@ public class BCLib implements ModInitializer { VersionChecker.registerMod(MOD_ID); - if (false && isDevEnvironment()) { + if (true && isDevEnvironment()) { BCLBiome theYellow = BCLBiomeBuilder .start(makeID("the_yellow")) .precipitation(Biome.Precipitation.NONE) diff --git a/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java b/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java index 4604764e..e5050cd4 100644 --- a/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java +++ b/src/main/java/org/betterx/bclib/api/v2/generator/BCLChunkGenerator.java @@ -30,7 +30,6 @@ import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; 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.synth.NormalNoise; @@ -157,12 +156,12 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto } @Override - public WorldDimensions enforceGeneratorInWorldGenSettings( + public Registry enforceGeneratorInWorldGenSettings( RegistryAccess access, ResourceKey dimensionKey, ResourceKey dimensionTypeKey, ChunkGenerator loadedChunkGenerator, - WorldDimensions worldDims + Registry dimensionRegistry ) { BCLib.LOGGER.info("Enforcing Correct Generator for " + dimensionKey.location().toString() + "."); @@ -195,7 +194,7 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator implements Resto dimensionKey, dimensionTypeKey, access, - worldDims, + dimensionRegistry, referenceGenerator ); diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenEvents.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenEvents.java index 87db033b..d94254b3 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenEvents.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenEvents.java @@ -15,6 +15,7 @@ import org.betterx.worlds.together.world.event.WorldEvents; import org.betterx.worlds.together.worldPreset.TogetherWorldPreset; import net.minecraft.core.Holder; +import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceKey; 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.dimension.LevelStem; 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.storage.LevelStorageSource; @@ -149,14 +149,14 @@ public class LevelGenEvents { } private static void finalizeStem( - WorldGenSettings settings, + Registry dimensionRegistry, ResourceKey dimension, LevelStem levelStem ) { InternalBiomeAPI.applyModifications(levelStem.generator().getBiomeSource(), dimension); } - private static void finalizedWorldLoad(WorldGenSettings worldGenSettings) { + private static void finalizedWorldLoad(Registry dimensionRegistry) { PoiManager.updateStates(); } } diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenUtil.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenUtil.java index eec6f366..c606e455 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenUtil.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/LevelGenUtil.java @@ -22,7 +22,6 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; 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.WorldPresets; @@ -64,11 +63,11 @@ public class LevelGenUtil { } - public static WorldDimensions replaceGenerator( + public static Registry replaceGenerator( ResourceKey dimensionKey, ResourceKey dimensionTypeKey, RegistryAccess registryAccess, - WorldDimensions worldDimensions, + Registry dimensionRegistry, ChunkGenerator generator ) { Registry dimensionTypeRegistry = registryAccess.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); @@ -76,10 +75,10 @@ public class LevelGenUtil { dimensionKey, dimensionTypeKey, dimensionTypeRegistry, - worldDimensions.dimensions(), + dimensionRegistry, generator ); - return new WorldDimensions(newDimensions); + return newDimensions; } public static Registry withDimension( diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java index f7de7825..8f49c31d 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java @@ -44,7 +44,7 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { instance, BCLBiome::new )); - public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); + public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); public KeyDispatchDataCodec codec() { return KEY_CODEC; @@ -425,7 +425,7 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { } public ResourceKey getBCLBiomeKey() { - return ResourceKey.create(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, biomeID); + return (ResourceKey) (Object) ResourceKey.create(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, biomeID); } /** diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java index 549e80b0..6e4e9ce7 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiomeRegistry.java @@ -16,7 +16,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.KeyDispatchDataCodec; import net.minecraft.world.level.biome.Biomes; -import java.util.Optional; import java.util.stream.Stream; import org.jetbrains.annotations.ApiStatus; @@ -81,6 +80,7 @@ public class BCLBiomeRegistry { return ResourceKey.createRegistryKey(location); } + private static Codec bootstrapCodecs(Registry> registry) { return Registry.register(registry, BCLib.makeID("biome"), BCLBiome.KEY_CODEC.codec()); } @@ -153,8 +153,8 @@ public class BCLBiomeRegistry { private static Registry getBclBiomesRegistry(RegistryAccess access) { if (access != null) { - return ((Optional>) access - .registry(BCLBiomeRegistry.BCL_BIOMES_REGISTRY)) + return access + .registry(BCLBiomeRegistry.BCL_BIOMES_REGISTRY) .orElse(BUILTIN_BCL_BIOMES); } else { return BUILTIN_BCL_BIOMES; diff --git a/src/main/java/org/betterx/bclib/client/gui/screens/WorldSetupScreen.java b/src/main/java/org/betterx/bclib/client/gui/screens/WorldSetupScreen.java index 1d27fa28..4305e791 100644 --- a/src/main/java/org/betterx/bclib/client/gui/screens/WorldSetupScreen.java +++ b/src/main/java/org/betterx/bclib/client/gui/screens/WorldSetupScreen.java @@ -26,6 +26,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.presets.WorldPresets; import net.fabricmc.api.EnvType; @@ -269,13 +270,13 @@ public class WorldSetupScreen extends LayoutScreen { ChunkGenerator chunkGenerator ) { createWorldScreen.worldGenSettingsComponent.updateSettings( - (registryAccess, worldDimensions) -> LevelGenUtil.replaceGenerator( + (registryAccess, worldDimensions) -> new WorldDimensions(LevelGenUtil.replaceGenerator( dimensionKey, dimensionTypeKey, registryAccess, - worldDimensions, + worldDimensions.dimensions(), chunkGenerator - ) + )) ); } diff --git a/src/main/java/org/betterx/bclib/mixin/common/RegistryDataLoaderMixin.java b/src/main/java/org/betterx/bclib/mixin/common/RegistryDataLoaderMixin.java index 57b9f7d5..d1be6b53 100644 --- a/src/main/java/org/betterx/bclib/mixin/common/RegistryDataLoaderMixin.java +++ b/src/main/java/org/betterx/bclib/mixin/common/RegistryDataLoaderMixin.java @@ -16,7 +16,7 @@ import java.util.ArrayList; import java.util.List; @Mixin(RegistryDataLoader.class) -public interface RegistryDataLoaderMixin { +public class RegistryDataLoaderMixin { @Accessor("WORLDGEN_REGISTRIES") @Mutable static void wt_set_WORLDGEN_REGISTRIES(List> list) { diff --git a/src/main/java/org/betterx/worlds/together/WorldsTogetherDatagen.java b/src/main/java/org/betterx/worlds/together/WorldsTogetherDatagen.java index 2a0f2185..d0dd71d7 100644 --- a/src/main/java/org/betterx/worlds/together/WorldsTogetherDatagen.java +++ b/src/main/java/org/betterx/worlds/together/WorldsTogetherDatagen.java @@ -1,7 +1,7 @@ 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.BiomeData; import org.betterx.worlds.together.surfaceRules.AssignedSurfaceRule; import org.betterx.worlds.together.surfaceRules.SurfaceRuleRegistry; @@ -42,7 +42,7 @@ public class WorldsTogetherDatagen implements DataGeneratorEntrypoint { public static class CustomRegistriesDataProvider implements DataProvider { public static final List> REGISTRIES = List.of( - new RegistryDataLoader.RegistryData<>(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BCLBiome.CODEC), + new RegistryDataLoader.RegistryData<>(BCLBiomeRegistry.BCL_BIOMES_REGISTRY, BiomeData.CODEC), new RegistryDataLoader.RegistryData<>( SurfaceRuleRegistry.SURFACE_RULES_REGISTRY, AssignedSurfaceRule.CODEC diff --git a/src/main/java/org/betterx/worlds/together/chunkgenerator/ChunkGeneratorUtils.java b/src/main/java/org/betterx/worlds/together/chunkgenerator/ChunkGeneratorUtils.java index 38788644..16b71593 100644 --- a/src/main/java/org/betterx/worlds/together/chunkgenerator/ChunkGeneratorUtils.java +++ b/src/main/java/org/betterx/worlds/together/chunkgenerator/ChunkGeneratorUtils.java @@ -1,12 +1,12 @@ package org.betterx.worlds.together.chunkgenerator; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.WorldGenSettings; public class ChunkGeneratorUtils { - public static void restoreOriginalBiomeSourceInAllDimension(WorldGenSettings settings) { - for (var entry : settings.dimensions().dimensions().entrySet()) { + public static void restoreOriginalBiomeSourceInAllDimension(Registry dimensionRegistry) { + for (var entry : dimensionRegistry.entrySet()) { ResourceKey key = entry.getKey(); LevelStem stem = entry.getValue(); diff --git a/src/main/java/org/betterx/worlds/together/chunkgenerator/EnforceableChunkGenerator.java b/src/main/java/org/betterx/worlds/together/chunkgenerator/EnforceableChunkGenerator.java index 53cfa366..6efd54e3 100644 --- a/src/main/java/org/betterx/worlds/together/chunkgenerator/EnforceableChunkGenerator.java +++ b/src/main/java/org/betterx/worlds/together/chunkgenerator/EnforceableChunkGenerator.java @@ -4,21 +4,21 @@ import org.betterx.worlds.together.biomesource.BiomeSourceFromRegistry; import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig; import org.betterx.worlds.together.biomesource.MergeableBiomeSource; +import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.WorldDimensions; public interface EnforceableChunkGenerator { - WorldDimensions enforceGeneratorInWorldGenSettings( + Registry enforceGeneratorInWorldGenSettings( RegistryAccess access, ResourceKey dimensionKey, ResourceKey dimensionTypeKey, ChunkGenerator loadedChunkGenerator, - WorldDimensions worldDims + Registry dimensionRegistry ); default boolean togetherShouldRepair(ChunkGenerator chunkGenerator) { diff --git a/src/main/java/org/betterx/worlds/together/levelgen/WorldGenUtil.java b/src/main/java/org/betterx/worlds/together/levelgen/WorldGenUtil.java index 359654cf..a540123e 100644 --- a/src/main/java/org/betterx/worlds/together/levelgen/WorldGenUtil.java +++ b/src/main/java/org/betterx/worlds/together/levelgen/WorldGenUtil.java @@ -4,7 +4,6 @@ import org.betterx.worlds.together.WorldsTogether; import org.betterx.worlds.together.biomesource.BiomeSourceWithConfig; import org.betterx.worlds.together.biomesource.ReloadableBiomeSource; 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.BiomeSourceWithSeed; 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.synth.NormalNoise; -import java.util.HashMap; -import java.util.Map; import org.jetbrains.annotations.ApiStatus; public class WorldGenUtil { @@ -80,7 +77,7 @@ public class WorldGenUtil { ); } - @ApiStatus.Internal +// @ApiStatus.Internal //TODO: 1.19.3 Disabled for now // public static Pair defaultWorldDataSupplier( // RegistryOps loaderOps, @@ -106,28 +103,28 @@ public class WorldGenUtil { // return Pair.of(worldGenSettings, frozen); // } - private static final Map, Map, LevelStem>> WORLD_PRESET_MAP = new HashMap<>(); - - @ApiStatus.Internal - public static Map, LevelStem> getDimensionsWithModData(ResourceKey preset) { - var data = WORLD_PRESET_MAP.get(preset); - if (data == null) return new HashMap<>(); - return data; - } +// private static final Map, Map, LevelStem>> WORLD_PRESET_MAP = new HashMap<>(); +// +// @ApiStatus.Internal +// public static Map, LevelStem> getDimensionsWithModData(ResourceKey preset) { +// var data = WORLD_PRESET_MAP.get(preset); +// if (data == null) return new HashMap<>(); +// return data; +// } @ApiStatus.Internal public static Holder reloadWithModData(Holder preset) { - if (preset.value() instanceof WorldPresetAccessor acc) { - var data = WORLD_PRESET_MAP.get(preset.unwrapKey().orElseThrow()); - if (data != null) { - acc.bcl_setDimensions(data); - } - } +// if (preset.value() instanceof WorldPresetAccessor acc) { +// var data = WORLD_PRESET_MAP.get(preset.unwrapKey().orElseThrow()); +// if (data != null) { +// acc.bcl_setDimensions(data); +// } +// } return preset; } public static void clearPreloadedWorldPresets() { - WORLD_PRESET_MAP.clear(); +// WORLD_PRESET_MAP.clear(); } // public static void preloadWorldPresets(ResourceManager resourceManager, RegistryAccess.Writable writable) { @@ -227,12 +224,12 @@ public class WorldGenUtil { @SuppressWarnings("unchecked") @ApiStatus.Internal - public static WorldDimensions repairBiomeSourceInAllDimensions( + public static Registry repairBiomeSourceInAllDimensions( RegistryAccess registryAccess, - WorldDimensions settings + Registry dimensionRegistry ) { var dimensions = TogetherWorldPreset.loadWorldDimensions(); - for (var entry : settings.dimensions().entrySet()) { + for (var entry : dimensionRegistry.entrySet()) { boolean didRepair = false; ResourceKey key = entry.getKey(); LevelStem loadedStem = entry.getValue(); @@ -262,12 +259,12 @@ public class WorldGenUtil { final ChunkGenerator loadedChunkGenerator = loadedStem.generator(); if (enforcer.togetherShouldRepair(loadedChunkGenerator)) { - settings = enforcer.enforceGeneratorInWorldGenSettings( + dimensionRegistry = enforcer.enforceGeneratorInWorldGenSettings( registryAccess, key, loadedStem.type().unwrapKey().orElseThrow(), loadedChunkGenerator, - settings + dimensionRegistry ); didRepair = true; } else if (loadedChunkGenerator.getBiomeSource() instanceof BiomeSourceWithConfig bs) { @@ -287,7 +284,7 @@ public class WorldGenUtil { } } - return settings; + return dimensionRegistry; } public static ResourceLocation getBiomeID(Biome biome) { diff --git a/src/main/java/org/betterx/worlds/together/mixin/client/CreateWorldScreenMixin.java b/src/main/java/org/betterx/worlds/together/mixin/client/CreateWorldScreenMixin.java index 9b2c65b6..86234741 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/client/CreateWorldScreenMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/client/CreateWorldScreenMixin.java @@ -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.WorldGenSettingsComponent; import net.minecraft.resources.ResourceKey; -import net.minecraft.server.WorldLoader; 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.storage.LevelStorageSource; @@ -46,40 +44,6 @@ public class CreateWorldScreenMixin { private static Optional> wt_NewDefault(Optional> preset) { 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 wt_NewDefaultSettings(WorldLoader.WorldDataSupplier worldDataSupplier) { - return worldDataSupplier; - //TODO: 1.19.3 New DataProviders might handle this edge case automatically? -// return (resourceManager, dataPackConfig) -> { -//// Pair 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 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 @Inject(method = "createNewWorldDirectory", at = @At("RETURN")) @@ -87,4 +51,9 @@ public class CreateWorldScreenMixin { WorldBootstrap.InGUI.registryReadyOnNewWorld(this.worldGenSettingsComponent); WorldBootstrap.InGUI.setupNewWorld(cir.getReturnValue(), this.worldGenSettingsComponent); } + + @Inject(method = "onCreate", at = @At("HEAD")) + void wt_onCreate(CallbackInfo ci) { + System.out.println("there"); + } } diff --git a/src/main/java/org/betterx/worlds/together/mixin/client/WorldGenSettingsComponentMixin.java b/src/main/java/org/betterx/worlds/together/mixin/client/WorldGenSettingsComponentMixin.java index b1a1f54e..f8d41848 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/client/WorldGenSettingsComponentMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/client/WorldGenSettingsComponentMixin.java @@ -12,11 +12,14 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.gen.Accessor; 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.callback.CallbackInfo; import java.util.LinkedList; import java.util.List; import java.util.Optional; +import java.util.OptionalLong; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -33,6 +36,25 @@ public abstract class WorldGenSettingsComponentMixin implements WorldGenSettings @Shadow private WorldCreationContext settings; + @Shadow + public abstract void updateSettings(WorldCreationContext.DimensionsUpdater dimensionsUpdater); + + @Shadow + private Optional> preset; + + @Inject(method = "", 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;")) public List> bcl_SortLists(List> list) { final Predicate> vanilla = (p -> p.unwrapKey() @@ -40,7 +62,7 @@ public abstract class WorldGenSettingsComponentMixin implements WorldGenSettings .location() .getNamespace() .equals("minecraft")); - + List> custom = list .stream() diff --git a/src/main/java/org/betterx/worlds/together/mixin/client/WorldOpenFlowsMixin.java b/src/main/java/org/betterx/worlds/together/mixin/client/WorldOpenFlowsMixin.java index 94eb128c..af33c08d 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/client/WorldOpenFlowsMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/client/WorldOpenFlowsMixin.java @@ -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.worldselection.WorldOpenFlows; -import net.minecraft.core.LayeredRegistryAccess; 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.levelgen.WorldDimensions; import net.minecraft.world.level.levelgen.WorldOptions; 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.Mixin; @@ -38,7 +34,6 @@ public abstract class WorldOpenFlowsMixin { private void wt_callFixerOnLoad(Screen screen, String levelID, CallbackInfo ci) { WorldBootstrap.InGUI.setupLoadedWorld(levelID, this.levelSource); - //if (DataFixerAPI.fixData(this.levelSource, levelID, true, (appliedFixes) -> { if (WorldBootstrap.InGUI.applyWorldPatches(levelSource, levelID, (appliedFixes) -> { WorldBootstrap.InGUI.finishedWorldLoad(levelID, this.levelSource); this.doLoadLevel(screen, levelID, false, false); @@ -63,19 +58,8 @@ public abstract class WorldOpenFlowsMixin { Function function, CallbackInfo ci ) { + WorldsTogether.LOGGER.info("called createFreshLevel..."); //TODO: 1.19.3 no mor dimensions at this stage... //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 layeredRegistryAccess, - WorldData worldData, - CallbackInfo ci - ) { - //called from the CreateWorldScreenMixin now - //LifeCycleAPI.newWorldSetup(levelStorageAccess, worldData.worldGenSettings()); - } } diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixin.java index 6c06d735..92ed4305 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixin.java @@ -1,9 +1,17 @@ package org.betterx.worlds.together.mixin.common; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.progress.ChunkProgressListener; +import org.betterx.worlds.together.world.event.WorldBootstrap; +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.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; 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) public class MinecraftServerMixin { -// @Shadow -// @Final -// private RegistryAccess.Frozen registryHolder; -// @Shadow -// @Final -// protected WorldData worldData; + @Shadow + @Final + private LayeredRegistryAccess registries; @Inject(method = "createLevels", at = @At(value = "HEAD")) private void together_addSurfaceRules(ChunkProgressListener worldGenerationProgressListener, CallbackInfo ci) { - //TODO: 1.19.3 Dimensions are handled differently now - //WorldBootstrap.finalizeWorldGenSettings(this.worldData.worldGenSettings()); - + final Registry dimensionRegistry = this.registries.compositeAccess() + .registryOrThrow(Registry.LEVEL_STEM_REGISTRY); + WorldBootstrap.finalizeWorldGenSettings(dimensionRegistry); } } diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixinLate.java b/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixinLate.java index a01f0a8d..ff92fa09 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixinLate.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/MinecraftServerMixinLate.java @@ -1,14 +1,22 @@ package org.betterx.worlds.together.mixin.common; +import org.betterx.worlds.together.chunkgenerator.ChunkGeneratorUtils; + import com.mojang.datafixers.DataFixer; +import net.minecraft.core.LayeredRegistryAccess; +import net.minecraft.core.Registry; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.RegistryLayer; import net.minecraft.server.Services; import net.minecraft.server.WorldStem; import net.minecraft.server.level.progress.ChunkProgressListenerFactory; import net.minecraft.server.packs.repository.PackRepository; +import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.storage.LevelStorageSource; +import org.spongepowered.asm.mixin.Final; 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.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -17,6 +25,10 @@ import java.net.Proxy; @Mixin(value = MinecraftServer.class, priority = 2000) public class MinecraftServerMixinLate { + @Shadow + @Final + private LayeredRegistryAccess registries; + @Inject(at = @At("RETURN"), method = "") private void bcl_restoreBiomeSource( Thread thread, @@ -29,7 +41,8 @@ public class MinecraftServerMixinLate { ChunkProgressListenerFactory chunkProgressListenerFactory, CallbackInfo ci ) { - //TODO: 1.19.3 Dimensions are handled differently now - //ChunkGeneratorUtils.restoreOriginalBiomeSourceInAllDimension(worldStem.worldData().worldGenSettings()); + final Registry dimensionRegistry = this.registries.compositeAccess() + .registryOrThrow(Registry.LEVEL_STEM_REGISTRY); + ChunkGeneratorUtils.restoreOriginalBiomeSourceInAllDimension(dimensionRegistry); } } diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/PrimaryLevelDataMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/PrimaryLevelDataMixin.java index e9ce0822..8ee66955 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/PrimaryLevelDataMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/PrimaryLevelDataMixin.java @@ -1,42 +1,61 @@ 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 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) public class PrimaryLevelDataMixin { - //TODO: 1.19.3 This was changed completley + //TODO: 1.19.3 This was changed completley, Replaced by WorldDimensions.bake // @Shadow // @Final // private WorldGenSettings worldGenSettings; -// private static final ThreadLocal>> bcl_lastRegistryAccess = ThreadLocal.withInitial( -// () -> Optional.empty()); -// -// //This is the way a created (new) world is initializing the PrimaryLevelData -// @ModifyArg(method = "(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;(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 final ThreadLocal>> bcl_lastRegistryAccess = ThreadLocal.withInitial( + () -> Optional.empty()); + + // //This is the way a created (new) world is initializing the PrimaryLevelData +// @ModifyArg(method = "(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;(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) { // return WorldBootstrap.enforceInNewWorld(worldGenSettings); // } // -// @Inject(method = "parse", at = @At("HEAD")) -// private static void bcl_parse( -// Dynamic dynamic, -// DataFixer dataFixer, -// int i, -// @Nullable CompoundTag compoundTag, -// LevelSettings levelSettings, -// LevelVersion levelVersion, -// WorldGenSettings worldGenSettings, -// Lifecycle lifecycle, -// CallbackInfoReturnable cir -// ) { -// if (dynamic.getOps() instanceof RegistryOps regOps) { -// bcl_lastRegistryAccess.set(Optional.of(regOps)); -// } -// } -// -// + @Inject(method = "parse", at = @At("HEAD")) + private static void bcl_parse( + Dynamic dynamic, + DataFixer dataFixer, + int i, + @Nullable CompoundTag compoundTag, + LevelSettings levelSettings, + LevelVersion levelVersion, + PrimaryLevelData.SpecialWorldProperty specialWorldProperty, + WorldOptions worldOptions, + Lifecycle lifecycle, + CallbackInfoReturnable cir + ) { + if (dynamic.getOps() instanceof RegistryOps 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 // @ModifyArg(method = "parse", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/PrimaryLevelData;(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) { diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/WorldDimensionsMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/WorldDimensionsMixin.java new file mode 100644 index 00000000..70d9656f --- /dev/null +++ b/src/main/java/org/betterx/worlds/together/mixin/common/WorldDimensionsMixin.java @@ -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 wt_bake(Registry dimensionRegistry) { +// final Registry changedRegistry = WorldBootstrap.enforceInNewWorld(dimensionRegistry); +// return changedRegistry; +// } +} diff --git a/src/main/java/org/betterx/worlds/together/mixin/common/WorldLoaderMixin.java b/src/main/java/org/betterx/worlds/together/mixin/common/WorldLoaderMixin.java index 3ecbd827..c1dbaffb 100644 --- a/src/main/java/org/betterx/worlds/together/mixin/common/WorldLoaderMixin.java +++ b/src/main/java/org/betterx/worlds/together/mixin/common/WorldLoaderMixin.java @@ -14,7 +14,6 @@ public class WorldLoaderMixin { //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 //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;")) private static RegistryAccess.Frozen wt_newRegistry(RegistryAccess.Frozen frozen) { WorldBootstrap.InGUI.registryReady(frozen); diff --git a/src/main/java/org/betterx/worlds/together/surfaceRules/AssignedSurfaceRule.java b/src/main/java/org/betterx/worlds/together/surfaceRules/AssignedSurfaceRule.java index 58d09ddd..3cab714e 100644 --- a/src/main/java/org/betterx/worlds/together/surfaceRules/AssignedSurfaceRule.java +++ b/src/main/java/org/betterx/worlds/together/surfaceRules/AssignedSurfaceRule.java @@ -21,6 +21,4 @@ public class AssignedSurfaceRule { this.ruleSource = ruleSource; this.biomeID = biomeID; } - - } diff --git a/src/main/java/org/betterx/worlds/together/surfaceRules/SurfaceRuleUtil.java b/src/main/java/org/betterx/worlds/together/surfaceRules/SurfaceRuleUtil.java index b95455fa..28358d22 100644 --- a/src/main/java/org/betterx/worlds/together/surfaceRules/SurfaceRuleUtil.java +++ b/src/main/java/org/betterx/worlds/together/surfaceRules/SurfaceRuleUtil.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.SurfaceRules; -import net.minecraft.world.level.levelgen.WorldGenSettings; import java.util.LinkedList; import java.util.List; @@ -83,8 +82,8 @@ public class SurfaceRuleUtil { } } - public static void injectSurfaceRulesToAllDimensions(WorldGenSettings settings) { - for (var entry : settings.dimensions().dimensions().entrySet()) { + public static void injectSurfaceRulesToAllDimensions(Registry dimensionRegistry) { + for (var entry : dimensionRegistry.entrySet()) { ResourceKey key = entry.getKey(); LevelStem stem = entry.getValue(); diff --git a/src/main/java/org/betterx/worlds/together/world/event/OnFinalizeLevelStem.java b/src/main/java/org/betterx/worlds/together/world/event/OnFinalizeLevelStem.java index 95d4e7c7..581d993f 100644 --- a/src/main/java/org/betterx/worlds/together/world/event/OnFinalizeLevelStem.java +++ b/src/main/java/org/betterx/worlds/together/world/event/OnFinalizeLevelStem.java @@ -1,10 +1,10 @@ package org.betterx.worlds.together.world.event; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.level.levelgen.WorldGenSettings; @FunctionalInterface public interface OnFinalizeLevelStem { - void now(WorldGenSettings worldGenSettings, ResourceKey dimensionKey, LevelStem stem); + void now(Registry dimensionRegistry, ResourceKey dimensionKey, LevelStem stem); } diff --git a/src/main/java/org/betterx/worlds/together/world/event/OnFinalizeWorldLoad.java b/src/main/java/org/betterx/worlds/together/world/event/OnFinalizeWorldLoad.java index 053e2295..980dab74 100644 --- a/src/main/java/org/betterx/worlds/together/world/event/OnFinalizeWorldLoad.java +++ b/src/main/java/org/betterx/worlds/together/world/event/OnFinalizeWorldLoad.java @@ -1,7 +1,8 @@ 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 { - void done(WorldGenSettings settings); + void done(Registry dimensionRegistry); } diff --git a/src/main/java/org/betterx/worlds/together/world/event/WorldBootstrap.java b/src/main/java/org/betterx/worlds/together/world/event/WorldBootstrap.java index 0b6c0866..a015fa5b 100644 --- a/src/main/java/org/betterx/worlds/together/world/event/WorldBootstrap.java +++ b/src/main/java/org/betterx/worlds/together/world/event/WorldBootstrap.java @@ -22,7 +22,6 @@ 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.WorldDimensions; -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; @@ -42,9 +41,8 @@ public class WorldBootstrap { } public static RegistryAccess getLastRegistryAccessOrElseBuiltin() { - //TODO: 1.19.3 ther no longer is a general builtin ACCESS -// if (LAST_REGISTRY_ACCESS == null) -// return BuiltinRegistries.; + if (LAST_REGISTRY_ACCESS == null) + WorldsTogether.LOGGER.error("Tried to read from global registry!"); return LAST_REGISTRY_ACCESS; } @@ -173,7 +171,6 @@ public class WorldBootstrap { Optional> newPreset = setupNewWorldCommon( levelStorageAccess.get(), currentPreset, - //TODO: 1.19.13 see if this is the correct Dimensions list worldGenSettingsComponent.settings().selectedDimensions() ); if (newPreset != currentPreset) { @@ -298,11 +295,11 @@ public class WorldBootstrap { } } - public static void finalizeWorldGenSettings(WorldGenSettings worldGenSettings) { + public static void finalizeWorldGenSettings(Registry dimensionRegistry) { 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( - worldGenSettings, + dimensionRegistry, entry.getKey(), entry.getValue() )); @@ -318,26 +315,12 @@ public class WorldBootstrap { } if (Configs.MAIN_CONFIG.verboseLogging()) 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) { - return WorldGenUtil.repairBiomeSourceInAllDimensions(LAST_REGISTRY_ACCESS, worldGenSettings); + public static Registry enforceInNewWorld(Registry dimensionRegistry) { + return WorldGenUtil.repairBiomeSourceInAllDimensions(LAST_REGISTRY_ACCESS, dimensionRegistry); } - - public static WorldDimensions enforceInLoadedWorld( - Optional> 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; - } - } diff --git a/src/main/java/org/betterx/worlds/together/worldPreset/TogetherWorldPreset.java b/src/main/java/org/betterx/worlds/together/worldPreset/TogetherWorldPreset.java index b6b74506..bc4fd3dc 100644 --- a/src/main/java/org/betterx/worlds/together/worldPreset/TogetherWorldPreset.java +++ b/src/main/java/org/betterx/worlds/together/worldPreset/TogetherWorldPreset.java @@ -1,7 +1,6 @@ package org.betterx.worlds.together.worldPreset; import org.betterx.bclib.BCLib; -import org.betterx.bclib.config.Configs; import org.betterx.worlds.together.WorldsTogether; import org.betterx.worlds.together.levelgen.WorldGenUtil; import org.betterx.worlds.together.mixin.common.WorldPresetAccessor; @@ -106,24 +105,13 @@ public class TogetherWorldPreset extends WorldPreset { public static @NotNull Map, ChunkGenerator> loadWorldDimensions() { try { 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 registryOps = RegistryOps.create(NbtOps.INSTANCE, registryAccess); if (DEFAULT_DIMENSIONS_WRAPPER == null) { DEFAULT_DIMENSIONS_WRAPPER = new DimensionsWrapper(TogetherWorldPreset.getDimensionsMap(WorldPresets.getDEFAULT())); } CompoundTag presetNBT = WorldGenUtil.getPresetsNbt(); - if (!presetNBT.contains("dimensions") || globalRegistry) { + if (!presetNBT.contains("dimensions")) { return DEFAULT_DIMENSIONS_WRAPPER.dimensions; } diff --git a/src/main/resources/together.mixins.common.json b/src/main/resources/together.mixins.common.json index 89b8890f..204fd00b 100644 --- a/src/main/resources/together.mixins.common.json +++ b/src/main/resources/together.mixins.common.json @@ -18,6 +18,7 @@ "RegistryDataLoaderMixin", "RegistryOpsAccessor", "TagLoaderMixin", + "WorldDimensionsMixin", "WorldGenPropertiesMixin", "WorldLoaderMixin", "WorldPresetAccessor",