--- a/net/minecraft/world/level/storage/Convertable.java +++ b/net/minecraft/world/level/storage/Convertable.java @@ -61,6 +61,10 @@ import net.minecraft.world.level.levelgen.presets.WorldPresets; import org.slf4j.Logger; +// CraftBukkit start +import net.minecraft.world.level.dimension.WorldDimension; +// CraftBukkit end + public class Convertable { static final Logger LOGGER = LogUtils.getLogger(); @@ -114,7 +118,7 @@ } private static DataPackConfiguration readDataPackConfig(Dynamic dynamic) { - DataResult dataresult = DataPackConfiguration.CODEC.parse(dynamic); + DataResult dataresult = DataPackConfiguration.CODEC.parse(dynamic); // CraftBukkit - decompile error Logger logger = Convertable.LOGGER; Objects.requireNonNull(logger); @@ -241,7 +245,11 @@ WorldSettings worldsettings = WorldSettings.parse(dynamic, datapackconfiguration); Lifecycle lifecycle1 = ((Lifecycle) pair.getSecond()).add(lifecycle); - return WorldDataServer.parse(dynamic, datafixer, i, nbttagcompound2, worldsettings, levelversion, (GeneratorSettings) pair.getFirst(), lifecycle1); + // CraftBukkit start - Add PDC to world + WorldDataServer worldDataServer = WorldDataServer.parse(dynamic, datafixer, i, nbttagcompound2, worldsettings, levelversion, (GeneratorSettings) pair.getFirst(), lifecycle1); + worldDataServer.pdc = nbttagcompound1.get("BukkitValues"); + return worldDataServer; + // CraftBukkit end } catch (Exception exception) { Convertable.LOGGER.error("Exception reading {}", path, exception); return null; @@ -314,9 +322,23 @@ return this.backupDir; } - public Convertable.ConversionSession createAccess(String s) throws IOException { - return new Convertable.ConversionSession(s); + // CraftBukkit start + public Convertable.ConversionSession createAccess(String s, ResourceKey dimensionType) throws IOException { + return new Convertable.ConversionSession(s, dimensionType); + } + + 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 { @@ -369,8 +391,12 @@ public final Convertable.b levelDirectory; private final String levelId; private final Map resources = Maps.newHashMap(); + // CraftBukkit start + public final ResourceKey dimensionType; - public ConversionSession(String s) throws IOException { + public ConversionSession(String s, ResourceKey dimensionType) throws IOException { + this.dimensionType = dimensionType; + // CraftBukkit end this.levelId = s; this.levelDirectory = new Convertable.b(Convertable.this.baseDir.resolve(s)); this.lock = SessionLock.create(this.levelDirectory.path()); @@ -381,7 +407,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); @@ -389,7 +415,7 @@ } public Path getDimensionPath(ResourceKey resourcekey) { - return DimensionManager.getStorageFolder(resourcekey, this.levelDirectory.path()); + return getStorageFolder(this.levelDirectory.path(), this.dimensionType); // CraftBukkit } private void checkLock() {