Баны

BanService — это служба, встроенная в SpongeAPI, которая добавляет функции для блокировки и разблокировки пользователей в ваш плагин. BanService предоставляет несколько методов, такие как блокировка пользователей, разблокировка пользователей, или даже получении Ban и информацию насчет Ban.

Совет

Для основного понимания предоставляемых услуг, пожалуйста, сначала прочитайте Сервисы.

Получение BanService

Вам нужно получить BanService, чтобы добавлять баны на сервер. К счастью, это можно сделать аналогично другим сервисам в Sponge API:

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

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

Теперь с помощью BanService мы можем выполнять дополнительные операции. Например, если мы хотим проверить, что предоставленный :javadoc: User уже забанен, мы можем использовать метод BanService#isBanned(GameProfile). Если мы хотим получить информацию о бане User, мы можем использовать метод BanService#getBanFor(GameProfile). Пример показан ниже:

import java.util.Optional;

import org.spongepowered.api.entity.living.player.User;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.util.ban.Ban;

if (service.isBanned(user.getProfile())) {
    Optional<Ban.Profile> optionalBan = service.getBanFor(player.getProfile());
    if (optionalBan.isPresent()) {
        Ban.Profile profileBan = optionalBan.get();
        Optional<Text> optionalReason = profileBan.getReason();
        if (optionalReason.isPresent()) {
            Text banReason = optionalReason.get();
        }
    }
}

Создание блокировки

Итак, теперь мы можем получить BanService и информацию о Ban, но что, если мы хотим создать собственный бан? Мы можем использовать Ban.Builder, чтобы создать собственный` Ban`. Для получения Ban.Builder, вызовите метод Ban#builder(). Используя наш строитель, мы можем указать такие вещи, как тип бана, причину бана или User, которого мы хотим забанить. Ниже приведен пример:

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

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

Кроме того, вы можете указать ip-бан для онлайн игрока:

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

Обратите внимание, что если вы хотите создать простой, бессрочный бан User, вы можете использовать метод Ban#of(GameProfile) или метод Ban#of(GameProfile, Text) для быстрого создания бана.

Добавление блокировки

Теперь, когда бан создан, его необходимо зарегистрировать в Sponge. Используя наш BanService, и метод BanService#addBan(Ban). Обратите внимание, что добавление бана удалит любой ранее существующий бан.

Разблокировка

Теперь скажем, мы хотим разбанить пользователя. Мы можем использовать метод BanService#pardon(GameProfile). Этот метод возвращает логическое значение, которое указывает, был ли у пользователя бан ранее.

Повторение пройденного

Мы можем создать Ban, используя Ban.Builder, полученный с помощью метода Ban#builder(). Мы можем указать такие параметры, как тип, User, который будет забанен, или причину бана. Затем мы получаем BanService и используем его, чтобы добавить наш Ban. Вот полный код:

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