Пакеты, как отправить и получить

212
0
Тут нужно подключить отдельное API? У меня полностью отсутствует пакет net.minecraft.network.plugin
 
212
0
Agravaine написал(а):
В 1.7 вообще изменилась система пакетов.
А в 1.7 есть эвент получения пакета (я пока не нашел)?
---------
(спустя несколько минут) Эвент зовут FMLNetworkEvent.CustomPacketEvent.ClientCustomPacketEvent, если пакет летит с сервера на клиент.
 
212
0
По какой - то причине эвент, что я нашел, не срабатывает, когда я посылаю пакет. Что пошло не так?
Отправка:
Код:
 if(!event.entity.worldObj.isRemote)
        {
            try {
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                DataOutputStream dataStream = new DataOutputStream(stream);
                for (int i = 0; i < typeCount; i++) {
                    dataStream.writeUTF(new String[]{"text", "must", "be", "there"}[i]);
                    byte k = new byte[]{1,2,5,2}[i];
                    dataStream.writeByte(k);
                    for (byte j = 0; j < k; j++) {
                        dataStream.writeUTF(String.valueOf(new Random().nextInt()));
                        dataStream.writeShort(new Random().nextInt());
                        dataStream.writeShort(new Random().nextInt());
                    }
                }
                System.out.println("Packet send!");
                channel.sendToAll(new FMLProxyPacket(new S3FPacketCustomPayload(modid + "|" + "ServerData", stream.toByteArray())));
            }catch (IOException ex)
            {

            }

        }
[merge_posts_bbcode]Добавлено: 12.07.2016 16:44:56[/merge_posts_bbcode]

Регистрация
Код:
public void Pre(FMLPreInitializationEvent e)
    {
        channel = NetworkRegistry.INSTANCE.newEventDrivenChannel(modid);
        channel.register(instance);
}

[merge_posts_bbcode]Добавлено: 12.07.2016 16:45:11[/merge_posts_bbcode]

Что пошло не так?
 
1,137
5
3
Во-первых, закрывай потоки. Память утекает быстрее, чем вода из крана.
Во-вторых, ты не так делаешь.
В-третьих, используй SimpleNetworkWrapper
В-четвёртых, по нему есть гайд
 
212
0
Во-первых я и так знаю как мне пакеты отправлять (IMessage для меня проще всего).
Во-вторых мне нужно слать именно этот пакет и именно вот так. Дело в том что слать его мне вообще не надо, а надо принимать с плагина на сервере.
[merge_posts_bbcode]Добавлено: 12.07.2016 22:42:18[/merge_posts_bbcode]

wilah написал(а):
Во-вторых, ты не так делаешь.
Если ты имеешь ввиду, что я не правильно использую именно этот способ - в чем же ошибка?
 
212
0
Так, я уже нашел, что на сервера уже была такая же система, но сделав все почти так же(я не стал делать новый класс, а все устроил в главном), я нашел, что у меня не срабатывает евент принятия пакета. Опять же что не так?
 
212
0
Все, нашел в чем была ошибка
Код:
channel.sendToAll(new FMLProxyPacket(new S3FPacketCustomPayload(modid + "|" + "ServerData", stream.toByteArray())));
Я думал там надо указать имя пакета, а там оказывается нужно имя канала писать) Теперь все принимается и работает.
 
1,137
5
3
Ну зачем ты потоки создаешь? Да ещё и не закрываешь. Сделай поток-синглтон, а после отправки пакета чисто его(там даже фун-я соответствующая есть). Но лучше сделай через Simple Network Wrapper.
 
212
0
Еще раз говорю, необходимо сделать именно так. Не потому что я так захотел, а заказ у меня такой) Я сделал бы через IMessage, как делал уже несколько раз и не парился по этому поводу.
 
2,505
81
397
Вот так сделай
Код:
try (DataOutputStream dataStream = new DataOutputStream(new ByteArrayOutputStream())) {
    //T0D0: code
}
Автоматом закроется. Хотя, про close грех не знать.
 
212
0
Небольшая проблемка! Дело в том, что пакет, который я должен вот этим способом получить, должен быть отправлен плагином. Опытным путем я выяснил, что каналы у модов и плагинов разные. Мод может каким либо образом поймать пакет плагина?
 
Сверху