Aller au contenu principal

API Java des plugins

La référence Java générée permet de rechercher les classes, méthodes et signatures. La version des sources et le commit utilisés sont indiqués pour chaque module.

Consultez cette section pour écrire un plugin Java qui s'intègre aux plugins Nightbreak. Pour créer des mécaniques de jeu sans plugin Java, commencez par le guide de script Lua.

Choisir un plugin

Toutes les coordonnées ci-dessous utilisent le groupe com.magmaguy. Ces versions figurent dans le dépôt Maven public au moment de cette mise à jour ; choisissez la version correspondant au plugin installé sur votre serveur. Les pages fondées sur les sources actuelles et les références générées peuvent couvrir une version plus récente avant la publication de son artefact Maven.

PluginArtefact et versionRéférence développeur
EliteMobsEliteMobs:10.9.1Entités, objets, événements et services de pouvoirs Lua
FreeMinecraftModelsFreeMinecraftModels:2.12.1Modèles, interactions, déguisements, objets et armes magiques
ResourcePackManagerResourcePackManager:2.4.1Enregistrement et rechargement des packs
BetterStructuresBetterStructures:2.7.2Événements de génération de structures
EternalTDEternalTD:1.7.3Événements de tours, de vagues et de combat
CannonRTPCannonRTP:1.2.2Événements de lancement, de validation de destination et d'atterrissage
ResurrectionChestResurrectionChest:2.3.1Possibilités d'intégration
BetterFoodBetterFood:1.5.1Possibilités d'intégration
MagmaCoreMagmaCore:2.2.0-SNAPSHOTIntégration de la bibliothèque et cycle de vie

Ajouter une dépendance à un plugin

Les plugins publiés sont disponibles dans le dépôt Maven de MagmaGuy. Compilez contre le plugin installé avec la portée Maven provided ou Gradle compileOnly. Le JAR de votre intégration ne doit pas contenir une seconde copie de ce plugin.

Par exemple, une intégration EliteMobs utilise :

pom.xml sections
<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>

L'équivalent en Kotlin DSL pour Gradle est :

build.gradle.kts sections
repositories {
maven("https://repo.magmaguy.com/releases")
}

dependencies {
compileOnly("com.magmaguy:EliteMobs:10.9.1")
}

Votre projet a également besoin de sa dépendance habituelle à l'API Bukkit/Paper. Utilisez Java 21 pour ces exemples et exécutez le serveur avec la version de Java qu'il exige.

Déclarez la dépendance d'exécution dans le descripteur de votre plugin :

plugin.yml section
depend: [EliteMobs]

Pour une autre intégration, remplacez l'artefact, la version et le nom du plugin. BetterStructures nécessite également WorldEdit sur le serveur. L'API Java d'enregistrement de ResourcePackManager s'exécute sur le serveur Bukkit ; l'artefact universel contient aussi des composants de proxy, mais cela ne rend pas cette API Bukkit utilisable depuis un plugin de proxy.

Si l'intégration est facultative, utilisez softdepend et ne chargez ses classes qu'après avoir vérifié que le plugin cible est activé. Évitez toute référence à des types de plugins facultatifs dans le point d'entrée toujours chargé de votre plugin. L'ordre des dépendances ne garantit pas à lui seul que l'initialisation asynchrone du contenu est terminée ; utilisez les hooks de disponibilité et de rechargement du plugin cible.

MagmaCore suit un autre contrat de packaging. Comme il s'agit d'une bibliothèque intégrée, suivez son guide de shading et de cycle de vie plutôt que cette procédure pour plugins installés.

Cycle de vie et compatibilité

Utilisez les points d'entrée documentés dans chaque guide. Une classe Java publique dans le JAR d'un plugin peut néanmoins être un détail d'implémentation. Vérifiez les signatures de la version correspondante avant une mise à jour, notamment si vous utilisez des gestionnaires ou des classes d'entités en dehors d'un package api.

Exécutez les opérations Bukkit sur les entités et les mondes sur le thread du serveur. Évitez de bloquer les gestionnaires d'événements avec des requêtes HTTP, des accès aux fichiers ou de longs calculs. Vérifiez de nouveau les entités et la disponibilité du plugin lorsque vous revenez d'un travail asynchrone.

Ne conservez que l'état appartenant à votre intégration. Libérez ses attachements de modèles, ses enregistrements et ses tâches à sa désactivation, et récupérez de nouveau les objets du plugin cible après un rechargement. Une référence conservée vers un modèle ou un donjon ne prouve pas que son instance d'exécution existe encore.

ResurrectionChest

ResurrectionChest 2.3.1 ne possède ni API d'événements Bukkit personnalisés dédiée, ni façade d'intégration. Son package events contient des écouteurs Bukkit internes. Ne les instanciez pas comme points d'extension.

Utilisez la configuration et les commandes documentées pour configurer le serveur. L'artefact Maven publié permet de compiler une intégration contre cette version, mais ne définit pas un contrat stable de gestion des coffres.

BetterFood

BetterFood 1.5.1 ne possède ni API d'événements Bukkit personnalisés dédiée, ni façade d'intégration. Sa logique de sélection des aliments passe par ses propres écouteurs Bukkit.

Consultez le guide de comportement et la référence de configuration pour les réglages pris en charge. Le code qui écoute des événements Bukkit ordinaires doit respecter leur annulation et leur priorité, au lieu d'appeler directement les écouteurs internes de BetterFood.

Documentation des classes et méthodes

Utilisez les guides ci-dessus pour les modèles d'intégration et la référence Java générée pour les classes, méthodes et signatures. Vérifiez que la version et le commit des sources indiqués dans cette référence correspondent à la version utilisée par votre intégration.