package micdoodle8.mods.galacticraft.core.energy.tile; import micdoodle8.mods.galacticraft.api.power.EnergySource; import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceAdjacent; import micdoodle8.mods.galacticraft.api.power.IEnergyHandlerGC; import micdoodle8.mods.galacticraft.api.transmission.NetworkType; import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; import micdoodle8.mods.galacticraft.core.tile.ReceiverMode; import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced; import micdoodle8.mods.miccore.Annotations.NetworkedField; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; public abstract class EnergyStorageTile extends TileEntityAdvanced implements IEnergyHandlerGC, IElectrical { public static final float STANDARD_CAPACITY = 16000F; @NetworkedField(targetSide = Side.CLIENT) public EnergyStorage storage = new EnergyStorage(STANDARD_CAPACITY, 10); public int tierGC = 1; @NetworkedField(targetSide = Side.CLIENT) public int poweredByTierGC = 1; @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.storage.readFromNBT(nbt); } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); this.storage.writeToNBT(nbt); } public abstract ReceiverMode getModeFromDirection(EnumFacing direction); @Override public float receiveEnergyGC(EnergySource from, float amount, boolean simulate) { return this.storage.receiveEnergyGC(amount, simulate); } @Override public float extractEnergyGC(EnergySource from, float amount, boolean simulate) { return this.storage.extractEnergyGC(amount, simulate); } @Override public boolean nodeAvailable(EnergySource from) { if (!(from instanceof EnergySourceAdjacent)) { return false; } return this.getModeFromDirection(((EnergySourceAdjacent) from).direction) != ReceiverMode.UNDEFINED; } @Override public float getEnergyStoredGC(EnergySource from) { return this.storage.getEnergyStoredGC(); } public float getEnergyStoredGC() { return this.storage.getEnergyStoredGC(); } @Override public float getMaxEnergyStoredGC(EnergySource from) { return this.storage.getCapacityGC(); } public float getMaxEnergyStoredGC() { return this.storage.getCapacityGC(); } @Override public boolean canConnect(EnumFacing direction, NetworkType type) { return false; } //Five methods for compatibility with basic electricity @Override public float receiveElectricity(EnumFacing from, float receive, int tier, boolean doReceive) { this.poweredByTierGC = (tier < 6) ? tier : 6; return this.storage.receiveEnergyGC(receive, !doReceive); } @Override public float provideElectricity(EnumFacing from, float request, boolean doProvide) { return this.storage.extractEnergyGC(request, !doProvide); } @Override public float getRequest(EnumFacing direction) { return Math.min(this.storage.getCapacityGC() - this.storage.getEnergyStoredGC(), this.storage.getMaxReceive()); } @Override public float getProvide(EnumFacing direction) { return 0; } @Override public int getTierGC() { return this.tierGC; } public void setTierGC(int newTier) { this.tierGC = newTier; } }