引擎环境
Minecraft: 基岩版使用其定制版的JavaScript,基于QuickJS实现。该系统采用ECMAScript模块(ESM)机制来组织和加载代码,为游戏脚本编写提供了更模块化和结构化的开发方式。
常见问题
- SetTimeout支持
初学者在使用Minecraft脚本时最常遇到的是时序控制问题。众所周知,标准JavaScript中控制代码时序的方法是使用setTimeout和setInterval函数及其对应的取消函数。
这些标准方法基于帧系统实现,可以精确到毫秒级的延迟控制。但Minecraft使用游戏刻(tick)作为世界状态更新的基本单位,因此这些方法在脚本API中不可用且永远不会被支持。作为替代方案,Minecraft提供了system.runTimeout和system.runInterval这两个系统方法(首次加入于1.19.70版本),它们以游戏刻为最小时间单位。更多细节可查阅微软官方文档或Wiki教程。
- Eval权限
并非所有开发者都会遇到此问题,因为使用eval和Function方法来执行字符串格式的代码本身就不是推荐做法。
部分浏览器也会禁用这些方法(主要是eval),因为使用eval存在执行恶意代码的风险,因此在Minecraft脚本中默认也是禁用的。
要启用这些代码评估方法,必须在清单文件(manifest)中显式声明。该权限设置同时会启用Function()构造函数的使用。
BP/manifest.json
json
{
"capabilities": ["script_eval"]
}支持情况
已支持特性
Object- 标准对象构造函数Function- 标准函数构造函数Error- (EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,InternalError,AggregateError) - 错误类型类Array- (Int8Array,UInt8Array,Int16Array,UInt16Array,Int32Array,UInt32Array,Float32Array,Float64Array,SharedArrayBuffer,ArrayBuffer,UInt8ClampedArray) 标准数组类型构造函数parseInt,parseFloat- 字符串转数字标准方法isNaN,isFinite- 数字类型检查方法decodeURI,encodeURI- URI路径编解码方法decodeURIComponent,encodeURIComponent- URI组件编解码方法escape,unescape- 非标准方法!建议优先使用decodeURI/encodeURINaN,Infinity,undefined- 标准特殊值变量__date_clock- QuickJS内置的获取当前时间方法Number,Boolean,String,Symbol- 基本类型包装对象Math- 包含基础数学函数(如三角函数、幂运算)的标准对象Reflect- 包含反射方法的标准对象eval- 执行字符串代码的标准方法(需在清单中声明权限)globalThis- 访问全局作用域变量的标准对象Date- 日期对象构造函数RegExp- 正则表达式构造函数JSON- 提供JSON序列化与反序列化方法的对象Proxy- 代理对象构造函数Map,Set,WeakMap,WeakSet- 数据结构集合对象DataView- 二进制数组交互对象Promise- 异步处理对象console- 基础输出方法对象(log,warn,error,info)
不支持特性
setTimeout- 代码延时执行标准方法setInterval- 代码周期性执行标准方法clearTimeout- 取消延时任务标准方法clearInterval- 取消周期任务标准方法
扩展方法 QuickJS提供了一些额外方法,但不要期待有突破性功能!主要包括一些将字符串包装为HTML格式的方法,例如:
"text".bolt() -> "<b>text<b>"。这些方法缺乏实用价值且没有官方文档,我们也不打算进行说明。



