Как отправить ItemStack через ByteBuf

Версия Minecraft
1.7.10

jopi

Попрошайка
1,421
30
260
Как отправить ItemStack через ByteBuf в 1.7.10?
Когда не было netty это было легкореализуемо, а сейчас сложно чето даже строку черт знает как передать
 
Решение
Java:
public class ResultItemMessage implements IMessage {

    public ItemStack itemStack;

    public ResultItemMessage() {}

    @Override
    public void toBytes(ByteBuf buf) {
        if (itemStack != null)
            ByteBufUtils.writeItemStack(buf, itemStack);
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        if (buf.readableBytes() > 0)
            itemStack = ByteBufUtils.readItemStack(buf);
    }

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

        @Override
        public IMessage onMessage(ResultItemMessage packet, MessageContext message) {
            if (message.side.isClient())
                act(packet);
            else...

timaxa007

Модератор
5,831
409
672
Java:
public class ResultItemMessage implements IMessage {

    public ItemStack itemStack;

    public ResultItemMessage() {}

    @Override
    public void toBytes(ByteBuf buf) {
        if (itemStack != null)
            ByteBufUtils.writeItemStack(buf, itemStack);
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        if (buf.readableBytes() > 0)
            itemStack = ByteBufUtils.readItemStack(buf);
    }

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

        @Override
        public IMessage onMessage(ResultItemMessage packet, MessageContext message) {
            if (message.side.isClient())
                act(packet);
            else
                act(message.getServerHandler().playerEntity, packet);
            return null;
        }

        @SideOnly(Side.CLIENT)
        private void act(ResultItemMessage packet) {
            ItemStack itemStack = packet.itemStack;
        }

        private void act(EntityPlayerMP player, ResultItemMessage packet) {
            
        }

    }

}
 

will0376

Токсичная личность
2,059
55
574
больше грузит сеть
с чего бы вдруг? Да и знаешь, понятие "грузить сеть" тут вообще не подходит, иначе моджанги не делали мультиплеер под кубач, раз пакеты сеть грузят...
@Override public IMessage onMessage(ResultItemMessage packet, MessageContext message) { if (message.side.isClient()) act(packet); else act(message.getServerHandler().playerEntity, packet); return null; }
А зачем в обработчике разделять обработку пакета на сторону?(я про
act(message.getServerHandler().playerEntity, packet);)
если пакет зареган на клиент - хоть усрись, на сервер его не отправишь....
 

timaxa007

Модератор
5,831
409
672
Чтобы не забывать, что так можно разделять. А то мне не нравиться смотреть на абстрактное разделение.
@will0376, ну он как раз на две стороны работает. С клиента отправляется пустой пакет, чтобы с серверной стороны получить ItemStack и отправить на клиентскую сторону.
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Сверху