跳到主要内容

MegaBlock Survivors 开发者 API

MegaBlock Survivors 在 com.magmaguy.megaBlockSurvivors.api 下暴露了一个查询类和若干 Bukkit 事件,其他插件可以借此追踪对局并作出响应。所有事件都是标准的同步 Bukkit 事件。请将 MegaBlockSurvivors 添加到你插件的 depend 或 softdepend 列表中。

查询​

方法返回值
MegaBlockSurvivorsAPI.getMatch(Player player)该玩家正在进行或仍在设置中的 SurvivorMatchInstance,没有时为 null
MegaBlockSurvivorsAPI.getMatches()服务器上所有对局的副本,包括仍在设置中的对局

SurvivorMatchInstance 继承自 MegaBlock Survivors jar 中内置的 MagmaCore 副本的对局类,该类已被重定位到 com.magmaguy.megablocksurvivors.magmacore.match.Match。它自己的 getter 包括 getSurvivorPlayer()、getGameMode()、getDifficulty()、getCurrentWorld() 和 isCheating()。游戏模式和难度由玩家在设置期间选择,因此在玩家做出选择之前,仍在设置中的对局会报告默认值 CHALLENGE 和 MEDIUM。

事件​

事件可取消暴露数据触发时机
SurvivorMatchJoinEvent是SurvivorMatchInstance match、Player player玩家选好初始武器之后、被接纳进对局之前
SurvivorMatchStartEvent是SurvivorMatchInstance match玩家被接纳之后立即触发,早于 3 秒倒计时
SurvivorMatchLeaveEvent否SurvivorMatchInstance match、Player player、SurvivorLeaveReason reason已被接纳的玩家正在离开对局时
SurvivorMatchEndEvent否SurvivorMatchInstance match、SurvivorMatchOutcome outcome每局一次,在其世界为删除而卸载之后

取消 SurvivorMatchJoinEvent 会取消该对局并删除其世界。玩家会收到 match.prepare_failed 消息。

取消 SurvivorMatchStartEvent 同样会取消该对局,但不发送消息。

SurvivorMatchLeaveEvent 在玩家仍是参与者时触发,早于玩家被移出,也早于灵魂回响结算和物品栏清空。在设置期间取消的玩家从未被接纳,因此不会为其触发离开事件。

SurvivorMatchEndEvent 会为每一局触发,包括在设置期间取消的对局、用 /mbs quit 结束的对局,以及因 /mbs reload 或插件停用而结束的对局。

离开原因​

SurvivorLeaveReason含义
QUIT在对局开始前离开,例如入场传送失败
DISCONNECT与服务器断开连接。对局随后以失败结束
DIED由共享对局核心自身的致命伤害处理使用。MegaBlock Survivors 在对局期间会取消原版伤害并自行处理死亡,因此对局中的死亡会报告为 MATCH_ENDED
MATCH_ENDED对局结束:胜利、失败、/mbs quit、/mbs reload 或插件停用
SHUTDOWN为关闭而声明。正常的插件停用或 /mbs reload 会先由 MegaBlock Survivors 结束对局,因此玩家以 MATCH_ENDED 离开

结果​

SurvivorMatchOutcome含义
VICTORYChallenge 对局击败了最终 Boss,并走完了 10 秒的胜利延迟
DEFEAT玩家在没有剩余额外生命的情况下死亡,或断开了连接。胜利延迟期间断开连接也会报告 DEFEAT,尽管排行榜条目已经记录
ABANDONED/mbs quit、被取消或超时的设置、被否决的加入或开始、/mbs reload,或插件停用