/*
* 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.items;
import mods.railcraft.common.core.RailcraftConfig;
import mods.railcraft.common.plugins.forge.RailcraftRegistry;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
/**
* @author CovertJaguar <http://www.railcraft.info/>
*/
public enum RailcraftItem {
circuit(ItemCircuit.class, "part.circuit"),
dust(ItemDust.class, "dust"),
gear(ItemGear.class, "part.gear"),
ingot(ItemIngot.class, "ingot"),
nugget(ItemNugget.class, "nugget"),
plate(ItemPlate.class, "part.plate"),
rail(ItemRail.class, "part.rail"),
railbed(ItemRailbed.class, "part.railbed"),
rebar(ItemRebar.class, "part.rebar", "ingotIron"),
signalLabel(ItemSignalLabel.class, "tool.signal.label"),
signalLamp(ItemSignalLamp.class, "part.signal.lamp", Blocks.redstone_lamp),
tie(ItemTie.class, "part.tie");
public static final RailcraftItem[] VALUES = values();
private final Class<? extends ItemRailcraft> itemClass;
private final String tag;
private final Object altRecipeObject;
private ItemRailcraft item;
RailcraftItem(Class<? extends ItemRailcraft> itemClass, String tag) {
this.itemClass = itemClass;
this.tag = tag;
this.altRecipeObject = null;
}
RailcraftItem(Class<? extends ItemRailcraft> itemClass, String tag, Object alt) {
this.itemClass = itemClass;
this.tag = tag;
this.altRecipeObject = alt;
}
public void registerItem() {
if (item != null)
return;
if (isEnabled()) {
try {
item = itemClass.newInstance();
} catch (InstantiationException ex) {
throw new RuntimeException("Invalid Item Constructor");
} catch (IllegalAccessException ex) {
throw new RuntimeException("Invalid Item Constructor");
}
item.setUnlocalizedName("railcraft." + tag);
RailcraftRegistry.register(item);
item.initItem();
item.defineRecipes();
}
}
public boolean isItemEqual(ItemStack stack) {
return stack != null && this.item == stack.getItem();
}
public boolean isItemEqual(Item i) {
return i != null && this.item == i;
}
public ItemRailcraft item() {
return item;
}
public ItemStack getWildcard() {
return getStack(1, OreDictionary.WILDCARD_VALUE);
}
public ItemStack getStack() {
return getStack(1, 0);
}
public ItemStack getStack(int qty) {
return getStack(qty, 0);
}
public ItemStack getStack(int qty, int meta) {
registerItem();
if (item == null)
return null;
return new ItemStack(item, qty, meta);
}
private void checkMetaObject(IItemMetaEnum meta) {
if (meta == null || meta.getItemClass() != itemClass)
throw new RuntimeException("Incorrect Item Meta object used.");
}
public ItemStack getStack(IItemMetaEnum meta) {
return getStack(1, meta);
}
public ItemStack getStack(int qty, IItemMetaEnum meta) {
checkMetaObject(meta);
return getStack(qty, meta.ordinal());
}
public Object getRecipeObject() {
registerItem();
if (item != null)
return item.getRecipeObject(null);
Object obj = altRecipeObject;
if (obj instanceof ItemStack)
obj = ((ItemStack) obj).copy();
return obj;
}
public Object getRecipeObject(IItemMetaEnum meta) {
checkMetaObject(meta);
registerItem();
if (item != null)
return item.getRecipeObject(meta);
Object obj = meta.getAlternate();
if (obj == null)
obj = altRecipeObject;
if (obj instanceof ItemStack)
obj = ((ItemStack) obj).copy();
return obj;
}
public boolean isEnabled() {
return RailcraftConfig.isItemEnabled(tag);
}
public static void definePostRecipes() {
for (RailcraftItem type : VALUES) {
if (type.item != null)
type.item.definePostRecipes();
}
}
}