首页 / JS 脚本手册 / 排错与性能

排错与性能

脚本不动、报错、掉帧、内存涨——按现象查。

先做这三步

  1. O 打开设置,开 enableRenderDiagnostics
  2. 复现一次问题
  3. logs/latest.log,搜 [Script]Error in RTE Resource Pack JavaScript
RTE 没有 /rte debug 命令, 调试开关都在配置界面里。现存的命令只有 /rte repairrails/rte fixoneway,都需要 OP 权限。

脚本完全没反应

检查做法
资源包启用了吗在资源包界面确认已启用并排在正确位置
重载了吗改完脚本按 F7,不必重启游戏
车辆 ID 对得上吗custom_trains 的键必须与实际车型 ID 一致
声明字段对吗3.x 风格用 script_files,4 风格用 vehicleScriptsscriptId
被别的包抢了吗同一车辆 ID 只绑定一次,先加载的生效
JCM 装了吗JCM 也有 JS 系统,可能接管了。看配置 jcmJsChoice

日志里搜 [ScriptedCustomTrains] 能看到实际绑定了哪些车辆。

脚本跑一会儿就停了

这是失败退避在起作用。同一个函数连续抛异常会被暂停一段时间, 防止坏脚本每帧每车抛异常拖垮整局。

Error in RTE Resource Pack JavaScript 看栈,修好后按 F7 恢复。

报「类不可访问」

用了白名单外的 Java 类。 常见的是 java.iojava.net。 读资源请改用 Resources.readString() 等方法。

掉帧

原因症状解法
每帧重建模型车一多就卡结果缓存进 state,数据变了才重建
每帧重画贴图有 LCD 的车特别卡比对内容,没变就直接返回
没做距离剔除远处车也吃性能开头判 train.shouldRender()
日志刷屏卡顿且日志暴涨print 加限流
模型没烘焙绘制调用过多烘焙成 ModelCluster

enableRenderDiagnostics 后,日志每 10 秒汇总一次各阶段耗时与慢帧, 能定位是脚本还是渲染的问题。

内存持续上涨

原因解法
GraphicsTexture 没关disposeclose();用 liveCount() 盯数量
state 里无限追加数组、Map 要设上限或定期清理
每帧新建大对象复用 BufferedImage,别每帧 new
贴图过大客户端配置 maxTextureSize 可限制上限
state 是每辆车一份的。 往里塞的东西乘以在线车辆数,才是真实内存占用。

报站重复播放

触发条件写成了 isDoorOpen() —— 它在整个开门期间都为真,所以每帧都播。 改用 justOpening(),它只在开门那一帧为真。

速度数值差很多

MTR 4 内部用毫秒,3.x 用 tick 或秒,差 50 倍。 显示速度一律用 train.speedKmh(),不要绕过封装自己算。 详见 MTR 3.x 兼容与迁移

模型转了但角度不对

RawMesh 的旋转方法接受角度不是弧度。 传 Math.PI 只会转 3.14 度,看起来像「几乎没转但有点歪」。

还是不行

带上这些信息开 Issue

  1. RTE 版本与加载器(Fabric / Forge)
  2. MTR 版本
  3. 用的引擎(rhino 还是 graal
  4. logs/latest.log
  5. 能复现的最小脚本