package infstudio.exoticpower.tileentity; import cn.academy.energy.api.block.IWirelessReceiver; import cn.annoreg.core.RegNetworkCall; import cn.annoreg.core.Registrant; import cn.annoreg.core.StorageOption; import cn.annoreg.core.StorageOption.Data; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.relauncher.Side; @Registrant public class TileEntityReceiver extends TileEntityMachine implements IWirelessReceiver { final double maxEnergy; final double bandwidth; public double energy; int UPDATE_WAIT = 20; int updateTicker = 0; public TileEntityReceiver(String name, int invSize, double max, double bwidth) { super(name, invSize); maxEnergy = max; bandwidth = bwidth; } @Override public void update() { if (!getWorld().isRemote) { if (++updateTicker == UPDATE_WAIT) { updateTicker = 0; syncEnergy(energy); } } } @Override public double getRequiredEnergy() { return maxEnergy - energy; } @Override public double injectEnergy(double amt) { double req = maxEnergy - energy; double give = Math.min(amt, req); energy += give; return amt - give; } public double getEnergy() { return energy; } public double getMaxEnergy() { return maxEnergy; } @Override public double getBandwidth() { return bandwidth; } @Override public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); energy = tag.getDouble("energy"); } @Override public void writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); tag.setDouble("energy", energy); } @RegNetworkCall(side = Side.CLIENT, thisStorage = StorageOption.Option.INSTANCE) private void syncEnergy(@Data Double e) { energy = e; } @Override public double pullEnergy(double amt) { double a = Math.min(amt, energy); energy -= a; return a; } }