--- a/net/minecraft/world/level/storage/Convertable.java +++ b/net/minecraft/world/level/storage/Convertable.java @@ -81,6 +81,10 @@ import net.minecraft.world.level.validation.PathAllowList; import org.slf4j.Logger; +// CraftBukkit start +import net.minecraft.world.level.dimension.WorldDimension; +// CraftBukkit end + public class Convertable { static final Logger LOGGER = LogUtils.getLogger(); @@ -151,7 +155,7 @@ } public static WorldDataConfiguration readDataConfig(Dynamic dynamic) { - DataResult dataresult = WorldDataConfiguration.CODEC.parse(dynamic); + DataResult dataresult = WorldDataConfiguration.CODEC.parse(dynamic); // CraftBukkit - decompile error Logger logger = Convertable.LOGGER; Objects.requireNonNull(logger); @@ -174,6 +178,7 @@ WorldDimensions.b worlddimensions_b = generatorsettings.dimensions().bake(iregistry); Lifecycle lifecycle = worlddimensions_b.lifecycle().add(iregistrycustom_dimension.allRegistriesLifecycle()); WorldDataServer worlddataserver = WorldDataServer.parse(dynamic1, worldsettings, worlddimensions_b.specialWorldProperty(), generatorsettings.options(), lifecycle); + worlddataserver.pdc = ((Dynamic) dynamic1).getElement("BukkitValues", null); // CraftBukkit - Add PDC to world return new LevelDataAndDimensions(worlddataserver, worlddimensions_b); } @@ -193,7 +198,7 @@ throw new LevelStorageException(IChatBaseComponent.translatable("selectWorld.load_folder_access")); } else { try { - Stream stream = Files.list(this.baseDir); + Stream stream = Files.list(this.baseDir); // CraftBukkit - decompile error Convertable.a convertable_a; @@ -423,27 +428,41 @@ return this.backupDir; } - public Convertable.ConversionSession validateAndCreateAccess(String s) throws IOException, ContentValidationException { + public Convertable.ConversionSession validateAndCreateAccess(String s, ResourceKey dimensionType) throws IOException, ContentValidationException { // CraftBukkit Path path = this.getLevelPath(s); List list = this.worldDirValidator.validateDirectory(path, true); if (!list.isEmpty()) { throw new ContentValidationException(path, list); } else { - return new Convertable.ConversionSession(s, path); + return new Convertable.ConversionSession(s, path, dimensionType); // CraftBukkit } } - public Convertable.ConversionSession createAccess(String s) throws IOException { + public Convertable.ConversionSession createAccess(String s, ResourceKey dimensionType) throws IOException { // CraftBukkit Path path = this.getLevelPath(s); - return new Convertable.ConversionSession(s, path); + return new Convertable.ConversionSession(s, path, dimensionType); // CraftBukkit } public DirectoryValidator getWorldDirValidator() { return this.worldDirValidator; } + // CraftBukkit start + public static Path getStorageFolder(Path path, ResourceKey dimensionType) { + if (dimensionType == WorldDimension.OVERWORLD) { + return path; + } else if (dimensionType == WorldDimension.NETHER) { + return path.resolve("DIM-1"); + } else if (dimensionType == WorldDimension.END) { + return path.resolve("DIM1"); + } else { + return path.resolve("dimensions").resolve(dimensionType.location().getNamespace()).resolve(dimensionType.location().getPath()); + } + } + // CraftBukkit end + public static record a(List levels) implements Iterable { public boolean isEmpty() { @@ -502,8 +521,12 @@ public final Convertable.b levelDirectory; private final String levelId; private final Map resources = Maps.newHashMap(); + // CraftBukkit start + public final ResourceKey dimensionType; - ConversionSession(String s, Path path) throws IOException { + ConversionSession(String s, Path path, ResourceKey dimensionType) throws IOException { + this.dimensionType = dimensionType; + // CraftBukkit end this.levelId = s; this.levelDirectory = new Convertable.b(path); this.lock = SessionLock.create(path); @@ -531,7 +554,7 @@ } public Path getLevelPath(SavedFile savedfile) { - Map map = this.resources; + Map map = this.resources; // CraftBukkit - decompile error Convertable.b convertable_b = this.levelDirectory; Objects.requireNonNull(this.levelDirectory); @@ -539,7 +562,7 @@ } public Path getDimensionPath(ResourceKey resourcekey) { - return DimensionManager.getStorageFolder(resourcekey, this.levelDirectory.path()); + return getStorageFolder(this.levelDirectory.path(), this.dimensionType); // CraftBukkit } private void checkLock() {