/**
* Copyright (c) Lambda Innovation, 2013-2016
* This file is part of the AcademyCraft mod.
* https://github.com/LambdaInnovation/AcademyCraft
* Licensed under GPLv3, see project root for more information.
*/
package cn.academy.support.rf;
import cn.academy.core.block.TileReceiverBase;
import cn.lambdalib.annoreg.core.RegWithName;
import cn.lambdalib.annoreg.core.Registrant;
import cn.lambdalib.annoreg.mc.RegTileEntity;
import cofh.api.energy.IEnergyProvider;
import cofh.api.energy.IEnergyReceiver;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import static cn.academy.support.rf.RFSupport.if2rf;
import static cn.academy.support.rf.RFSupport.rf2if;
@Registrant
@RegTileEntity
@RegWithName("rf_output")
public class TileRFOutput extends TileReceiverBase implements IEnergyProvider {
public TileRFOutput() {
super("ac_rf_output", 0, 2000, 100);
}
@Override
public void updateEntity() {
super.updateEntity();
World world = getWorldObj();
if(!world.isRemote) {
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
int x = xCoord + dir.offsetX,
y = yCoord + dir.offsetY,
z = zCoord + dir.offsetZ;
TileEntity te = world.getTileEntity(x, y, z);
if(te instanceof IEnergyReceiver && energy > 0) {
IEnergyReceiver receiver = (IEnergyReceiver) te;
ForgeDirection rev = dir.getOpposite();
if(receiver.canConnectEnergy(rev)) {
int req = receiver.getMaxEnergyStored(rev) - receiver.getEnergyStored(rev);
req = Math.min(if2rf(energy), req);
energy -= rf2if(receiver.receiveEnergy(rev, req, false));
}
}
}
}
}
@Override
public boolean canConnectEnergy(ForgeDirection from) {
return true;
}
@Override
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
int e = (int) energy;
if(!simulate) {
energy -= rf2if(maxExtract);
if(energy < 0) energy = 0;
}
return Math.min(if2rf(e), maxExtract);
}
@Override
public int getEnergyStored(ForgeDirection from) {
return if2rf(energy);
}
@Override
public int getMaxEnergyStored(ForgeDirection from) {
return if2rf(2000);
}
}