1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Плагин [ADMN/SEC/INFO] CommandForbidden 1.0.3v Навигатор по командам, скрытие команд. [1.8-1.18.1]

Тема в разделе "Неподтвержденные плагины", создана пользователем mitya, 26 янв 2017.

  1. Автор темы
    mitya

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

    Баллы:
    66
    Предыстория:
    Собственно, есть отдельные куски кода, разбросанные по jar файлам, которые собрал в один файл.
    Этот плагин из одного такого куска.
    Функционал этого куска гибок, о чём расскажу ниже, деть то его куда-то нужно!?
    Вот, добавил комментарии к исходникам и решил выложить сюда.

    Если для кого-то будет полезен, подумаю о выкладывании и других кусков кода.

    Так же; если видели плагины с аналогичным функционалом, пишите.
    Теперь собственно об этом плагине.
    Больше конечно он актуален для серверов с донатом, но и для других конечно не лишним может быть.
    Скрыть любую команду даже от игроков с op.
    Для каждой команды можно выводить своё сообщение.
    Поддерживаются альянсы команд.
    Можно запретить всю последовательность той или иной команды так и разрешить только параметры команды.
    При этом, на консоль плагин никак не влияет.
    В консоли как есть, так всё и остаётся.
    Для серверов где раздаётся консоль в донате, плагин не актуален!
    "Да и вообще считаю это перебором, раздавать консоль, видел сервера у которых в донате консоль+, консоль премиум."​


    Теперь по порядку:
    Скрыть любую команду даже от игроков с op:
    Код:
    forbidden:
        /pl: []
    
    Будет показано сообщение по умолчанию, как для этой команды, так и для её альянсов.

    Код:
    forbidden:
        /pl:
            message: "&Разрешение у админа спросил на просмотр списка?"
    
    Будет показано сообщение из строки message:.

    Код:
    forbidden:
        /promote:
            args: true
            message: "&6Чтобы повысить игроку ранг, используй команду: &a/promote <ник игрока>"
    
    Будет показано сообщение из строки message:, для этой команды если отсутствуют параметры команды.
    Соответственно команда /promote vasya отработает!

    Если указанно:
    Код:
        args: false
    
    То параметры команды уже не сработают и будет показано сообщение.
    Соответственно и если параметр args: вообще отсутствует будет аналогичное поведение.

    Для чего так делать!?
    Всё просто, пускай некоторые подумают, что это паранойя, но лишним не будет по причине того, что; например команда: /promote без параметров показывает версию плагина, что упрощает для агрессивно настроенных псевдохакеров, найти эксплоит для того или иного плагина.
    Во многих плагинах выводиться название и версия плагина, если ввести команду без параметров.
    Не знаю для чего так делают плагинисты, псевдопиар такой, или ещё что!?
    Этим самым мы в корне усложняем жизнь таким гостям сервера.
    И одновременно не ограничиваем игроков в функционале команд или минимум ограничиваем.

    Теперь об гибкости.
    Тот же NoCheatPlus не позволяет такого делать, только одно сообщение для всех запрещённых команд.
    Что лишает возможности сделать например:
    У нас работала команда /donate и по каким-то причинам мы решили данную команду переименовать в /donat.
    Прописываем в файле:​
    Код:
    forbidden:
        /donate:
            message: "&6Используй команду: &a/donat &6/donate больше не используется на данном сервере."
    

    Собственно это основное, в остальном в конфиге разобраться не сложно.

    Кто-то может сказать: "так есть же commands.yml!".
    Да, есть, но его ограничения распространяются и на консоль тоже, что в принципе нам не нужно, так как за консолью сидит только один доверенный человек.

    Вообще из данного плагина не плохое начало для написания плагина на чистый и контролируемый донат. Запретить всё и разрешить только то, что мы разрешим явно для той или иной группы. Но это просто идея.

    Плагин принимает единственную команду на перезагрузку конфигурационного файла.
    Чтобы не перезагружать сервер после изменения конфига.
    /cforbidden reload

    Его permissions:
    Использовать перезагрузку конфигурационного файла из чата, сможет только тот у кого прописан permission cforbidden.bypass
    По умолчанию запрещено всем, даже операторам!
    Нужно прописывать явно.

    На консоль этот permission не действует!
    У консоли полные права.

    Так же в исходниках имеются комментарии, что будет полезно для начинающих.
    Принимаются жалобы, критика, пожелания!


    Version 1.0:
    • Собственно релиз.
    Version 1.01:
    • Поправил проверку на то, от кого пришла команда, с консоли или от того у кого явно присутствует permissions
    Version 1.02:
    • Добавлена совместимость с другими плагинами, делающее похожее.
    • Небольшая оптимизация кода
    Version 1.03:
    • Перекомпиляция.)


    Скачать:
    jar не в архиве
    SHA-1: 3C8ADD98576965DE011471A7FD6AD5FC6B1A73CD

    jar в архиве
    SHA-1: ED4CE779F6C0642CE7DE96A0779CF4278C064FDB

    src
    SHA-1: 80117D36FE52267CFCA0A8297F6C9BBC280048AA

    Всё вместе
    SHA-1: EDDF7F00D54F6876EE79C885407EBD8AD00C8BD3
     
    Последнее редактирование: 7 дек 2021
  2. jwplaster

    jwplaster Старожил Пользователь

    Баллы:
    173
    Skype:
    jwplaster.smartworld
    Имя в Minecraft:
    QviNSteN
    В help команды по-прежнему отображаются?
     
  3. Автор темы
    mitya

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

    Баллы:
    66
    Не изменят результат выполнения команды.
    Как раз для helpa можно использовать и commands.yml.
    В стандартном выводе хелпа тоже много лишней инфы бывает
     
  4. Warluson

    Warluson Ньюби

    Баллы:
    1
    Имя в Minecraft:
    Warluson
    upload_2017-1-26_17-0-35.png
    Хах, ты знаешь что будет когда я зайду под ником CONSOLE? :)
     
  5. Автор темы
    mitya

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

    Баллы:
    66
    Ничего страшного не будет, самое большое перезагрузить конфиг получится.
    Уже перезалил архивы без этой строчки.
    А вообще, хорошая практика запрещать возможно компрометирующие ники
     
    Последнее редактирование: 27 янв 2017
  6. GoogleKiller

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

    Баллы:
    66
    Имя в Minecraft:
    Google_Killer
    Код:
    if(!sender instanceof Player){
      //kod
    }
    
    P.S. Скиньте свой вк)
     
    Последнее редактирование: 28 янв 2017
  7. AtomicInteger

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

    Баллы:
    76
    Сейчас налетят и скажут что нет такого Plauer :D
     
  8. Автор темы
    mitya

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

    Баллы:
    66
    Что этим хотели сказать?
    Зачем подобная проверка, если консоль не ограничивается никак
     
  9. GoogleKiller

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

    Баллы:
    66
    Имя в Minecraft:
    Google_Killer
    То, что надёжнее проверять не отправлена ли команда из консоли таким методом, нежели через имя.)
     
  10. Автор темы
    mitya

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

    Баллы:
    66
    Спасибо
     
  11. xDark

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

    Баллы:
    96
    sender.equals(Bukkit.getConsoleSender())
    this.getConfig().options().copyDefaults(true);
    Не нужно.
    if (cmd.getName().equalsIgnoreCase("cforbidden"))
    Не нужно x2
    final Set<String> keys =
    config.getKeys(false);
    Мммм ок, dos.
     
  12. Автор темы
    mitya

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

    Баллы:
    66
    Новая инфа.
    Код:
    sender.equals(Bukkit.getConsoleSender())
    
    Что за чудо Bukkit.getConsoleSender() ?

    c
    Код:
    this.getConfig().options().copyDefaults(true);
    
    Понятно, зачем лишнее чтение конфига если и так параметры по ходу выуживает.

    если убрать:
    Код:
    if (cmd.getName().equalsIgnoreCase("cforbidden"))
    
    то при инициализации команды будут 2 проверки срабатывать а не одна, или как?
    да и возможность добавления своих команд пропадает.

    Последнее вообще не понял!
    Или, так - зов сердца просто!?
     
  13. xDark

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

    Баллы:
    96
    Если команда одна - то проверка на ее имя не требуется
    Консоль
    equals(object) быстрее работает, чем instanceof
     
  14. CrazyCaopS

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

    Баллы:
    61
    Имя в Minecraft:
    CrazyCaopS
    ТОП ПЛАГИН!
    С помощью него, запретил все команды и приписал свои сообщения! СПАСИБО!
     

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