ElegantNetworking - максимально изящная пакетная система

ElegantNetworking - максимально изящная пакетная система 3.14 / 3.14

Нет прав для скачивания

will0376

Токсичная личность
2,077
55
585
@hohserg1 Уважаемый. Как массив байтов(byte[]) передавать? отправить не могу.
Java:
[09:41:16] [Client thread/FATAL] [minecraft/Minecraft]: Error executing task
java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: 0
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[?:1.8.0_181]
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[?:1.8.0_181]
    at net.minecraft.util.Util.runTask(Util.java:54) [Util.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1178) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:442) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at hohserg.elegant.networking.impl.DataUtils2.unserialize(DataUtils2.java:230) ~[DataUtils2.class:?]
    at hohserg.elegant.networking.impl.DataUtils2.unserialize(DataUtils2.java:246) ~[DataUtils2.class:?]
    at hohserg.elegant.networking.impl.DataUtils2.unserialize(DataUtils2.java:40) ~[DataUtils2.class:?]
    at hohserg.elegant.networking.impl.CCLNetworkImpl.readObjectFromPacket(CCLNetworkImpl.java:78) ~[CCLNetworkImpl.class:?]
    at hohserg.elegant.networking.impl.CCLNetworkImpl.onReceiveClient(CCLNetworkImpl.java:63) ~[CCLNetworkImpl.class:?]
    at hohserg.elegant.networking.impl.CCLNetworkImpl.lambda$registerChannel$0(CCLNetworkImpl.java:84) ~[CCLNetworkImpl.class:?]
    at codechicken.lib.packet.PacketCustom$ClientInboundHandler.handle(PacketCustom.java:110) ~[PacketCustom$ClientInboundHandler.class:?]
    at codechicken.lib.packet.PacketCustom$ClientInboundHandler.lambda$handle$0(PacketCustom.java:108) ~[PacketCustom$ClientInboundHandler.class:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_181]
    at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) ~[?:1.8.0_181]
    at java.util.concurrent.FutureTask.run(FutureTask.java) ~[?:1.8.0_181]
    at net.minecraft.util.Util.runTask(Util.java:53) ~[Util.class:?]
    ... 15 more
Но записываться - записывается... 1604731460948.png пока что на костыльный List<Byte> переделаю
 
7,099
324
1,510
Массивы не поддерживаются. Юзай List<Byte>
 
7,099
324
1,510
Недостаточно хорошая архитектура процессора аннотаций
 
7,099
324
1,510
hohserg обновил(а) ресурс ElegantNetworking - максимально изящная пакетная система новой записью:

Поддержка енумов и 1.7.10!

Процессор аннотаций обновился до 2.3
  • Появилась поддержка перечислений(enum)
  • Появилась поддержка массивов
Мод-либа портирована на 1.7.10
Спасибо @jopi за черновой вариант порта!

Использовании процессора аннотаций на 1.7.10 работает через compileOnly "io.gitlab.hohserg.elegant.networking:annotation-processor:2.3"

Узнать больше об этом обновлении...
 
7,099
324
1,510
hohserg обновил(а) ресурс ElegantNetworking - максимально изящная пакетная система новой записью:

Исправлены зависимости процессора аннотаций

Теперь корректно подключается через мавен
compileOnly "io.gitlab.hohserg.elegant.networking:annotation-processor:2.4"

Узнать больше об этом обновлении...
 
1,159
38
544
Выглядит угарно! Хотя я с большим недоверием отношусь к дополнительным сетевым прослойкам. А как оно работает? При сборке генерирует код форжеских пакетов? Или тянет в бинарник дополнительные классы?
 
7,099
324
1,510
При сборке генерирует сериализующий код. В качестве пакетной системы используется CCL, она быстрая и кросс-версионная
 
7,099
324
1,510
hohserg обновил(а) ресурс ElegantNetworking - максимально изящная пакетная система новой записью:

Фичи сериализации

Добавлена поддержка сериализации следующих типов:
  • NbtTagCompound
  • ItemStack
  • FluidStack
  • Item
  • Block
  • Fluid
  • ResourceLocation
  • UUID
Добавлекна возможность переопределять логику сериализавции у своих типов.
См. интерфейс IByteBufSerializable для подробностей юза

compile "io.gitlab.hohserg.elegant.networking:elegant-networking-1.12:2.2"
compileOnly "io.gitlab.hohserg.elegant.networking:annotation-processor:2.7"

Узнать больше об этом обновлении...
 
7,099
324
1,510
hohserg обновил(а) ресурс ElegantNetworking - максимально изящная пакетная система новой записью:

Исправлена ошибка использования либы несколькими модами в сборке

Внутреннее исправление коллизии id пакетов, на использовании никак не отразится

Узнать больше об этом обновлении...
 
7,099
324
1,510
7,099
324
1,510
hohserg обновил(а) ресурс ElegantNetworking - максимально изящная пакетная система новой записью:

Убрана жесткая зависимость от CodeChickenLib

Теперь зависимость от CCL опциональна! На всех версиях игры!(которые поддерживаются фреймворком)
Если в сборке есть CCL - будет использоваться ее пакетная система.
Если нету - будет использоваться обычная, которую предлагает Forge.

Большое спасибо @Wild tan() за черновой вариант реализации Network на пакетной системе Forge для 1.14+

Узнать больше об этом обновлении...
 
5,018
47
783
Идея для обновы: возможность передачи вообще чего угодно через один и тот же метод)
 
7,099
324
1,510
Идея для обновы: возможность передачи вообще чего угодно через один и тот же метод)
А терь придумай как хандлер с принимающей стороны сделать. Он будет принимать Object? Тогда он должен быть один на всю сторону. И что, мы возвращаемся к пакетам CCL? Они по сути так и устроены - отправляем че угодно отовсюду, принимает в одной точке - только без автосериализации.
Это кст не сработает. Процессор аннотаций ищет реализации класса поля вплоть до финальных в пределах package класса поля. Поэтому он не найдет всех тех классов, что будут пихаться в поле в рантайме, ведь они будут в другом package, нежели Object. Зато он найдет кучу классов, которые не связаны с передаваемыми данными, но находятся в одном package вместе с Object.

В целом генерация сериализации рассчитана на то, что юзер использует строгую типизацию. Мы ведь на java пишем.
Пример:
Мы хотим передавать в поле пакета экземпляры классов A, B и C. Тогда лучшим выбором типа для поля будет такой тип, который может являться A или B или C, но ничем другим(т.е. минимальный необходимый). Если такого типа сейчас нет, то можно создать интерфейс и реализовать его в A, B и C, получится искомый тип.
 
7,099
324
1,510
hohserg1 обновил(а) ресурс ElegantNetworking - максимально изящная пакетная система новой записью:

ElegantNetworking теперь на курсе!

Мод-либа теперь доступна на курсе: curseforge.com/elegant-networking
Теперь проще распространять паблик-моды с элегантными пакетами

Появился логотип! Спасибо @Liahim за него)

Узнать больше об этом обновлении...
 
7,099
324
1,510
7,099
324
1,510
При сборке внутри Idea может понадобится включить процессоры аннотаций, если они не включены
1610233239528.png
 
Сверху