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

  • Автор темы Автор темы Dexel
  • Дата начала Дата начала

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 даже от имени администратора, ваши сообщения не будут проходить. Как бы вы реализовали переопределение для администраторов?

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