[Change] BCLBiome Data is managed in a Datapack-Aware registry now
This commit is contained in:
parent
94c08e79b2
commit
32e7ffec69
29 changed files with 910 additions and 145 deletions
|
@ -0,0 +1,5 @@
|
|||
package org.betterx.worlds.together.biomesource;
|
||||
|
||||
public interface ReloadableBiomeSource {
|
||||
void reloadBiomes();
|
||||
}
|
|
@ -4,6 +4,6 @@ import net.minecraft.resources.ResourceKey;
|
|||
import net.minecraft.world.level.chunk.ChunkGenerator;
|
||||
import net.minecraft.world.level.dimension.LevelStem;
|
||||
|
||||
public interface RestorableBiomeSource<G extends ChunkGenerator> {
|
||||
public interface RestorableBiomeSource<B extends ChunkGenerator> {
|
||||
void restoreInitialBiomeSource(ResourceKey<LevelStem> dimensionKey);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package org.betterx.worlds.together.levelgen;
|
|||
|
||||
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.world.BiomeSourceWithNoiseRelatedSettings;
|
||||
import org.betterx.worlds.together.world.BiomeSourceWithSeed;
|
||||
|
@ -141,6 +142,7 @@ public class WorldGenUtil {
|
|||
) {
|
||||
var dimensions = TogetherWorldPreset.loadWorldDimensions();
|
||||
for (var entry : settings.dimensions().entrySet()) {
|
||||
boolean didRepair = false;
|
||||
ResourceKey<LevelStem> key = entry.getKey();
|
||||
LevelStem loadedStem = entry.getValue();
|
||||
|
||||
|
@ -156,6 +158,7 @@ public class WorldGenUtil {
|
|||
loadedChunkGenerator,
|
||||
settings
|
||||
);
|
||||
didRepair = true;
|
||||
} else if (loadedChunkGenerator.getBiomeSource() instanceof BiomeSourceWithConfig bs) {
|
||||
if (referenceGenerator.getBiomeSource() instanceof BiomeSourceWithConfig refbs) {
|
||||
if (!refbs.getTogetherConfig().sameConfig(bs.getTogetherConfig())) {
|
||||
|
@ -164,6 +167,12 @@ public class WorldGenUtil {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!didRepair) {
|
||||
if (loadedStem.generator().getBiomeSource() instanceof ReloadableBiomeSource reload) {
|
||||
reload.reloadBiomes();
|
||||
}
|
||||
}
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package org.betterx.worlds.together.mixin.common;
|
||||
|
||||
import org.betterx.worlds.together.world.event.WorldBootstrap;
|
||||
|
||||
import net.minecraft.core.RegistryAccess;
|
||||
import net.minecraft.server.WorldLoader;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
||||
|
||||
@Mixin(WorldLoader.class)
|
||||
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
|
||||
@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/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);
|
||||
return frozen;
|
||||
}
|
||||
}
|
|
@ -16,7 +16,7 @@ import org.jetbrains.annotations.ApiStatus;
|
|||
|
||||
public class SurfaceRuleRegistry {
|
||||
public static final ResourceKey<Registry<AssignedSurfaceRule>> SURFACE_RULES_REGISTRY =
|
||||
createRegistryKey(WorldsTogether.makeID("worldgen/surface_rules"));
|
||||
createRegistryKey(WorldsTogether.makeID("worldgen/betterx/surface_rules"));
|
||||
public static final Predicate<ResourceKey<LevelStem>> NON_MANAGED_DIMENSIONS = dim -> dim != LevelStem.NETHER && dim != LevelStem.END;
|
||||
public static final Predicate<ResourceKey<LevelStem>> ALL_DIMENSIONS = dim -> true;
|
||||
|
||||
|
|
|
@ -154,6 +154,10 @@ public class WorldBootstrap {
|
|||
}
|
||||
}
|
||||
|
||||
public static void registryReady(RegistryAccess access) {
|
||||
Helpers.onRegistryReady(access);
|
||||
}
|
||||
|
||||
public static void setupNewWorld(
|
||||
Optional<LevelStorageSource.LevelStorageAccess> levelStorageAccess,
|
||||
WorldGenSettingsComponent worldGenSettingsComponent
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue