Java-Plugin-API
Die generierte Java-Referenz enthält durchsuchbare Klassen, Methoden und Signaturen sowie die Quellversion und den Commit jedes Moduls.
Verwende diesen Bereich, wenn du ein Java-Plugin schreibst, das mit Nightbreak-Plugins zusammenarbeitet. Wenn du Spielinhalte ohne Java-Plugin erstellen möchtest, beginne mit der Lua-Skripting-Anleitung.
Plugin auswählen
Alle folgenden Koordinaten verwenden die Gruppe com.magmaguy. Diese Versionen sind zum Zeitpunkt dieser Aktualisierung im öffentlichen Maven-Repository verfügbar. Wähle die Version passend zum auf deinem Server installierten Plugin. Wiki-Seiten zum aktuellen Quellcode und generierte Referenzen können bereits einen neueren Build behandeln, bevor dessen Maven-Artefakt veröffentlicht wird.
| Plugin | Artefakt und Version | Entwicklerreferenz |
|---|---|---|
| EliteMobs | EliteMobs:10.9.1 | Entitäten, Items, Events und Dienste für Lua-Fähigkeiten |
| FreeMinecraftModels | FreeMinecraftModels:2.12.1 | Modelle, Interaktionen, Verkleidungen, Items und magische Waffen |
| ResourcePackManager | ResourcePackManager:2.4.1 | Paketregistrierung und Neuladen |
| BetterStructures | BetterStructures:2.7.2 | Events bei der Strukturgenerierung |
| EternalTD | EternalTD:1.7.3 | Turm-, Wellen- und Kampf-Events |
| CannonRTP | CannonRTP:1.2.2 | Abschuss, Zielvalidierung und Landungs-Events |
| ResurrectionChest | ResurrectionChest:2.3.1 | Integrationsumfang |
| BetterFood | BetterFood:1.5.1 | Integrationsumfang |
| MagmaCore | MagmaCore:2.2.0-SNAPSHOT | Einrichtung und Lebenszyklus der eingebetteten Bibliothek |
Plugin-Abhängigkeit hinzufügen
Veröffentlichte Plugins werden aus MagmaGuys Maven-Repository bezogen. Kompiliere mit Maven provided oder Gradle compileOnly gegen das installierte Plugin. Deine Integrations-JAR sollte keine zweite Kopie dieses Plugins enthalten.
Eine EliteMobs-Integration verwendet beispielsweise:
<repositories>
<repository>
<id>magmaguy-releases</id>
<url>https://repo.magmaguy.com/releases</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.magmaguy</groupId>
<artifactId>EliteMobs</artifactId>
<version>10.9.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
Die entsprechende Gradle Kotlin DSL lautet:
repositories {
maven("https://repo.magmaguy.com/releases")
}
dependencies {
compileOnly("com.magmaguy:EliteMobs:10.9.1")
}
Dein Projekt benötigt außerdem seine übliche Bukkit-/Paper-API-Abhängigkeit. Verwende Java 21 für diese Beispiele und führe den Server mit der von ihm benötigten Java-Version aus.
Deklariere die Laufzeitabhängigkeit im Plugin-Deskriptor:
depend: [EliteMobs]
Ersetze für eine andere Integration das Artefakt, die Version und den Plugin-Namen. BetterStructures erfordert außerdem WorldEdit auf dem Server. Die Java-Registrierungs-API von ResourcePackManager läuft auf dem Bukkit-Backend. Das universelle Artefakt enthält auch Proxy-Komponenten; dadurch wird diese Bukkit-API jedoch nicht aus einem Proxy-Plugin aufrufbar.
Ist die Integration optional, verwende softdepend und lade ihre Klassen erst, nachdem du geprüft hast, dass das Ziel-Plugin aktiviert ist. Halte Referenzen auf optionale Plugin-Typen aus deinem immer geladenen Einstiegspunkt heraus. Die Reihenfolge der Abhängigkeiten allein bedeutet nicht, dass die asynchrone Inhaltsinitialisierung abgeschlossen ist. Beachte die Bereitschafts- und Reload-Hooks des Ziel-Plugins.
Für MagmaCore gelten andere Verpackungsregeln. Es ist eine eingebettete Bibliothek; folge daher seiner Anleitung zu Shading und Lebenszyklus statt diesem Vorgehen für installierte Plugins.
Lebenszyklus und Kompatibilität
Verwende die in den jeweiligen Anleitungen dokumentierten Einstiegspunkte. Eine öffentliche Java-Klasse in einer Plugin-JAR kann trotzdem ein Implementierungsdetail sein. Prüfe vor einem Upgrade die Signaturen des passenden Releases, insbesondere bei Managern oder Entitätsklassen außerhalb eines api-Pakets.
Führe Bukkit-Operationen an Entitäten und Welten im Serverthread aus. Blockiere Event-Handler nicht durch HTTP, Dateizugriffe oder lange Berechnungen. Prüfe Entitäten und Plugin-Bereitschaft erneut, wenn du aus asynchroner Arbeit zurückkehrst.
Bewahre nur den Zustand auf, den deine Integration selbst verwaltet. Gib ihre Modellbindungen, Registrierungen und Aufgaben beim Deaktivieren frei und hole Objekte des Ziel-Plugins nach einem Reload neu ab. Eine gespeicherte Referenz auf ein Modell oder einen Dungeon beweist nicht, dass dessen Laufzeit noch existiert.
ResurrectionChest
ResurrectionChest 2.3.1 hat keine eigene benutzerdefinierte Bukkit-Event-API und keine Integrationsfassade. Sein Paket events enthält interne Bukkit-Listener. Erstelle diese Listener nicht als Erweiterungspunkte.
Verwende die dokumentierte Konfiguration und die Befehle zur Servereinrichtung. Das veröffentlichte Maven-Artefakt erlaubt einer Integration, gegen das Release zu kompilieren, begründet aber keinen stabilen Vertrag für die Truhenverwaltung.
BetterFood
BetterFood 1.5.1 hat keine eigene benutzerdefinierte Bukkit-Event-API und keine Integrationsfassade. Seine Logik zur Nahrungsauswahl läuft über eigene Bukkit-Listener.
Verwende die Verhaltensanleitung und die Einrichtungsreferenz für die unterstützte Einrichtung. Code, der gewöhnliche Bukkit-Events verarbeitet, sollte Abbruchzustand und Event-Priorität beachten, statt BetterFoods interne Listener direkt aufzurufen.
Klassen- und Methodendokumentation
Nutze die obigen Anleitungen für Integrationsmuster und die generierte Java-Referenz für Klassen, Methoden und Signaturen. Vergleiche die dort angegebene Version und den Quell-Commit mit dem Release, das deine Integration verwendet.