pluginiPlugin

事件系统

为物品添加交互功能

概述

事件系统让你的物品能够响应玩家的操作,比如右键点击、攻击敌人等。通过简单的脚本,你可以让物品执行各种功能。

基础概念

什么是事件

事件就是玩家与物品的交互行为,比如:

  • 右键点击物品
  • 用物品攻击敌人
  • 消耗物品(如食物)
  • 丢弃物品

事件脚本

当事件发生时,系统会执行你预先写好的脚本命令。

常用事件类型

事件名称触发时机示例用途
on_right_click右键点击物品释放技能、打开菜单
on_left_click左键点击物品快速攻击、切换模式
on_attack用物品攻击实体额外伤害、特殊效果
on_consume消耗物品恢复生命、获得buff
on_drop丢弃物品防止丢弃、特殊提示

脚本编写语法

推荐写法:多行字符串

使用 YAML 的多行字符串语法(|)编写事件脚本,更加简洁易读:

magic_wand:
  icon: stick
  name:
    item_name: '&6魔法棒'
  event:
    on_right_click: |
      tell '你释放了魔法!'

复杂脚本示例

healing_potion:
  event:
    on_consume: |
      tell color '&a你感到精神焕发!'
      player health to player max health

条件判断和逻辑

使用条件语句

premium_sword:
  event:
    on_right_click: |
      if check player level >= 10 then {
        tell color '&a释放了强力攻击!'
      } else {
        tell color '&c等级不足!需要10级'
      }

使用物品数据

通过 &变量名 引用物品的数据:

fire_sword:
  data:
    fire_damage: 15
    mana_cost: 10
  event:
    on_attack: |
      set a to item data player-mana
      set b to item data mana_cost
      if check a >= b then {
        item data player-mana to math - [ a b ]
        item update
        tell '造成了额外火焰伤害!'
      }

实用事件示例

治疗药水

health_potion:
  icon: potion
  name:
    item_name: '&c治疗药水'
  event:
    on_consume: |
      tell '&a恢复了20点生命值!'
      player health to math + [ player health 20 ]
      item consume

传送卷轴

teleport_scroll:
  icon: paper
  name:
    item_name: '&b传送卷轴'
  event:
    on_right_click: |
      if check player level >= 5 then {
        teleport world 10.0 64.0 10.0
        tell '&a传送成功!'
        item consume
      } else {
        tell '&c需要5级才能使用!'
      }

防御护符

shield_amulet:
  icon: shield
  name:
    item_name: '&9防御护符'
  event:
    on_attack: |
      if random 0.2 then {
        tell color '&b护符保护了你!'
        cancel
      }

脚本语法对比

传统数组格式(仍然支持)

magic_sword:
  event:
    on_right_click:
      - "tell color '&a释放了魔法攻击!'"
      - "tell color '&c魔力不足!'"

推荐的多行字符串格式

magic_sword:
  event:
    on_right_click: |
      tell color '&a释放了魔法攻击!'
      tell color '&c魔力不足!'