Баны
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);