Пакеты

Версия Minecraft
1.8.9
API
Forge
37
2
Прошу помощи, выкидывает из игры, перечитал кучу тем, но решить свою проблему не получилось. В общем, регаю пакет в clientproxy:
Java:
Main.networkHandler.registerMessage(Cmessage.Handler.class, Cmessage.class, 1, Side.CLIENT);
Так же вставил в common proxy в надежде, что поможет:
Java:
 Main.networkHandler.registerMessage(Cmessage.Handler.class, Cmessage.class, 2, Side.SERVER);

Сам пакет:
Java:
public class Cmessage implements IMessage{
    public static int playerID, is;
    public static double x,y,z, ofx, ofy, ofz;
    public static Random rand = new Random();
    public Cmessage () {}

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(playerID);
        buf.writeDouble(x);
        buf.writeDouble(y);
        buf.writeDouble(z);
        buf.writeInt(is);
        buf.writeDouble(ofx);
        buf.writeDouble(ofy);
        buf.writeDouble(ofz);
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        playerID = buf.readInt();
        x = buf.readDouble();
        y = buf.readDouble();
        z = buf.readDouble();
       
        is = buf.readInt();
        ofx = buf.readDouble();
        ofy = buf.readDouble();
        ofz = buf.readDouble();
    }

    public static class Handler implements IMessageHandler<Cmessage , IMessage> {

        @Override
        public IMessage onMessage(Cmessage packet, MessageContext message) {
            Minecraft mc = Minecraft.getMinecraft();
            Entity entity = mc.theWorld.getEntityByID(playerID);
         
            for(int i = 1; i < is; ++i) {
                Minecraft.getMinecraft().effectRenderer.addEffect(new CustomEntityParticle(entity.worldObj, x, y,
                        z, ofx,ofy, ofz, new int[] {rand.nextInt(255)}));
                }      

                return null;
        }
    }
}
Краш-лог приложил
 
Краш-лог
[15:46:31] [Netty Local Client IO #1/ERROR] [FML]: There was a critical exception handling a packet on channel packet
io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException: readerIndex(0) + length(1) exceeds writerIndex(0): UnpooledHeapByteBuf(ridx: 0, widx: 0, cap: 0)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at

io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
Краш-лог:
[15:46:31] [Netty Local Client IO #1/ERROR] [FML]: There was a critical exception handling a packet on channel packet
io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException: readerIndex(0) + length(1) exceeds writerIndex(0): UnpooledHeapByteBuf(ridx: 0, widx: 0, cap: 0)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at
 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
Последнее редактирование:
37
2
ап
 
37
2
ап
 

will0376

Токсичная личность
2,077
55
585
public static int playerID, is; public static double x,y,z, ofx, ofy, ofz;
1607883122000.png
1) Статик переменные в пакете... Заведи конструктор.
2) Напрямую в хандлере нельзя брать переменные, получишь нулл. Бери через инстанс пакета, который падает прямо в метод. т.е. packet.x
3) оставь регистрацию в коммоне, или вынеси в инит куда-нибудь. пример: src/main/java/ru/will0376/OpenBlocker/Main.java · master · Will0376 / OpenBlocker
 
Последнее редактирование:

sk9zist :l

Исправился
981
18
157

will0376

Токсичная личность
2,077
55
585
client proxy - то это не значт что только клиент, он наследуеться во первых от Common Proxy,
Ты понимаешь, какую ересь сейчас написал?
Он наследует от коммона, да. НО ВЫЗЫВАЕТСЯ ТОЛЬКО НА КЛИЕНТЕ.
 

sk9zist :l

Исправился
981
18
157
НО ВЫЗЫВАЕТСЯ ТОЛЬКО НА КЛИЕНТЕ.
А помоему будет только клиент - если поставить аннотацию SideOnly(Side.CLIENT)
Но это не точно, что если поставить её - будет только клиент. Однако ClientProxy сам по себе это и сервер тоже.
 
Последнее редактирование:
37
2
Как я знаю, clientproxy вызывается на 2-х сторонах, но как бы я не регал пакеты, ошибка остается актуальной.
 
37
2

will0376

Токсичная личность
2,077
55
585
37
2
Посмотреть вложение 10667
1) Статик переменные в пакете... Заведи конструктор.
2) Напрямую в хандлере нельзя брать переменные, получишь нулл. Бери через инстанс пакета, который падает прямо в метод. т.е. packet.x
3) оставь регистрацию в коммоне, или вынеси в инит куда-нибудь. пример: src/main/java/ru/will0376/OpenBlocker/Main.java · master · Will0376 / OpenBlocker
1)Да, конструктор лучше однозначно, но мне было не до этого. 2)Понял, принял 3)Ок, чекну
 
37
2
Я в класс пакета пихнул конструктор, запихнул в вызов партикла packet., перенес регистрацию пакета в главный класс мода, в init, но краш остался актуален. Вообще, java.lang.IndexOutOfBoundsException означает, что где-то превышен размер массива, я так подозреваю, что всё исходит от
Java:
public void toBytes(ByteBuf buf)
Не могу понять каким образом может происходить превышение размера массива тут
 
37
2
Стоит отметить, что вылетает не сразу, пакеты отправляются, партиклы рисуются, краш игры происходит со временем, я очень много раз игрался с регистрацией, роли не сыграло
 
37
2
И да, такое происходит в мультиплеере
 
37
2
Я хотел сказать, что я регистрацию вставлял в разные места, сейчас у меня
Java:
Main.networkHandler.registerMessage(Cmessage.Handler.class, Cmessage.class, 0, Side.CLIENT);
в init главного класса мода
 
7,099
324
1,510
Сверху