Make sure BiomeAPI is initialized with the correct registry
This commit is contained in:
parent
5d970a27ba
commit
3e41a4630d
8 changed files with 117 additions and 112 deletions
|
@ -1,6 +1,10 @@
|
|||
package org.betterx.bclib.api;
|
||||
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.core.RegistryAccess;
|
||||
import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.resources.RegistryOps;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
|
@ -15,9 +19,12 @@ import net.minecraft.world.level.storage.ServerLevelData;
|
|||
import org.betterx.bclib.api.biomes.BiomeAPI;
|
||||
import org.betterx.bclib.api.dataexchange.DataExchangeAPI;
|
||||
import org.betterx.bclib.api.datafixer.DataFixerAPI;
|
||||
import org.betterx.bclib.api.worldgen.WorldGenUtil;
|
||||
import org.betterx.bclib.mixin.common.RegistryOpsAccessor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
|
@ -28,7 +35,7 @@ public class LifeCycleAPI {
|
|||
private final static List<LevelLoadCall> onLoadLevel = new ArrayList<>(2);
|
||||
private final static List<BeforeLevelLoadCall> beforeLoadLevel = new ArrayList<>(2);
|
||||
|
||||
public static void startingWorld(LevelStorageSource.LevelStorageAccess levelStorageAccess,
|
||||
public static void newWorldSetup(LevelStorageSource.LevelStorageAccess levelStorageAccess,
|
||||
WorldGenSettings settings) {
|
||||
DataExchangeAPI.prepareServerside();
|
||||
BiomeAPI.prepareNewLevel();
|
||||
|
@ -37,7 +44,7 @@ public class LifeCycleAPI {
|
|||
_runBeforeLevelLoad();
|
||||
}
|
||||
|
||||
public static void startingWorld(String levelID,
|
||||
public static void newWorldSetup(String levelID,
|
||||
WorldGenSettings worldGenSettings,
|
||||
LevelStorageSource levelSource) {
|
||||
DataExchangeAPI.prepareServerside();
|
||||
|
@ -47,6 +54,48 @@ public class LifeCycleAPI {
|
|||
_runBeforeLevelLoad();
|
||||
}
|
||||
|
||||
public static void newWorldSetup(LevelStorageSource.LevelStorageAccess levelStorageAccess) {
|
||||
BiomeAPI.prepareNewLevel();
|
||||
DataFixerAPI.fixData(levelStorageAccess, false, (didFix) -> {/* not called when showUI==false */});
|
||||
|
||||
_runBeforeLevelLoad();
|
||||
}
|
||||
|
||||
public static WorldGenSettings worldLoadStarted(WorldGenSettings settings,
|
||||
Optional<RegistryOps<Tag>> registryOps) {
|
||||
if (registryOps.orElse(null) instanceof RegistryOpsAccessor acc) {
|
||||
BiomeAPI.initRegistry(acc.bcl_getRegistryAccess()
|
||||
.registry(Registry.BIOME_REGISTRY)
|
||||
.orElse(null));
|
||||
}
|
||||
settings = WorldGenUtil.fixSettingsInCurrentWorld(registryOps, settings);
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
private static void worldCreationStarted(RegistryAccess access) {
|
||||
BiomeAPI.initRegistry(access
|
||||
.registry(Registry.BIOME_REGISTRY)
|
||||
.orElse(null));
|
||||
}
|
||||
|
||||
public static void worldCreationStarted(RegistryOps<Tag> regOps) {
|
||||
if (regOps instanceof RegistryOpsAccessor acc) {
|
||||
worldCreationStarted(acc.bcl_getRegistryAccess());
|
||||
}
|
||||
}
|
||||
|
||||
public static void worldCreationStarted(Optional<LevelStorageSource.LevelStorageAccess> levelStorageAccess,
|
||||
WorldGenSettingsComponent worldGenSettingsComponent) {
|
||||
worldCreationStarted(worldGenSettingsComponent.registryHolder());
|
||||
|
||||
if (levelStorageAccess.isPresent()) {
|
||||
newWorldSetup(levelStorageAccess.get(),
|
||||
worldGenSettingsComponent.settings().worldGenSettings());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A callback function that is used for each new ServerLevel instance
|
||||
*/
|
||||
|
@ -143,18 +192,18 @@ public class LifeCycleAPI {
|
|||
List<CustomSpawner> list,
|
||||
boolean bl2) {
|
||||
onLoadLevel.forEach(c -> c.onLoad(
|
||||
world,
|
||||
minecraftServer,
|
||||
executor,
|
||||
levelStorageAccess,
|
||||
serverLevelData,
|
||||
resourceKey,
|
||||
chunkProgressListener,
|
||||
bl,
|
||||
l,
|
||||
list,
|
||||
bl2)
|
||||
);
|
||||
world,
|
||||
minecraftServer,
|
||||
executor,
|
||||
levelStorageAccess,
|
||||
serverLevelData,
|
||||
resourceKey,
|
||||
chunkProgressListener,
|
||||
bl,
|
||||
l,
|
||||
list,
|
||||
bl2)
|
||||
);
|
||||
|
||||
final long seed = world.getSeed();
|
||||
final Registry<Biome> biomeRegistry = world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY);
|
||||
|
|
|
@ -169,8 +169,7 @@ public class BiomeAPI {
|
|||
*/
|
||||
public static void initRegistry(Registry<Biome> biomeRegistry) {
|
||||
if (biomeRegistry != BiomeAPI.biomeRegistry) {
|
||||
System.out.println("Switching Registry to " + biomeRegistry);//17015, 19009, 19058, 19009
|
||||
BiomeAPI.biomeRegistry = biomeRegistry;
|
||||
BiomeAPI.biomeRegistry = biomeRegistry; //12819
|
||||
CLIENT.clear();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,6 @@ import org.betterx.bclib.world.generator.BCLibNetherBiomeSource;
|
|||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class WorldGenUtil {
|
||||
|
@ -85,6 +84,8 @@ public class WorldGenUtil {
|
|||
*
|
||||
* @param settings
|
||||
* @return
|
||||
* @see BCLChunkGenerator#injectNoiseSettings(WorldGenSettings) for the correcponding behaviour
|
||||
* for new worlds
|
||||
*/
|
||||
public static WorldGenSettings fixSettingsInCurrentWorld(Optional<RegistryOps<Tag>> registryOps,
|
||||
WorldGenSettings settings) {
|
||||
|
@ -121,10 +122,10 @@ public class WorldGenUtil {
|
|||
boolean generateStructures,
|
||||
boolean generateBonusChest) {
|
||||
return createWorldFromPreset(BCLWorldPresets.DEFAULT.orElseThrow(),
|
||||
registryAccess,
|
||||
seed,
|
||||
generateStructures,
|
||||
generateBonusChest);
|
||||
registryAccess,
|
||||
seed,
|
||||
generateStructures,
|
||||
generateBonusChest);
|
||||
}
|
||||
|
||||
public static Pair<WorldGenSettings, RegistryAccess.Frozen> defaultWorldDataSupplier(RegistryAccess.Frozen frozen) {
|
||||
|
@ -146,7 +147,7 @@ public class WorldGenUtil {
|
|||
int biomeSourceVersion,
|
||||
RegistryAccess registryAccess,
|
||||
WorldGenSettings worldGenSettings
|
||||
) {
|
||||
) {
|
||||
Optional<Holder<LevelStem>> oLevelStem = referenceStemForVersion(
|
||||
dimensionKey,
|
||||
biomeSourceVersion,
|
||||
|
@ -154,12 +155,12 @@ public class WorldGenUtil {
|
|||
worldGenSettings.seed(),
|
||||
worldGenSettings.generateStructures(),
|
||||
worldGenSettings.generateStructures()
|
||||
);
|
||||
);
|
||||
return replaceGenerator(dimensionKey,
|
||||
dimensionTypeKey,
|
||||
registryAccess,
|
||||
worldGenSettings,
|
||||
oLevelStem.map(l -> l.value().generator()).orElseThrow());
|
||||
dimensionTypeKey,
|
||||
registryAccess,
|
||||
worldGenSettings,
|
||||
oLevelStem.map(l -> l.value().generator()).orElseThrow());
|
||||
}
|
||||
|
||||
public static WorldGenSettings replaceGenerator(
|
||||
|
@ -168,31 +169,31 @@ public class WorldGenUtil {
|
|||
RegistryAccess registryAccess,
|
||||
WorldGenSettings worldGenSettings,
|
||||
ChunkGenerator generator
|
||||
) {
|
||||
) {
|
||||
Registry<DimensionType> dimensionTypeRegistry = registryAccess.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY);
|
||||
Registry<LevelStem> newDimensions = withDimension(dimensionKey,
|
||||
dimensionTypeKey,
|
||||
dimensionTypeRegistry,
|
||||
worldGenSettings.dimensions(),
|
||||
generator);
|
||||
dimensionTypeKey,
|
||||
dimensionTypeRegistry,
|
||||
worldGenSettings.dimensions(),
|
||||
generator);
|
||||
return new WorldGenSettings(worldGenSettings.seed(),
|
||||
worldGenSettings.generateStructures(),
|
||||
worldGenSettings.generateBonusChest(),
|
||||
newDimensions);
|
||||
worldGenSettings.generateStructures(),
|
||||
worldGenSettings.generateBonusChest(),
|
||||
newDimensions);
|
||||
}
|
||||
|
||||
public static WorldGenSettings replaceStem(
|
||||
ResourceKey<LevelStem> dimensionKey,
|
||||
WorldGenSettings worldGenSettings,
|
||||
LevelStem levelStem
|
||||
) {
|
||||
) {
|
||||
Registry<LevelStem> newDimensions = withDimension(dimensionKey,
|
||||
worldGenSettings.dimensions(),
|
||||
levelStem);
|
||||
worldGenSettings.dimensions(),
|
||||
levelStem);
|
||||
return new WorldGenSettings(worldGenSettings.seed(),
|
||||
worldGenSettings.generateStructures(),
|
||||
worldGenSettings.generateBonusChest(),
|
||||
newDimensions);
|
||||
worldGenSettings.generateStructures(),
|
||||
worldGenSettings.generateBonusChest(),
|
||||
newDimensions);
|
||||
}
|
||||
|
||||
public static Registry<LevelStem> withDimension(ResourceKey<LevelStem> dimensionKey,
|
||||
|
@ -212,17 +213,17 @@ public class WorldGenUtil {
|
|||
Registry<LevelStem> inputDimensions,
|
||||
LevelStem levelStem) {
|
||||
MappedRegistry<LevelStem> writableRegistry = new MappedRegistry<>(Registry.LEVEL_STEM_REGISTRY,
|
||||
Lifecycle.experimental(),
|
||||
null);
|
||||
Lifecycle.experimental(),
|
||||
null);
|
||||
writableRegistry.register(dimensionKey,
|
||||
levelStem,
|
||||
Lifecycle.stable());
|
||||
levelStem,
|
||||
Lifecycle.stable());
|
||||
for (Map.Entry<ResourceKey<LevelStem>, LevelStem> entry : inputDimensions.entrySet()) {
|
||||
ResourceKey<LevelStem> resourceKey = entry.getKey();
|
||||
if (resourceKey == dimensionKey) continue;
|
||||
writableRegistry.register(resourceKey,
|
||||
entry.getValue(),
|
||||
inputDimensions.lifecycle(entry.getValue()));
|
||||
entry.getValue(),
|
||||
inputDimensions.lifecycle(entry.getValue()));
|
||||
}
|
||||
return writableRegistry;
|
||||
}
|
||||
|
@ -239,7 +240,7 @@ public class WorldGenUtil {
|
|||
long seed,
|
||||
boolean generateStructures,
|
||||
boolean generateBonusChest
|
||||
) {
|
||||
) {
|
||||
final WorldGenSettings referenceSettings;
|
||||
if (biomeSourceVersion == BCLBiomeSource.BIOME_SOURCE_VERSION_VANILLA) {
|
||||
referenceSettings = net.minecraft.world.level.levelgen.presets.WorldPresets.createNormalWorldFromPreset(
|
||||
|
@ -383,5 +384,5 @@ public class WorldGenUtil {
|
|||
this.biomes = biomes;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue