Upgrade older world presets
This commit is contained in:
parent
427d6dbdfd
commit
a064f2d6bb
6 changed files with 72 additions and 142 deletions
|
@ -26,6 +26,7 @@ import net.minecraft.world.level.levelgen.structure.StructureSet;
|
|||
import net.minecraft.world.level.levelgen.synth.NormalNoise;
|
||||
|
||||
public class WorldGenUtil {
|
||||
public static final String TAG_PRESET = "preset";
|
||||
public static final String TAG_GENERATOR = "generator";
|
||||
|
||||
public static WorldGenSettings createWorldFromPreset(
|
||||
|
@ -78,8 +79,15 @@ public class WorldGenUtil {
|
|||
return createDefaultWorldFromPreset(registryAccess, RandomSource.create().nextLong());
|
||||
}
|
||||
|
||||
public static CompoundTag getSettingsNbt() {
|
||||
return WorldConfig.getCompoundTag(WorldsTogether.MOD_ID, TAG_GENERATOR);
|
||||
public static CompoundTag getPresetsNbt() {
|
||||
return WorldConfig.getCompoundTag(WorldsTogether.MOD_ID, TAG_PRESET);
|
||||
}
|
||||
|
||||
public static CompoundTag getGeneratorNbt() {
|
||||
CompoundTag root = WorldConfig.getRootTag(WorldsTogether.MOD_ID);
|
||||
if (root.contains(TAG_GENERATOR))
|
||||
return WorldConfig.getCompoundTag(WorldsTogether.MOD_ID, TAG_GENERATOR);
|
||||
return null;
|
||||
}
|
||||
|
||||
public static class Context extends StemContext {
|
||||
|
@ -122,7 +130,7 @@ public class WorldGenUtil {
|
|||
RegistryAccess registryAccess,
|
||||
WorldGenSettings settings
|
||||
) {
|
||||
var dimensions = TogetherWorldPreset.getWorldDimensions();
|
||||
var dimensions = TogetherWorldPreset.loadWorldDimensions();
|
||||
for (var entry : settings.dimensions().entrySet()) {
|
||||
ResourceKey<LevelStem> key = entry.getKey();
|
||||
LevelStem loadedStem = entry.getValue();
|
||||
|
|
|
@ -125,7 +125,7 @@ public class WorldBootstrap {
|
|||
Helpers.initializeWorldConfig(levelStorageAccess, false);
|
||||
WorldEventsImpl.BEFORE_SERVER_WORLD_LOAD.emit(e -> e.prepareWorld(
|
||||
levelStorageAccess,
|
||||
TogetherWorldPreset.getWorldDimensions(),
|
||||
TogetherWorldPreset.loadWorldDimensions(),
|
||||
false
|
||||
));
|
||||
WorldEventsImpl.ON_WORLD_LOAD.emit(OnWorldLoad::onLoad);
|
||||
|
@ -235,7 +235,7 @@ public class WorldBootstrap {
|
|||
//Helpers.setupWorld();
|
||||
WorldEventsImpl.BEFORE_WORLD_LOAD.emit(e -> e.prepareWorld(
|
||||
levelStorageAccess,
|
||||
TogetherWorldPreset.getWorldDimensions(),
|
||||
TogetherWorldPreset.loadWorldDimensions(),
|
||||
false
|
||||
));
|
||||
levelStorageAccess.close();
|
||||
|
|
|
@ -29,8 +29,6 @@ import org.jetbrains.annotations.NotNull;
|
|||
public class TogetherWorldPreset extends WorldPreset {
|
||||
public final int sortOrder;
|
||||
|
||||
private static final String TAG_GENERATOR = WorldGenUtil.TAG_GENERATOR;
|
||||
|
||||
private static int NEXT_IN_SORT_ORDER = 1000;
|
||||
|
||||
public TogetherWorldPreset(
|
||||
|
@ -80,6 +78,11 @@ public class TogetherWorldPreset extends WorldPreset {
|
|||
writeWorldPresetSettings(wrapper);
|
||||
}
|
||||
|
||||
public static void writeWorldPresetSettingsDirect(Map<ResourceKey<LevelStem>, ChunkGenerator> settings) {
|
||||
DimensionsWrapper wrapper = new DimensionsWrapper(settings);
|
||||
writeWorldPresetSettings(wrapper);
|
||||
}
|
||||
|
||||
private static void writeWorldPresetSettings(DimensionsWrapper wrapper) {
|
||||
final RegistryOps<Tag> registryOps = RegistryOps.create(
|
||||
NbtOps.INSTANCE,
|
||||
|
@ -89,7 +92,7 @@ public class TogetherWorldPreset extends WorldPreset {
|
|||
|
||||
if (encodeResult.result().isPresent()) {
|
||||
final CompoundTag settingsNbt = WorldConfig.getRootTag(WorldsTogether.MOD_ID);
|
||||
settingsNbt.put(TAG_GENERATOR, encodeResult.result().get());
|
||||
settingsNbt.put(WorldGenUtil.TAG_PRESET, encodeResult.result().get());
|
||||
} else {
|
||||
WorldsTogether.LOGGER.error("Unable to encode world generator settings for level.dat.");
|
||||
}
|
||||
|
@ -99,7 +102,7 @@ public class TogetherWorldPreset extends WorldPreset {
|
|||
|
||||
private static DimensionsWrapper DEFAULT_DIMENSIONS_WRAPPER = null;
|
||||
|
||||
public static @NotNull Map<ResourceKey<LevelStem>, ChunkGenerator> getWorldDimensions() {
|
||||
public static @NotNull Map<ResourceKey<LevelStem>, ChunkGenerator> loadWorldDimensions() {
|
||||
final RegistryAccess registryAccess;
|
||||
if (WorldBootstrap.getLastRegistryAccess() != null) {
|
||||
registryAccess = WorldBootstrap.getLastRegistryAccess();
|
||||
|
@ -107,21 +110,19 @@ public class TogetherWorldPreset extends WorldPreset {
|
|||
registryAccess = BuiltinRegistries.ACCESS;
|
||||
}
|
||||
final RegistryOps<Tag> registryOps = RegistryOps.create(NbtOps.INSTANCE, registryAccess);
|
||||
if (DEFAULT_DIMENSIONS_WRAPPER == null) {
|
||||
DEFAULT_DIMENSIONS_WRAPPER = new DimensionsWrapper(TogetherWorldPreset.getDimensionsMap(WorldPresets.DEFAULT));
|
||||
}
|
||||
|
||||
CompoundTag presetNBT = WorldGenUtil.getPresetsNbt();
|
||||
if (!presetNBT.contains("dimensions")) {
|
||||
return DEFAULT_DIMENSIONS_WRAPPER.dimensions;
|
||||
}
|
||||
|
||||
Optional<DimensionsWrapper> oLevelStem = DimensionsWrapper.CODEC
|
||||
.parse(new Dynamic<>(registryOps, WorldGenUtil.getSettingsNbt()))
|
||||
.parse(new Dynamic<>(registryOps, presetNBT))
|
||||
.resultOrPartial(WorldsTogether.LOGGER::error);
|
||||
|
||||
if (DEFAULT_DIMENSIONS_WRAPPER == null) {
|
||||
DEFAULT_DIMENSIONS_WRAPPER = new DimensionsWrapper(WorldPresets
|
||||
.get(
|
||||
registryAccess,
|
||||
WorldPresets.DEFAULT
|
||||
)
|
||||
.value()
|
||||
.createWorldGenSettings(0, true, true)
|
||||
.dimensions());
|
||||
}
|
||||
|
||||
return oLevelStem.orElse(DEFAULT_DIMENSIONS_WRAPPER).dimensions;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue