From 49a47de5f8a06ccd3b005b6c8c817b15137d38c5 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 17 Jan 2022 00:30:34 +0100 Subject: [PATCH] Change StructureFeatures in WorldData --- .../java/ru/bclib/api/biomes/BiomeAPI.java | 27 ++++++++++++++++--- .../mixin/common/MinecraftServerMixin.java | 2 ++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java index 01476db8..d56469a4 100644 --- a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java +++ b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java @@ -52,6 +52,7 @@ import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.StructureFeatureConfiguration; import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraft.world.level.storage.WorldData; import org.apache.commons.lang3.mutable.MutableInt; import org.jetbrains.annotations.Nullable; import ru.bclib.BCLib; @@ -170,6 +171,19 @@ public class BiomeAPI { worldSources.add(source); } + private static WorldData worldData; + public static void registerWorldData(WorldData w){ + worldData = w; + if (worldData!=null){ + + worldData.worldGenSettings().dimensions().forEach(dim->{ + StructureSettingsAccessor a = (StructureSettingsAccessor)dim.generator().getSettings(); + STRUCTURE_STARTS.entrySet().forEach(entry -> applyStructureStarts(a, entry.getValue())); + }); + + } + } + /** * For internal use only. * @@ -894,7 +908,7 @@ public class BiomeAPI { //add back modded structures StructureSettingsAccessor a = (StructureSettingsAccessor)settings.structureSettings(); - STRUCTURE_STARTS.entrySet().forEach(entry -> changeStructureStarts(a, entry.getValue())); + STRUCTURE_STARTS.entrySet().forEach(entry -> applyStructureStarts(a, entry.getValue())); //add surface rules registerNoiseGeneratorAndChangeSurfaceRules(settings); @@ -931,12 +945,19 @@ public class BiomeAPI { for (Map.Entry, NoiseGeneratorSettings> entry : chunkGenSettingsRegistry.entrySet()) { final StructureSettingsAccessor access = (StructureSettingsAccessor) entry.getValue().structureSettings(); - changeStructureStarts(access, modifier); + applyStructureStarts(access, modifier); + } + + if (worldData!=null){ + worldData.worldGenSettings().dimensions().forEach(dim->{ + StructureSettingsAccessor access = (StructureSettingsAccessor)dim.generator().getSettings(); + applyStructureStarts(access, modifier); + }); } } - private static void changeStructureStarts(StructureSettingsAccessor access, BiConsumer, Multimap, ResourceKey>>, Map, StructureFeatureConfiguration>> modifier) { + private static void applyStructureStarts(StructureSettingsAccessor access, BiConsumer, Multimap, ResourceKey>>, Map, StructureFeatureConfiguration>> modifier) { Map, Multimap, ResourceKey>> structureMap; Map, StructureFeatureConfiguration> configMap; diff --git a/src/main/java/ru/bclib/mixin/common/MinecraftServerMixin.java b/src/main/java/ru/bclib/mixin/common/MinecraftServerMixin.java index 059131af..54ea51c1 100644 --- a/src/main/java/ru/bclib/mixin/common/MinecraftServerMixin.java +++ b/src/main/java/ru/bclib/mixin/common/MinecraftServerMixin.java @@ -22,6 +22,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.bclib.BCLib; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.dataexchange.DataExchangeAPI; import ru.bclib.recipes.BCLRecipeManager; @@ -46,6 +47,7 @@ public class MinecraftServerMixin { @Inject(method = "*", at = @At("TAIL")) private void bclib_onServerInit(Thread thread, RegistryHolder registryHolder, LevelStorageAccess levelStorageAccess, WorldData worldData, PackRepository packRepository, Proxy proxy, DataFixer dataFixer, ServerResources serverResources, MinecraftSessionService minecraftSessionService, GameProfileRepository gameProfileRepository, GameProfileCache gameProfileCache, ChunkProgressListenerFactory chunkProgressListenerFactory, CallbackInfo ci) { DataExchangeAPI.prepareServerside(); + BiomeAPI.registerWorldData(worldData); } @Inject(method = "reloadResources", at = @At(value = "RETURN"), cancellable = true)