Решено Почему в выдаче tab-complete показываются команды, на которые у игрока нет прав?

  • Автор темы Автор темы JonBoss
  • Дата начала Дата начала

JonBoss

Активный участник
Пользователь
Баллы
76
Ник в Minecraft
Jon
В 1.12.2 paperspigot это работало корректно. Если у игрока нет прав, то в выдаче tab-complete такую команду не показывало бы. Вот я запустил paperspigot 1.16.1 и там такая проблема имеется. Как это исправить?

CZAbQfW.png
 
я понял, это не вина ядра. это так работает ViaBackwards
на версии 1.16.1 клиенте все ок, а если зайти с 1.12.2, то команды палит
 
я понял, это не вина ядра. это так работает ViaBackwards
на версии 1.16.1 клиенте все ок, а если зайти с 1.12.2, то команды палит
Странно. Можно попробовать написать issue в гит плагина
 
А ничего ты с этим не сделаешь, лист команд приходит на клиент при входе. Иначе таб комплит вообще не будет работать в новых версиях. А уж как там затычка для динов робит хз.
 
А ничего ты с этим не сделаешь, лист команд приходит на клиент при входе. Иначе таб комплит вообще не будет работать в новых версиях. А уж как там затычка для динов робит хз.
ты не понял. на новых версиях 1.16.1 все работает как надо, а вот для 1.12.2 показывает лишние команды
 
ты не понял. на новых версиях 1.16.1 все работает как надо, а вот для 1.12.2 показывает лишние команды
Потому что 1.12.2 и меньше запрашивает комплит с сервера, и он отвечает полным списком комнад. Модифицированный клиент 1.13+ тоже так может.
 
Потому что 1.12.2 и меньше запрашивает комплит с сервера, и он отвечает полным списком комнад. Модифицированный клиент 1.13+ тоже так может.
Я не вижу проблемы, чтобы это реализовать такое. Если ViaBackwards закроют мой issue с отказом, тогда попробую сделать сам такую логику.

Для поддержки клиентов 1.12.2 ViaBackwards все равно должен обрабатывать каждый запрос на TabComplete и посылать ответ, ведь клиент 1.12.2 такие запросы отправляет. Тогда почему бы не сделать проверку на права перед отправкой ответа с командами?
 
Я не вижу проблемы, чтобы это реализовать такое. Если ViaBackwards закроют мой issue с отказом, тогда попробую сделать сам такую логику.

Для поддержки клиентов 1.12.2 ViaBackwards все равно должен обрабатывать каждый запрос на TabComplete и посылать ответ, ведь клиент 1.12.2 такие запросы отправляет. Тогда почему бы не сделать проверку на права перед отправкой ответа с командами?
Потому что ViaBackwars его не обрабатывает. Таб комлит списка комманд это поддерживаемая фича протокола майна и в 1.16.5. Потому 1.12.2 просто транслируется в 1.16.5 и дальше сервер сам разбирается.
 
Итог, не юзать костыли для входа старых версий. Да и сервер меньше лагать будет от сие костылей.
 
Итог, не юзать костыли для входа старых версий. Да и сервер меньше лагать будет от сие костылей.
Лул, не поможет. Мамкины прятатели команд вечно забывают что это фича современного протокола, пусть и неиспользуемая в ванильном клиенте. Слегка модифицировав клиент можно легко добиться прям такого же результата на обычном 1.16.5 сервере.
 
Лул, не поможет. Мамкины прятатели команд вечно забывают что это фича современного протокола, пусть и неиспользуемая в ванильном клиенте. Слегка модифицировав клиент можно легко добиться прям такого же результата на обычном 1.16.5 сервере.
Да полный список команд летит прям на входе игрока да и без модификации).
 
Да полный список команд лети прям на входе игрока да и без модификации).
Летит, но мамкипны прятатели такие как ТС его фильтруют. Но ещё можно послать просто запрос на таб комплит с пустой строкой на сервер, и он ответит списком комманд и списком игроков. Собственно в 1.12.2 это так и работало, просто в 1.13 привертели посылку команд, но старый таб комплит то не убирали.
 
Летит, но мамкипны прятатели такие как ТС его фильтруют. Но ещё можно послать просто запрос на таб комплит с пустой строкой на сервер, и он ответит списком комманд и списком игроков. Собственно в 1.12.2 это так и работало, просто в 1.13 привертели посылку команд, но старый таб комплит то не убирали.
Бедные школьники, столько попыток и все равно их сервера все под копирку)
 
Мамкины прятатели команд.
А что плохого их прятать? Какой смысл игроку видеть команды, которые ему все равно не доступны? Например, команды WorldEdit, они занимает 50% выдачи tab-complete, получается просто бесполезная простыня текста.

Я не преследую цель засекретить наличие каких-то плагинов, ваще похер на это. Просто tab-complete хочу облагородить, сделать его юзабельным.
 
А что плохого их прятать? Какой смысл игроку видеть команды, которые ему все равно не доступны? Например, команды WorldEdit, они занимает 50% выдачи tab-complete, получается просто бесполезная простыня текста.

Я не преследую цель засекретить наличие каких-то плагинов, ваще похер на это. Просто tab-complete хочу облагородить, сделать его юзабельным.
Он и так юзабельный в новых версиях. Нужны удобства, не играй со старых версий.
 
Как бы там не было, я не считаю, что это баг ядра. Ядро 1.16.1 не должно учитывать протокол 1.12.2. Если ViaBackwards так не сделает фикс у себя, тогда можно добавить такой код в свой плагин:

Код:
import com.destroystokyo.paper.event.brigadier.AsyncPlayerSendSuggestionsEvent;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class Events implements Listener {
    @EventHandler
    public void on(AsyncPlayerSendSuggestionsEvent event) {
        String buffer = event.getBuffer();
        if (buffer.startsWith("/") && !buffer.contains(" ")) {
            event.getSuggestions().getList().removeIf(suggestion -> {
                String commandString = suggestion.getText();
                commandString = StringUtils.removeStart(commandString, "/");

                Command command = Bukkit.getCommandMap().getCommand(commandString);
                if (command == null) {
                    return false;
                }

                String tabPerm = command.getPermission();
                if (tabPerm == null) {
                    return false;
                }

                return !event.getPlayer().hasPermission(tabPerm);
            });
        }
    }
}

Правда это код под paperspigot, я не знаю, есть ли альтернатива AsyncPlayerSendSuggestionsEvent в обычном spigot.
 
Тогда получается это баг ядра?
Нет никакого бага. Если ты правишь руками список посылаемых команд, то и таб комплит править тоже тебе. Никто за тебя синхронизировать 2 не очень то и связанных фичи не обязан.
А чтобы сделать tab-complete юзабельным, надо пермишены для команд регистрировать, или вписывать в yml, а не костылить подсказки.
 
Последнее редактирование:
Назад
Верх Низ