Обновление progressbar'a в gui через пакет

Версия Minecraft
1.12.2
Чаще всего все обновляют значения в клиенте через detectAndSendChanges и updateProgressbar и т.д.
Я захотел сделать это через кастомные пакеты, так вроде понятней, что происходит. Если с тем, как создать пакет, зарегистрировать и собственно отправить этот пакет с сервера на клиент, все понятно, то с тем, что нужно делать в обработчике когда приходит пакет. Тоесть как именно мне нужно обновить значение на клиенте?
Если понадобиться больше инфы, то допишу.
Java:
public class EnergyMessage implements IMessage{
    
    private int energy_to_send;
    //Позиция TileEntity
    private int x;
    private int y;
    private int z;
    
    public EnergyMessage(int energy, BlockPos pos) {
        this.energy_to_send = energy;
        this.x = pos.getX();
        this.y = pos.getY();
        this.z = pos.getZ();
    }
    
    @Override
    public void fromBytes(ByteBuf buf) {
        buf.writeInt(energy_to_send);
        buf.writeInt(x);
        buf.writeInt(y);
        buf.writeInt(z);
    }

    @Override
    public void toBytes(ByteBuf buf) {
        energy_to_send = buf.readInt();
        x = buf.readInt();
        y = buf.readInt();
        z = buf.readInt();
    }
    public static class Handler implements IMessageHandler<EnergyMessage, IMessage> {
        @Override
        public IMessage onMessage(EnergyMessage message, MessageContext ctx) {
            //Что нужно сделать здесь?   
            return null;
        }
    }
}
 
Все, я разобрался
Если кому будет надо:
Нужно просто обновить TE на стороне клиента

Java:
package com.greedycat.redstonethings.network;

import com.greedycat.redstonethings.tile.RedForgeTile;

import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;

public class EnergyMessage implements IMessage{
    
    private int energy_to_send;
    private int x;
    private int y;
    private int z;
    
    public EnergyMessage() {}
    
    public EnergyMessage(int energy, BlockPos pos) {
        this.energy_to_send = energy;
        this.x = pos.getX();
        this.y = pos.getY();
        this.z = pos.getZ();
    }
    
    @Override
    public void fromBytes(ByteBuf buf) {
        energy_to_send = buf.readInt();
        x = buf.readInt();
        y = buf.readInt();
        z = buf.readInt();
    }

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(energy_to_send);
        buf.writeInt(x);
        buf.writeInt(y);
        buf.writeInt(z);
    }
    public static class Handler implements IMessageHandler<EnergyMessage, IMessage> {
        @Override
        public IMessage onMessage(EnergyMessage message, MessageContext ctx) {
            
            Minecraft.getMinecraft().addScheduledTask(new Runnable() {
                
                @Override
                public void run() {
                    processMessage(message, Minecraft.getMinecraft().world);
                }
            });
            
            return null;
        }
        public void processMessage(EnergyMessage message, WorldClient world) {
            TileEntity tile = world.getTileEntity(new BlockPos(message.x, message.y, message.z));
            if(tile instanceof RedForgeTile) {
                RedForgeTile redForgeTile = (RedForgeTile) tile;
                redForgeTile.setStoredEnergy(message.energy_to_send);
            }
        }
    }
}
 
3,005
192
592
Зачем городить свои пакеты, когда есть майно пакеты, и хз вроде чем-то лучше вроде.
А готовый код есть по поиску..
 
3,005
192
592
Сверху