Плагин Защита FunctionalServerControl [1.09.3]

Версия 1.09.3
Еще одно небольшое обновление:
1. Исправлена проблема ошибка при загрузке PacketEventsAPI на новых версиях

2. Исправлено пару найденных багов

3. Изменена методика блокировки команд(в файле commands-limiter.yml)
Теперь метод проверки указывается для каждой команды отдельно! (Тестируется)
Пример:

YAML:
global:
    deny-message: "&cДанная команда заблокирована"
    use-as-whitelist: false
    group:
      default:
     - /commands[checkMode=first_arg] # Если вы установите неизвестный метод проверки, будет использован метод "first_arg"
      - /to # Если "[checkMode={mode}" не установено, автоматически используется "first_arg"
      - /ban ALis[checkMode=all_args] # Если длина команды больше одного слова, стоит использовать метод "all_args"
      moder:
     - /be[checkMode=first_arg]
      - /blocked[checkMode=first_arg]

Версия 1.09.2
  • Исправлено пару моментов с текстом без цвета
  • Исправлено в уведомлении о ошибке плагина 'UnknownException' (вроде)
  • Исправлены проблемы с запуском на низких версиях
  • Еще немного асинхрона.

Версия 1.09.1
Что изменилось:
  • Исправлен баг с командой /cheatcheck
  • Добавил ресурс на spigotmc.org и с его API через другое API добавил проверку новых версий плагина
Прежде всего, хотелось бы сказать что эта версия наврядли стабильная и тут для меня правда важно чтобы вы сообщали о найденых ошибках!

И так, что изменилось:

  • ProtocolLib теперь нужен лишь для новой функции item-fixer, позже не будет нужен вообще(Но если он присутствует на сервере, плагин будет автоматически использовать его в любом случае)
  • Добавлена возможность ограничить кол-во пакетов исходящих от игрока за определенный период
  • Возможность защиты аккаунтов с использованием IP-адресов(Используйте только если у Вас статический IP-адрес)
  • Контроль пинга игрока
  • Защита от краша с помощью бага кафедры(не требуется на версиях выше 1.18)
  • Защита от "читерских" предметов(ItemFixer от Leymooo, требуется ProtocolLib

Права:
  • functionalservercontrol.protection.packets.bypass - игрок с данным правом может отправлять неограниченное кол-во пакетов на сервер
  • functionalservercontrol.notification.player-over-packets - игроки с данным правом получат уведомление при превышении игроком максимального кол-ва пакетов
  • functionalservercontrol.notification.protected-account - игроки с этим правом получает уведомление, когда на защищенный аккаунт попытается зайти игрок с другим IP-адресом
  • functionalservercontrol.itemfixer.enchantments.bypass - игроки с данным правом могут использовать все нестандартные зачарования
  • functionalservercontrol.itemfixer.<enchant>.bypass - игроки с данным правом могут использовать указанные в праве нестандартные зачарования
  • functionalservercontrol.itemfixer.nbt.bypass - у игроков с данным правом предмет не проверяется на нестандартные NBT теги
  • functionalservercontrol.notification.plugin-error - игроки с данным правом получат уведомление при нахождении ошибки в плагине(но это не точно =D )
  • functionalservercontrol.notification.lectern-crash - игроки с данным правом получат уведомление при попытке каким-либо игроков "крашнуть" при помощи бага кафедры
  • functionalservercontrol.itemfixer.potion.bypass - у игроков с данным правом не будут проверяться зелья на нестандартные эффекты, длительность
Еще раз попрошу сообщать о найденных багах.

Опять таки, если ничего не забыл, то все :)
Чтож, теперь файлы обновлять самостоятельно НЕ НУЖНО! Этим займется встроенное автообновление файлов.Правда, оно еще в тестировании, возможен неверный сбор конфигурации.

Что убрано:

1. Флаг '-a' так как использовался только в команде /ban и не особо нужен,если нужно, сделаю /banall

Что добавлено:
1. Право functionalservercontrol.unmute.offline - т.е. теперь игроки без этого права не смогут размутить оффлайн игроков
2. Команда /fsc inetspeed - которая подсчитает скорость интернета на вашем сервере
3. Право functionalservercontrol.inetspeed - доступ к команде "/fsc inetspeed"
4. Право functionalservercontrol.clients.bypass - игроки с этим правом могут заходить используя запрещенный клиент
5. В конфиг добавлена возможность включить асинхронный режим проверки, но при нем естественно проверка займет немного больше времени
6. Команда /deviceinfo <server/machine> - с помощью данной команды можно узнать некоторую информацию о Вашем сервере или машине на которой он стоит
7. Право functionalservercontrol.deviceinfo - доступ к команде "/deviceinfo"
8. Добавлена возможность блокировать клиенты Lunar, Badlion
9. Добавлена возможность разбанить/размутить игроков используя ID блокировки/мута, примеры:
/unmute -id 101010, /unmute -id -s 121212, /unban -id 102321, /unban -s -id 2134

Насчет подсчета TPS для команды /deviceinfo server, подсчет ведется в асинхронном режиме, т.к. я решил что нагрузка былая не плохая во время синхронного подсчета, так что я бы не сильно доверял показаниям TPS из этой команды(могут быть погрешности)

И просто чтобы было, те кто используют команду /reload или Plugman для перезагрузки данного плагина, можете даже не писать об ошибках которые возникают после перезагрузки!!!

Если я чего-то не забыл, то пока все!)
Собсна, из нового только поддержка MySQL

Пересоздайте файлы, или добавьте в конфиге general.yml рядом с storage-method: "sqlite"(а точнее под ним) вот это:
Код:
Код:
mysql:
  host: "127.0.0.1"
  port: "3306"
  username: "root"
  password: "password"
  database_name: "name"
Для начала использования MySQL достаточно в параметре storage-method установить значение 'mysql'
Т.е.: storage-method: "mysql"

И прежде чем репортить об ошибках с MySQL убедитесь что вы все верно ввели в конфиге.
Это не то что бы обновление, ничего нового в плагин я не внедрил, лишь исправил пару недочетов

Больше это обновление связано с API
А точнее теперь оно не только в ивентах заключается.
Тем кто будет его использовать(вдруг), оно находится в паке
by.alis.functionalservercontrol.api.FunctionalAPI <- класс самого API(интерфейс точнее)
by.alis.functionalservercontrol.api.events <- здесь находятся ивенты.

Функционал у этой версии API не велик, но все же пробегимся по этой паре функций
Пример получения API:
Java:
public class SomeYourClass {

 

    private FunctionalApi api; //Создаем глобальнуя переменную API для дальнейшего ее получения

 

    public boolean setupFunctionalApi() {
        api = FunctionalApi.get(); //Получаем API
        return api != null ? true : false; //Проверяем, удались ли получить api и если да, возвращаем true
        //Проверять на null обязательно, так как оно может быть отключено конфигом
    }

    //Создаем getter для апи
    public FunctionalApi getFunctionalApi() {
        return this.api;
    }
}

Пример работы с банами(с мутами также только FunctionalMuteEntry и api.getMutes(); ):
Java:
public class YourSomeClass {
 
    public void unbanPlayerIfHeALis() {
        FunctionalApi api = FunctionalApi.get(); //Получаем FunctionalApi
        if(api != null) { //Проверяем не равно ли api нулю(null)
            for(FunctionalBanEntry banEntry : api.getBans()) { //Перебираем список банов
                if(banEntry.getName().equalsIgnoreCase("ALis")) { //Проверяем, является ли имя забанненого игрока в данном спике ALis
                    banEntry.unban(); //И если является, снимаем бан
                    return;
                }
            }
        } else {
            getConsoleSender().sendMessage("Не удалось получить FunctionalApi!"); //Выводим сообщение, о том что не удалось получить FunctionalApi
            return;
        }
    }
 
}
Пример работы со статистикой:
Java:
public class YourSomeClass {

    public String sendStatisctic(Player player) {
        FunctionalApi api = FunctionalApi.get();
        if(api != null) {
            String wasBanned = api.getPlayerStatistics().getAsPlayer(player).get(StatsType.Player.STATS_BANS);
            String preformBan = api.getPlayerStatistics().getAsAdmin(player).get(StatsType.Administrator.STATS_BANS)
            String advertiseAttempts = api.getPlayerStatistics().getAsPlayer(player).get(StatsType.Player.ADVERTISE_ATTEMPTS)
            return "Был забанен " + wasBanned + " раз; Банил: " + preformBan + " раз; Пытался рекламировать: " + advertiseAttempts + " раз;"
            //Это не все виды статистики, просто не думаю что есть смысл все тут перечислять
        } else {
            getConsoleSender().sendMessage("Не удалось получить FunctionalApi");
            return;
        }
    }
}

Так же в интерфейсе есть метод FunctionalApi#getCoreAdapter();
Но, думаю от него смысла особо нет, он просто ничего нового не добавляет, нужен скорее самому плагину, он позволяет использовать некоторые функции которых нету в Spitog/Paper API на очень низких версиях сервера
Сразу хочется сказать, что нововведений не будет до того момента, пока я не сделаю данную версию максимально стабильной, по этому просьба отписывать при нахождении багов и т.п., неважно куда.

Необходимо пересоздать файлы конфигурации, или по примеру с GitHub дополнить старые(что не очень легко думаю)


Новые команды:
  • /fsc getstatistic <player/admin> <игрок> - показывает статистику игрока в качестве администратора или обычного игрока
  • /clearchat <игрок/all> очищает чат игроку/всем

Новые возможности:
  • Теперь, если забаненный(не по IP игрок) зайдет на сервер под другим ником, администраторы с соответствующим правом получат об этом уведомление
  • Достаточно функциональная защита от рекламы(была помещена в новый конфигурационный файл chat-settings.yml, что не логично немного вышло): с помощью которой можно предотвратить рекламирование IP-адресом или доменом в сообщениях чата, командах, названиях/лорах предметов, в книгах и на табличках
  • Защита чата от спама(т.е. ограничение сообщений за определенное кол-во времени), возможность ограничения повторяющихся сообщений, возможность замены определенного текста в сообщении на указанный текст в конфиге
  • В истории теперь сохраняется дата и время записи в историю(в конфиге соответствующие плейсхолдеры)
  • Теперь в большинстве уведомлениий(если версия сервера от 1.16) при наведении на них, доступна информация о игроке(сколько раз был забанен, кикнут и т.п.)
  • Переделан функционал кнопок в уведомлениях, теперь если админ имеет право например банить + банить без причины - то при нажатии на кнопку, игрок сразу забанен, а если админ может банить, но не может банить без причины - то кнопка просто введет команду в чат, где админ сам допишет причину(так же и с мутами/киками)
  • В API добавлен ивент PlayerAdvertiseEvent который вызывается при попытке игрока прорекламировать что-либо с помощью IP/домена
  • Исправлены некоторые старые баги
  • По классике добавлна куча новых.
Новые права:
  • functionalservercontrol.notification.same-ip - игрок с данным правом получит уведомление, когда забаненный игрок зайдет под другим ником
  • functionalservercontrol.clearchat - доступ к команде /clearchat
  • functionalservercontrol.clearchat.bypass -для игрока с данным правом нельзя очистить чат
  • functionalservercontrol.clearchat.all - разрешает использовать /clearchat all
  • functionalservercontrol.chat.messages-replaces.bypass - у данного игрока слова в сообщении которые должны замениться, не будут заменены.
  • functionalservercontrol.chat.delay.bypass - на игрока с данным правом не действует задержка чата
  • functionalservercontrol.chat.repeating-message.bypass - игрок с данным правом может писать повторяющиеся сообщения в чате
  • functionalservercontrol.chat.blocked-words.bypass - игрок с данным правом может использовать запрещенные слова в чате
  • functionalservercontrol.books.blocked-words.bypass - игрок с данным правом может использовать запрещенные слова в книгах
  • functionalservercontrol.signs.blocked-words.bypass - игрок с данным правом может использовать запрещенные слова на табличках
  • functionalservercontrol.commands.blocked-words.bypass - игрок с данным правом может использовать запрещенные слова в командах
  • functionalservercontrol.items.blocked-words.bypass - игрок с данным правом может использовать запрещенные слова в названии/лоре предмета
  • functionalservercontrol.notification.blocked-word - игрок с данным правом получит уведомление когда кто-то попытается использовать запрещенное слово
  • functionalservercontrol.notification.blocked-command - игрок с данным правом получит уведомление когда кто-то попытается использовать запрещенную команду
  • functionalservercontrol.notification.advertise - игрок с данным правом получит уведомлениие когда кто-то попытается прорекламировать IP/Домен
  • functionalservercontrol.getstatistic - доступ к команде /fsc getstatistic
  • functionalservercontrol.advertise.chat.bypass - игрок с данным правом может использовать айпи/домен в чате
  • functionalservercontrol.advertise.signs.bypass - игрок с данным правом может использовать айпи/домен на табличке
  • functionalservercontrol.advertise.items.bypass - игрок с данным правом может использовать айпи/домен в названии/лорах предметов
  • functionalservercontrol.advertise.commands.bypass - игрок с данным правом может использовать айпи/домен в командах
  • functionalservercontrol.advertise.books.bypass - игрок с данным правом может использовать айпи/домен в книгах
ВерхНиз