Перехват и изменение/удаление пакетов к серверу с мода

Версия Minecraft
1.8.9
API
Forge
Здравствуйте, мне нужно перехватить пакеты из одного мода который отправляет эти пакеты серверу, в этих пакетах имеются какие-то данные полученные модом (в байтах).

Я сделал по туториалах из этого же форума и перечекал много чего, вот дошел до такого:

Java:
public class ExamplePacketPer {
    @SubscribeEvent
    public void packetRecived(ServerConnectionFromClientEvent e)
    {
        e.manager.channel().pipeline().addBefore("fml:packet_handler", "mymodid:mychannelname", new PacketHandler());
    }

    public class PacketHandler extends ChannelInboundHandlerAdapter {
        @Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception
        {
            super.channelRead(ctx, msg);
            if(msg instanceof C17PacketCustomPayload) {
                //И это по-идеи кастомный пакет который отправляется другим модом (flansmod)
                //И да оно срабатывает
            }
     
        }
     
    }
}

Но как мне получить что-то из этого пакета, например этот пакет отправляется модом flans, и там должна быть характеристика пули и её направление, что-то вроде такого.

Вкратце: нужно получить пакет из другого мода который идет на сервер и изменить или отменить, всякие филды непомогают.
 
ловишь объект, кастуешь его к пакету(при уверенности что это он), получаешь что тебе надо.
типо импортировать мод и ловить этот пакет а потом получать? Ибо с пакета C17PacketCustomPayload вытягнуть ничего не получается.
Ок щас попробую
 
Последнее редактирование:
ловишь объект, кастуешь его к пакету(при уверенности что это он), получаешь что тебе надо.
java.lang.ClassCastException: net.minecraft.network.play.client.C17PacketCustomPayload cannot be cast to com.flansmod.common.network.PacketGunFire

Java:
            if(msg instanceof C17PacketCustomPayload) {
                System.out.println(  ((PacketGunFire)msg)  );
            }
Попробовал ещё одно, но тут ничего получить неполучается 1627202471851.png
 
7,099
324
1,510
Так не любой C17PacketCustompayload является PacketGunFire. Если тебе нужен PacketGunFire, то проверяй, является ли пакет им, а не чем-то еще
 
7,099
324
1,510
Ну вообще, там есть несколько адаптеров через которые проходят пакеты и они могут преображаться, проходя через адаптеры. Если нужный пакет не улавливается твим адаптером(твоей реализации ChannelInboundHandlerAdapter), то попробуй вставить свой адаптер в другое место пайплайна
e.manager.channel().pipeline().addBefore("fml:packet_handler", "mymodid:mychannelname", new PacketHandler());
Например, тут ты вставляешь перед(Before) "fml:packet_handler". Попробуй вставить после
 
Ну вообще, там есть несколько адаптеров через которые проходят пакеты и они могут преображаться, проходя через адаптеры. Если нужный пакет не улавливается твим адаптером(твоей реализации ChannelInboundHandlerAdapter), то попробуй вставить свой адаптер в другое место пайплайна

Например, тут ты вставляешь перед(Before) "fml:packet_handler". Попробуй вставить после
а как получать что-то из этого пакета? Я уже получил кодом ниже мод из какого этот пакет, а какие-то данные ещё круто бы выхватить)
1627234566443.png
 
7,099
324
1,510
7,099
324
1,510
Попробуй в другое место вставить свой адаптер. Ведь перед тем, как мод получит свой пакет, его уже кто-то для него подготовит. У пайплайна, кажется, был метод, возвращающий список адаптеров, можно юзать его, чтобы узнать имена других адаптеров и попробовать вставить свой вокруг них
 
7,099
324
1,510
Щас ты вставляешь свой адаптер вокруг "fml:packet_handler". А попробуй вокруг чего-то другого. Как узнать че другое? У пайплайна есть метод names, который возвращает имена всех хандлеров.
Типо, так:
System.out.println(e.getManager().channel().pipeline().names())
И потом попробовать вставлять свой адаптер вокруг тех, что из списка
 
Сверху