IOException (NetworkDispatcher exception) - Удаленный хост принудительно разорвал существующее подключение

Версия Minecraft
1.7.10
API
Forge
1,196
31
183
Ку гайс, давно не спрашивал ничего тут, грустно видеть, как некогда великий форум помирает...
Недавно столкнулся с такой ошибкой:
Java:
[23:48:59] [Netty Client IO #1/ERROR] [FML/]: NetworkDispatcher exception
java.io.IOException: Удаленный хост принудительно разорвал существующее подключение
    at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[?:1.8.0_202]
    at sun.nio.ch.SocketDispatcher.read(Unknown Source) ~[?:1.8.0_202]
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) ~[?:1.8.0_202]
    at sun.nio.ch.IOUtil.read(Unknown Source) ~[?:1.8.0_202]
    at sun.nio.ch.SocketChannelImpl.read(Unknown Source) ~[?:1.8.0_202]
    at io.netty.buffer.UnpooledUnsafeDirectByteBuf.setBytes(UnpooledUnsafeDirectByteBuf.java:436) ~[UnpooledUnsafeDirectByteBuf.class:?]
    at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:870) ~[AbstractByteBuf.class:?]
    at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:208) ~[NioSocketChannel.class:?]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:87) [AbstractNioByteChannel$NioByteUnsafe.class:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:480) [NioEventLoop.class:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447) [NioEventLoop.class:?]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341) [NioEventLoop.class:?]
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [SingleThreadEventExecutor$2.class:?]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_202]
Примерно два дня гуглежа, день поиска тут, попытки самому отловить эту ошибку ни к чему не привели. Знаю только в какой момент отваливается, примерно наметил код, где может отваливаться, но поймать за хвост эту штуку я так и не смог.
Суть в чем: кликаем по кнопке в гуи, клиент запрашивает данные у сервера, сервер шлет их клиенту, и по данным заполняется скролл дата (лист String, короче). В некоторый момент при нажатии на эту кнопку данные не заполняются, игрок перестает получать вообще все пакеты и через секунд 10 отваливается с ошибкой выше. Перезаходишь, все нормально до последующего такого же эксепшна
Тестили вдвоем, у него данная ошибка встречается намного чаще, моя с шансом 1% примерно. Куда можно подкопать?
Код примерно такой:
Отправка запроса с клиента на сервак:
public static void sendData(final EnumPacketServer enu, final Object... obs) {
        ByteBuf buffer = Unpooled.buffer();
        try {
            if(!Server.fillBuffer(buffer, enu, obs))
                return;
            CustomNpcs.Channel.sendToServer(new FMLProxyPacket(buffer, "CustomNPCs"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
Чтение данных с сервера:
public static void setScrollData(ByteBuf buffer) {
        GuiScreen gui = Minecraft.getMinecraft().currentScreen;
        if(gui == null)
            return;
        try {
            int size = buffer.readInt();
            for(int i = 0; i < size; i++){
                int id = buffer.readInt();
                String name = Server.readString(buffer);
                data.put(name, id);
            }
        } catch (Exception e) {
        //Изначально здесь не было обработки эксепшона, я ее добавлял, чтобы появился лог выше (его раньше не было)
        //Для более точно ханла ошибки еще добавил Sysout("error in this clazz"), но оно не вывелось
        }
        if(gui instanceof GuiNPCInterface && ((GuiNPCInterface)gui).hasSubGui()){
            gui = (GuiScreen) ((GuiNPCInterface)gui).getSubGui();
        }
        if(gui instanceof GuiContainerNPCInterface && ((GuiContainerNPCInterface)gui).hasSubGui()){
            gui = (GuiScreen) ((GuiContainerNPCInterface)gui).getSubGui();
        }
        if(gui instanceof IScrollData)
            ((IScrollData)gui).setData(new Vector<String>(data.keySet()), data);
        data = new HashMap<String,Integer>();
    }
    }

Серверу чихать что случилось в момент вылета игрока, поэтому думаю, что нетти поток где то жрет дозу говнища и отваливается, не указывается где конкретно он это говно взял. Все гуру, прошу помощи
 
Решение
Что ж, спустя кучи времени ловли кала, отладки наконец удалось решить проблему - проблема именно в пакетке кастома.
Переписал проблемный участок кода, используя SimpleNetworkWrapper, а не вонючий FMLProxyChannel, все стало работать как надо.
1,196
31
183
Ой, чота тупанул
Ошибка появляется видимо в самом нетти потоке, а код здесь нормальный...
Может ошибка вываливается когда клиент вываливает запрос серверу, пакет пытается отправить а соединение каким то хером разрывается
CustomNpcs.Channel.sendToServer(new FMLProxyPacket(buffer, "CustomNPCs"));
Пакет отправляется так, Channel это FMLEventChannel
UPD:
Это может проявляться из-за нехватки оперативы на серваке?
 
Последнее редактирование:
1,196
31
183
Что ж, спустя кучи времени ловли кала, отладки наконец удалось решить проблему - проблема именно в пакетке кастома.
Переписал проблемный участок кода, используя SimpleNetworkWrapper, а не вонючий FMLProxyChannel, все стало работать как надо.
 
Сверху