Пакеты

Версия 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]
Последнее редактирование:
ап
 
ап
 
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
 
Последнее редактирование:
client proxy - то это не значт что только клиент, он наследуеться во первых от Common Proxy,
Ты понимаешь, какую ересь сейчас написал?
Он наследует от коммона, да. НО ВЫЗЫВАЕТСЯ ТОЛЬКО НА КЛИЕНТЕ.
 
НО ВЫЗЫВАЕТСЯ ТОЛЬКО НА КЛИЕНТЕ.
А помоему будет только клиент - если поставить аннотацию SideOnly(Side.CLIENT)
Но это не точно, что если поставить её - будет только клиент. Однако ClientProxy сам по себе это и сервер тоже.
 
Последнее редактирование:
Как я знаю, clientproxy вызывается на 2-х сторонах, но как бы я не регал пакеты, ошибка остается актуальной.
 
Посмотреть вложение 10667
1) Статик переменные в пакете... Заведи конструктор.
2) Напрямую в хандлере нельзя брать переменные, получишь нулл. Бери через инстанс пакета, который падает прямо в метод. т.е. packet.x
3) оставь регистрацию в коммоне, или вынеси в инит куда-нибудь. пример: src/main/java/ru/will0376/OpenBlocker/Main.java · master · Will0376 / OpenBlocker
1)Да, конструктор лучше однозначно, но мне было не до этого. 2)Понял, принял 3)Ок, чекну
 
Я в класс пакета пихнул конструктор, запихнул в вызов партикла packet., перенес регистрацию пакета в главный класс мода, в init, но краш остался актуален. Вообще, java.lang.IndexOutOfBoundsException означает, что где-то превышен размер массива, я так подозреваю, что всё исходит от
Java:
public void toBytes(ByteBuf buf)
Не могу понять каким образом может происходить превышение размера массива тут
 
Стоит отметить, что вылетает не сразу, пакеты отправляются, партиклы рисуются, краш игры происходит со временем, я очень много раз игрался с регистрацией, роли не сыграло
 
И да, такое происходит в мультиплеере
 
Я хотел сказать, что я регистрацию вставлял в разные места, сейчас у меня
Java:
Main.networkHandler.registerMessage(Cmessage.Handler.class, Cmessage.class, 0, Side.CLIENT);
в init главного класса мода
 
Назад
Сверху