/*
* 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.beta;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.util.IIcon;
import net.minecraft.world.EnumSkyBlock;
import net.minecraftforge.common.util.ForgeDirection;
import mods.railcraft.common.blocks.machine.IEnumMachine;
import mods.railcraft.common.util.misc.MiscTools;
import mods.railcraft.common.util.misc.Timer;
import net.minecraftforge.fluids.Fluid;
import java.util.Random;
/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public class TileTankIronGauge extends TileTankBase {
private int lightValue = 0;
private final Timer timer = new Timer();
@Override
public IEnumMachine getMachineType() {
return EnumMachineBeta.TANK_IRON_GAUGE;
}
@Override
public IIcon getIcon(int side) {
if (!isStructureValid() || getPattern() == null) {
return getTextureFromMachine(side);
}
int px = getPatternPositionX();
int py = getPatternPositionY();
int pz = getPatternPositionZ();
ForgeDirection s = ForgeDirection.getOrientation(side);
char markerSide = getPattern().getPatternMarkerChecked(MiscTools.getXOnSide(px, s), MiscTools.getYOnSide(py, s), MiscTools.getZOnSide(pz, s));
if (!isMapPositionOtherBlock(markerSide)) {
return getTextureFromMachine(9);
}
if (s == ForgeDirection.UP || s == ForgeDirection.DOWN) {
int markerTop = getPattern().getPatternMarkerChecked(px, py + 1, pz);
if (markerTop == 'A' || markerTop == 'O') {
int metaUp = worldObj.getBlockMetadata(xCoord, yCoord, zCoord - 1);
int metaDown = worldObj.getBlockMetadata(xCoord, yCoord, zCoord + 1);
return getTextureBasedOnNeighbors(metaUp, metaDown);
}
return getTextureFromMachine(0);
}
int metaUp = worldObj.getBlockMetadata(xCoord, yCoord + 1, zCoord);
int metaDown = worldObj.getBlockMetadata(xCoord, yCoord - 1, zCoord);
return getTextureBasedOnNeighbors(metaUp, metaDown);
}
private IIcon getTextureBasedOnNeighbors(int metaUp, int metaDown) {
if (metaUp == getBlockMetadata() && metaDown == getBlockMetadata()) {
return getTextureFromMachine(7);
} else if (metaUp == getBlockMetadata()) {
return getTextureFromMachine(8);
} else if (metaDown == getBlockMetadata()) {
return getTextureFromMachine(6);
}
return getTextureFromMachine(0);
}
private IIcon getTextureFromMachine(int index) {
return getMachineType().getTexture(index);
}
@Override
@SideOnly(Side.CLIENT)
public void randomDisplayTick(Random rand) {
int oldLightValue = lightValue;
if (timer.hasTriggered(worldObj, 80) && isStructureValid())
updateLightValue();
if (oldLightValue != lightValue)
worldObj.updateLightByType(EnumSkyBlock.Block, xCoord, yCoord, zCoord);
}
@Override
public int getLightValue() {
return lightValue;
}
private void updateLightValue() {
Fluid fluid = getTank().getFluidType();
lightValue = fluid != null ? fluid.getLuminosity() : 0;
}
}