Медленная прогрузка префиксов

WinstonCode

winston.php
Пользователь
Добрый день. Использую на своей связке серверов плагины:

LuckPerms для установки группам людям префиксов (LP на спиготах и Банджи подключены к одной БД (localhost) ),
TAB для отображения префиксов,
SpigotBoard для создания борда (в котором так же отображается префикс).

Суть проблемы в том, что при заходе на начальный сервер Банджи, префиксы отображаются нормально, однако при переходе на другие сервера, префиксы появляются либо с задержкой, либо только после /lp sync, либо не появляются вовсе. В чём может быть проблема?
 

BlackBarcode13

Разработчик
offtop
Для начала очень не советую использовать LuckPerms на банже, если в нее встроена капча.
LuckPerms работает так, что даже если еще игрок находится на проверке капчи, он все-равно будет писать данные и при бот атаке это скажется анормально. Создатель плагина отказался это исправлять, аргументировав, что зачем вообще капча нужна, если есть онлайн мод

Префиксы не отображаются в чате или в табе?
 

WinstonCode

winston.php
Пользователь
mc923,
offtop Банджа с антиботом, с РуБаккита. А какие есть аналоги? (плагина на пермишн)


В табе, в чате, и в борде. (отображается там через плейсхолдер)
 

BlackBarcode13

Разработчик
WinstonCode, в чате используешь официальный плейсхолдер для префикса, надеюсь, а не как кто-то предлагал использовать дополнение к papi?
Потому что префиксы в чате и в табе две разные стихии.


Банджа с антиботом, с РуБаккита. А какие есть аналоги? (плагина на пермишн)
Лучше вообще не использовать на банже плагин на пермишены и все реализовать в пределах спигота.
 

WinstonCode

winston.php
Пользователь
mc923, Префиксы в чате делает сам Chatty. А ЛП стоит на Бандже чисто для того, чтобы считывать пермишны для Банджи-плагинов. Тот же ExploitFixer.
 

BlackBarcode13

Разработчик
Этот плагин можно и на спигот поставить.
В любом случае, в твоем случае остается только дебажить и откатывать/обновлять версии лакпермс, возможно, кривая версия.
 

BlackBarcode13

Разработчик
WinstonCode, Неправда, его нужно ставить на банжу только в том случае, если там нужны права. А от них стоит отказаться, по причине, описанной выше.
 

BuseSo

Разработчик
offtop mc923, не понимаю, о чём ты, у меня всё хорошо работает без всяких ошибок.
 

BlackBarcode13

Разработчик
BuseSo,
offtop
Щас объясню.
Java:
    @EventHandler(priority = -32)
    public void onPlayerLogin(final LoginEvent e) {
        final PendingConnection c = e.getConnection();
        if (this.plugin.getConfiguration().get(ConfigKeys.DEBUG_LOGINS)) {
            this.plugin.getLogger().info("Processing pre-login for " + c.getUniqueId() + " - " + c.getName());
        }
        if (e.isCancelled()) {
            this.plugin.getLogger().info("Another plugin has cancelled the connection for " + c.getUniqueId() + " - " + c.getName() + ". No permissions data will be loaded.");
            return;
        }
        e.registerIntent((Plugin)this.plugin.getBootstrap());
        final PendingConnection pendingConnection;
        User user;
        this.plugin.getBootstrap().getScheduler().executeAsync(() -> {
            try {
                user = this.loadUser(pendingConnection.getUniqueId(), pendingConnection.getName());
                this.recordConnection(pendingConnection.getUniqueId());
                this.plugin.getEventDispatcher().dispatchPlayerLoginProcess(pendingConnection.getUniqueId(), pendingConnection.getName(), user);
            }
            catch (Exception ex) {
                this.plugin.getLogger().severe("Exception occurred whilst loading data for " + pendingConnection.getUniqueId() + " - " + pendingConnection.getName());
                ex.printStackTrace();
                if (this.plugin.getConfiguration().get(ConfigKeys.CANCEL_FAILED_LOGINS)) {
                    e.setCancelReason(TextComponent.fromLegacyText(Message.LOADING_DATABASE_ERROR.asString(this.plugin.getLocaleManager(), new Object[0])));
                    e.setCancelled(true);
                }
                this.plugin.getEventDispatcher().dispatchPlayerLoginProcess(pendingConnection.getUniqueId(), pendingConnection.getName(), null);
            }
            e.completeIntent((Plugin)this.plugin.getBootstrap());
        });
    }
Он на LoginEvent'eначинает начинает загружать данные для игроков. Это означает, что на момент PreLoginEvent'a нужно работать с капчей, что априори невозможно, потому что невозможно получить никакие данные, кроме айпи, версии игрока и т.п.
Значит игрок, еще не пройдя капчу, уже будет подгружаться лакпермсом, что очень негативно скажется, когда уйма ботов будет пытаться соединиться к серверу и будут стоять на проверке капчи. Лакпермс их тупо будет подгружать постоянно и кранты.
 

BuseSo

Разработчик
offtop Делал со знакомым стресс-тест, ничего не виснуло и не лагало, на банжу было выделено 4Гб
 

BlackBarcode13

Разработчик
offtop
Мое дело предупредить, а окончательное решение уже принимать вам :)
Когда работал на одном популярном проекте, столкнулись с такой проблемой и даже обращались к создателю плагина. Пришлось исправлять самому ручками.
 

WinstonCode

winston.php
Пользователь
Так и какое тут может быть решение? Убрать ЛП и все БанджиПлагины с пермишнами?
 

Комнаты в чате

Верх Низ