Огромные пакеты

Версия Minecraft
1.7.10
API
Forge
236
4
22
Здравствуйте всем. Я конечно понимаю, что скорее всего уже достал всех тут, но такой вопрос... Я хочу пересылать игроку при входе на сервер данные из конфигурации (не все данные!) через пакет. Я использую CodeChickenLib в этих целях. Впринцепе, всё хорошо, но... Когда я шлю ~10-20 чисел - всё отлично. Но если нужно послать 180 чисел и где-то 40 строчек - уже вылет с сервера с фатальной ошибкой. Погуглив по всяким источникам узнал, что у майнкрафта лимит на пакеты где-то 32кб. Конечно же мой пакет превышает это. Вот и суть вопроса - можно ли как-то обойти такой лимит и отослать большое кол-во данных игроку при подключении? Хотелось бы услышать ещё что-то про оптимизацию, возможно есть способ как-то асинхронно читать пакеты клиентом, дабы при входе на зависла игра на 2-5сек.
 

tox1cozZ

aka Agravaine
8,456
598
2,892
236
4
22
Я с сервера на клиент и хочу послать, желательно без лимита. А так, по идеи, я и так шлю по 1 пакету. Вот примерно так делаю это

Java:
    public static void sendInfoPacket(EntityPlayer player)
    {
        /*Категория client*/
        new PacketCustom(ModInfo.NETWORK_ID, 1).writeBoolean(useConnectedTextures).sendToPlayer(player);
        new PacketCustom(ModInfo.NETWORK_ID, 2).writeBoolean(ShowChargeHud).sendToPlayer(player);
        
        
        /*Категория energy*/
        new PacketCustom(ModInfo.NETWORK_ID, 3).writeInt(RFPerEU).sendToPlayer(player);
        new PacketCustom(ModInfo.NETWORK_ID, 4).writeInt(machinesMaxPower).sendToPlayer(player);
        
        
        /*Категория alloyfurnace*/
        new PacketCustom(ModInfo.NETWORK_ID, 5).writeBoolean(useDefaultFuel).sendToPlayer(player);
        for(String str : alloySmelterFuel.keySet())
        {
            new PacketCustom(ModInfo.NETWORK_ID, 6).writeString(str+"/"+alloySmelterFuel.get(str)).sendToPlayer(player);
        }
    //И дальше в таком духе идёт отсылка остальных пакетов.
    }
На клиенте читаю примерно так:

Java:
    @Override
    public void handlePacket(PacketCustom packet, Minecraft mc, INetHandlerPlayClient arg2) {
        
        switch (packet.getType()) {
        /*client*/
        case 1:
            useConnectedTextures = packet.readBoolean();
            return;
        case 2:
            ShowChargeHud = packet.readBoolean();
            return;
        /*energy*/
        case 3:
            RFPerEU = packet.readInt();
            return;
        case 4:
            machinesMaxPower = packet.readInt();
            return;
        /*alloyfurnace*/
        case 5:
            useDefaultFuel = packet.readBoolean();
            return;
        case 6:
            String[] str1 = packet.readString().split("/");
            alloySmelterFuel.put(str1[0], Integer.parseInt(str1[1]));
            return;
    //И так дальше читаем остальные пакеты по ID
        }
По идеи, тут и так по 1 пакеты отсылка, однако майнкрафт выбрасывает с сервера. Я специально оставил в отправке только 3 пакета - всё сразу заработало. Однако мне нужно слать где-то 200 пакетов... Желательно и как-то без провисания игры.
 
236
4
22
Внимательно прочитай тему:
Я хочу пересылать игроку при входе на сервер данные из конфигурации (не все данные!) через пакет
Кстати, может кто-то может объяснить почему майнкрафт за 1 пакет мой считает? Я же для каждой переменной делаю свой пакет и отсылаю.
 
7,099
324
1,510
Вероятно, дело в том, что майн считает лимит в временных пределах, а не за один пакет. Кст, в ванили есть такая фича: серверные ресурспаки, когда входишь на сервер - с него качается ресурспак. Возможно, это поможет с задачей.
Самое простое решение уже показал Агравэйн - поставить в клиентскую сборку PacketUnlimiter
 
7,099
324
1,510
Почему нет? Маленький мод, который решает большие проблемы. Если в сборке есть какие-нить сумки, у которых можно переполнить нбт, то анлимитер опять спасет. Особенно актуально для ячеек из АЕ2
 
236
4
22
@Angelokа ты не мог бы скинуть полный лог возникающей ошибки?
Я уже забросил это. Однако краем уха услышал, что есть ConfigSyncManager у codechikencore. Как он робит - не ясно, вики по моду нет. Возможно кто-то когда-то напишет гайд, как про пакеты написал добрый человек, остаётся лишь ждать... ;)
 
Сверху