Перейти к основному содержимому

API для разработчиков Extractioncraft

Extractioncraft предоставляет класс запросов и события Bukkit в пакете com.magmaguy.extractioncraft.api, чтобы другие плагины могли отслеживать матчи и реагировать на них. Все события являются стандартными синхронными событиями Bukkit.

Запросы​

МетодВозвращает
ExtractionCraftAPI.getMatch(Player player)ExtractionMatch, в котором находится игрок (как участник или наблюдатель), либо null
ExtractionCraftAPI.getMatches()Копию всех матчей, которые были созданы и ещё не уничтожены

ExtractionMatch наследует класс матча из копии MagmaCore, встроенной в jar-файл Extractioncraft и перенесённой в 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
}
}
}