Bans

Le BanService est un service intégré à SpongeAPI qui ajoute l’habilité de bannir ou pardonner des utilisateurs dans votre plugin. Le BanService fournit plusieurs méthodes pour faire des choses comme bannir, pardonner des utilisateurs, ou bien même d’obtenir un Ban et l’information sur le Ban.

Astuce

Pour une compréhension simple des services, assurez-vous de lire Services tout d’abord.

Récupérer le BanService

Vous aurez besoin de récupérer le BanService pour ajouter des bans au serveur. Heureusement, cela peut être fait de la même façon que les autres services dans SpongeAPI :

import org.spongepowered.api.Sponge;
import org.spongepowered.api.service.ban.BanService;

BanService service = Sponge.serviceManager().provide(BanService.class).get();

Maintenant, avec le BanService, nous pouvons effectuer des opérations supplémentaires. Par exemple, si nous voulons vérifier si un User fournit est déjà banni, nous pouvons utiliser la méthode BanService#isBanned(GameProfile). Ou si nous voulions récupérer l’information d’un ban depuis un User, nous pourrions utiliser la méthode BanService#getBanFor(GameProfile). Un exemple de ceci est illustré ci-dessous :

import java.util.Optional;

import net.kyori.adventure.text.Component;
import org.spongepowered.api.entity.living.player.User;
import org.spongepowered.api.util.ban.Ban;

if (service.isBanned(user.getProfile())) {
    CompletableFuture<Optional<Ban.Profile>> optionalBanFuture = service.find(player.getProfile());
    optionalBanFuture.thenAccept(optionalBan -> {
        if (optionalBan.isPresent()) {
            Ban.Profile profileBan = optionalBan.get();
            Optional<Component> optionalReason = profileBan.getReason();
            if (optionalReason.isPresent()) {
                Component banReason = optionalReason.get();
            }
        }
    });
}

Créer un Ban

Alors maintenant nous pouvons obtenir le BanService et l’information sur un Ban, mais et si nous voulions créer nos propres bans ? Nous pouvons utiliser un Ban.Builder pour créer notre propre Ban. Pour récupérer un Ban.Builder, appelez simplement la méthode Ban#builder(). En utilisant notre builder, nous pouvons spécifier des choses comme le type du ban, la raison du ban, ou l”User que nous souhaitons bannir. Un exemple de toutes ces choses est illustré ci-dessous :

import org.spongepowered.api.util.ban.BanTypes;

Ban ban = Ban.builder().type(BanTypes.PROFILE).profile(user.getProfile())
    .reason(Component.text("The Sponge Council has Spoken!")).build();

Vous pouvez autrement bannir l’ip d’un joueur en ligne:

Ban ban = Ban.builder().type(BanTypes.IP)
    .address(player.getConnection().getAddress().getAddress())
    .reason(Component.text("The Sponge Council has Spoken!")).build();

Note that if you wish to create a simple, indefinite ban on a User, you can use the Ban#of(GameProfile) method or the Ban#of(GameProfile, Component) method to quickly construct a ban.

Ajouter un Ban

Maintenant que nous avons créé notre ban, nous pouvons maintenant l’enregistrer pour qu’il soit utilisé dans Sponge. À l’aide de notre BanService d’avant, nous pouvons utiliser la méthode BanService#addBan(Ban) pour accomplir ceci. Notez qu’ajouter un ban supprimera tout ban déjà existant.

Pardonner

Maintenant disons que nous voulons supprimer un ban d’un utilisateur. Nous povuons utiliser la méthode BanService#pardon(GameProfile). Cette méthode retourne un boolén, qui spécifie si l’utilisateur avait déjà un ban en place précédemment.

Tout Mettre Ensemble

Nous pouvons créer un Ban en utilisant un Ban.Builder qui est obtenu en utilisant la méthode Ban#builder(). Nous pouvons spécifier des choses comme le type, le User à bannir, ou la raison du ban. Nous pouvons simplement prendre notre BanService et l’utilisateur pour ajouter notre Ban. Voici le code complet pour faire ceci :

BanService service = Sponge.getServiceManager().provide(BanService.class).get();
Ban ban = Ban.builder().type(BanTypes.PROFILE).profile(user.getProfile())
    .reason(Component.text("The Sponge Council has Spoken!")).build();
service.addBan(ban);