/*
* 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.gamma;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mods.railcraft.client.util.textures.TextureAtlasSheet;
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.modules.ModuleManager;
import mods.railcraft.common.modules.ModuleManager.Module;
import mods.railcraft.common.plugins.forge.LocalizationPlugin;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author CovertJaguar
*/
public enum EnumMachineGamma implements IEnumMachine {
ITEM_LOADER(Module.TRANSPORT, "loader.item", 0, TileItemLoader.class),
ITEM_UNLOADER(Module.TRANSPORT, "unloader.item", 0, TileItemUnloader.class),
ITEM_LOADER_ADVANCED(Module.TRANSPORT, "loader.item.advanced", 0, TileItemLoaderAdvanced.class),
ITEM_UNLOADER_ADVANCED(Module.TRANSPORT, "unloader.item.advanced", 0, TileItemUnloaderAdvanced.class),
FLUID_LOADER(Module.TRANSPORT, "loader.liquid", 2, TileFluidLoader.class),
FLUID_UNLOADER(Module.TRANSPORT, "unloader.liquid", 2, TileFluidUnloader.class),
ENERGY_LOADER(Module.IC2, "loader.energy", 0, TileEnergyLoader.class),
ENERGY_UNLOADER(Module.IC2, "unloader.energy", 0, TileEnergyUnloader.class),
DISPENSER_CART(Module.AUTOMATION, "dispenser.cart", 0, TileDispenserCart.class),
DISPENSER_TRAIN(Module.TRAIN, "dispenser.train", 0, TileDispenserTrain.class),
RF_LOADER(Module.REDSTONE_FLUX, "loader.rf", -1, TileRFLoader.class),
RF_UNLOADER(Module.REDSTONE_FLUX, "unloader.rf", -1, TileRFUnloader.class);
private final Module module;
private final String tag;
private final int extraIcons;
private final Class<? extends TileMachineBase> tile;
private IIcon[] texture;
private static final List<EnumMachineGamma> creativeList = new ArrayList<EnumMachineGamma>();
private static final EnumMachineGamma[] VALUES = values();
public static final IIcon[] pipeTexture = new IIcon[6];
private ToolTip tip;
static {
creativeList.add(ITEM_LOADER);
creativeList.add(ITEM_UNLOADER);
creativeList.add(ITEM_LOADER_ADVANCED);
creativeList.add(ITEM_UNLOADER_ADVANCED);
creativeList.add(FLUID_LOADER);
creativeList.add(FLUID_UNLOADER);
creativeList.add(ENERGY_LOADER);
creativeList.add(ENERGY_UNLOADER);
creativeList.add(RF_LOADER);
creativeList.add(RF_UNLOADER);
creativeList.add(DISPENSER_CART);
creativeList.add(DISPENSER_TRAIN);
}
EnumMachineGamma(Module module, String tag, int extraIcons, Class<? extends TileMachineBase> tile) {
this.module = module;
this.tile = tile;
this.tag = tag;
this.extraIcons = extraIcons;
}
@Override
public boolean isDepreciated() {
return module == null;
}
public void setTexture(IIcon... tex) {
this.texture = tex;
}
@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 (EnumMachineGamma machine : VALUES) {
if (machine.extraIcons == -1)
continue;
machine.texture = new IIcon[machine.extraIcons + 6];
IIcon[] icons = TextureAtlasSheet.unstitchIcons(iconRegister, "railcraft:" + machine.tag, machine.extraIcons + 3);
IIcon cap = icons[0];
IIcon side = icons[1];
IIcon face = icons[2];
machine.texture[0] = cap;
machine.texture[1] = cap;
for (int i = 2; i < 6; i++) {
machine.texture[i] = side;
}
switch (machine) {
case ITEM_LOADER:
case FLUID_LOADER:
machine.texture[0] = face;
break;
case ITEM_UNLOADER:
case FLUID_UNLOADER:
machine.texture[1] = face;
break;
default:
machine.texture[3] = face;
}
if (machine.extraIcons > 0)
System.arraycopy(icons, 3, machine.texture, 6, machine.extraIcons);
}
IIcon emitterSide = iconRegister.registerIcon("railcraft:" + RF_LOADER.tag + ".side");
RF_LOADER.texture = new IIcon[9];
Arrays.fill(RF_LOADER.texture, emitterSide);
RF_LOADER.texture[6] = iconRegister.registerIcon("railcraft:" + RF_LOADER.tag + ".side.unpowered");
RF_LOADER.texture[3] = RF_LOADER.texture[7] = iconRegister.registerIcon("railcraft:" + RF_LOADER.tag + ".facing");
RF_LOADER.texture[8] = iconRegister.registerIcon("railcraft:" + RF_LOADER.tag + ".facing.unpowered");
emitterSide = iconRegister.registerIcon("railcraft:" + RF_UNLOADER.tag + ".side");
RF_UNLOADER.texture = new IIcon[9];
Arrays.fill(RF_UNLOADER.texture, emitterSide);
RF_UNLOADER.texture[6] = RF_LOADER.texture[6];
RF_UNLOADER.texture[3] = RF_UNLOADER.texture[7] = iconRegister.registerIcon("railcraft:" + RF_UNLOADER.tag + ".facing");
RF_UNLOADER.texture[8] = RF_LOADER.texture[8];
IIcon[] pipe = TextureAtlasSheet.unstitchIcons(iconRegister, "railcraft:loader.pipe", 2);
pipeTexture[0] = pipe[0];
pipeTexture[1] = pipe[0];
for (int i = 2; i < 6; i++) {
pipeTexture[i] = pipe[1];
}
}
public static EnumMachineGamma fromId(int id) {
if (id < 0 || id >= VALUES.length)
id = 0;
return VALUES[id];
}
public static List<EnumMachineGamma> getCreativeList() {
return creativeList;
}
@Override
public String getTag() {
return "tile.railcraft.machine.gamma." + tag;
}
@Override
public Class getTileClass() {
return tile;
}
@Override
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.getBlockMachineGamma();
}
public boolean isEnabled() {
return ModuleManager.isModuleLoaded(getModule()) && RailcraftConfig.isSubBlockEnabled(getTag());
}
@Override
public boolean isAvaliable() {
return getBlock() != null && isEnabled();
}
public boolean register() {
if (RailcraftConfig.isSubBlockEnabled(getTag())) {
RailcraftBlocks.registerBlockMachineGamma();
return getBlock() != null;
}
return false;
}
@Override
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;
}
}