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

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

Тема в разделе "Помощь", создана пользователем JonBoss, 14 фев 2021.

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

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

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

    [​IMG]
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Попробуй обновиться до 1.16.5
     
  3. Автор темы
    JonBoss

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

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    я понял, это не вина ядра. это так работает ViaBackwards
    на версии 1.16.1 клиенте все ок, а если зайти с 1.12.2, то команды палит
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Странно. Можно попробовать написать issue в гит плагина
     
  5. Автор темы
    JonBoss

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

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
  6. alexandrage

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

    Баллы:
    173
    А ничего ты с этим не сделаешь, лист команд приходит на клиент при входе. Иначе таб комплит вообще не будет работать в новых версиях. А уж как там затычка для динов робит хз.
     
  7. Автор темы
    JonBoss

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

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    ты не понял. на новых версиях 1.16.1 все работает как надо, а вот для 1.12.2 показывает лишние команды
     
  8. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Потому что 1.12.2 и меньше запрашивает комплит с сервера, и он отвечает полным списком комнад. Модифицированный клиент 1.13+ тоже так может.
     
  9. Автор темы
    JonBoss

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

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    Я не вижу проблемы, чтобы это реализовать такое. Если ViaBackwards закроют мой issue с отказом, тогда попробую сделать сам такую логику.

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

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Потому что ViaBackwars его не обрабатывает. Таб комлит списка комманд это поддерживаемая фича протокола майна и в 1.16.5. Потому 1.12.2 просто транслируется в 1.16.5 и дальше сервер сам разбирается.
     
  11. alexandrage

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

    Баллы:
    173
    Итог, не юзать костыли для входа старых версий. Да и сервер меньше лагать будет от сие костылей.
     
  12. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Лул, не поможет. Мамкины прятатели команд вечно забывают что это фича современного протокола, пусть и неиспользуемая в ванильном клиенте. Слегка модифицировав клиент можно легко добиться прям такого же результата на обычном 1.16.5 сервере.
     
  13. alexandrage

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

    Баллы:
    173
    Да полный список команд летит прям на входе игрока да и без модификации).
     
  14. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Летит, но мамкипны прятатели такие как ТС его фильтруют. Но ещё можно послать просто запрос на таб комплит с пустой строкой на сервер, и он ответит списком комманд и списком игроков. Собственно в 1.12.2 это так и работало, просто в 1.13 привертели посылку команд, но старый таб комплит то не убирали.
     
  15. alexandrage

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

    Баллы:
    173
    Бедные школьники, столько попыток и все равно их сервера все под копирку)
     
  16. Автор темы
    JonBoss

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

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    Тогда получается это баг ядра?
     
  17. Автор темы
    JonBoss

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

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    А что плохого их прятать? Какой смысл игроку видеть команды, которые ему все равно не доступны? Например, команды WorldEdit, они занимает 50% выдачи tab-complete, получается просто бесполезная простыня текста.

    Я не преследую цель засекретить наличие каких-то плагинов, ваще похер на это. Просто tab-complete хочу облагородить, сделать его юзабельным.
     
  18. alexandrage

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

    Баллы:
    173
    Он и так юзабельный в новых версиях. Нужны удобства, не играй со старых версий.
     
  19. Автор темы
    JonBoss

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

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    Как бы там не было, я не считаю, что это баг ядра. Ядро 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.
     
  20. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Нет никакого бага. Если ты правишь руками список посылаемых команд, то и таб комплит править тоже тебе. Никто за тебя синхронизировать 2 не очень то и связанных фичи не обязан.
    А чтобы сделать tab-complete юзабельным, надо пермишены для команд регистрировать, или вписывать в yml, а не костылить подсказки.
     
    Последнее редактирование: 4 мар 2021

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