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
| Methode | Rü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
| Event | Abbrechbar | Bereitgestellte Daten | Wird ausgelöst |
|---|---|---|---|
ExtractionMatchJoinEvent | Ja | ExtractionMatch match, Player player | Bevor ein Spieler oder Zuschauer zugelassen wird, einmal pro Spieler |
ExtractionMatchStartEvent | Ja | ExtractionMatch match | Wenn /exc start die Prüfung der Mindestspielerzahl besteht, vor dem Countdown |
ExtractionMatchLeaveEvent | Nein | ExtractionMatch match, Player player, ExtractionLeaveReason reason | Während ein Teilnehmer das Match verlässt |
ExtractionMatchEndEvent | Nein | ExtractionMatch match, ExtractionMatchOutcome outcome | Wenn 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
ExtractionLeaveReason | Bedeutung | Items, sobald das Match läuft |
|---|---|---|
QUIT | Aus eigenem Antrieb gegangen, zum Beispiel mit /exc quit | Mit der Standardkonfiguration verloren |
DISCONNECT | Verbindung zum Server getrennt | Mit der Standardkonfiguration verloren |
DIED | Tödlichen Schaden erlitten | Mit der Standardkonfiguration verloren |
EXTRACTED | An einem Extraktionspunkt extrahiert | Behalten und per Soulbind gebunden |
MATCH_ENDED | Beim Ende des Matches noch darin, auch wenn der Timer abgelaufen ist | Mit der Standardkonfiguration verloren |
SHUTDOWN | Server oder Plugin wurde während des Matches heruntergefahren | Behalten und per Soulbind gebunden |
Wer geht, bevor das Match läuft, dessen Inventar bleibt immer unberührt. Siehe Tod und Item-Verlust.
Match-Ergebnisse
ExtractionMatchOutcome | Wann Extractioncraft es verwendet |
|---|---|
DEFEAT | Der 15-Minuten-Timer ist abgelaufen, oder der letzte aktive Spieler hat das Match verlassen, auch durch Extraktion |
NEUTRAL | Die Spieleranzahl ist während des Countdowns unter minPlayers gefallen |
VICTORY | Wird 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
}
}
}