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

Пакеты

MaximPixel

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

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

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

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

Thunder

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

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

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

Dahaka

Золотая лига
Сообщения
2,312
Лучшие ответы
81
Симпатии
247
#3
Мало гайдов про пакеты. Давайте исчо.
 

Ivasik

Porting Master
Команда форума
Сообщения
2,453
Лучшие ответы
68
Симпатии
198
#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 Master
Команда форума
Сообщения
2,453
Лучшие ответы
68
Симпатии
198
#7
Без переменной failed возможен краш
Эм, если ты в try-catch оставишь catch пустым, то краша не будет, так что и смысла в failed нет. А "битые" данные ты прочитать в принципе не сможешь и соответственно проверка на нулл не нужна.
 

MaximPixel

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

Ivasik

Porting Master
Команда форума
Сообщения
2,453
Лучшие ответы
68
Симпатии
198
#9

MaximPixel

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

Ivasik

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