Не могу получить количество энергии в классе рендера

164
1
4
Юзаю Redstone Flux Energy API, нужно в классе рендера получить количество энергии, делаю обычно через tileEntity.energyStorage.getEnergyStored(), но в классе рендера всегда выдает 0, проверял через worldObj.isRemote, если так то выдает 0, если !worldObj.isRemote вообще ничего не выдает. Как решить?
 
164
1
4
Чёрт, так и думал :C Итак, а теперь куча вопросов: как это лучше сделать? Я должен отправлять пакеты клиенту? Энергию я прибавляю через предмет методом modifyEnergyStored, затем я должен в классе рендера (TileEntitySpecialRenderer) получать энергию методом getEnergyStored и она равна нулю (если worldObj.isRemote, а если !worldObj.isRemote то тогда оно вообще не показывает, хотя, сейчас я запихнул в метод onBlockActivated проверочный код, на клиенте оно выдаёт 0.0, а на сервере 16.0 (энергию, которую я прибавил через предмет)), но на самом деле энергия есть. Собственно как быть с пакетами?
 
164
1
4
У меня когда-то было что-то типа этого:
Код:
    @Override
    public Packet getDescriptionPacket()
    {
        NBTTagCompound tag = new NBTTagCompound();
        writeToNBT(tag);
        return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, this.blockMetadata, tag);
    }
    
    @Override
    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
    {
        NBTTagCompound tag = pkt.func_148857_g();
        readFromNBT(tag);
    }
Нужно ли что-то менять?
 
164
1
4
Код:
public class TileEntityNode extends TileEntity implements IEnergyHandler
{
    EnergyStorage energyStorage;
    
    public EnergyStorage getEnergyStorage()
    {
        return this.energyStorage;
    }
    
    public void addPowerCore()
    {
        this.energyStorage = new EnergyStorage(228, 8);
        worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
    }
    
    public void remPowerCore()
    {
        this.energyStorage = null;
        worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
    }
    
    @Override
    public void writeToNBT(NBTTagCompound tag)
    {
        super.writeToNBT(tag);
        if (this.energyStorage != null)
        {
            energyStorage.writeToNBT(tag);
        }
    }

    @Override
    public void readFromNBT(NBTTagCompound tag)
    {
        super.readFromNBT(tag);
        energyStorage.readFromNBT(tag);
    }
    
    @Override
    public boolean canConnectEnergy(ForgeDirection from)
    {
        return false;
    }

    @Override
    public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
    {
        return this.energyStorage != null ? energyStorage.receiveEnergy(maxReceive, simulate) : 0;
    }

    @Override
    public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
    {
        return this.energyStorage != null ? energyStorage.extractEnergy(maxExtract, simulate) : 0;
    }

    @Override
    public int getEnergyStored(ForgeDirection from)
    {
        return this.energyStorage != null ? energyStorage.getEnergyStored() : 0;
    }

    @Override
    public int getMaxEnergyStored(ForgeDirection from)
    {
        return this.energyStorage != null ? energyStorage.getMaxEnergyStored() : 0;
    }
}
 
164
1
4
Всё равно выдаёт 0, сейчас проверяю через onBlockActivated:
Код:
[21:56:56] [Client thread/INFO] [ExampleMod]: 0.0
[21:56:56] [Server thread/INFO] [ExampleMod]: 16.0
 
164
1
4
Конечно:
Код:
public class TileEntityNode extends TileEntity implements IEnergyHandler
{
    EnergyStorage energyStorage;
    
    public EnergyStorage getEnergyStorage()
    {
        return this.energyStorage;
    }
    
    public void addPowerCore()
    {
        this.energyStorage = new EnergyStorage(228, 8);
        worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
    }
    
    public void remPowerCore()
    {
        this.energyStorage = null;
        worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
    }
    
    @Override
    public void writeToNBT(NBTTagCompound tag)
    {
        super.writeToNBT(tag);
        if (this.energyStorage != null)
        {
            energyStorage.writeToNBT(tag);
        }
    }

    @Override
    public void readFromNBT(NBTTagCompound tag)
    {
        super.readFromNBT(tag);
        energyStorage.readFromNBT(tag);
    }

    @Override
    public Packet getDescriptionPacket()
    {
        NBTTagCompound tag = new NBTTagCompound();
    writeToNBT(tag);
    return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, this.blockMetadata, tag);
    }
    
    @Override
    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
    {
        NBTTagCompound tag = pkt.func_148857_g();
    readFromNBT(tag);
    }
    
    @Override
    public boolean canConnectEnergy(ForgeDirection from)
    {
        return false;
    }

    @Override
    public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
    {
        return this.energyStorage != null ? energyStorage.receiveEnergy(maxReceive, simulate) : 0;
    }

    @Override
    public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
    {
        return this.energyStorage != null ? energyStorage.extractEnergy(maxExtract, simulate) : 0;
    }

    @Override
    public int getEnergyStored(ForgeDirection from)
    {
        return this.energyStorage != null ? energyStorage.getEnergyStored() : 0;
    }

    @Override
    public int getMaxEnergyStored(ForgeDirection from)
    {
        return this.energyStorage != null ? energyStorage.getMaxEnergyStored() : 0;
    }
}
[merge_posts_bbcode]Добавлено: 25.10.2015 23:25:04[/merge_posts_bbcode]

О боже, похоже я совсем тупой :C Моя ошибка была в том что я в предмете в методе onItemUseFirst делал так:
Код:
            if (world.isRemote)
            {
                return false;
            }
            else
            {
                            node.getEnergyStorage().modifyEnergyStored(stack.getItemDamage());
                        ...
Теперь на клиенте 16.0, а на сервере 0.0. За то я получил энергию в рендере :p
 
я с этой проблемой лично сталкивался. И решение было очень простым.
 
Сверху