Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Стартап [ПЕРЕВОД] Простой мут в чате

Переводить ли статьи со SpigotMC дальше?

  • Да — это нужно русскому сообществу разработчиков.

    2 голосов 66,7%
  • Да — статью на русском читать легче, чем на английском.

    1 голосов 33,3%
  • Нет — это уже неактуально и является "баяном".

    0 голосов 0,0%
  • Нет — подавляющее большинство разработчиков знают английский.

    0 голосов 0,0%
  • Да — другое.

    1 голосов 33,3%
  • Нет — другое.

    0 голосов 0,0%

  • Опрос закрыт .

Dexel

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
SiRiuS_OSiRiuS
ПРОСТОЙ МУТ В ЧАТЕ
Как работать с чатовыми событиями
--------------------------------------------------------------
​
В этой статье мы создадим простой плагин, отключающий чат на вашем сервере. В конце статьи вы найдёте несколько упражнений, выполнив которые самостоятельно, вы улучшите свой плагин.

ОСНОВЫ
Самое простое, с чего мы начнём - создадим небольшой пример, отменяющий событие. Скоро это нам пригодится, так давайте же взглянем на то, как мы отменяем чатовое событие.

В данном случае мы используем AsyncPlayerChatEvent, и мы бы хотели отменять все эти события. Фактически, код ниже удалит чат на сервере. Давайте взглянем на него.
Java:
@EventHandler
public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
    event.setCancelled(true);
}
Мы не будем обсуждать, как зарегистрировать Listener, но если вы установили такой плагин, чат должен отключиться.

ДОБАВЛЕНИЕ ПЕРЕКЛЮЧАТЕЛЯ
Будет потно, если вам придётся ставить этот плагин всякий раз, когда вы захотите заглушить чат, не так ли? Давайте добавим команду для переключения! Сперва пересмотрим наш Listener:
Java:
private volatile boolean chatEnabled = true;

@EventHandler
public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
    if (!chatEnabled) {
        event.setCancelled(false);
    }
}
Сейчас мы поменяли проверку и добавили новое поле. Обратите внимание, что для поля chatEnabled необходим именно volatile просто потому, что чатовое событие протекает асинхронно (отдельно от серверного потока).

Теперь мы можем добавить наш обработчик команды (добавление команды в plugin.yml не является целью данной статьи). Давайте представим, что наш Listener и Plugin являются одним классом:
Java:
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        // Проверяем, какая команда была только что введена
        if (cmd.getName().equalsIgnoreCase("mutechat")) {
            // Меняем chatEnabled на ему противоположный
            chatEnabled = !chatEnabled;
            // Смотрим: если chatEnabled приняло значение true, выводим 'Включён чат', если нет, то выводим 'Отключён чат'
            sender.sendMessage(ChatColor.GREEN + (chatEnabled ? "Включён чат" : "Отключён чат"));
        }
        // Всегда возвращаем true, так как больше нет фактических использований, кроме как просто названия команды
        return true;
}

Когда этот плагин запущен, вы легко сможете использовать /mutechat для отключения чата, и ещё раз для его включения. Это так просто!

УПРАЖНЕНИЯ
  • Как бы вы улучшили структуру этого плагина?
  • Как бы вы сделали так, чтобы все отправленные в чат сообщения обрабатывались, но были видны только отправителю?
  • Обратите внимание, мы не сделали проверку на право. Как бы вы реализовали проверку на наличие прав для ввода команды /mutechat?
  • Если вы используете /mutechat даже от имени администратора, ваши сообщения не будут проходить. Как бы вы реализовали переопределение для администраторов?

Просьба уведомить меня в ЛС о наличии смысловых ошибок/ошибок в переводе
 
Последнее редактирование:
Если честно, то подобного и на ру хватает. Поищи такое, чего здесь мало.
Вот к примеру... Работу с пакетами. Вот я бы хотел про них узнать по больше.
 
Если честно, то подобного и на ру хватает. Поищи такое, чего здесь мало.
Вот к примеру... Работу с пакетами. Вот я бы хотел про них узнать по больше.
Темы про пакеты в списке статей, которые я решил перевести, нет. Возможно, пакеты будут затрагиваться в какой-то из тем, но отдельной темы про пакеты нет.
 
Если честно, то подобного и на ру хватает. Поищи такое, чего здесь мало.
Вот к примеру... Работу с пакетами. Вот я бы хотел про них узнать по больше.
Качаешь протоколлиб и пакетврапер к нему. Все просто и понятно.
 

Поделиться этой страницей

Назад
Верх