--- a/net/minecraft/server/Convertable.java
+++ b/net/minecraft/server/Convertable.java
@@ -73,21 +73,21 @@
             Logger logger1 = Convertable.LOGGER;
 
             logger1.getClass();
-            IRegistry<DimensionManager> iregistry = (IRegistry) dataresult1.resultOrPartial(SystemUtils.a("Dimension type registry: ", logger1::error)).orElseThrow(() -> {
+            IRegistry<DimensionManager> iregistry = (IRegistry) ((DataResult<IRegistry<DimensionManager>>) dataresult1).resultOrPartial(SystemUtils.a("Dimension type registry: ", logger1::error)).orElseThrow(() -> { // CraftBukkit - decompile error
                 return new IllegalStateException("Failed to get dimension registry");
             });
 
             dataresult1 = RegistryLookupCodec.a(IRegistry.ay).codec().parse(dynamic2);
             logger1 = Convertable.LOGGER;
             logger1.getClass();
-            IRegistry<BiomeBase> iregistry1 = (IRegistry) dataresult1.resultOrPartial(SystemUtils.a("Biome registry: ", logger1::error)).orElseThrow(() -> {
+            IRegistry<BiomeBase> iregistry1 = (IRegistry) ((DataResult<IRegistry<BiomeBase>>) dataresult1).resultOrPartial(SystemUtils.a("Biome registry: ", logger1::error)).orElseThrow(() -> { // CraftBukkit - decompile error
                 return new IllegalStateException("Failed to get biome registry");
             });
 
             dataresult1 = RegistryLookupCodec.a(IRegistry.ar).codec().parse(dynamic2);
             logger1 = Convertable.LOGGER;
             logger1.getClass();
-            IRegistry<GeneratorSettingBase> iregistry2 = (IRegistry) dataresult1.resultOrPartial(SystemUtils.a("Noise settings registry: ", logger1::error)).orElseThrow(() -> {
+            IRegistry<GeneratorSettingBase> iregistry2 = (IRegistry) ((DataResult<IRegistry<GeneratorSettingBase>>) dataresult1).resultOrPartial(SystemUtils.a("Noise settings registry: ", logger1::error)).orElseThrow(() -> { // CraftBukkit - decompile error
                 return new IllegalStateException("Failed to get noise settings registry");
             });
 
@@ -195,8 +195,10 @@
         };
     }
 
-    public Convertable.ConversionSession c(String s) throws IOException {
-        return new Convertable.ConversionSession(s);
+    // CraftBukkit start
+    public Convertable.ConversionSession c(String s, ResourceKey<WorldDimension> dimensionType) throws IOException {
+        return new Convertable.ConversionSession(s, dimensionType);
+        // CraftBukkit end
     }
 
     public class ConversionSession implements AutoCloseable {
@@ -205,8 +207,12 @@
         public final java.nio.file.Path folder;
         private final String levelName;
         private final Map<SavedFile, java.nio.file.Path> e = Maps.newHashMap();
+        // CraftBukkit start
+        private final ResourceKey<WorldDimension> dimensionType;
 
-        public ConversionSession(String s) throws IOException {
+        public ConversionSession(String s, ResourceKey<WorldDimension> dimensionType) throws IOException {
+            this.dimensionType = dimensionType;
+            // CraftBukkit end
             this.levelName = s;
             this.folder = Convertable.this.universe.resolve(s);
             this.lock = SessionLock.a(this.folder);
@@ -223,9 +229,23 @@
         }
 
         public File a(ResourceKey<World> resourcekey) {
-            return DimensionManager.a(resourcekey, this.folder.toFile());
+            // CraftBukkit start
+            return this.getFolder(this.folder.toFile());
         }
 
+        private File getFolder(File file) {
+            if (dimensionType == WorldDimension.OVERWORLD) {
+                return file;
+            } else if (dimensionType == WorldDimension.THE_NETHER) {
+                return new File(file, "DIM-1");
+            } else if (dimensionType == WorldDimension.THE_END) {
+                return new File(file, "DIM1");
+            } else {
+                throw new IllegalArgumentException("Unknwon dimension " + this.dimensionType);
+            }
+        }
+        // CraftBukkit end
+
         private void checkSession() {
             if (!this.lock.a()) {
                 throw new IllegalStateException("Lock is no longer valid");