加载世界(loadWorld)

基本信息

属性 值
type 值 loadWorld(大小写不敏感)
实现类 lumien.custommainmenu.lib.actions.ActionLoadWorld
参数 dirName(存档目录名)、saveName(存档显示名)
分发点 GuiConfig.getWantedAction(GuiConfig.java:394-398)

核心差异

直接进存档,跳过原版选关界面。与 openGui 的 singleplayer 的区别是:后者列出全部存档供选择,本动作绑定固定目录。

执行流程

ActionLoadWorld.perform(ActionLoadWorld.java:20-52):

dir = <FML savesDir>/<dirName>
1. 读 dir/level.dat(CompressedStreamTools.readCompressed)
2. 读失败 → 退回 dir/level.dat_old
3. 两者都失败 → FMLLog.warning("...both level files are unreadable.") 并 return(静默)
4. level.dat 的 FML 标签含 "ModItemData"?
     是 → showGuiScreen(new GuiOldSaveLoadConfirm(dirName, saveName, menu))
           (FML 的"旧存档需确认"界面)
     否 → Minecraft.launchIntegratedServer(dirName, saveName, null)
           捕获 StartupQuery.AbortedException 后**空 catch 静默吞掉**

⚠️ 第 3 步失败时只打一条 WARNING,界面上无任何提示,按钮表现为点了没反应。 ⚠️ launchIntegratedServer 被 StartupQuery.AbortedException 中断时也是空 catch(:49-50),失败原因不可见。

与 saveName 的关系

saveName 只在走 GuiOldSaveLoadConfirm 分支时被用到(作为确认界面的存档名)。正常分支 launchIntegratedServer(dirName, saveName, null) 把它当第二参数传入,第三参数(WorldSettings)传 null。

路径安全

dirName 被直接拼到 saves 目录上,没有做 .. 穿越校验(对比 openFolder 做了祖先目录检查)。配置写在玩家自己机器上,风险有限,但填 ../ 可指向 saves 目录之外。

使用场景

整合包主菜单上"继续上次存档"这类固定入口。

相关条目