DecoderException при отправке пакета

Версия Minecraft
1.7.10
API
Forge
122
1
5
Отправляю пакет кнопкой:
Java:
MainMod.network.sendToServer(new OpenGui());
Регистрирую в главном классе в preInit:
Java:
 network = NetworkRegistry.INSTANCE.newSimpleChannel(MainMod.MODID);
 network.registerMessage(OpenGui.Handler.class, OpenGui.class, 0, Side.CLIENT);
 network.registerMessage(OpenGui.Handler.class, OpenGui.class, 0, Side.SERVER);
Сам пакет:
Java:
public class OpenGui implements IMessage {

    public OpenGui(){

    }

    public void fromBytes(ByteBuf buffer) {
    }

    public void toBytes(ByteBuf buffer) {
    }

    @SideOnly(Side.CLIENT)
    public static void act() {
        Minecraft mc = Minecraft.getMinecraft();
        ExtendedPlayer ep = ExtendedPlayer.get(mc.thePlayer);
        if (ep != null) {
            mc.displayGuiScreen(new Gui(mc.thePlayer.inventory, ep.inventory));
        }
    }

    public static void act(EntityPlayerMP player) {
        ExtendedPlayer ep = ExtendedPlayer.get(player);
        if (ep != null) {
            player.openContainer = new Container(player, ep.inventory);
            MainMod.network.sendTo(new OpenGui(), player);
        }
    }


    public static class Handler implements IMessageHandler<OpenGui, IMessage>{
        public IMessage onMessage(OpenGui message, MessageContext ctx) {
            if (ctx.side.isClient()) {
                OpenGui.act();
            } else {
                OpenGui.act(ctx.getServerHandler().playerEntity);
            }

            return null;
        }
    }
}
И при отправки (нажатии на кнопки) выкидывает и пишет: A fatal error has occured, this connection is terminated.

Крашлог:
io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?]
at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?]
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer[imath]2.run(MinecraftServer.java:752) [MinecraftServer[/imath]2.class:?]
Caused by: java.lang.IndexOutOfBoundsException

То ли не видит регистрацию, то ли в пакет не заходит, не могу понять. Помогите пожалуйста
 
Краш-лог
io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException
Краш-лог:
io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException
Решение
network.registerMessage(OpenGui.Handler.class, OpenGui.class, 1, Side.CLIENT); network.registerMessage(OpenGui.Handler.class, OpenGui.class, 1, Side.SERVER);
Как уже говорилось ранее, у каждого пакета свой дискриминатор, а у тебя тут они одинаковые, логично ставить 0&1, но потом у тебя в PacketDispatcher пытается зарегистрироваться еще один пакет с дискриминатором 0, либо меняешь в этих строчках на 1&2, либо делаешь как нормальный человек.
122
1
5
скидывай что за ошибка
io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Undefined message for discriminator 1 in channel testmod
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?]
at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?]
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer[imath]2.run(MinecraftServer.java:752) [MinecraftServer[/imath]2.class:?]
дискриминатор "1" он уникальный
 
122
1
5
Полный код регистрации
Java:
    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) {

        proxy.preInit(event);

        network = NetworkRegistry.INSTANCE.newSimpleChannel(TestMod.MODID);

        network.registerMessage(OpenGui.Handler.class, OpenGui.class, 1, Side.CLIENT);
        network.registerMessage(OpenGui.Handler.class, OpenGui.class, 1, Side.SERVER);
        

        PacketDispatcher.registerPackets();

        proxy.load();
    }


    @Mod.EventHandler
    public void init(FMLInitializationEvent event) {
    
        NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());


        proxy.init(event);
    }
 
153
21
41
Java:
    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) {

        proxy.preInit(event);

        network = NetworkRegistry.INSTANCE.newSimpleChannel(TestMod.MODID);

        network.registerMessage(OpenGui.Handler.class, OpenGui.class, 1, Side.CLIENT);
        network.registerMessage(OpenGui.Handler.class, OpenGui.class, 1, Side.SERVER);
     

        PacketDispatcher.registerPackets();

        proxy.load();
    }


    @Mod.EventHandler
    public void init(FMLInitializationEvent event) {
 
        NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());


        proxy.init(event);
    }
PacketDispatcher покажи. И почему у тебя дискриминатор одинаковый?
 
122
1
5
Java:
public class PacketDispatcher {

    private static byte packetId = 0;

    private static final SimpleNetworkWrapper dispatcher = NetworkRegistry.INSTANCE.newSimpleChannel(TestMod.MODID);

    public static final void registerPackets() {

        registerMessage(OpenGuiMessage.class);
    }

    private static final <T extends AbstractMessage<T> & IMessageHandler<T, IMessage>> void registerMessage(Class<T> clazz) {
        if (AbstractMessage.AbstractClientMessage.class.isAssignableFrom(clazz)) {
            PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId++, Side.CLIENT);
        } else if (AbstractMessage.AbstractServerMessage.class.isAssignableFrom(clazz)) {
            PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId++, Side.SERVER);
        } else {
            PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId, Side.CLIENT);
            PacketDispatcher.dispatcher.registerMessage(clazz, clazz, packetId++, Side.SERVER);
        }
    }

    public static final void sendTo(IMessage message, EntityPlayerMP player) {
        PacketDispatcher.dispatcher.sendTo(message, player);
    }

    public static void sendToAll(IMessage message) {
        PacketDispatcher.dispatcher.sendToAll(message);
    }

    public static final void sendToAllAround(IMessage message, NetworkRegistry.TargetPoint point) {
        PacketDispatcher.dispatcher.sendToAllAround(message, point);
    }

    public static final void sendToAllAround(IMessage message, int dimension, double x, double y, double z, double range) {
        PacketDispatcher.sendToAllAround(message, new NetworkRegistry.TargetPoint(dimension, x, y, z, range));
    }

    public static final void sendToAllAround(IMessage message, EntityPlayer player, double range) {
        PacketDispatcher.sendToAllAround(message, player.worldObj.provider.dimensionId, player.posX, player.posY, player.posZ, range);
    }

    public static final void sendToDimension(IMessage message, int dimensionId) {
        PacketDispatcher.dispatcher.sendToDimension(message, dimensionId);
    }

    public static final void sendToServer(IMessage message) {
        PacketDispatcher.dispatcher.sendToServer(message);
    }

}
 
153
21
41
network.registerMessage(OpenGui.Handler.class, OpenGui.class, 1, Side.CLIENT); network.registerMessage(OpenGui.Handler.class, OpenGui.class, 1, Side.SERVER);
Как уже говорилось ранее, у каждого пакета свой дискриминатор, а у тебя тут они одинаковые, логично ставить 0&1, но потом у тебя в PacketDispatcher пытается зарегистрироваться еще один пакет с дискриминатором 0, либо меняешь в этих строчках на 1&2, либо делаешь как нормальный человек.
 
153
21
41
private static byte packetId = 0;
Либо еще как вариант подвязать твой костыль, который ты не понимаешь как работает, для этого сделать это поле публичным, и при регистрации использовать в качестве дискриминатора: packetId++.
 
153
21
41
private static final SimpleNetworkWrapper dispatcher = TestMod.network;
если так сделаю норм будет?
Нет, зачем тебе регистрировать канал в главном классе, если у тебя PacketDispatcher работает как обертка, тебе ее переписать немного, и регистрировать пакеты там, все.
 
Сверху