热重载与调试
Katton 的开发体验围绕“修改、重载、验证”设计。把脚本放进启用的脚本包,编辑 .kt 或 .java 文件,然后无需重启游戏或服务器即可重载。
重载方式
通常来说,我们使用 /katton reload 进行重载。
在 Fabric 和 NeoForge 上,它会重载服务端脚本;单人游戏中还会调度客户端脚本重载。在 Paper 上,它只重载服务端脚本包。
此外,还有以下几种触发重载的方式:
| 触发方式 | 效果 |
|---|---|
/katton reload | 重载 Katton 脚本并显示进度条。 |
/reload | 重载数据包;Katton 会接入服务端脚本重载。 |
F3 + T | 只重载 Minecraft 客户端资源;不会调用 Katton 脚本。 |
| 脚本包界面的 Reload 按钮 | 在 Fabric/NeoForge 客户端从界面触发重载。 |
重载时会清理什么
| 状态 | 重载行为 |
|---|---|
| 事件监听器 | 清理后由脚本重新注册。 |
| 托管原生监听器 | 按脚本包作用域清理。 |
| 注入钩子 | 在 Fabric/NeoForge 上重置。 |
| 可重载注册表 | 清理所有权;对象软保留以避免 holder 崩溃。 |
| 数据包修改 | 清理后在 datapack apply 阶段重新应用。 |
| 客户端渲染回调 | 客户端重载时清理。 |
生命周期与重放
执行重载并不表示所有入口都会再次运行。全局包永不重放;世界包遵循注解的 replay;多人 SERVER_CACHE 包在服务器修订激活后始终全部重放。上下文中的 reason 为 HOT_RELOAD,cause 则指出是命令、数据包重载还是服务器脚本包同步触发了本次调用。
完整阶段矩阵和上下文类型见脚本加载生命周期。
