使用 mdevtools 加速你的 Hytale Modding 工作流
Source: Dev.to
请提供您希望翻译的正文内容,我将为您翻译成简体中文。
介绍
厌倦了每次修改代码后都要重新启动服务器吗?
在本指南中,我们将设置 mdevtools,为你的 Hytale 模组开发环境启用热重载。通过在 Gradle 构建和运行中的服务器之间建立紧密循环,你可以更快迭代,保持开发流畅。
我正在实际使用这套工作流来构建 Vex’s Dungeon Challenge 的程序化生成系统。当你在调试复杂的地下城逻辑或迭代游戏机制时,省去那 30 秒的重启循环,每周可以节省数小时的开发时间。
获取 mdevtools
-
从 CurseForge 获取最新的
mdevtoolsJAR:
下载 mdevtools -
将 JAR 放置在项目的适当位置:
| 项目类型 | 目标路径 |
|---|---|
| 标准模板 (mbround18) | data/server/Server/builtin |
| 自定义设置 | 在服务器根目录创建 builtin 文件夹并将 JAR 放入其中 |
清单配置
确保你的 hytale-mod.json(或等效的清单)包含依赖字段:
{
"Dependencies": {},
"OptionalDependencies": {}
}
注: 对于单模组开发,保持这些对象为空即可;只需确保它们存在。
Gradle 任务 – 安装 Mod JAR
在 build.gradle 文件中添加以下任务。它会构建你的 mod JAR 并将其复制到服务器的 mods 文件夹。
// In build.gradle
tasks.register("installModJar", Copy) {
// 1. Build the jar first
dependsOn ":plugins:yourmod:jar"
// 2. Grab the output file
from { project(":plugins:yourmod").tasks.named("jar").flatMap { it.archiveFile } }
// 3. Drop it into the server mods folder
into file("data/server/Server/mods")
}
开发循环脚本
在项目根目录创建一个轻量级的 Bash 脚本 (dev-reload.sh),并赋予可执行权限 (chmod +x dev-reload.sh)。
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
# Configuration
WATCH_DIR="plugin/src"
BUILD_TASK="installModJar" # Must match the Gradle task above
JAR_NAME="plugin-name-0.1.0.jar"
JAR_SOURCE="./plugin/build/libs"
JAR_DEST="data/server/Server/mods"
DEBOUNCE_SECONDS=5
last_build_time=0
build_and_copy() {
# Run the Gradle task we created
./gradlew "$BUILD_TASK"
}
hard_reload() {
build_and_copy
# NOTE: UI assets do NOT hot reload.
# If you have new UI files, uncomment lines below to rebuild assets zip.
# ./gradlew assetsZip \
# && cp "dist/$(ls dist | grep -m1 -E 'assets.*\.zip')" "$JAR_DEST/"
echo "Restarting Docker container..."
docker compose restart
echo "Hard reload complete."
}
echo "=========================================================="
echo " Hytale Dev Loop: Ready."
echo " [r] Reload Code (Hot)"
echo " [h] Hard Reload (Restart Container + UI)"
echo " [e] Exit"
echo "=========================================================="
while true; do
printf "> "
IFS= read -r -n1 key
echo
case "$key" in
r|R)
now=$(date +%s)
if (( now - last_build_time < DEBOUNCE_SECONDS )); then
echo "Debounced. Wait a moment before reloading again."
continue
fi
last_build_time=$now
echo "Rebuilding and hot‑swapping..."
build_and_copy
;;
h|H)
echo "Hard reload requested..."
hard_reload
;;
e|E)
echo "Exiting."
break
;;
*)
# Ignore other keys
;;
esac
done
运行此脚本后,你会看到一个终端仪表盘:
- r – 重新构建并热替换代码(不重启服务器)。
- h – 硬重载(重启 Docker 容器并重新加载 UI)。
- e – 退出循环。
UI 开发
虽然 mdevtools 能处理 Java 代码的热重载,但 Hytale UI 文件(.ui)仍需进行硬重载才能看到更改。为了及早捕获 UI 错误,请使用 Hytale UI Ultimate VS Code 扩展。它提供:
- 对
.ui文件的语法高亮。 - 对无效的组名和缺失属性进行诊断。
- 导入导航(Ctrl+Click)以在 UI 文件之间跳转。
将此扩展与脚本中的硬重载(h)命令配合使用,可实现稳健的工作流。
结论
使用 installModJar Gradle 任务、dev-reload.sh 脚本以及 VS Code UI 扩展,你现在拥有一个快速、自动化的开发循环。再也不需要手动移动文件或等待长时间的启动——只需按 r 即可即时注入新代码,或在需要 UI 更改时按 h 进行完整重载。
祝你模组开发愉快!