Zum Hauptinhalt springen

EliteMobs-Java-API

Die generierte Java-Referenz enthält durchsuchbare Klassen, Methoden und Signaturen sowie die Quellversion und den Commit jedes Moduls.

Dieser Leitfaden behandelt die EliteMobs-API 10.9. Die für diese Aktualisierung geprüfte öffentliche Maven-Version ist com.magmaguy:EliteMobs:10.9.1. Verwende den Gültigkeitsbereich provided oder compileOnly und deklariere depend: [EliteMobs]. Wähle die Abhängigkeit passend zum installierten Plugin; der aktuelle Quellcode hat die Version 10.9.5. Die Einrichtung für Maven und Gradle findest du im Entwicklerverzeichnis.

Einstiegspunkte

Paket oder TypZweck
com.magmaguy.elitemobs.apiBukkit-Events für Kampf, Quests, NPCs, Teleports, Dungeons und Initialisierung
com.magmaguy.elitemobs.api.instancedLebenszyklus-Events instanzierter Matches
com.magmaguy.elitemobs.api.utils.EliteItemManagerHelfer für Elite-Item-Erkennung, Level, Schaden und Verteidigung
com.magmaguy.elitemobs.entitytracker.EntityTrackerEine Bukkit-Entity in ihre erfasste EliteMobs-Entity auflösen
com.magmaguy.elitemobs.api.power.EliteLuaPowerServiceLua-Powers über die EliteMobs-Laufzeit registrieren und zuweisen

EliteEntity, CustomBossEntity und RegionalBossEntity repräsentieren aktive Akteure, die dem Plugin gehören. Sie geben mehr Implementierungsdetails preis als die Event-Verträge. Behalte Referenzen nur so lange, wie der Akteur existiert, und ändere Tracker-Sammlungen nicht direkt.

Auf Fertigkeits-XP-Vergaben reagieren

Diese vollständige Plugin-Klasse verhindert die Vergabe von Kampffertigkeits-XP für Spieler mit der Berechtigung example.blockskillxp deiner Integration. Trage ihren vollqualifizierten Klassennamen als main in deine eigene plugin.yml ein.

SkillXpIntegration.java
package example;

import com.magmaguy.elitemobs.api.EliteSkillXpGainEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public final class SkillXpIntegration extends JavaPlugin implements Listener {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}

@EventHandler(ignoreCancelled = true)
public void onSkillXp(EliteSkillXpGainEvent event) {
if (event.getPlayer().hasPermission("example.blockskillxp")) {
event.setCancelled(true);
}
}
}

EliteSkillXpGainEvent läuft synchron nach den Prüfungen der Kampfberechtigung und der Anwendung nativer sowie berechtigungsabhängiger Multiplikatoren. getOriginalXp() liefert den Betrag beim Erstellen des Events; getXp() enthält Änderungen früherer Listener. setXp(long) lehnt negative Werte ab. Ein Abbruch oder ein endgültiger Betrag von null verhindert die Vergabe und ihre Rückmeldung.

EliteMobs übernimmt den angenommenen Betrag, speichert ihn und wendet Levelaufstiegseffekte an. Schreibe Spieler-XP nicht zusätzlich in diesem Listener. Administrative XP-Änderungen und Klassen-XP verwenden eigene Pfade und entsprechen nicht der Kampffertigkeitsvergabe dieses Events.

Andere Events haben eigene Verträge. Insbesondere verhindert ein Abbruch von EliteMobSpawnEvent die Erstellung und entfernt die zugrunde liegende lebende Entity; es bleibt kein gewöhnlicher Mob zurück. EliteMobDeathEvent und EliteMobRemoveEvent beschreiben unterschiedliche Lebenszyklusübergänge. Prüfe das Event und seinen auslösenden Code, bevor du jede Entfernung als Tötung oder Belohnung behandelst.

Eine erfasste Entity auflösen

Lookup inside your integration
EliteEntity elite = EntityTracker.getEliteMobEntity(bukkitEntity);
if (elite == null) {
return;
}

Importiere com.magmaguy.elitemobs.entitytracker.EntityTracker und com.magmaguy.elitemobs.mobconstructor.EliteEntity. Die Suche kann null liefern; eine Bukkit-Entity ist nicht zwingend ein aktuell erfasster EliteMob. Übergib eine vorhandene Bukkit-Entity ungleich null und führe die Suche auf dem Server-Thread aus.

Beginne bei Ausrüstung mit EliteItemManager.isEliteMobsItem(itemStack) und dem Helfer für die tatsächlich benötigte Größe, beispielsweise getItemLevel, getEliteDefense oder getTotalDPS. Diese Größen unterscheiden sich; das Level eines Items ist nicht sein endgültiger Schaden. Prüfe die Null-Behandlung jeder Methode, statt anzunehmen, dass jeder Helfer ein leeres Item akzeptiert.

Initialisierung und Neuladen

EliteMobs initialisiert zunächst asynchron und anschließend auf dem Server-Thread. EliteMobsInitializedEvent wird nach erfolgreichem Abschluss ausgelöst, einschließlich der entsprechenden Initialisierung beim Neuladen. Registriere Listener früh genug, um es zu empfangen. Integrationen, die erst danach aktiviert werden, müssen außerdem berücksichtigen, dass das Plugin bereits initialisiert ist.

Entity-Referenzen, Zuweisungen und zwischengespeicherte Dienste können beim Neuladen veralten. Beziehe die von deiner Integration benötigten Referenzen nach Abschluss der Initialisierung erneut. Rufe weder onEnable oder onDisable noch das Herunterfahren von MagmaCore im Namen von EliteMobs auf.

Lua-Power-Integration

Beziehe den Dienst nach der EliteMobs-Initialisierung über Bukkit:

Service lookup
EliteLuaPowerService powers = Bukkit.getServicesManager()
.load(EliteLuaPowerService.class);
if (powers == null) {
return;
}

Importiere org.bukkit.Bukkit und com.magmaguy.elitemobs.api.power.EliteLuaPowerService. Behandle einen fehlenden Dienst als nicht verfügbar, statt seine Implementierung selbst zu erzeugen.

registerLuaPower(owner, key, revision, source) registriert ein Programm, das deinem Plugin gehört. setPowers(owner, eliteEntity, orderedPowerKeys) ersetzt die vollständige Power-Sammlung des Akteurs durch neue Laufzeitinstanzen in der angegebenen Reihenfolge. Jeder Schlüssel muss diesem Besitzer gehören; doppelte Schlüssel werden abgelehnt. Die Operation hängt keine Powers an die vorhandenen Powers des Bosses an.

inspectPowers liefert die vom Dienst verwalteten Programme in Zuweisungsreihenfolge. inspectPowerActivity zeigt ihre Laufzeitaktivität. unregisterOwner(owner) entfernt die Katalogeinträge des Besitzers und löst seine Laufzeitinstanzen von aktiven Akteuren; verwende dies beim Deaktivieren deiner Integration, solange der Dienst verfügbar ist.

Alle Änderungen laufen auf dem Server-Thread. Der Dienst gibt bewusst keine MagmaCore-Skriptingtypen über Plugin-Classloader-Grenzen hinweg weiter. Übergib EliteMobs-API-Typen statt Objekten aus einer privat eingebetteten MagmaCore-Kopie.

Lua-Hooks und selbst erstellte Inhalte sind in der gemeinsamen Skriptingreferenz beschrieben. Der Java-Dienst koordiniert Zuweisung und Besitz; EliteMobs verwaltet weiterhin den Power-Lebenszyklus.