SimpleNetworkWrapper передача массива String

Версия Minecraft
1.7.10
API
Forge
36
1
5
Привет!
Для определенной задачи мне необходимо реализовать пакет, который будет с клиента на сервер передавать массив строк. Сам пакет я регистрировать умею, с помощью SimpleNetworkWrapper все сделал, а вот в самом пакете трудности.
Написал следующий код:
MessageSetData.java:
public class MessageSetData implements IMessage {

    private String[] data = new String[82];

    private int x;
    private int y;
    private int z;

    public MessageSetData(String[] data, int x, int y, int z) {
        this.data = data;

        this.x = x;
        this.y = y;
        this.z = z;
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        this.data = new String[]{ByteBufUtils.readUTF8String(buf)};

        x = buf.readInt();
        y = buf.readInt();
        z = buf.readInt();
    }

    @Override
    public void toBytes(ByteBuf buf) {
        ByteBufUtils.writeUTF8String(buf, Arrays.toString(this.data));

        buf.writeInt(x);
        buf.writeInt(y);
        buf.writeInt(z);
    }

    public static class Handler implements IMessageHandler<MessageSetData, IMessage> {

        @Override
        public IMessage onMessage(MessageSetData packet, MessageContext ctx) {

            Invoke.server(() -> {
                ...
            });

            return null;
        }

    }

}

Насколько это правильно? И правильно вообще? Как правильно реализовать передачу массива пакетом?
Буду рад любой подсказке.
 
Решение
Как правильно реализовать передачу массива пакетом?
1 - используй листы.
2 - первым передаёшь количество строк в листе
3 - вторым проходишься по листу и передаёшь всё содержимое.

На стороне приёма:
1 - получаешь кол-во строк
2 - делаешь fori до значения из п.1 и получая, добавляешь в лист.

А вообще - можешь использовать ElegantNetworking - максимально изящная пакетная система. Сериализация/десериализация там происходит автоматом

will0376

Токсичная личность
2,078
55
585
Как правильно реализовать передачу массива пакетом?
1 - используй листы.
2 - первым передаёшь количество строк в листе
3 - вторым проходишься по листу и передаёшь всё содержимое.

На стороне приёма:
1 - получаешь кол-во строк
2 - делаешь fori до значения из п.1 и получая, добавляешь в лист.

А вообще - можешь использовать ElegantNetworking - максимально изящная пакетная система. Сериализация/десериализация там происходит автоматом
 
36
1
5
Как-то так, верно?
MessageSetData.java:
@Override
    public void fromBytes(ByteBuf buf) {
        int countItems = buf.readInt();
        for (int i = 0; i < countItems; i++) {
            this.data[i] = ByteBufUtils.readUTF8String(buf);
        }

        x = buf.readInt();
        y = buf.readInt();
        z = buf.readInt();
    }

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(this.data.length);
        for (int i = 0; i < this.data.length; i++) {
            ByteBufUtils.writeUTF8String(buf, this.data[i]);
        }

        buf.writeInt(x);
        buf.writeInt(y);
        buf.writeInt(z);
    }
 
Сверху