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

Помогите Как узнать все "подкоманды" всех плагинов на сервере?

Тема в разделе "Разработка плагинов для новичков", создана пользователем normalped, 11 апр 2024.

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

    normalped Участник Пользователь

    Баллы:
    36
    Приветствую! В плагине надо каким то образом узнать все команды и подкоманды (те, которые вводятся аргументами для главной команды. Например "confirm" в команде "/reload confirm") сервера включая обычные команды типо /title, /locate и тд. Есть же всякие панели для управления сервером в которых как то это все узнается. Спасибо за ответ.
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Эмулируешь отправителя команды и вводимый текст и отслеживаешь таб-комплит.

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

    normalped Участник Пользователь

    Баллы:
    36
    Спасибо, только вот не во всех плагинах есть таб комплитер(

    Я хочу сделать простой и полезный плагин. Когда игрок вводит команду на рус. раскладке, выполнять её на англ. В принципе ничего сложного, но если заменять весь текст команды включая аргументы, в некоторых командах например "/broadcast" обычный текст на русском языке так же будет заменяться, и в чате будет хаос. По этому, наверное единственное что можно тут сделать это проверять является ли введенная команда с аргументами существующей и тогда уже заменять текст. Это и не решит проблему с командами типа "/broadcast", но будет куда лучше чем ничего.
     
  4. SashaBrine

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

    Баллы:
    76
    Имя в Minecraft:
    IJustFortiLive
    Команды возможно.
    Подкоманды нельзя.
     
  5. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Без табкомплита никак не определить аргументы, они нигде не регистрируются.

    Я сомневаюсь, что определение аргументов хоть как-то поможет в данном вопросе. Иногда игрокам приходится писать текст сообщений на русском, иногда на английском - тут не угадаешь.

    Я бы сделал проще - если основная команда состоит из русских букв, то необходимо сменить буквы в этой команде и во всех её аргументах. Все русские заменить на английские, а все английские на русские.

    Подобное уже реализовано в плагине TrueCommand, например:
    Старая версия: https://rubukkit.org/threads/28781
    Новая версия: https://github.com/alexandrage/TrueCommand_2.0.jar
     
  6. Автор темы
    normalped

    normalped Участник Пользователь

    Баллы:
    36
    Не понял. Сначала русские буквы заменить на английские потом обратно на русские? Ничего же не поменяется.

    Я глянул на код из гитхаба. Там вроде как заменяется только главная команда, аргументы не меняются. Я бы протестил, но на новых версиях плагин не работает.
     
  7. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ну так менять-то надо только те буквы, которые ещё не менялись. Английские на русские, а русские на английские.

    Ну да, похоже на то. Без понятия, почему так сделано
     
  8. alexandrage

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

    Баллы:
    173
    Он без протоколлиба не будет работать.
     
  9. Автор темы
    normalped

    normalped Участник Пользователь

    Баллы:
    36
    Я это понимаю, сам плагин на новые версии не идет
     
  10. alexandrage

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

    Баллы:
    173
    Он идет на все версии papermc, где командмап уже достается без рефлексии и наличие плагина ProtocolLib, команд и чат протокол в игре не менялся. Если у вас отличное ядро не бумага и не на его основе, то командмап придется получать на рефлексии как я делал раньше.
     
    Последнее редактирование: 12 апр 2024
  11. alexandrage

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

    Баллы:
    173
    Работу с реплейсом аргументов я добавил, ранее эта функция просто не требовалась.
     
  12. Автор темы
    normalped

    normalped Участник Пользователь

    Баллы:
    36
    Странно, мне IDE писало что есть какая то проблема с CHAT_COMMAND в PacketType.Play.Client.CHAT_COMMAND.
    Так же была ошибка в консоли сервера:
    [TrueCommand] Unhandled exception occurred in onPacketReceiving(PacketEvent) for TrueCommand
    java.lang.IllegalArgumentException: Could not find packet for type CHAT_COMMAND
    at com.comphenix.protocol.injector.packet.PacketRegistry.lambda$getPacketClassFromType$1(PacketRegistry.java:395) ~[ProtocolLib.jar:?]
    at java.util.Optional.orElseThrow(Optional.java:403) ~[?:?]
    at com.comphenix.protocol.injector.packet.PacketRegistry.getPacketClassFromType(PacketRegistry.java:395) ~[ProtocolLib.jar:?]
    at com.comphenix.protocol.injector.StructureCache.newPacket(StructureCache.java:113) ~[ProtocolLib.jar:?]
    at com.comphenix.protocol.events.PacketContainer.<init>(PacketContainer.java:117) ~[ProtocolLib.jar:?]
    at TrueCommand.wrapper.WrapperPlayClientChatCommand.<init>(WrapperPlayClientChatCommand.java:15) ~[TrueCommand_2.0.jar:?]
    at TrueCommand.PacketChat.onPacketReceiving(PacketChat.java:26) ~[TrueCommand_2.0.jar:?]
    at com.comphenix.protocol.injector.SortedPacketListenerList.invokeReceivingListener(SortedPacketListenerList.java:122) ~[ProtocolLib.jar:?]
    at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketRecieving(SortedPacketListenerList.java:75) ~[ProtocolLib.jar:?]
    at com.comphenix.protocol.injector.PacketFilterManager.postPacketToListeners(PacketFilterManager.java:555) ~[ProtocolLib.jar:?]
    at com.comphenix.protocol.injector.PacketFilterManager.invokePacketReceiving(PacketFilterManager.java:519) ~[ProtocolLib.jar:?]
    at com.comphenix.protocol.injector.netty.manager.NetworkManagerInjector.onPacketReceiving(NetworkManagerInjector.java:118) ~[ProtocolLib.jar:?]
    at com.comphenix.protocol.injector.netty.channel.NettyChannelInjector.processInboundPacket(NettyChannelInjector.java:500) ~[ProtocolLib.jar:?]
    at com.comphenix.protocol.injector.netty.channel.InboundPacketInterceptor.channelRead(InboundPacketInterceptor.java:33) ~[ProtocolLib.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.handler.flush.FlushConsolidationHandler.channelRead(FlushConsolidationHandler.java:152) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
    at java.lang.Thread.run(Thread.java:842) ~[?:?]
    [19:56:34 ERROR]: Parameters:
    net.minecraft.network.protocol.game.PacketPlayInChat@3b5eda46[
    b=.ыфн
    ]
     
  13. alexandrage

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

    Баллы:
    173
    Возможно у вас устаревшая версия протоколлиба, когда еще не было отдельного пакета на команды.
     
  14. Автор темы
    normalped

    normalped Участник Пользователь

    Баллы:
    36
    Если заменять полностью всю команду с аргументами с русской раскладки на английскую, не останется никаких букв которые еще не менялись.
    Например была команда ".ыфн здфнук привет!", превратилась в "/say player ghbdtn!" и все.
     
  15. Автор темы
    normalped

    normalped Участник Пользователь

    Баллы:
    36
    Нет, самая последняя, 5.2.0
     
  16. alexandrage

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

    Баллы:
    173
  17. Автор темы
    normalped

    normalped Участник Пользователь

    Баллы:
    36
  18. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ошибки есть?
     
  19. Автор темы
    normalped

    normalped Участник Пользователь

    Баллы:
    36
    Есть

     
  20. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    В последней версии ProtocolLib этот пакет присутствует: https://github.com/dmulloy2/Protoco...a/com/comphenix/protocol/PacketType.java#L417
    Убедись, что версия действительно 5.2.0. Потому что по симптомам это не так.
    Либо же сейчас ошибка у тебя выглядит иначе
     

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