/** * Copyright (c) Lambda Innovation, 2013-2016 * This file is part of the AcademyCraft mod. * https://github.com/LambdaInnovation/AcademyCraft * Licensed under GPLv3, see project root for more information. */ package cn.academy.core.block; import cn.academy.core.tile.TileInventory; import cn.academy.energy.api.block.IWirelessReceiver; import cn.lambdalib.annoreg.core.Registrant; import cn.lambdalib.s11n.network.TargetPoints; import cn.lambdalib.s11n.network.NetworkMessage; import cn.lambdalib.s11n.network.NetworkMessage.Listener; import cpw.mods.fml.relauncher.Side; import net.minecraft.nbt.NBTTagCompound; /** * BaseClass that should be used on all energy receivers. * This class will automatically sync its energy field to client side. * @author WeAthFolD */ @Registrant public class TileReceiverBase extends TileInventory implements IWirelessReceiver { private static final int UPDATE_WAIT = 20; int updateTicker = 0; final double maxEnergy; final double bandwidth; public double energy; public TileReceiverBase(String name, int invSize, double max, double bwidth) { super(name, invSize); maxEnergy = max; bandwidth = bwidth; } @Override public void updateEntity() { if(!getWorldObj().isRemote) { if(++updateTicker == UPDATE_WAIT) { updateTicker = 0; NetworkMessage.sendToAllAround(TargetPoints.convert(this, 15), this, "sync_energy", 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); } @Listener(channel="sync_energy", side=Side.CLIENT) private void hSync(double energy) { this.energy = energy; } @Override public double pullEnergy(double amt) { double a = Math.min(amt, energy); energy -= a; return a; } }