/*
* 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.epsilon;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import mods.railcraft.client.util.textures.TextureAtlasSheet;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import mods.railcraft.common.blocks.RailcraftBlocks;
import mods.railcraft.common.blocks.machine.IEnumMachine;
import mods.railcraft.common.blocks.machine.TileMachineBase;
import mods.railcraft.common.core.RailcraftConfig;
import mods.railcraft.common.gui.tooltips.ToolTip;
import mods.railcraft.common.plugins.forge.LocalizationPlugin;
import mods.railcraft.common.modules.ModuleManager;
import mods.railcraft.common.modules.ModuleManager.Module;
import net.minecraft.client.renderer.texture.IIconRegister;
/**
*
* @author CovertJaguar
*/
public enum EnumMachineEpsilon implements IEnumMachine {
ELECTRIC_FEEDER(Module.ELECTRICITY, "electric.feeder", TileElectricFeeder.class, 1, 1, 0),
ELECTRIC_FEEDER_ADMIN(Module.ELECTRICITY, "electric.feeder.admin", TileElectricFeederAdmin.class, 2, 1, 0, 0, 0, 0, 0, 0, 1),
ADMIN_STEAM_PRODUCER(Module.STEAM, "admin.steam.producer", TileAdminSteamProducer.class, 2, 1, 0, 0, 0, 0, 0, 0, 1),
FORCE_TRACK_EMITTER(Module.ELECTRICITY, "force.track.emitter", TileForceTrackEmitter.class),
FLUX_TRANSFORMER(Module.ELECTRICITY, "flux.transformer", TileFluxTransformer.class),
ENGRAVING_BENCH(Module.EMBLEM, "engraving.bench", TileEngravingBench.class, 4, 1, 0, 1, 3, 3, 3, 3, 2);
private final Module module;
private final String tag;
private final Class<? extends TileMachineBase> tile;
private IIcon[] texture = new IIcon[12];
private final int[] textureInfo;
private static final List<EnumMachineEpsilon> creativeList = new ArrayList<EnumMachineEpsilon>();
private static final EnumMachineEpsilon[] VALUES = values();
private ToolTip tip;
static {
creativeList.add(ELECTRIC_FEEDER);
creativeList.add(ELECTRIC_FEEDER_ADMIN);
creativeList.add(FLUX_TRANSFORMER);
creativeList.add(FORCE_TRACK_EMITTER);
creativeList.add(ADMIN_STEAM_PRODUCER);
creativeList.add(ENGRAVING_BENCH);
}
private EnumMachineEpsilon(Module module, String tag, Class<? extends TileMachineBase> tile, int... textureInfo) {
this.module = module;
this.tile = tile;
this.tag = tag;
this.textureInfo = textureInfo;
}
public boolean register() {
if (RailcraftConfig.isSubBlockEnabled(getTag())) {
RailcraftBlocks.registerBlockMachineEpsilon();
return getBlock() != null;
}
return false;
}
@Override
public boolean isDepreciated() {
return module == null;
}
public void setTexture(IIcon[] tex) {
this.texture = tex;
}
public IIcon[] getTexture() {
return texture;
}
@Override
public IIcon getTexture(int index) {
if (index < 0 || index >= texture.length)
index = 0;
return texture[index];
}
@SideOnly(Side.CLIENT)
public static void registerIcons(IIconRegister iconRegister) {
for (EnumMachineEpsilon machine : VALUES) {
if (machine.isDepreciated()) continue;
if (machine.textureInfo.length == 0) continue;
machine.texture = new IIcon[machine.textureInfo.length - 2];
int columns = machine.textureInfo[0];
int rows = machine.textureInfo[1];
IIcon[] icons = TextureAtlasSheet.unstitchIcons(iconRegister, "railcraft:" + machine.tag, columns, rows);
for (int i = 0; i < machine.texture.length; i++) {
machine.texture[i] = icons[machine.textureInfo[i + 2]];
}
}
IIcon emitterSide = iconRegister.registerIcon("railcraft:" + FORCE_TRACK_EMITTER.tag + ".side");
FORCE_TRACK_EMITTER.texture = new IIcon[9];
Arrays.fill(FORCE_TRACK_EMITTER.texture, emitterSide);
FORCE_TRACK_EMITTER.texture[6] = iconRegister.registerIcon("railcraft:" + FORCE_TRACK_EMITTER.tag + ".side.unpowered");
FORCE_TRACK_EMITTER.texture[7] = iconRegister.registerIcon("railcraft:" + FORCE_TRACK_EMITTER.tag + ".facing");
FORCE_TRACK_EMITTER.texture[8] = iconRegister.registerIcon("railcraft:" + FORCE_TRACK_EMITTER.tag + ".facing.unpowered");
IIcon transformerSide = iconRegister.registerIcon("railcraft:" + FLUX_TRANSFORMER.tag + ".side");
IIcon transformerCap = iconRegister.registerIcon("railcraft:" + FLUX_TRANSFORMER.tag + ".cap");
FLUX_TRANSFORMER.texture = new IIcon[6];
Arrays.fill(FLUX_TRANSFORMER.texture, transformerSide);
FLUX_TRANSFORMER.texture[0] = transformerCap;
FLUX_TRANSFORMER.texture[1] = transformerCap;
}
public static EnumMachineEpsilon fromId(int id) {
if (id < 0 || id >= VALUES.length)
id = 0;
return VALUES[id];
}
public static List<EnumMachineEpsilon> getCreativeList() {
return creativeList;
}
@Override
public String getTag() {
return "tile.railcraft.machine.epsilon." + tag;
}
@Override
public Class getTileClass() {
return tile;
}
public TileMachineBase getTileEntity() {
try {
return tile.newInstance();
} catch (Exception ex) {
}
return null;
}
@Override
public ItemStack getItem() {
return getItem(1);
}
@Override
public ItemStack getItem(int qty) {
Block block = getBlock();
if (block == null)
return null;
return new ItemStack(block, qty, ordinal());
}
public Module getModule() {
return module;
}
@Override
public Block getBlock() {
return RailcraftBlocks.getBlockMachineEpsilon();
}
@Override
public boolean isAvaliable() {
return ModuleManager.isModuleLoaded(getModule()) && getBlock() != null && RailcraftConfig.isSubBlockEnabled(getTag());
}
public ToolTip getToolTip(ItemStack stack, EntityPlayer player, boolean adv) {
if (tip != null)
return tip;
String tipTag = getTag() + ".tip";
if (LocalizationPlugin.hasTag(tipTag))
tip = ToolTip.buildToolTip(tipTag);
return tip;
}
}