MDevTools - 热重载 / 开发工具

MDevTools - 热重载 / 开发工具

Hytale服务器和模组制作者的开发工具

生活质量

MDevTools - Hytale 服务器与模组开发者的开发工具

MDevTools 是一套面向 Hytale 服务器与模组开发者的开发工具包,它通过自动清理日志、调整全局日志级别以及启用开发过程中的模组热重载(无需完全重启服务器)来精简迭代流程。

概述

MDevTools 通过监控关键的插件目录,并在检测到变更时重载或加载模组来改进 Hytale 模组作者的开发工作流。这消除了每次 JAR 或 ZIP 文件更新时都需要重启服务器的需求,显著提升了迭代速度。

它还能管理日志清理以防止工作区杂乱,并能设置全局日志级别,以便在每个会话中调整调试或详细输出。

主要特性

  • 启动时清理日志以防止杂乱 🧹
  • 为所有服务器日志记录器配置全局日志级别 🎛️
  • 开发过程中自动热重载已修改的模组 ♻️
  • 自动加载放入监控目录的新模组 📦
  • 排除模式以避免重载关键或大型模组 🚫
  • 针对容器环境使用带轮询备用的混合文件监控方式 🐳
  • 针对慢速上传或传输的智能文件稳定性检测 ⏱️

热重载行为

modsbuiltinearlyplugins 目录(或任何额外监控路径)中的 JAR 或 ZIP 文件发生更改时,MDevTools 将安排重载,并首先确保文件已完全写入。这可以防止在 SCP 上传、Docker 绑定或 IDE 部署期间发生文件损坏或半写入文件加载。

热重载支持加载新模组和重载现有模组,具体取决于具有相同 ID 的插件是否已处于活动状态。

支持的使用场景

热重载适用于:

  • 开发期间的快速迭代 🚀
  • 无需重启服务器即可测试模组交互 🧩
  • 自动部署更新插件工件的 CI 流水线 🏗️
  • 运行在 Docker 或 VM 容器中的远程开发环境 🌐

混合文件监控

MDevTools 将 Java 的 WatchService(用于事件驱动通知)与轮询备用方案结合起来,以应对 inotify 或文件系统事件无法正确传播的容器和网络环境。

这确保了在以下环境中文件变更检测仍然可靠:

  • Docker 及容器设置 🐳
  • 虚拟机 🖥️
  • 网络文件系统(NFS / CIFS) 🌐
  • 开发卷挂载 🔁

文件稳定性检测

为确保在重载模组之前文件已完全写入,MDevTools 应用了:

  • 首次检测后的可配置延迟
  • 文件大小稳定窗口
  • 当发生新的写入事件时自动重置计时器

这可以防止在部分上传、IDE 构建或慢速网络传输期间进行重载。

安装

  1. 将 MDevTools JAR 文件放入服务器的 mods 目录
  2. 按需配置 config.json5
  3. 重启服务器

MDevTools 将开始监控,并在启动时应用日志清理和日志级别调整。

配置

MDevTools 的配置文件位于:

  • config/com.machina/mdevtools(首选,可写时使用)
  • 备用路径:mods/com.machina/mdevtools(当主要路径不可写时使用)

所有配置均采用 JSON5 格式,以便于编辑(允许注释和尾部逗号)。

日志设置

日志设置控制清理和全局详细程度:

  • logs.cleanupOnStartup.enabled:启动时删除旧的日志和锁定文件(保持工作区清洁)
  • logs.global.level:为所有服务器日志记录器设置全局日志级别(例如 INFODEBUGWARNING
  • logs.global.skip:在应用全局级别时跳过特定的嘈杂日志记录器(例如数据包/世界垃圾信息)

模组重载设置

重载设置控制模组文件的热重载行为:

  • mods.reload.enabled:热重载的主开关
  • mods.reload.delayMs:检查稳定性之前的延迟(有助于处理慢速写入)
  • mods.reload.fileStabilityCheckMs:文件在重载前必须保持大小稳定的持续时间
  • mods.reload.additionalDirectories:可选的要监控的额外目录
  • mods.reload.exclude:用于排除模组的通配符模式(匹配模组 ID 和文件名)
  • mods.reload.unloadWhenDeleted:如果模组文件被删除,则卸载该模组

配置示例:

{
  "logs": {
    "cleanupOnStartup": { "enabled": true },
    "global": {
      "level": "INFO",
      "skip": ["PacketLogging", "WorldChunk"]
    }
  },
  "mods": {
    "reload": {
      "enabled": true,
      "delayMs": 1000,
      "fileStabilityCheckMs": 500,
      "additionalDirectories": [],
      "exclude": ["com.example:core", "*:system", "test*.jar"],
      "unloadWhenDeleted": false
    }
  }
}

支持开发

您可以在此处 💖 支持开发工作,助力未来的更新和功能:

https://machinastudios.net/support-us

社区

💬 加入我们的 Discord 社区!

获取帮助、分享创意,并与其他开发者建立联系 🧑‍💻:

  • 🆘 支持与故障排除
  • 💡 建议与反馈
  • 🤝 社区与协作

👉 加入我们的 Discord 服务器https://discord.gg/QAFrzj48EN