跳至主要內容

Extractioncraft 開發者 API

Extractioncraft 在 com.magmaguy.extractioncraft.api 下公開一個查詢類別與數個 Bukkit 事件,讓其他外掛可以追蹤比賽並做出反應。所有事件都是標準的同步 Bukkit 事件。

查詢​

方法回傳
ExtractionCraftAPI.getMatch(Player player)玩家(以玩家或旁觀者身分)所在的 ExtractionMatch,或 null
ExtractionCraftAPI.getMatches()所有已建立且尚未銷毀之比賽的副本

ExtractionMatch 繼承 Extractioncraft jar 內建之 MagmaCore 副本中的比賽類別,該類別已重新定位為 com.magmaguy.extractioncraft.magmacore.match.Match。其公開方法包括 getPhase()、getMatchPlayers()、getActivePlayers()、admit(players)、admitSpectator(player)、leave(player, reason)、start() 與 end(outcome)。Extractioncraft 沒有加入或觀戰指令,因此其他外掛要讓更多玩家或旁觀者進入比賽,就是透過 admit 與 admitSpectator。玩家只能在比賽等待期間加入,人數上限為其 maxPlayers;旁觀者則需要內容包設定 spectatable: true。

事件​

事件可取消公開資料觸發時機
ExtractionMatchJoinEvent是ExtractionMatch match、Player player玩家或旁觀者加入之前,每位玩家觸發一次
ExtractionMatchStartEvent是ExtractionMatch match/exc start 通過最低玩家數檢查時,在倒數之前
ExtractionMatchLeaveEvent否ExtractionMatch match、Player player、ExtractionLeaveReason reason參與者正在離開時
ExtractionMatchEndEvent否ExtractionMatch match、ExtractionMatchOutcome outcome比賽結束時

取消 ExtractionMatchJoinEvent 會將該玩家以及與其一同加入的每位玩家擋在外面。若被拒絕的是剛產生之比賽的建立者,該比賽及其世界會被銷毀,建立者會收到 The generated match could not be started.。

取消 ExtractionMatchStartEvent 會讓比賽維持等待狀態。玩家可以再次執行 /exc start。

ExtractionMatchLeaveEvent 會在 Extractioncraft 依離開原因將玩家的物品欄靈魂綁定或清除之後觸發,此時玩家仍是參與者,也仍在比賽世界中。之後玩家才會被傳送出去。

ExtractionMatchEndEvent 會在仍在裡面的玩家被移出之前觸發。之後這些玩家會以 MATCH_ENDED 離開。伺服器關閉或外掛重新載入會直接銷毀比賽而不結束它們,因此不會觸發結束事件;玩家改以 SHUTDOWN 離開。

離開原因​

ExtractionLeaveReason意義比賽開打後的物品
QUIT自行離開,例如使用 /exc quit使用預設設定時會失去
DISCONNECT從伺服器斷線使用預設設定時會失去
DIED受到致命傷害使用預設設定時會失去
EXTRACTED在撤離點撤離保留並靈魂綁定
MATCH_ENDED比賽結束時仍在裡面,包括計時器結束時使用預設設定時會失去
SHUTDOWN比賽期間伺服器或外掛關閉保留並靈魂綁定

在比賽開打前離開永遠不會動到物品欄。請參閱死亡與物品損失。

比賽結果​

ExtractionMatchOutcomeExtractioncraft 使用它的時機
DEFEAT15 分鐘計時器結束,或最後一名活躍玩家離開比賽(包括透過撤離離開)
NEUTRAL倒數期間玩家人數低於 minPlayers
VICTORYExtractioncraft 本身從不設定;只有呼叫 end(...) 的外掛才能產生此結果

使用範例​

import com.magmaguy.extractioncraft.api.ExtractionLeaveReason;
import com.magmaguy.extractioncraft.api.ExtractionMatchLeaveEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class MyExtractionListener implements Listener {
@EventHandler
public void onLeave(ExtractionMatchLeaveEvent event) {
if (event.getReason() == ExtractionLeaveReason.EXTRACTED) {
// Reward the player for a successful extraction
}
}
}