package mods.eln.simplenode.energyconverter;
import cofh.api.energy.IEnergyHandler;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ic2.api.energy.tile.IEnergySource;
import li.cil.oc.api.network.Environment;
import li.cil.oc.api.network.Message;
import li.cil.oc.api.network.Node;
import mods.eln.Other;
import mods.eln.misc.Direction;
import mods.eln.node.simple.SimpleNode;
import mods.eln.node.simple.SimpleNodeEntity;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import java.io.DataInputStream;
import java.io.IOException;
@Optional.InterfaceList({
@Optional.Interface(iface = "ic2.api.energy.tile.IEnergySource", modid = Other.modIdIc2),
@Optional.Interface(iface = "cofh.api.energy.IEnergyHandler", modid = Other.modIdTe),
@Optional.Interface(iface = "li.cil.oc.api.network.Environment", modid = Other.modIdOc)})
public class EnergyConverterElnToOtherEntity extends SimpleNodeEntity implements
IEnergySource, Environment, IEnergyHandler /* ,SidedEnvironment, ISidedBatteryProvider, IPowerEmitter, IPipeConnection */ {
float inPowerFactor;
boolean hasChanges = false;
public float inPowerMax;
EnergyConverterElnToOtherFireWallOc oc;
protected boolean addedToEnet;
public EnergyConverterElnToOtherEntity() {
if (Other.ocLoaded)
getOc().constructor();
}
@Override
public boolean onBlockActivated(EntityPlayer entityPlayer, Direction side, float vx, float vy, float vz) {
return super.onBlockActivated(entityPlayer, side, vx, vy, vz);
}
@Override
@SideOnly(Side.CLIENT)
public GuiScreen newGuiDraw(Direction side, EntityPlayer player) {
return new EnergyConverterElnToOtherGui(player, this);
}
@Override
public void serverPublishUnserialize(DataInputStream stream) {
super.serverPublishUnserialize(stream);
try {
inPowerFactor = stream.readFloat();
inPowerMax = stream.readFloat();
hasChanges = true;
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public String getNodeUuid() {
return EnergyConverterElnToOtherNode.getNodeUuidStatic();
}
// ********************IC2********************
@Optional.Method(modid = Other.modIdIc2)
@Override
public boolean emitsEnergyTo(TileEntity receiver, ForgeDirection direction) {
if (worldObj.isRemote)
return false;
SimpleNode n = getNode();
if (n == null)
return false;
return n.getFront().back() == Direction.from(direction);
}
@Optional.Method(modid = Other.modIdIc2)
@Override
public double getOfferedEnergy() {
if (worldObj.isRemote)
return 0;
if (getNode() == null)
return 0;
EnergyConverterElnToOtherNode node = (EnergyConverterElnToOtherNode) getNode();
double pMax = node.getOtherModOutMax(node.descriptor.ic2.outMax,
Other.getElnToIc2ConversionRatio());
return pMax;
}
@Optional.Method(modid = Other.modIdIc2)
@Override
public void drawEnergy(double amount) {
if (worldObj.isRemote)
return;
if (getNode() == null)
return;
EnergyConverterElnToOtherNode node = (EnergyConverterElnToOtherNode) getNode();
node.drawEnergy(amount, Other.getElnToIc2ConversionRatio());
}
@Optional.Method(modid = Other.modIdIc2)
// @Override
public int getSourceTier() {
EnergyConverterElnToOtherNode node = (EnergyConverterElnToOtherNode) getNode();
if (node == null) return 0;
return node.descriptor.ic2.tier;
}
// ***************** OC **********************
@Optional.Method(modid = Other.modIdOc)
EnergyConverterElnToOtherFireWallOc getOc() {
if (oc == null)
oc = new EnergyConverterElnToOtherFireWallOc(this);
return oc;
}
@Override
@Optional.Method(modid = Other.modIdOc)
public Node node() {
return getOc().node;
}
@Override
@Optional.Method(modid = Other.modIdOc)
public void onConnect(Node node) {
}
@Override
@Optional.Method(modid = Other.modIdOc)
public void onDisconnect(Node node) {
}
@Override
@Optional.Method(modid = Other.modIdOc)
public void onMessage(Message message) {
}
/*
* @Override
*
* @Optional.Method(modid = Other.modIdOc) public Node
* sidedNode(ForgeDirection side) { if(worldObj.isRemote){ if(front.back()
* == Direction.from(side)) return node(); return null; }else{
* if(getNode().getFront().back() == Direction.from(side)) return node();
* return null; } }
*
* @Override
*
* @SideOnly(Side.CLIENT)
*
* @Optional.Method(modid = Other.modIdOc) public boolean
* canConnect(ForgeDirection side) { if(front == null) return false;
* if(front.back() == Direction.from(side)) return true; return false; }
*/
// *************** RF **************
@Override
@Optional.Method(modid = Other.modIdTe)
public boolean canConnectEnergy(ForgeDirection from) {
// Utils.println("*****canConnectEnergy*****");
// return true;
if (worldObj.isRemote)
return false;
if (getNode() == null)
return false;
SimpleNode n = getNode();
return n.getFront().back() == Direction.from(from);
}
@Override
@Optional.Method(modid = Other.modIdTe)
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
// Utils.println("*****receiveEnergy*****");
return 0;
}
@Override
@Optional.Method(modid = Other.modIdTe)
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
// Utils.println("*****extractEnergy*****");
if (worldObj.isRemote)
return 0;
if (getNode() == null)
return 0;
EnergyConverterElnToOtherNode node = (EnergyConverterElnToOtherNode) getNode();
int extract = Math.max(0, Math.min(maxExtract, (int) node.getOtherModEnergyBuffer(Other.getElnToTeConversionRatio())));
if (!simulate)
node.drawEnergy(extract, Other.getElnToTeConversionRatio());
return extract;
}
@Override
@Optional.Method(modid = Other.modIdTe)
public int getEnergyStored(ForgeDirection from) {
// Utils.println("*****getEnergyStored*****");
return 0;
}
@Override
@Optional.Method(modid = Other.modIdTe)
public int getMaxEnergyStored(ForgeDirection from) {
// Utils.println("*****getMaxEnergyStored*****");
return 0;
}
// ***************** Bridges ****************
@Override
public void updateEntity() {
super.updateEntity();
if (Other.ic2Loaded)
EnergyConverterElnToOtherFireWallIc2.updateEntity(this);
if (Other.ocLoaded)
getOc().updateEntity();
if (Other.teLoaded)
EnergyConverterElnToOtherFireWallRf.updateEntity(this);
}
public void onLoaded() {
if (Other.ic2Loaded)
EnergyConverterElnToOtherFireWallIc2.onLoaded(this);
}
@Override
public void invalidate() {
super.invalidate();
if (Other.ic2Loaded)
EnergyConverterElnToOtherFireWallIc2.invalidate(this);
if (Other.ocLoaded)
getOc().invalidate();
}
@Override
public void onChunkUnload() {
super.onChunkUnload();
if (Other.ic2Loaded)
EnergyConverterElnToOtherFireWallIc2.onChunkUnload(this);
if (Other.ocLoaded)
getOc().onChunkUnload();
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
if (Other.ocLoaded)
getOc().readFromNBT(nbt);
}
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
if (Other.ocLoaded)
getOc().writeToNBT(nbt);
}
}