Войти или зарегистрироваться

Помогите Скрытие определенных команд при нажатии на таб

  • Автор темы Автор темы ReloGGrc
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

ReloGGrc

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
ALis
В общем, есть команды плагина которые пользователь может по желанию скрыть, но как это организовать? (Скрыть не аргументы, а именно команды)
Пробовал вариант с ProtocolLib(PacketType.Play.Server.COMMAND) но безуспешно, пробовал ивент PlayerCommandSendEvent, он вообще не работает, знаю что можно через NMS, но во-первых тем способ который знаю я это будет работать только на 1.13 и выше, а во-вторых не хочу вообще использовать НМС так как лень потом настраивать мультиверсионность.

Может кто знает как это можно организовать?
 
Самым простым решением будет использовать PlayerCommandSendEvent
В этом событии есть функция getCommands(), которая возвращает изменяемый список команд типа Collection<String> из которого тебе необходимо убрать ненужные тебе элементы.

Не забывай что все команды будут в списке как с неймспейсом (minecraft:<команда> или <имя_плагина>: <команда>) так и без него

Пример на Kotlin
Код:
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerCommandSendEvent

class CommandListListener : Listener {

    @EventHandler
    fun onCommandListSend(event: PlayerCommandSendEvent) {
        event.commands.removeIf { it == "help" }
    }

}

P.S. если не сработает, то уточни, пожалуйста, версию сервера
 
Последнее редактирование:
Привет, попробовал, не работает, версия 1.16.5

Как выглядит код:
event.getCommands().removeIf(command -> command.startsWith("functionalbans"));
 
Привет, попробовал, не работает, версия 1.16.5

Как выглядит код:
event.getCommands().removeIf(command -> command.startsWith("functionalbans"));
Проверил на paper 1.16.5 (git-Paper-794) - все работает
Покажи полный код и уточни какое ядро используешь
 
Странно, у меня загружалось, может пастбин прокатит.

https://pastebin.com/nERYxE43

Сразу скажу, ивент зарегистрировал.
 
Проходит ли у тебя условие?
Код:
if(getConfigSettings().hideMainCommand()) {

Используй guard-statement вместо углубления в if
Код:
if (!getConfigSettings().hideMainCommand()) {
    return;
}

// дальнейшие действия


И не нужно повторять несколько раз
Код:
event.getCommands().removeIf(command -> command.equalsIgnoreCase("fb"));
event.getCommands().removeIf(command -> command.equalsIgnoreCase("functionalbans"));

Вызови removeIf один раз и внутри него пройдись по всем своим командам циклом
Список команд в зависимости от use-кейса стоит вынести в конфиг

Пример
Код:
strs.removeIf((command) -> {

    for (String hidden : getConfigSettings().getHiddenCommands()) {
        if (command.equalsIgnoreCase(hidden)) {
            return true;
        }
    }

    return false;
});
 
Хорошо, сейчас попробую.
 
Я, вероятно, неудачник по жизни, не работает.

Код: https://pastebin.com/wuTDd5VM

Не уверяю, но возможно ProtocolSupport влияет на отправку команд. Возможно подменяет на свой способ.
Ну или я неудачник)
 
Я, вероятно, неудачник по жизни, не работает.

Код: https://pastebin.com/wuTDd5VM

Не уверяю, но возможно ProtocolSupport влияет на отправку команд. Возможно подменяет на свой способ.
Ну или я неудачник)

И я был прав... ProtocolSupport виноват.
В общем спасибо тебе за решение H4kt)
 
И я был прав... ProtocolSupport виноват.
В общем спасибо тебе за решение H4kt)
Протестил у себя, результат такой же если заходить не с 1.16.5
Надо было тебе сразу упомянуть про ProtocolSupport
В таком случае решение на пакетах будет единственным вариантом

Не забудь закрыть тему)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх