跳到主要内容

MxtActions:脚本 Action

注册脚本 Action​

方法回调参数作用
entity(id, callback)(entity: Entity, params: object, context: FormulaContext)注册实体 Action。
biEntity(id, callback)(actor: Entity, target: Entity, params: object, context: FormulaContext)注册双实体 Action。
block(id, callback)(level: Level, pos: BlockPos, params: object, context: FormulaContext)注册方块位置 Action。
item(id, callback)(holder: Entity, stack: ItemStack, params: object, context: FormulaContext)注册物品 Action。

四种回调都对应数据包中的 type: "saturn:js"。回调抛出的异常会被捕获、写入错误日志,当前 Action 终止,但不会令服务器崩溃。

最后一个参数是本次派发所用的公式上下文,因此脚本能读到数据包 Action 能读到的同一份事件载荷。只有事件知道的数值(例如 damage)就是这样拿到的:

MxtActions.entity('example:knockback_on_hit', (entity, params, context) => {
const damage = context.explicit('damage')
if (Number.isNaN(damage)) return
entity.push(0, params.strength * damage, 0)
})

不需要上下文时少写几个参数即可,JavaScript 会忽略多余实参。可用的变量方法见 FormulaContext;内置变量都能读,但不能注册新变量。

直接运行任意内置 Action​

方法参数返回值说明
executeEntity(entity, definition)Entity、实体 Action JSONvoid通过 EntityAction.CODEC 解析并执行。
executeBiEntity(actor, target, definition)两个 Entity、双实体 Action JSONvoid以 actor 作为公式上下文主体。
executeBlock(level, pos, definition)Level、BlockPos、方块 Action JSONvoid以世界作为公式上下文。
executeItem(holder, stack, definition)Entity、ItemStack、物品 Action JSONvoid以持有者作为公式上下文主体。

definition 是一个 Action 对象,格式与数据包内单个 Action 完全一致,type 会走现有固有注册表分派:

MxtActions.executeEntity(player, {
type: 'mxt:heal',
amount: 4
})

相关​