[1.7-1.13.2] Пакетная система

[1.7-1.13.2] Пакетная система

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

Icosider

Kotliner
Администратор
3,600
99
663
Ivasik добавил(а) новый ресурс:

[1.7-1.12] Пакетная система - Пакетная система

Предисловие:
Данная тема научит Вас, как надо правильно создавать, отправлять и регистрировать пакеты. Тема со временем будет наполнятся различными статьями, которые помогут Вам решить ту или иную проблему. Так же убедительная просьба обратить внимание на то, что код для статей пишется на версии 1.10 Minecraft.

Оглавление:
  • Начало
  • Статьи
  • - Правильный спавн частиц от игрока
  • - Синхронизация способностей [1.8+]
  • Заключение
...

Узнать больше об этом ресурсе...
 
Было бы неплохо если бы вы написали статью о генерации руди, добавление своего биома и измерения для 1.12+
 

Icosider

Kotliner
Администратор
3,600
99
663
@Рома, здесь обсуждение ресурса, а не стол заявок. По поводу своего вопроса, пишите в тему "Создание своего мода".
 
129
6
18
А можно поподробней как работает система пакетов, зачема она нужна? + желательно простой пример
 
5,018
47
783
Например, ты хочешь увидеть что другой игрок горит. Но данный метод - рендер огня, выполняется только на клиенте у того игрока. Значит ты его никак увидеть не можешь. Для этого и отправляется пакет на сервер, потому что клиенты у всех свои - а сервер один. И этот клиент идет с серва на другой клиент и метод выполняется. И ты видишь что другой игрок горит
 
33
1
2
ух ты, с 1.6 до 1.7 подсистема поменялась капитально... Значительной части cpw.mods.fml.common.network просто не стало)
 

Icosider

Kotliner
Администратор
3,600
99
663
7,099
324
1,509
Ивасик, ты хоть в ide код писал для 1.13, или на коленке прямо в тутор?

writeItemStack перенесено в PacketBuffer

В registerPacket не влезают реализации Packet
1554152146182.png
Поэтому сделал его private static void registerPacket(Class<? extends Packet> clazz) {
Появилась еще одна ошибка: decode и handlePacket не влезают в registerMessage
1554151978446.png
В итоге сделал так. Норм?
Java:
private static void registerPacket(Class<? extends Packet> clazz) {
    try {
        final Packet packet = clazz.newInstance();
        INSTANCE.registerMessage(id, (Class<Packet>)clazz, packet::encode, packet::decode, packet::handlePacket);
        id += 1;
    } catch (InstantiationException | IllegalAccessException e) {
        e.printStackTrace();
    }
}

И небольшое пожелание по дизайну: методам encode и decode аргумент Packet нужен только чтобы под тип BiConsumer<MSG, PacketBuffer> подходить(если я правильно понял), поэтому стоит сделать отдельную сигнатуру для регистрации и отдельную для имплементации
 

Icosider

Kotliner
Администратор
3,600
99
663
Про недостатки, я ещё их понял когда начал мод переписывать, потом отвлёкся и чёт забил.
По поводу кода: id += 1, эм, а не проще ли id++ сделать? В продолжении к коду, вообще я пытался проще сделать, но нормально не выходило. На выхах попробую ещё поковырять, если не забью. И по поводу:
И небольшое пожелание по дизайну: методам encode и decode аргумент Packet нужен только чтобы под тип BiConsumer<MSG, PacketBuffer> подходить(если я правильно понял), поэтому стоит сделать отдельную сигнатуру для регистрации и отдельную для имплементации
Ничего не понял( Отпиши мне в дс, чтобы здесь не оффтопить.
 
7,099
324
1,509
1,470
19
189
такой вопрос. когда вызывается SimplePacket#buf() и почему нельзя сразу buf установить Unpooled.buffer()?
 

Icosider

Kotliner
Администратор
3,600
99
663
1,470
19
189
у меня и без этого работает
 
7,099
324
1,509
@Ivasik можешь запилить example mod(или KWork) с пакетной системой для версий 1.14-1.15?
 
Сверху