Suite

联动

Fishing 跨模块联动与 Capability

联动

依赖关系

依赖类型说明
ArcartX 客户端 MOD硬依赖提供 UI 渲染与 PacketBridge,小游戏通过 ArcartX UI 呈现
PlaceholderAPI外部依赖提供 PlaceholderAPI 占位符(%axsfishing_*%

物品库为可选功能,鱼类/宝藏/饵料/鱼竿的 item.source 按需依赖对应插件:

物品来源对应插件
mythicMythicMobs
neigeNeigeItems
overtureOverture
mmoitemsMMOItems

EventBus 事件

Fishing 模块通过 publishedTopics() 声明并发布以下 EventBus 事件主题,其他模块(如 BattlePass、QuestGPS、OnlineRewards 等)可通过 EventBusCapability 订阅:

事件主题触发时机Payload 字段
axs.fishing.success钓鱼成功fish_id, fish_rarity, fish_size, water_area, bait_id, is_perfect, player_level
axs.fishing.perfect完美捕获(成功子事件)同 success
axs.fishing.collection_unlock首次捕获某鱼种同 success + total_collection_count
axs.fishing.treasure钓到宝藏water_area
axs.fishing.level_up玩家升级old_level, new_level, season_id

EventPacket Signal

Fishing 同时通过 SignalDispatchable 分发信号,供 EventPacket 规则引擎匹配:

Signal触发时机变量
fishing_success钓鱼成功fish_id, fish_name, fish_rarity, fish_size, water_area, is_perfect
fishing_legendary_catch钓到传说级鱼同上
fishing_first_catch首次捕获某鱼种同上
fishing_treasure钓到宝藏同上

Capability 注册

Fishing 模块注册了以下 Capability,供宿主或其他模块调用:

Capability说明
FishingAccess公开 capability@PublicCapability),外部插件经 AxsCapabilities.get(FishingAccess.class) 获取:小游戏启停、图鉴计数、经验/疲劳读写、领奖、卖鱼
DatabaseMigratable支持数据库迁移,供宿主统一管理存储迁移。migrateDatabase(target, overwrite) 迁移数据到目标存储描述符
PlayerDataPurgeable支持清除玩家数据,供宿主的玩家数据清理功能调用。purgePlayerData(uuid) 删除指定玩家数据,purgeAllPlayerData() 删除全部

FishingAccess

面向外部插件的钓鱼操作接口(所有方法请在 Bukkit 主线程调用):

方法说明
isInMinigame(uuid)玩家是否正处于钓鱼小游戏中
startMinigame(player)启动小游戏(鱼竿/条件不满足返回 false
collectionCount(uuid) / totalFishTypes()图鉴已解锁数 / 鱼类总数
giveXp(uuid, amount)增加钓鱼经验
fatigue(uuid) / setFatigue(uuid, value)查询/设置疲劳值
claimReward(player, rewardId)领取指定赛季奖励
sellAllFish(player)卖出背包全部鱼获,返回提示消息

DatabaseMigratable

// 其他模块可通过 getCapability 查找
DatabaseMigratable migratable = getCapability(DatabaseMigratable.class);
if (migratable != null) {
    MigrationResult result = migratable.migrateDatabase(targetDescriptor, false);
}

PlayerDataPurgeable

PlayerDataPurgeable purgeable = getCapability(PlayerDataPurgeable.class);
if (purgeable != null) {
    int deleted = purgeable.purgePlayerData(playerUuid);
}

跨服同步

Fishing 支持跨服同步捕获记录。启用方式:

  1. 宿主 config.ymlcross-server 节配置 Redis 或 Proxy 后端
  2. 模块 config.ymlcross-server.enabled 设为 true

启用后,钓鱼成功时通过跨服通道发布消息,格式为:

CATCH:<uuid>:<fishId>:<fishName>:<rarity>:<size>:<perfect>:<timestamp>

其他服务器收到消息后持久化到本地数据库,清除该玩家的内存缓存。

数据库表结构

Fishing 模块使用以下数据库表(表名前缀默认为 axs_fishing_,共享模式下无前缀):

axs_fishing_season(赛季数据)

列名类型说明
uuidTEXT玩家 UUID
season_idTEXT赛季 ID
levelINTEGER当前等级
current_xpINTEGER当前级内经验
talent_pointsINTEGER总天赋点
unspent_talent_pointsINTEGER未分配天赋点
talentsTEXT已点亮天赋(JSON)
claimed_rewardsTEXT已领取奖励 ID(JSON)
fatigueINTEGER疲惫值
claimed_max_fatigue_rewardINTEGER是否已领取首次满疲惫奖励
updated_atINTEGER更新时间戳

主键:(uuid, season_id)。赛季数据按 season_id 隔离,赛季结束时重置。

axs_fishing_permanent(永久数据)

列名类型说明
uuidTEXT玩家 UUID(主键)
total_caughtINTEGER累计捕获总数
perfect_catchesINTEGER累计完美捕获次数
treasure_caughtINTEGER累计宝藏捕获次数
updated_atINTEGER更新时间戳

永久数据跨赛季保留,不随赛季重置。

axs_fishing_collection(图鉴条目)

列名类型说明
uuidTEXT玩家 UUID
fish_idTEXT鱼种 ID
caught_countINTEGER累计捕获次数
max_sizeINTEGER历史最大尺寸
first_catch_atINTEGER首次捕获时间戳

主键:(uuid, fish_id)。图鉴数据跨赛季保留。

axs_fishing_bait_queue(饵料队列)

列名类型说明
uuidTEXT玩家 UUID
slot_indexINTEGER槽位序号
bait_idTEXT饵料 ID
amountINTEGER数量

axs_fishing_catch_records(捕获记录)

用于主界面最近捕获记录流展示和跨服同步。

axs_fishing_pending_rewards(旧版待发放奖励)

新版本已迁移到宿主统一 PendingRewardService。模块启动时会自动迁移旧表数据。

与其他模块联动

Fishing 通过 getCapability 获取其他模块的能力实现联动:

Capability来源用途
MailDispatchableMail 模块赛季奖励、结算奖励、疲惫值奖励、里程碑成就通过邮件预设发放
EventBusCapability宿主核心任务引擎通过事件总线监听钓鱼事件;钓鱼成功/完美/首次捕获/宝藏事件发布到 EventBus
SignalDispatchableEventPacket 模块服务端信号分发,供 EventPacket 规则引擎匹配钓鱼事件
TitleGrantableTitle 模块捕获成就触发称号授予(如首次传说鱼、累计 10/100/500 次捕获、50 次完美捕获)
PolygonSelectionCapability宿主核心管理命令的水域选区创建使用宿主提供的多边形选区工具

里程碑称号

条件称号 ID持续时间
首次捕获传说鱼legendary_hunter7 天
累计捕获 10 次fisher_apprentice永久
累计捕获 100 次fisher_master永久
累计捕获 500 次fisher_legend永久
完美捕获 50 次perfect_master永久

称号授予依赖 TitleGrantable 能力,需 Title 模块已加载。同时首次捕获传说鱼会发送邮件预设 legendary_first_catch(依赖 MailDispatchable)。

物品发放链

钓鱼获得的鱼物品、宝藏、额外掉落通过 RewardDispatcherItemRewardDispatcher 统一发放,支持背包满 → 仓库 → 邮件 → Pending → 掉落兜底链。

跨模块物品识别

钓鱼产物物品通过 PDC 标签标记,可供其他模块识别:

PDC 键类型说明
axs_fishing_fish_idSTRING鱼种 ID
axs_fishing_fish_sizeINTEGER捕获尺寸
axs_fishing_is_perfectBYTE是否完美捕获(1/0)
axs_fishing_bait_idSTRING鱼竿上挂载的饵料 ID
axs_fishing_rod_idSTRING鱼竿 ID