Zum Hauptinhalt springen

Extractioncraft Entwickler-API

Extractioncraft stellt unter com.magmaguy.extractioncraft.api eine Abfrageklasse und Bukkit-Events bereit, mit denen andere Plugins Matches verfolgen und darauf reagieren können. Alle Events sind standardmäßige synchrone Bukkit-Events.

Abfragen​

MethodeRückgabe
ExtractionCraftAPI.getMatch(Player player)Das ExtractionMatch, in dem sich der Spieler als Spieler oder Zuschauer befindet, oder null
ExtractionCraftAPI.getMatches()Eine Kopie aller Matches, die erstellt und noch nicht zerstört wurden

ExtractionMatch erweitert die Match-Klasse der MagmaCore-Kopie, die in der Extractioncraft-Jar mitgeliefert und nach com.magmaguy.extractioncraft.magmacore.match.Match verschoben wird. Zu seinen öffentlichen Methoden gehören getPhase(), getMatchPlayers(), getActivePlayers(), admit(players), admitSpectator(player), leave(player, reason), start() und end(outcome). Extractioncraft hat keinen Beitritts- oder Zuschauerbefehl, daher bringt ein anderes Plugin über admit und admitSpectator weitere Spieler oder Zuschauer in ein Match. Spieler können nur zugelassen werden, während das Match wartet, und nur bis zu seinem maxPlayers-Wert; für Zuschauer muss das Inhaltspaket spectatable: true setzen.

Events​

EventAbbrechbarBereitgestellte DatenWird ausgelöst
ExtractionMatchJoinEventJaExtractionMatch match, Player playerBevor ein Spieler oder Zuschauer zugelassen wird, einmal pro Spieler
ExtractionMatchStartEventJaExtractionMatch matchWenn /exc start die Prüfung der Mindestspielerzahl besteht, vor dem Countdown
ExtractionMatchLeaveEventNeinExtractionMatch match, Player player, ExtractionLeaveReason reasonWährend ein Teilnehmer das Match verlässt
ExtractionMatchEndEventNeinExtractionMatch match, ExtractionMatchOutcome outcomeWenn das Match endet

Das Abbrechen von ExtractionMatchJoinEvent hält den Spieler und alle Spieler fern, die gemeinsam mit ihm zugelassen werden. Weist es den Ersteller eines frisch generierten Matches ab, werden das Match und seine Welt zerstört, und der Ersteller erhält The generated match could not be started.

Das Abbrechen von ExtractionMatchStartEvent lässt das Match im Wartezustand. Spieler können /exc start erneut ausführen.

ExtractionMatchLeaveEvent wird ausgelöst, nachdem Extractioncraft das Inventar des Spielers je nach Grund des Verlassens per Soulbind gebunden oder geleert hat, während der Spieler noch Teilnehmer ist und sich noch in der Match-Welt befindet. Danach wird er hinausteleportiert.

ExtractionMatchEndEvent wird ausgelöst, bevor die noch darin befindlichen Spieler entfernt werden. Diese gehen anschließend mit MATCH_ENDED. Ein Server-Shutdown oder Plugin-Reload zerstört Matches, ohne sie zu beenden, daher wird kein End-Event ausgelöst; die Spieler gehen stattdessen mit SHUTDOWN.

Gründe für das Verlassen​

ExtractionLeaveReasonBedeutungItems, sobald das Match läuft
QUITAus eigenem Antrieb gegangen, zum Beispiel mit /exc quitMit der Standardkonfiguration verloren
DISCONNECTVerbindung zum Server getrenntMit der Standardkonfiguration verloren
DIEDTödlichen Schaden erlittenMit der Standardkonfiguration verloren
EXTRACTEDAn einem Extraktionspunkt extrahiertBehalten und per Soulbind gebunden
MATCH_ENDEDBeim Ende des Matches noch darin, auch wenn der Timer abgelaufen istMit der Standardkonfiguration verloren
SHUTDOWNServer oder Plugin wurde während des Matches heruntergefahrenBehalten und per Soulbind gebunden

Wer geht, bevor das Match läuft, dessen Inventar bleibt immer unberührt. Siehe Tod und Item-Verlust.

Match-Ergebnisse​

ExtractionMatchOutcomeWann Extractioncraft es verwendet
DEFEATDer 15-Minuten-Timer ist abgelaufen, oder der letzte aktive Spieler hat das Match verlassen, auch durch Extraktion
NEUTRALDie Spieleranzahl ist während des Countdowns unter minPlayers gefallen
VICTORYWird von Extractioncraft selbst nie gesetzt; nur ein Plugin, das end(...) aufruft, kann es erzeugen

Verwendungsbeispiel​

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
}
}
}