Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Dexel, 27 май 2017.

?

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

Голосование закрыто 3 июн 2017.
  1. Да — это нужно русскому сообществу разработчиков.

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

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

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

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

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

    0 голосов
    0,0%
Можно выбрать сразу несколько вариантов.
  1. Автор темы
    Dexel

    Dexel Активный участник Пользователь

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

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

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

    ДОБАВЛЕНИЕ ПЕРЕКЛЮЧАТЕЛЯ
    Будет потно, если вам придётся ставить этот плагин всякий раз, когда вы захотите заглушить чат, не так ли? Давайте добавим команду для переключения! Сперва пересмотрим наш Listener:
    Код:
    private volatile boolean chatEnabled = true;
    
    @EventHandler
    public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
        if (!chatEnabled) {
            event.setCancelled(false);
        }
    }
    Сейчас мы поменяли проверку и добавили новое поле. Обратите внимание, что для поля chatEnabled необходим именно volatile просто потому, что чатовое событие протекает асинхронно (отдельно от серверного потока).

    Теперь мы можем добавить наш обработчик команды (добавление команды в plugin.yml не является целью данной статьи). Давайте представим, что наш Listener и Plugin являются одним классом:
    Код:
    @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 даже от имени администратора, ваши сообщения не будут проходить. Как бы вы реализовали переопределение для администраторов?

    Просьба уведомить меня в ЛС о наличии смысловых ошибок/ошибок в переводе
     
    Последнее редактирование: 28 май 2017
  2. Хостинг MineCraft
    <
  3. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    46
    Если честно, то подобного и на ру хватает. Поищи такое, чего здесь мало.
    Вот к примеру... Работу с пакетами. Вот я бы хотел про них узнать по больше.
     
  4. Автор темы
    Dexel

    Dexel Активный участник Пользователь

    Баллы:
    76
    Skype:
    the_osirius
    Темы про пакеты в списке статей, которые я решил перевести, нет. Возможно, пакеты будут затрагиваться в какой-то из тем, но отдельной темы про пакеты нет.
     
  5. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Качаешь протоколлиб и пакетврапер к нему. Все просто и понятно.
     

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