package buildcraftAdditions.tileEntities; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; import cofh.api.energy.IEnergyReceiver; import buildcraftAdditions.api.configurableOutput.EnumPriority; import buildcraftAdditions.config.ConfigurationHandler; import buildcraftAdditions.reference.BlockLoader; import buildcraftAdditions.reference.Variables; import buildcraftAdditions.tileEntities.Bases.TileKineticEnergyBufferBase; import buildcraftAdditions.utils.Location; /** * Copyright (c) 2014-2015, AEnterprise * http://buildcraftadditions.wordpress.com/ * Buildcraft Additions is distributed under the terms of GNU GPL v3.0 * Please check the contents of the license located in * http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/ */ public class TileKineticEnergyBufferTier1 extends TileKineticEnergyBufferBase { public int energyState, lastEnergyState; private boolean creative, init; public TileKineticEnergyBufferTier1() { super(ConfigurationHandler.capacityKEBTier1, ConfigurationHandler.maxTransferKEBTier1, ConfigurationHandler.KEB1powerloss, 1, Variables.SyncIDs.KEBT1.ordinal()); creative = false; init = false; } @Override public void updateEntity() { if (worldObj.isRemote) return; if (creative) { if (!init) { energy = capacity; energyState = 9; worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, 9, 2); init = true; } outputEnergy(); return; } super.updateEntity(); if (capacity == 0) return; energyState = (energy * 8) / capacity; if (lastEnergyState != energyState && worldObj.getBlock(xCoord, yCoord, zCoord) == BlockLoader.kebT1) worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, energyState, 2); lastEnergyState = energyState; } @Override public int getEnergyLevel() { return creative ? 100 : super.getEnergyLevel(); } @Override public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); creative = tag.getBoolean("creative"); } @Override public void writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); tag.setBoolean("creative", creative); } @Override public void outputEnergy() { for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { for (EnumPriority priority : EnumPriority.values()) { if (configuration.getPriority(direction) != priority) continue; if (!configuration.canSend(direction)) continue; Location location = new Location(worldObj, xCoord, yCoord, zCoord); location.move(direction); IEnergyReceiver energyHandler = null; if (location.getTileEntity() != null && location.getTileEntity() instanceof IEnergyReceiver) energyHandler = (IEnergyReceiver) location.getTileEntity(); if (energyHandler != null) { int sendEnergy = energy; if (canSharePower(location.getTileEntity(), direction)) { TileKineticEnergyBufferTier1 keb = (TileKineticEnergyBufferTier1) location.getTileEntity(); sendEnergy = ((energy + keb.energy) / 2) - keb.energy; } if (sendEnergy < 0) sendEnergy = 0; if (sendEnergy > maxTransfer) sendEnergy = maxTransfer; int output = energyHandler.receiveEnergy(direction.getOpposite(), sendEnergy, false); if (!creative) { energy -= output; } } } } } public boolean isCreative() { return creative; } }