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

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

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
​
 
Последнее редактирование:
В help команды по-прежнему отображаются?
 
В help команды по-прежнему отображаются?
Не изменят результат выполнения команды.
Как раз для helpa можно использовать и commands.yml.
В стандартном выводе хелпа тоже много лишней инфы бывает
 
upload_2017-1-26_17-0-35.png
Хах, ты знаешь что будет когда я зайду под ником CONSOLE? :)
 
Посмотреть вложение 44745
Хах, ты знаешь что будет когда я зайду под ником CONSOLE? :)

Ничего страшного не будет, самое большое перезагрузить конфиг получится.
Уже перезалил архивы без этой строчки.
А вообще, хорошая практика запрещать возможно компрометирующие ники
 
Последнее редактирование:
Ничего страшного не будет, самое большое перезагрузить конфиг получится.
Уже перелазил архивы без этой строчки.
А вообще, хорошая практика запрещать возможно компрометирующие ники
Java:
if(!sender instanceof Player){
  //kod
}
P.S. Скиньте свой вк)
 
Последнее редактирование:
Что этим хотели сказать?
Зачем подобная проверка, если консоль не ограничивается никак

То, что надёжнее проверять не отправлена ли команда из консоли таким методом, нежели через имя.)
 
Java:
if(!sender instanceof Player){
  //kod
}
P.S. Скиньте свой вк)
sender.equals(Bukkit.getConsoleSender())
this.getConfig().options().copyDefaults(true);
Не нужно.
if (cmd.getName().equalsIgnoreCase("cforbidden"))
Не нужно x2
final Set<String> keys =
config.getKeys(false);
Мммм ок, dos.
 
sender.equals(Bukkit.getConsoleSender())
this.getConfig().options().copyDefaults(true);
Не нужно.
if (cmd.getName().equalsIgnoreCase("cforbidden"))
Не нужно x2
final Set<String> keys =
config.getKeys(false);
Мммм ок, dos.

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

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

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

Последнее вообще не понял!
Или, так - зов сердца просто!?
 
Новая инфа.
Код:
sender.equals(Bukkit.getConsoleSender())
Что за чудо Bukkit.getConsoleSender() ?

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

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

Последнее вообще не понял!
Или, так - зов сердца просто!?
Если команда одна - то проверка на ее имя не требуется
Что за чудо Bukkit.getConsoleSender() ?
Консоль
equals(object) быстрее работает, чем instanceof
 
ТОП ПЛАГИН!
С помощью него, запретил все команды и приписал свои сообщения! СПАСИБО!
 

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

Назад
Верх