Пакеты

Версия 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
Я почекал, по ходу выкидывает ошибку на чтении
Java:
public void fromBytes(ByteBuf buf)
, теперь нужно ченить наколхозить...
 

will0376

Токсичная личность
2,072
55
584
37
2
Я пытался разобраться с чтением, ничего толком не получилось(
 
37
2
На системе партиклов ивасика та же проблема((
 
1,193
31
182
У тебя же x,y,z и остальные статики ничему не равны? Ты их приравниваешь где то? Мб из-за этого дропает, ибо не присвоил
Лучше сделай их обычными без статичного модификатора и запихни в конструктор где их будешь присваивать.
 
37
2
У тебя же x,y,z и остальные статики ничему не равны? Ты их приравниваешь где то? Мб из-за этого дропает, ибо не присвоил
Лучше сделай их обычными без статичного модификатора и запихни в конструктор где их будешь присваивать.
Конструктор я давно сделал. Я тут покрутил всё это дело и кажись понял, по ходу дело в самих партиклах, пакеты работают. Не могу только понять каким образом партиклы могут так крашать игру, ничего тут я вроде мудрёного не делал:
Java:
@SideOnly(Side.CLIENT)
public class CustomEntityParticle extends EntityFX {

      public CustomEntityParticle(World p_i1205_1_, double p_i1205_2_, double p_i1205_4_, double p_i1205_6_, double p_i1205_8_, double p_i1205_10_, double p_i1205_12_, int[] colors) {
          super(p_i1205_1_, p_i1205_2_, p_i1205_4_, p_i1205_6_, p_i1205_8_, p_i1205_10_, p_i1205_12_);
            this.motionX = p_i1205_8_ + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.08F);
            this.motionY = p_i1205_10_ + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.08F);
            this.motionZ = p_i1205_12_ + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.08F);
           

         
            this.particleRed = colors[0];
            this.particleGreen = colors[0];
            this.particleBlue = colors[0];
            this.particleScale = (float) ((this.rand.nextInt(4) + 2) * 0.1);
            this.particleMaxAge = this.rand.nextInt(50) + 300;
           
      }


      public void onUpdate()
        {
            this.prevPosX = this.posX;
            this.prevPosY = this.posY;
            this.prevPosZ = this.posZ;

            if (this.particleAge++ >= this.particleMaxAge)
            {
                this.setDead();
            }

            this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge);
            if(this.particleAge > 90)this.motionY += 0.002;
           
            if(this.particleAge < 90)
            this.moveEntity(this.motionX * 0.11, this.motionY * 0.05, this.motionZ * 0.11);
            else if(this.particleAge >= 90 && this.particleAge < 130)
                this.moveEntity(this.motionX * 0.05, this.motionY * 0.04, this.motionZ * 0.05);
            else if(this.particleAge >= 130 && this.particleAge < 180)
                this.moveEntity(this.motionX * 0.03, this.motionY * 0.03, this.motionZ * 0.03);
            else if(this.particleAge >= 180 && this.particleAge < 230)
                this.moveEntity(this.motionX * 0.01, this.motionY * 0.02, this.motionZ * 0.01);
            else if(this.particleAge >= 230 && this.particleAge < 400)
                this.moveEntity(this.motionX * 0, this.motionY * 0.01, this.motionZ * 0);
               
           
            this.motionX *= 0.999999761581421D;
            this.motionY *= 0.999999761581421D;
            this.motionZ *= 0.999999761581421D;

            if (this.onGround)
            {
                this.motionX *= 0.699999988079071D;
                this.motionZ *= 0.699999988079071D;
            }
        }
        public void renderParticle(WorldRenderer worldRendererIn, Entity entityIn, float partialTicks, float p_180434_4_, float p_180434_5_, float p_180434_6_, float p_180434_7_, float p_180434_8_)
        {

            GL11.glDepthMask(false);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F);
            GL11.glDisable(GL11.GL_CULL_FACE);

            float f = (float)this.particleTextureIndexX / 16.0F;
            float f1 = f + 0.0624375F;
            float f2 = (float)this.particleTextureIndexY / 16.0F;
            float f3 = f2 + 0.0624375F;
            float f4 = 0.1F * this.particleScale;

            if (this.particleIcon != null)
            {
                f = this.particleIcon.getMinU();
                f1 = this.particleIcon.getMaxU();
                f2 = this.particleIcon.getMinV();
                f3 = this.particleIcon.getMaxV();
            }

            float f5 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks - interpPosX);
            float f6 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks - interpPosY);
            float f7 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks - interpPosZ);
            int i = this.getBrightnessForRender(partialTicks);
            int j = i >> 16 & 65535;
            int k = i & 65535;
            worldRendererIn.pos((double)(f5 - p_180434_4_ * f4 - p_180434_7_ * f4), (double)(f6 - p_180434_5_ * f4), (double)(f7 - p_180434_6_ * f4 - p_180434_8_ * f4)).tex((double)f1, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex();
            worldRendererIn.pos((double)(f5 - p_180434_4_ * f4 + p_180434_7_ * f4), (double)(f6 + p_180434_5_ * f4), (double)(f7 - p_180434_6_ * f4 + p_180434_8_ * f4)).tex((double)f1, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex();
            worldRendererIn.pos((double)(f5 + p_180434_4_ * f4 + p_180434_7_ * f4), (double)(f6 + p_180434_5_ * f4), (double)(f7 + p_180434_6_ * f4 + p_180434_8_ * f4)).tex((double)f, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex();
            worldRendererIn.pos((double)(f5 + p_180434_4_ * f4 - p_180434_7_ * f4), (double)(f6 - p_180434_5_ * f4), (double)(f7 + p_180434_6_ * f4 - p_180434_8_ * f4)).tex((double)f, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex();
            GL11.glEnable(GL11.GL_CULL_FACE);
            GL11.glDisable(GL11.GL_BLEND);
            GL11.glDepthMask(true);
            GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
        }

        public static class Factory implements IParticleFactory
            {
                public EntityFX getEntityFX(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_)
                {
                    return new CustomEntityParticle(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn, p_178902_15_);
                }
            }
Кст странно еще то, что вылетает далеко не сразу и только в мультиплеере(и при этом краш может быть со стороны хоста и присоединенного игрока)
 
Последнее редактирование:
Сверху