From ea4375b215f02a43c412696903fb394705025c51 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 8 Jun 2026 07:15:44 -0500 Subject: [PATCH] Check if save folder exists for better error messages --- .../core/level/AbstractDhServerLevel.java | 7 +++++-- .../seibel/distanthorizons/core/level/DhClientLevel.java | 9 ++++++--- .../distanthorizons/core/world/DhClientServerWorld.java | 3 ++- .../seibel/distanthorizons/core/world/DhClientWorld.java | 3 ++- .../seibel/distanthorizons/core/world/DhServerWorld.java | 3 ++- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java index 31854f0dc..12929e7dc 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java @@ -28,6 +28,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapp import com.seibel.distanthorizons.core.logging.DhLogger; import org.jetbrains.annotations.NotNull; +import java.io.File; import java.io.IOException; import java.sql.SQLException; import java.util.List; @@ -70,9 +71,11 @@ public abstract class AbstractDhServerLevel extends AbstractDhLevel implements I boolean runRepoReliantSetup ) throws SQLException, IOException { - if (saveStructure.getSaveFolder(serverLevelWrapper).mkdirs()) + File saveFolder = saveStructure.getSaveFolder(serverLevelWrapper); + saveFolder.mkdirs(); + if (!saveFolder.exists()) { - LOGGER.warn("unable to create data folder."); + throw new IOException("unable to create save folder at ["+saveFolder.getPath()+"]. If you're on Windows you may need to enable long file paths."); } this.serverLevelWrapper = serverLevelWrapper; this.serverside = new ServerLevelModule(this, saveStructure); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java index f375c27f3..8c4636a85 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java @@ -115,16 +115,19 @@ public class DhClientLevel extends AbstractDhLevel implements IDhClientLevel File saveFolder = saveStructure.getSaveFolder(clientLevelWrapper); File pre23Folder = saveStructure.getPre23SaveFolder(clientLevelWrapper); + saveFolder.mkdirs(); + if (pre23Folder.exists()) { if (!pre23Folder.renameTo(saveFolder)) { - throw new RuntimeException("Could not move old save data folder: " + pre23Folder.getAbsolutePath() + " to " + saveFolder.getAbsolutePath()); + throw new RuntimeException("Could not move old save data folder: [" + pre23Folder.getAbsolutePath() + "] to [" + saveFolder.getAbsolutePath() + "]."); } } - else if (saveStructure.getSaveFolder(clientLevelWrapper).mkdirs()) + + if (!saveFolder.exists()) { - LOGGER.warn("unable to create data folder."); + throw new IOException("unable to create save folder at ["+saveFolder.getPath()+"]. If you're on Windows you may need to enable long file paths."); } this.levelWrapper = clientLevelWrapper; diff --git a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java index 6b9c02a31..64c572b2c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientServerWorld.java @@ -104,7 +104,8 @@ public class DhClientServerWorld extends AbstractDhServerWorld ClientApi.INSTANCE.showChatMessageNextFrame( r + "Distant Horizons: Server level loading failed." + cf + "\n" + - "Unable to load level ["+y+serverLevelWrapper.getDhIdentifier()+cf+"], LODs may not appear. See log for more information."); + "Unable to load level ["+y+serverLevelWrapper.getDhIdentifier()+cf+"], LODs may not appear. See log for more information.\n" + + ""); return null; }