package openmods.item; import java.util.List; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.IIcon; import net.minecraft.world.World; public class MetaGeneric implements IMetaItem { public static class SmeltingRecipe { public final ItemStack input; public final ItemStack result; public final float experience; private SmeltingRecipe(ItemStack input, ItemStack result, float experience) { this.input = input; this.result = result.copy(); this.experience = experience; } } private final String mod; private final String name; private IIcon icon; private Object[] recipes; private boolean visibleInCreative = true; public MetaGeneric(String mod, String name, Object... recipes) { this.mod = mod; this.name = name; this.recipes = recipes; } public MetaGeneric hideFromCreative() { visibleInCreative = false; return this; } @Override public IIcon getIcon() { return icon; } @Override public String getUnlocalizedName(ItemStack stack) { return String.format("%s.%s", mod, name); } @Override public boolean hitEntity(ItemStack itemStack, EntityLivingBase target, EntityLivingBase player) { return false; } @Override public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side, float par8, float par9, float par10) { return false; } @Override public ItemStack onItemRightClick(ItemStack itemStack, EntityPlayer player, World world) { return itemStack; } @Override public void registerIcons(IIconRegister register) { registerIcon(register, name); } protected void registerIcon(IIconRegister register, String name) { icon = register.registerIcon(String.format("%s:%s", mod, name)); } @Override public void addRecipe() { if (recipes == null) return; final FurnaceRecipes furnaceRecipes = FurnaceRecipes.smelting(); @SuppressWarnings("unchecked") final List<IRecipe> craftingRecipes = CraftingManager.getInstance().getRecipeList(); for (Object tmp : recipes) { if (tmp instanceof SmeltingRecipe) { SmeltingRecipe recipe = (SmeltingRecipe)tmp; furnaceRecipes.func_151394_a(recipe.input, recipe.result, recipe.experience); } else if (tmp instanceof IRecipe) { craftingRecipes.add((IRecipe)tmp); } else throw new IllegalArgumentException("Invalid recipe object: " + tmp); } } @Override public void addToCreativeList(Item item, int meta, List<ItemStack> result) { if (visibleInCreative) { result.add(new ItemStack(item, 1, meta)); } } @Override public boolean hasEffect(int renderPass) { return false; } }