首页 / JS 脚本手册 / 沙箱与可用类

沙箱与可用类

脚本能碰哪些 Java 类,以及为什么要有这条线。

为什么有白名单

资源包是从网上下载的,脚本会在玩家机器上执行。 不加限制的话,一个资源包就能读写任意文件、发起网络请求。 所以 RTE 只放行绘图、文本、数学、时间这些必要的包。

允许的包

以下前缀开头的类可直接使用:

典型用途
java.awtBufferedImageGraphics2DColorFont —— 画 LCD 的主力
java.utilArrayListHashMapArrays 等集合
java.text数字与日期格式化
java.time时间日期计算
java.mathBigIntegerBigDecimalRoundingMode
mtrMTR 自身的类
cn.jstxjf_.rte.scripting.compatRTE 的兼容对象

允许的单个类

除上述包外,这些 java.lang 下的类被单独放行:

分类
基本类型包装BooleanByteShortIntegerLongFloatDoubleCharacter
文本StringCharSequenceStringBuilder
数学MathStrictMathNumber
基础ObjectIterableComparableEnum
异常ExceptionRuntimeExceptionIllegalArgumentExceptionIllegalStateException
java.math 在白名单里,是因为有资源包的报站脚本用 BigInteger 做编号运算。如果你的脚本报「类不可访问」, 先确认用的类在上面两张表里。

不在白名单里的

典型的被挡下的:

加载期与运行期

脚本加载阶段(顶层代码执行时)不做限制, 运行期create / render / dispose 内)才启用白名单。 这是为了让脚本能在加载时完成必要的初始化。

不要利用这个差异在加载期缓存受限类的引用 —— 这属于绕过限制,将来可能被收紧。

动态加载额外类

RTE 支持资源包声明要额外注入的类,注入后以简单类名作为全局名。 这条路径同样受白名单约束。