Skip to content

动作系统

物品事件通过 Aria 脚本引擎驱动。脚本在物品加载时预编译为 AriaCompiledRoutine,运行时只需创建上下文执行。

配置格式

yaml
my_item:
  event:
    from: [model_id]           # 引用事件模型
    data:                      # 事件变量(注入脚本上下文 vars)
      custom_key: "value"
    on_right_click!!: |        # !! = 自动取消原版事件
      if (cooldown.check('skill', 3000)) {
        cooldown.set('skill')
        sendMessage('&a技能释放!')
        item.damage(5)
      } else {
        var.remaining = cooldown.time('skill', 3000) / 1000
        sendMessage("&c冷却中,剩余 {remaining} 秒")
      }
    on_attack: |
      item.damage(1)

事件触发点

触发器Bukkit 事件说明
on_left_clickPlayerInteractEvent左键
on_right_clickPlayerInteractEvent右键
on_right_click_entityPlayerInteractEntityEvent右键实体
on_attackEntityDamageByEntityEvent攻击实体
on_damagePlayerItemDamageEvent耐久损耗
on_consumePlayerItemConsumeEvent消耗物品
on_dropPlayerDropItemEvent丢弃
on_pickEntityPickupItemEvent拾取
on_block_breakBlockBreakEvent破坏方块
on_item_breakPlayerItemBreakEvent物品损坏
on_swap_to_offhandPlayerSwapHandItemsEvent切到副手
on_swap_to_mainhandPlayerSwapHandItemsEvent切到主手
on_buildItemBuildEvent.Pre构建时
on_releaseItemReleaseEvent释放时
on_release_displayItemReleaseEvent.Display展示生成时

键名加 !! 后缀会自动取消原始 Bukkit 事件(event.isCancelled = true)。

上下文变量

变量类型说明
playerPlayer当前玩家
itemItemStream当前物品流
eventEvent原始 Bukkit 事件
varsMapevent.data 配置的变量

内置函数

完整函数列表见 Aria 内置函数

常用示例

javascript
// 冷却技能
if (cooldown.check('fireball', 5000)) {
  cooldown.set('fireball')
  sendMessage('&c火球术!')
  playSound('ENTITY_BLAZE_SHOOT', 1.0, 1.5)
  item.damage(10)
}

// 读写数据
var.level = item.data('custom.level')
item.data('custom.level', level + 1)

// 消耗品(使用次数限制)
item.use()
sendMessage('&a剩余使用次数: ' + item.uses())

// 消耗品(直接消耗物品数量)
item.consume(1)
potion.give('REGENERATION', 200, 2)

// 不可丢弃
cancel()
sendMessage('&c此物品不可丢弃')

使用次数 (uses)

data 中配置 uses 字段,配合 item.use()item.uses() 实现使用次数限制:

yaml
my_scroll:
  display: simple_display
  icon: PAPER
  name:
    item_name: "&d传送卷轴"
  lore:
    item_type: "&5消耗品"
    item_desc:
      - "&f使用后传送回出生点"
      - "&7剩余次数: &f<uses_display>"
  data:
    uses: 5
  data-mapper:
    uses_display: "{uses}"
  event:
    on_right_click!!: |
      if (item.uses() > 0) {
        item.use()
        runCommand('spawn')
        sendMessage('&a已传送!剩余 ' + item.uses() + ' 次')
      } else {
        sendMessage('&c使用次数已耗尽')
      }

item.use(n?) 会自动递减 data.uses,当次数降至 0 时自动消耗物品。

Released under the Apache 2.0 License.