package mods.railcraft.common.blocks.machine.epsilon; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import mods.railcraft.api.electricity.IElectricGrid; import mods.railcraft.common.blocks.machine.IEnumMachine; import mods.railcraft.common.blocks.machine.TileMachineBase; import mods.railcraft.common.plugins.forge.PowerPlugin; import mods.railcraft.common.util.misc.Game; import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; public class TileElectricFeederAdmin extends TileMachineBase implements IElectricGrid { private final ChargeHandler chargeHandler = new ChargeHandler(this, ChargeHandler.ConnectType.BLOCK, 0.0); private boolean powered; @Override public void onNeighborBlockChange(Block block) { super.onNeighborBlockChange(block); checkRedstone(); } @Override public void onBlockPlacedBy(EntityLivingBase entityliving, ItemStack stack) { super.onBlockPlacedBy(entityliving, stack); checkRedstone(); } private void checkRedstone() { if (Game.isNotHost(getWorld())) return; boolean p = PowerPlugin.isBlockBeingPowered(worldObj, xCoord, yCoord, zCoord); if (powered != p) { powered = p; sendUpdateToClient(); } } @Override public void updateEntity() { super.updateEntity(); if (Game.isNotHost(getWorld())) return; if (powered) { double capacity = chargeHandler.getCapacity(); try { chargeHandler.setCharge(capacity); } catch (Throwable err) { chargeHandler.addCharge(capacity - chargeHandler.getCharge()); Game.logErrorAPI("Railcraft", err, IElectricGrid.class); } } chargeHandler.tick(); } @Override public ChargeHandler getChargeHandler() { return chargeHandler; } @Override public TileEntity getTile() { return this; } @Override public IEnumMachine getMachineType() { return EnumMachineEpsilon.ELECTRIC_FEEDER_ADMIN; } @Override public IIcon getIcon(int side) { return getMachineType().getTexture(powered ? 0 : 6); } @Override public void readFromNBT(NBTTagCompound data) { super.readFromNBT(data); chargeHandler.readFromNBT(data); powered = data.getBoolean("powered"); } @Override public void writeToNBT(NBTTagCompound data) { super.writeToNBT(data); chargeHandler.writeToNBT(data); data.setBoolean("powered", powered); } @Override public void writePacketData(DataOutputStream data) throws IOException { super.writePacketData(data); data.writeBoolean(powered); } @Override public void readPacketData(DataInputStream data) throws IOException { super.readPacketData(data); boolean p = data.readBoolean(); if (powered != p) { powered = p; markBlockForUpdate(); } } }