package mods.railcraft.common.blocks.machine.epsilon;
import cofh.api.energy.IEnergyHandler;
import mods.railcraft.api.electricity.IElectricGrid;
import mods.railcraft.common.blocks.machine.IEnumMachine;
import mods.railcraft.common.blocks.machine.MultiBlockPattern;
import mods.railcraft.common.blocks.machine.TileMultiBlock;
import mods.railcraft.common.util.misc.Game;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mods.railcraft.common.blocks.RailcraftBlocks;
import net.minecraft.world.World;
public class TileFluxTransformer extends TileMultiBlock implements IElectricGrid, IEnergyHandler {
public static void placeFluxTransformer(World world, int x, int y, int z) {
for (MultiBlockPattern pattern : TileFluxTransformer.patterns) {
Map<Character, Integer> blockMapping = new HashMap<Character, Integer>();
blockMapping.put('B', EnumMachineEpsilon.FLUX_TRANSFORMER.ordinal());
pattern.placeStructure(world, x, y, z, RailcraftBlocks.getBlockMachineEpsilon(), blockMapping);
return;
}
}
public static final double EU_RF_RATIO = 4;
public static final double EFFICIENCY = 0.8F;
private static final List<MultiBlockPattern> patterns = new ArrayList<MultiBlockPattern>();
private final ChargeHandler chargeHandler = new ChargeHandler(this, ChargeHandler.ConnectType.BLOCK, 0.25);
static {
char[][][] map = {
{
{'*', 'O', 'O', '*'},
{'O', 'O', 'O', 'O'},
{'O', 'O', 'O', 'O'},
{'*', 'O', 'O', '*'},},
{
{'*', 'O', 'O', '*'},
{'O', 'B', 'B', 'O'},
{'O', 'B', 'B', 'O'},
{'*', 'O', 'O', '*'}
},
{
{'*', 'O', 'O', '*'},
{'O', 'B', 'B', 'O'},
{'O', 'B', 'B', 'O'},
{'*', 'O', 'O', '*'}
},
{
{'*', 'O', 'O', '*'},
{'O', 'O', 'O', 'O'},
{'O', 'O', 'O', 'O'},
{'*', 'O', 'O', '*'},},};
patterns.add(new MultiBlockPattern(map));
}
public TileFluxTransformer() {
super(patterns);
}
@Override
public void updateEntity() {
super.updateEntity();
if (Game.isNotHost(getWorld()))
return;
chargeHandler.tick();
}
@Override
public IEnumMachine getMachineType() {
return EnumMachineEpsilon.FLUX_TRANSFORMER;
}
@Override
public ChargeHandler getChargeHandler() {
return chargeHandler;
}
@Override
public TileEntity getTile() {
return this;
}
@Override
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
if (!isStructureValid())
return 0;
double chargeDifference = chargeHandler.getCapacity() - chargeHandler.getCharge();
if (chargeDifference > 0.0) {
if (!simulate)
chargeHandler.addCharge((maxReceive / EU_RF_RATIO) * EFFICIENCY);
return maxReceive;
}
return 0;
}
@Override
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
return 0;
}
@Override
public int getEnergyStored(ForgeDirection from) {
return 0;
}
@Override
public int getMaxEnergyStored(ForgeDirection from) {
return 0;
}
@Override
public boolean canConnectEnergy(ForgeDirection from) {
return true;
}
@Override
public void readFromNBT(NBTTagCompound data) {
super.readFromNBT(data);
chargeHandler.readFromNBT(data);
}
@Override
public void writeToNBT(NBTTagCompound data) {
super.writeToNBT(data);
chargeHandler.writeToNBT(data);
}
}