Suite

联动

Prop 模块 EventBus 事件、属性桥接能力、跨服支持与模块集成

联动

EventBus 事件

Prop 模块通过 EventBusCapability 发布道具使用事件,其他模块可订阅该主题实现联动。

发布的事件

主题触发时机Payload
axs.prop.prop_used玩家成功使用道具后(效果执行完毕)Map<String, String>,含 prop_id 字段
# Payload 结构
prop_id: "技能/火球术"  # 道具 ID(小写归一化)

事件仅在道具使用成功后发布(通过全部检查、效果执行完毕)。冷却中、无权限、条件不满足等情况不会发布事件。

订阅示例

其他模块可在 startService() 中订阅 axs.prop.prop_used 主题:

EventBusCapability eventBus = getCapability(EventBusCapability.class);
if (eventBus != null && eventBus.hasPublisher("axs.prop.prop_used")) {
    eventBus.subscribe("axs.prop.prop_used", event -> {
        String propId = event.payload().get("prop_id");
        Player player = event.player();
        // 自定义联动逻辑
    });
}

其他模块可通过 eventBus.hasPublisher("axs.prop.prop_used") 检测 Prop 模块是否已加载并可订阅。

Capability 注册

PropAccessible(公开)

快捷道具公开能力(@PublicCapability),外部插件经 AxsCapabilities.get(PropAccessible.class) 获取;Prop 模块未启用时返回 null。所有方法请在 Bukkit 主线程调用。

方法说明
propIds()已注册的道具 ID 列表
applyPropToMainHand(player, propId)将指定道具效果应用到玩家主手物品,返回 PropApplyResult(success, message)

属性桥接能力

Prop 模块支持三套属性插件的临时属性加成,对应插件未安装时该类型效果自动跳过。

AttributePlus

  • 效果类型:ap,属性行列表(如 物理伤害:10)
  • 持续道具 Duration 秒,到期后自动移除;玩家下线时自动清除

MythicLib

  • 效果类型:ml / mythiclib
  • 来源前缀在 config.yml 的 mythiclib.source-prefix 中配置(默认 AXS_PROP)
  • 仅处理已在 MythicLib 注册的属性,未注册属性跳过并记录警告;到期自动移除

Symphony

  • 效果类型:sy / symphony,支持百分比修饰(payload 以 % 结尾)
  • 到期自动移除并重新计算玩家属性;玩家下线时自动清除

桥接状态查询

/axs prop status 命令可查看各属性插件的挂钩状态。

跨服支持

Prop 模块为纯内存运行模块,不涉及持久化存储,因此没有数据库表和跨服数据迁移需求。

项说明
存储模式无持久化存储
数据库表无
跨服迁移不适用
玩家数据清除不适用

道具定义存储在 YAML 文件中,按键绑定通过客户端 MOD 管理,冷却通过客户端标签系统管理。各子服独立加载道具定义,无需跨服同步。

模块集成

与其他模块的联动

联动模块联动方式
AttributePlus通过 ap 效果附加临时属性词条,Duration 秒后自动移除
MythicLib通过 ml / mythiclib 效果附加临时属性 modifier,Duration 秒后自动关闭
Symphony通过 sy / symphony 效果附加临时属性修改,Duration 秒后自动移除并重新计算
PlaceholderAPI道具 conditions 列表中使用 PAPI 变量进行使用条件判断
任意订阅模块订阅 axs.prop.prop_used 事件,获取玩家使用道具的通知

典型联动场景

与 QQBot 模块联动

QQBot 模块可订阅 axs.prop.prop_used 事件,将道具使用通知推送到 QQ 群:

eventBus.subscribe("axs.prop.prop_used", event -> {
    String propId = event.payload().get("prop_id");
    qqBot.sendToAllGroups("[道具] " + event.player().getName() + " 使用了 " + propId);
});

与 QuestGPS 模块联动

QuestGPS 模块可订阅 axs.prop.prop_used 事件,将道具使用作为任务完成条件:

eventBus.subscribe("axs.prop.prop_used", event -> {
    questService.checkProgress(event.player(), "prop_used", event.payload().get("prop_id"));
});

延伸阅读

本页目录