• Гость, темы в этой категории создаются через Ресурсы!
    После создания туториала в Ресурсах в этом форуме будет автоматически создана тема для обсуждения.
Иконка ресурса

Пакеты

MaximPixel

Каменная лига
Сообщения
648
Лучшие ответы
14
Симпатии
12
#1
MaximPixel добавил(а) новый ресурс:

Пакеты - Работа с пакетной системой Minecraft

Этот ресурс научит вас правильно создавать свой пакет, регистрировать его, отправлять и обрабатывать его уже на сервере. Код будет написан на версии Minecraft 1.12.2, но для 1.10 по сути изменения не требуются.

Давайте сделаем пакет, который будет отправлять на сервер строку с сообщением.
Метод, который сработает когда до сервера дойдёт этот пакет это onMessage. Переменная failed нужна чтобы случайно не пришёл повреждённый пакет...
Узнать больше об этом ресурсе...
 

Eifel

Команда форума
Сообщения
1,282
Лучшие ответы
54
Симпатии
326
#2
Мало информации. Если бы я был новичком, то вряд ли бы что-то понял. Хотелось бы увидеть описание самой логики сначала, потом как правильно регистрировать(описать все параметры и т.д.), показать пример работы, показать еще варианты отправки с клиента на сервер, добавить больше комментариев в код(а то я не понял зачем там большинство этих методов и что они делают).

А то например: "Метод init инициализируем в классе мода в init". Я вот не знаю как инициализировать метод и где именно не понял.
"Если будет отправка с сервера на клиент, то можно регистрировать пакет только на клиентской стороне, так как только клиент будет его обрабатывать. ". Так же не понятно что и где мне делать.

В общем, думаю эти все моменты надо исправить.
 

Ivasik

Porting GrandBombaster
Команда форума
Сообщения
2,607
Лучшие ответы
73
Симпатии
235
#4
Мда и смысл? Во первых, то что в гайде ужасно, хуже даже чем наверное у меня. Во вторых:
Java:
@Override
    public void fromBytes(ByteBuf buf) {
        try {//Зачем?
            message = ByteBufUtils.readUTF8String(buf);
        } catch (IndexOutOfBoundsException e) {
            failed = true;//Зачем?! ._.
            YourMod.LOG.info("CPacketMessage error");//Ммм используем не пойми что....
        }
    }

    @Override
    public void toBytes(ByteBuf buf) {
        if (buf != null) {//Не ну серьёзно, ЗАЧЕМ???
            ByteBufUtils.writeUTF8String(buf, message);
        }
    }
Java:
//Статичные переменные инициализируются раньше, так что нет смысла в (см. вниз)
public static SimpleNetworkWrapper NETWORK;
   
    public static void init() {
        NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel("MYMOD");//В этом
        /**
         *   Можно было вынести в отдельный метод сократив код(ну или строку).
         *   С этим нулём все и будут его пихать и получать ещё больше ошибок.
         *   Почему у тебя CPacket когда сторона серверная? Либо объясни почему CPacket.(да докопался)
         */
        NETWORK.registerMessage(CPacketMessage.class, CPacketMessage.class, 0, Side.SERVER);
    }
Java:
@SubscribeEvent
    public void onKey(KeyInputEvent e) {
        if (OWN_KEY.isPressed()) {//И что это за OWN_KEY??
            NetworkHandler.NETWORK.sendToServer(new CPacketMessage("Hello, World!"));
        }
    }
 

Ivasik

Porting GrandBombaster
Команда форума
Сообщения
2,607
Лучшие ответы
73
Симпатии
235
#7
Без переменной failed возможен краш
Эм, если ты в try-catch оставишь catch пустым, то краша не будет, так что и смысла в failed нет. А "битые" данные ты прочитать в принципе не сможешь и соответственно проверка на нулл не нужна.
 

MaximPixel

Каменная лига
Сообщения
648
Лучшие ответы
14
Симпатии
12
#8
Эм, если ты в try-catch оставишь catch пустым, то краша не будет, так что и смысла в failed нет. А "битые" данные ты прочитать в принципе не сможешь и соответственно проверка на нулл не нужна.
Ты прав, но если допустим нужно будет передаваться число, которое по стандарту ровняется нулю, то будет уже ошибка. Ну не ошибка, а типа будет вид, что ты отправил именно 0, а не другое число.
 

Ivasik

Porting GrandBombaster
Команда форума
Сообщения
2,607
Лучшие ответы
73
Симпатии
235
#9

MaximPixel

Каменная лига
Сообщения
648
Лучшие ответы
14
Симпатии
12
#12
Вообще ничего не понял.
Ну допустим есть пакет, который телепортирует игрока, и вдруг произошла потеря данных и игрок перемещается на координаты 0, 0, 0. Я это имею ввиду
 

Гарик

Золотая лига
Сообщения
2,606
Лучшие ответы
40
Симпатии
384
#15

Ivasik

Porting GrandBombaster
Команда форума
Сообщения
2,607
Лучшие ответы
73
Симпатии
235
#16
Я не знаю, но вдруг как-то сервер или что-то другое отдаст повреждённый пакет клиенту.
Ну вот видишь, ты и сам не знаешь. Ничего не будет, убирай свои проверки.
 
Сверху