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 | 比賽期間伺服器或外掛關閉 | 保留並靈魂綁定 |
在比賽開打前離開永遠不會動到物品欄。請參閱死亡與物品損失。
比賽結果
ExtractionMatchOutcome | Extractioncraft 使用它的時機 |
|---|---|
DEFEAT | 15 分鐘計時器結束,或最後一名活躍玩家離開比賽(包括透過撤離離開) |
NEUTRAL | 倒數期間玩家人數低於 minPlayers |
VICTORY | Extractioncraft 本身從不設定;只有呼叫 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
}
}
}