Баны

The BanService is a service built into SpongeAPI that adds the functionality for you to ban or pardon users in your plugin. The BanService provides several methods to do things such as banning users, pardoning users, or even getting a Ban and the information on the Ban.

Совет

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

Получение BanService

You will need to get the BanService to actually add bans to the server. Fortunately, this can be done similarly to other services in SpongeAPI:

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