Aller au contenu

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.

  1. Ajoutez la dépendance.

    L’artefact ne contient que des interfaces, l’implémentation vit dans le plugin. Déclarez-le en compileOnly avec Gradle ou en provided avec 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'
    }
  2. Déclarez le plugin.

    plugin.yml
    depend: [SomaHider]

    Utilisez plutôt softdepend si votre plugin doit continuer de fonctionner sans SomaHider. Vous protégerez alors vos appels avec SomaHiderProvider.getOrNull().

  3. 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 depuis onLoad() : SomaHider s’enregistre pendant son activation, il n’existe donc pas encore à ces moments-là.

MéthodeRenvoie
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.
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.

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.

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.