Banne

Der BanService ist ein Dienst, der bereits in der SpongeAPI integriert ist. Dieser fügt die Funktionalität des Bannes und Begnadigens von Benutzer hinzu. Der BanService bietet einige Methoden, um Benutzer zu bannen, zu begnadigen oder den Ban an sich und mit dem verbundene Informationen zu erhalten.

Tipp

Zum grundsätzlichen Verstehen von Services lies bitte zuerst Dienste.

Den BanService erhalten

Du musst dir erst den BanService holen, um jemanden vom Server zu bannen. Glücklicherweise kann dies in der SpongeAPI genauso gemacht werden wie für andere Services auch:

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

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

Nun mit dem BanService können wir zusätzliche Aktionen ausführen. Zum Beispiel, wenn wir prüfen wollen, ob ein bestimmter User bereits gebannt ist, können wir die BanService#isBanned(GameProfile) Methode verwenden. Möglicherweise wollen wir herausfinden, warum ein User gebannt wurde, hierfür können wir die BanService#getBanFor(GameProfile) Methode verwenden. Ein Beispiel hierfür wird hier drunter gezeigt:

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();
            }
        }
    });
}

Einen Bann erstellen

So nun können wir den BanService und Informationen über Banne abrufen, aber was ist, wenn wir unseren eigenen Bann aussprechen wollen? Wir können einen Ban.Builder verwenden, um unseren eigenen Bann zu erstellen. Um einen Ban.Builder zu bekommen, müssen wir nur die Ban#builder() Methode aufrufen. Mit Hilfe des Builders, können wir angeben, welche Art von Bann wir aussprechen wollen, sowie den Grund dafür, als auch den User , den wir bannen möchten. Das nachfolgende Beispiel zeigt all dies:

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();

Alternativ kann du auch eine IP eines Spielers bannen, der gerade online ist:

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.

Einen Bann hinzufügen

Nun, da wir unseren Ban erstellt haben, müssen wir ihn registrieren, damit Sponge ihn beachten kann. Mit dem BanService von vorhin, müssen wir die BanService#addBan(Ban) aufrufen, damit dies geschieht. Bitte beachte, dass das Hinzufügen eines Bannes bereits existierende Banne entfernt.

Verzeihen

Nun, lass uns annehmen, dass wir den Bann eines Spielers aufheben wollen. Hierfür können wir die BanService#pardon(GameProfile) Methode nutzen. Diese Methode gibt einen Boolean zurück, der angibt, ob der Spieler zuvor gebannt war oder nicht.

Alles Zusammensetzen

Wir können einen Bann erstellen, indem wir einen Ban.Builder verwenden, den wir von der Ban#builder() Methode erhalten haben. Wir können die Art des Bannes, den zu bannenden User und den Grund für den Bann angeben. Anschließend nehmen wir den BanService und verwenden ihn, um unseren Bann hinzuzufügen. Hier ist der vollständige Code, um dies zu erreichen:

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);