Skip to content
On this page

热重载与调试

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 包在服务器修订激活后始终全部重放。上下文中的 reasonHOT_RELOADcause 则指出是命令、数据包重载还是服务器脚本包同步触发了本次调用。

完整阶段矩阵和上下文类型见脚本加载生命周期