配置目录文件

基本信息

属性 值
目录 <游戏目录>/config/spark/
目录来源 Forge1710SparkMod.getConfigDirectory() = e.getModConfigurationDirectory().toPath()(Forge1710SparkMod.java:53)
平台共享 是 —— 服务端与客户端各自的 SparkPlatform 都绑定同一路径

spark 的所有持久化产物都落在 Forge 的 config/spark/ 目录下,不写入世界存档。目录在需要时自动创建(SparkPlatform.resolveSaveFile 中的 Files.createDirectories(pluginFolder))。

目录内容

条目 类型 何时写入 来源
config.json 用户配置 平台构造时读;部分键运行期写 SparkPlatform 构造
activity.json 活动日志 每次 profiler / heapdump / heapsummary 完成后 SparkPlatform 构造 + ActivityLog.addToLog
tmp/ 临时目录 async-profiler 原生库解压时 TemporaryFiles
profile-<ts>.sparkprofile 采样报告 /spark profiler --save-to-file 或上传失败回退 resolveSaveFile("profile", "sparkprofile")
heap-<ts>.hprof / .phd 堆快照 /spark heapdump resolveSaveFile("heap", ...)
heap-<ts>.hprof.gz 压缩堆快照 heapdump 带 --compress gzip Compression.GZIP
heapsummary-<ts>.sparkheap 堆摘要 /spark heapsummary --save-to-file 或上传失败回退 resolveSaveFile("heapsummary", "sparkheap")

<ts> 统一为 yyyy-MM-dd_HH.mm.ss(SparkPlatform.DATE_TIME_FORMATTER,SparkPlatform.java:95),例如 profile-2026-10-02_14.31.07.sparkprofile。

压缩产物不删除原文件:Compression.GZIP 生成 <name>.gz 后,原 .hprof 仍留在目录中,两份都占空间。

tmp 目录

tmp/ 由 TemporaryFiles 管理,绑定路径为 plugin.getPluginDirectory().resolve("tmp")(SparkPlatform 构造)。

文件名格式为 前缀 + Long.toHexString(System.nanoTime()) + 后缀(TemporaryFiles.create),即实际为 spark-<nanoTime 十六进制>-libasyncProfiler.so.tmp。

三个安全设计:

  1. 权限收紧:POSIX 系统下创建时带 OWNER_READ, OWNER_WRITE 权限
  2. 双重清理:每个文件 toFile().deleteOnExit() 且登记进内部 files 集合
  3. 显式删除:SparkPlatform.disable() 调用 temporaryFiles.deleteTemporaryFiles()

若 tmp 目录无法就绪,create 回退到 Files.createTempFile(prefix, suffix) 使用系统临时目录(TemporaryFiles.create 的 if/else 分支)。

生命周期

时机 行为
平台构造 读 config.json;activityLog.load() 载入历史记录
平台 enable() 解压 async-profiler 到 tmp/(若启用)
命令执行 写 config.json(部分键)、activity.json、报告文件
平台 disable() deleteTemporaryFiles() 清空 tmp/

平台 disable() 由 Forge1710ServerSparkPlugin.disable() 触发,链路上会 FMLCommonHandler.instance().bus().unregister(this) 注销事件总线(Forge1710ServerSparkPlugin.java:60-63),再由 Forge1710SparkMod.serverStop 置空 activeServerPlugin(Forge1710SparkMod.java:69-73)。

客户端平台没有对应的停止钩子 —— Forge1710SparkMod 只有 serverStop 处理,客户端 SparkPlatform.disable() 无调用点,客户端关闭时 tmp/ 依赖 deleteOnExit 兜底。

数值

数值名 值 来源
目录层级 <游戏目录>/config/spark/ getModConfigurationDirectory() + spark
时间戳格式 yyyy-MM-dd_HH.mm.ss SparkPlatform.DATE_TIME_FORMATTER
活动日志保留期 60 天 Activity.shouldExpire
临时文件权限 owner read + write(POSIX) TemporaryFiles.OWNER_ONLY_FILE_PERMISSIONS
压缩类型 仅 GZIP(XZ 在源码中被注释) Compression 枚举

相关条目