/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.machine.epsilon; import mods.railcraft.api.electricity.IElectricGrid; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; import mods.railcraft.common.blocks.machine.IEnumMachine; import mods.railcraft.common.blocks.machine.TileMachineBase; import mods.railcraft.common.plugins.ic2.IC2Plugin; import mods.railcraft.common.plugins.ic2.ISinkDelegate; import mods.railcraft.common.plugins.ic2.TileIC2MultiEmitterDelegate; import mods.railcraft.common.plugins.ic2.TileIC2SinkDelegate; import mods.railcraft.common.util.misc.Game; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; /** * * @author CovertJaguar <http://www.railcraft.info> */ public class TileElectricFeeder extends TileMachineBase implements IElectricGrid, ISinkDelegate { private final ChargeHandler chargeHandler = new ChargeHandler(this, ChargeHandler.ConnectType.BLOCK, 1); private TileEntity sinkDelegate; private boolean addedToIC2EnergyNet; @Override public IEnumMachine getMachineType() { return EnumMachineEpsilon.ELECTRIC_FEEDER; } @Override public IIcon getIcon(int side) { return getMachineType().getTexture(0); } @Override public void updateEntity() { super.updateEntity(); if (Game.isNotHost(getWorld())) return; if (!addedToIC2EnergyNet) { IC2Plugin.addTileToNet(getIC2Delegate()); addedToIC2EnergyNet = true; } chargeHandler.tick(); } private void dropFromNet() { if (addedToIC2EnergyNet) IC2Plugin.removeTileFromNet(getIC2Delegate()); } @Override public void onChunkUnload() { super.onChunkUnload(); dropFromNet(); } @Override public void invalidate() { super.invalidate(); dropFromNet(); } @Override public void readFromNBT(NBTTagCompound data) { super.readFromNBT(data); chargeHandler.readFromNBT(data); } @Override public void writeToNBT(NBTTagCompound data) { super.writeToNBT(data); chargeHandler.writeToNBT(data); } @Override public ChargeHandler getChargeHandler() { return chargeHandler; } @Override public TileEntity getTile() { return this; } @Override public double getDemandedEnergy() { double chargeDifference = chargeHandler.getCapacity() - chargeHandler.getCharge(); return chargeDifference > 0.0 ? chargeDifference : 0.0; } @Override public int getSinkTier() { return 3; } @Override public double injectEnergy(ForgeDirection directionFrom, double amount) { getChargeHandler().addCharge(amount); return 0.0; } @Override public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction) { return !(emitter instanceof TileIC2MultiEmitterDelegate); } public TileEntity getIC2Delegate() { if (sinkDelegate == null) try { sinkDelegate = new TileIC2SinkDelegate(this); } catch (Throwable error) { Game.logErrorAPI("IndustrialCraft", error); } return sinkDelegate; } }