Démarrage
Tout ce que vous pouvez écrire dans zones.yml, vous pouvez le construire en code à la place. Ce que
l’API apporte en plus, ce sont des règles qui lisent l’état du jeu en direct : révéler celui qui tient
le point en ce moment, révéler les trois premiers du classement, et laisser les deux suivre la partie
sans écrire la moindre ligne au moment du changement.
Préparer le projet
Section intitulée « Préparer le projet »-
Ajoutez la dépendance.
L’artefact ne contient que des interfaces, l’implémentation vit dans le plugin. Déclarez-le en
compileOnlyavec Gradle ou enprovidedavec Maven, et ne l’incluez pas dans votre jar.build.gradle repositories {maven {name = 'soma'url = 'https://sowmha.github.io/maven/'}}dependencies {compileOnly 'top.soma:hider-api:1.16.5'}build.gradle.kts repositories {maven("https://sowmha.github.io/maven/") {name = "soma"}}dependencies {compileOnly("top.soma:hider-api:1.16.5")}pom.xml <repositories><repository><id>soma</id><url>https://sowmha.github.io/maven/</url></repository></repositories><dependencies><dependency><groupId>top.soma</groupId><artifactId>hider-api</artifactId><version>1.16.5</version><scope>provided</scope></dependency></dependencies> -
Déclarez le plugin.
plugin.yml depend: [SomaHider]Utilisez plutôt
softdependsi votre plugin doit continuer de fonctionner sans SomaHider. Vous protégerez alors vos appels avecSomaHiderProvider.getOrNull(). -
Récupérez l’API.
import top.soma.hider.api.SomaHider;import top.soma.hider.api.SomaHiderProvider;SomaHider hider = SomaHiderProvider.get();Appelez ceci depuis
onEnable()ou plus tard, jamais depuis votre constructeur ni depuisonLoad(): SomaHider s’enregistre pendant son activation, il n’existe donc pas encore à ces moments-là.
| Méthode | Renvoie |
|---|---|
SomaHiderProvider.get() | L’API, ou lève une IllegalStateException si SomaHider n’est pas chargé. |
SomaHiderProvider.getOrNull() | L’API, ou null. |
SomaHiderProvider.isAvailable() | Si l’API est enregistrée. |
Ouvrir une zone
Section intitulée « Ouvrir une zone »import java.time.Duration;
import top.soma.hider.api.rule.Reveal;import top.soma.hider.api.zone.HiderZone;import top.soma.hider.api.zone.Region;
Region arena = Region.circle(center, 40.0);
HiderZone zone = SomaHiderProvider.get() .hide(arena) .named("arena") .duration(Duration.ofMinutes(30)) .reveal(Reveal.sameGroup()) .open();Tous ceux qui se trouvent dans le cercle sont désormais masqués les uns pour les autres, à ceci près que les joueurs d’un même groupe se voient. Fermez la zone à la fin de votre événement :
zone.close();Une zone ouverte avec une duration se ferme aussi d’elle-même. Une zone ouverte sans durée tourne
jusqu’à ce que vous la fermiez : contrairement à /sh start, l’API n’applique aucun plafond, rien
n’arrêtera donc une zone que vous auriez oubliée.
Lui apprendre qui va avec qui
Section intitulée « Lui apprendre qui va avec qui »Reveal.sameGroup() a besoin de savoir ce qu’est un groupe, et seul votre plugin peut le dire. Un
GroupResolver associe un joueur à un identifiant de groupe, ou à null s’il n’appartient à aucun.
Un groupe null n’est jamais révélé.
.groupResolver(player -> { Faction faction = FactionUtils.getFactionByPlayer(player); return faction != null && faction.isNormal() ? faction.getId() : null;})Définissez-le une fois sur la zone, et toutes les règles à base de groupes s’en servent.
La suite
Section intitulée « La suite »Une intégration réelle est la page à lire ensuite. Elle déroule un plugin d’événements de bout en bout, et les schémas qu’on y trouve couvrent l’essentiel de ce que vous aurez à écrire.
Pour le détail : zones pour le builder et les régions, règles de révélation pour le catalogue et la façon de garder les règles économes, et déguisements pour l’apparence depuis le code.