package cyano.basemetals.init;
import cyano.basemetals.BaseMetals;
import cyano.basemetals.blocks.*;
import cyano.basemetals.items.*;
import cyano.basemetals.material.IMetalObject;
import cyano.basemetals.material.MetalMaterial;
import cyano.basemetals.registry.IOreDictionaryEntry;
import net.minecraft.block.BlockDoor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.FMLLog;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.oredict.OreDictionary;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
/**
* This class initializes all items in Base Metals and provides some utility
* methods for looking up items.
* @author DrCyano
*
*/
public abstract class Items {
private static Map<Item,String> itemRegistry = new HashMap<>();
private static Map<String,Item> allItems = new HashMap<>();
private static Map<MetalMaterial,List<Item>> itemsByMetal = new HashMap<>();
private static Map<BlockDoor,Item> doorMap = new HashMap<>();
private static Map<Class,Integer> classSortingValues = new HashMap<>();
private static Map<MetalMaterial,Integer> materialSortingValues = new HashMap<>();
/**
* Gets an item by its name. The name is the name as it is registered in
* the GameRegistry, not its unlocalized name (the unlocalized name is the
* registered name plus the prefix "basemetals.")
* @param name The name of the item in question
* @return The item matching that name, or null if there isn't one
*/
public static Item getItemByName(String name){
return allItems.get(name);
}
/**
* This is the reverse of the getItemByName(...) method, returning the
* registered name of an item instance (Base Metals items only).
* @param i The item in question
* @return The name of the item, or null if the item is not a Base Metals
* item.
*/
public static String getNameOfItem(Item i){
return itemRegistry.get(i);
}
/**
* Gets a map of all items added, sorted by metal
* @return An unmodifiable map of added items catagorized by metal material
*/
public static Map<MetalMaterial,List<Item>> getItemsByMetal(){
return Collections.unmodifiableMap(itemsByMetal);
}
//public static UniversalBucket universal_bucket; // now automatically added by Forge
// TODO: metal arrows or crossbow & bolts
public static Item adamantine_axe;
public static Item adamantine_boots;
public static Item adamantine_chestplate;
public static Item adamantine_crackhammer;
public static Item adamantine_door;
public static Item adamantine_helmet;
public static Item adamantine_hoe;
public static Item adamantine_ingot;
public static Item adamantine_leggings;
public static Item adamantine_nugget;
public static Item adamantine_pickaxe;
public static Item adamantine_powder;
public static Item adamantine_shovel;
public static Item adamantine_sword;
public static Item adamantine_rod;
public static Item adamantine_gear;
public static Item aquarium_axe;
public static Item aquarium_blend;
public static Item aquarium_boots;
public static Item aquarium_chestplate;
public static Item aquarium_crackhammer;
public static Item aquarium_door;
public static Item aquarium_helmet;
public static Item aquarium_hoe;
public static Item aquarium_ingot;
public static Item aquarium_leggings;
public static Item aquarium_nugget;
public static Item aquarium_pickaxe;
public static Item aquarium_powder;
public static Item aquarium_shovel;
public static Item aquarium_sword;
public static Item aquarium_rod;
public static Item brass_axe;
public static Item brass_blend;
public static Item brass_boots;
public static Item brass_chestplate;
public static Item brass_crackhammer;
public static Item brass_door;
public static Item brass_helmet;
public static Item brass_hoe;
public static Item brass_ingot;
public static Item brass_leggings;
public static Item brass_nugget;
public static Item brass_pickaxe;
public static Item brass_powder;
public static Item brass_shovel;
public static Item brass_sword;
public static Item brass_rod;
public static Item bronze_axe;
public static Item bronze_blend;
public static Item bronze_boots;
public static Item bronze_chestplate;
public static Item bronze_crackhammer;
public static Item bronze_door;
public static Item bronze_helmet;
public static Item bronze_hoe;
public static Item bronze_ingot;
public static Item bronze_leggings;
public static Item bronze_nugget;
public static Item bronze_pickaxe;
public static Item bronze_powder;
public static Item bronze_shovel;
public static Item bronze_sword;
public static Item bronze_rod;
public static Item bronze_gear;
public static Item carbon_powder;
public static Item coldiron_axe;
public static Item coldiron_boots;
public static Item coldiron_chestplate;
public static Item coldiron_crackhammer;
public static Item coldiron_door;
public static Item coldiron_helmet;
public static Item coldiron_hoe;
public static Item coldiron_ingot;
public static Item coldiron_leggings;
public static Item coldiron_nugget;
public static Item coldiron_pickaxe;
public static Item coldiron_powder;
public static Item coldiron_shovel;
public static Item coldiron_sword;
public static Item coldiron_rod;
public static Item coldiron_gear;
public static Item copper_axe;
public static Item copper_boots;
public static Item copper_chestplate;
public static Item copper_crackhammer;
public static Item copper_door;
public static Item copper_helmet;
public static Item copper_hoe;
public static Item copper_ingot;
public static Item copper_leggings;
public static Item copper_nugget;
public static Item copper_pickaxe;
public static Item copper_powder;
public static Item copper_shovel;
public static Item copper_sword;
public static Item copper_rod;
public static Item cupronickel_axe;
public static Item cupronickel_boots;
public static Item cupronickel_blend;
public static Item cupronickel_chestplate;
public static Item cupronickel_crackhammer;
public static Item cupronickel_door;
public static Item cupronickel_helmet;
public static Item cupronickel_hoe;
public static Item cupronickel_ingot;
public static Item cupronickel_leggings;
public static Item cupronickel_nugget;
public static Item cupronickel_pickaxe;
public static Item cupronickel_powder;
public static Item cupronickel_shovel;
public static Item cupronickel_sword;
public static Item cupronickel_rod;
public static Item cupronickel_gear;
public static Item diamond_crackhammer;
public static Item electrum_axe;
public static Item electrum_blend;
public static Item electrum_boots;
public static Item electrum_chestplate;
public static Item electrum_crackhammer;
public static Item electrum_door;
public static Item electrum_helmet;
public static Item electrum_hoe;
public static Item electrum_ingot;
public static Item electrum_leggings;
public static Item electrum_nugget;
public static Item electrum_pickaxe;
public static Item electrum_powder;
public static Item electrum_shovel;
public static Item electrum_sword;
public static Item electrum_rod;
public static Item gold_crackhammer;
public static Item gold_powder;
public static Item gold_rod;
public static Item invar_axe;
public static Item invar_blend;
public static Item invar_boots;
public static Item invar_chestplate;
public static Item invar_crackhammer;
public static Item invar_door;
public static Item invar_helmet;
public static Item invar_hoe;
public static Item invar_ingot;
public static Item invar_leggings;
public static Item invar_nugget;
public static Item invar_pickaxe;
public static Item invar_powder;
public static Item invar_shovel;
public static Item invar_sword;
public static Item invar_rod;
public static Item invar_gear;
public static Item iron_crackhammer;
public static Item iron_nugget;
public static Item iron_powder;
public static Item iron_rod;
public static Item iron_gear;
public static Item lead_axe;
public static Item lead_boots;
public static Item lead_chestplate;
public static Item lead_crackhammer;
public static Item lead_door;
public static Item lead_helmet;
public static Item lead_hoe;
public static Item lead_ingot;
public static Item lead_leggings;
public static Item lead_nugget;
public static Item lead_pickaxe;
public static Item lead_powder;
public static Item lead_shovel;
public static Item lead_sword;
public static Item lead_rod;
public static Item mercury_ingot;
public static Item mercury_powder;
public static Item mithril_axe;
public static Item mithril_blend;
public static Item mithril_boots;
public static Item mithril_chestplate;
public static Item mithril_crackhammer;
public static Item mithril_door;
public static Item mithril_helmet;
public static Item mithril_hoe;
public static Item mithril_ingot;
public static Item mithril_leggings;
public static Item mithril_nugget;
public static Item mithril_pickaxe;
public static Item mithril_powder;
public static Item mithril_shovel;
public static Item mithril_sword;
public static Item mithril_rod;
public static Item mithril_gear;
public static Item nickel_axe;
public static Item nickel_boots;
public static Item nickel_chestplate;
public static Item nickel_crackhammer;
public static Item nickel_door;
public static Item nickel_helmet;
public static Item nickel_hoe;
public static Item nickel_ingot;
public static Item nickel_leggings;
public static Item nickel_nugget;
public static Item nickel_pickaxe;
public static Item nickel_powder;
public static Item nickel_shovel;
public static Item nickel_sword;
public static Item nickel_rod;
public static Item platinum_axe;
public static Item platinum_boots;
public static Item platinum_chestplate;
public static Item platinum_crackhammer;
public static Item platinum_door;
public static Item platinum_helmet;
public static Item platinum_hoe;
public static Item platinum_ingot;
public static Item platinum_leggings;
public static Item platinum_nugget;
public static Item platinum_pickaxe;
public static Item platinum_powder;
public static Item platinum_shovel;
public static Item platinum_sword;
public static Item platinum_rod;
public static Item silver_axe;
public static Item silver_boots;
public static Item silver_chestplate;
public static Item silver_crackhammer;
public static Item silver_door;
public static Item silver_helmet;
public static Item silver_hoe;
public static Item silver_ingot;
public static Item silver_leggings;
public static Item silver_nugget;
public static Item silver_pickaxe;
public static Item silver_powder;
public static Item silver_shovel;
public static Item silver_sword;
public static Item silver_rod;
public static Item starsteel_axe;
public static Item starsteel_boots;
public static Item starsteel_chestplate;
public static Item starsteel_crackhammer;
public static Item starsteel_door;
public static Item starsteel_helmet;
public static Item starsteel_hoe;
public static Item starsteel_ingot;
public static Item starsteel_leggings;
public static Item starsteel_nugget;
public static Item starsteel_pickaxe;
public static Item starsteel_powder;
public static Item starsteel_shovel;
public static Item starsteel_sword;
public static Item starsteel_rod;
public static Item starsteel_gear;
public static Item steel_axe;
public static Item steel_blend;
public static Item steel_boots;
public static Item steel_chestplate;
public static Item steel_crackhammer;
public static Item steel_door;
public static Item steel_helmet;
public static Item steel_hoe;
public static Item steel_ingot;
public static Item steel_leggings;
public static Item steel_nugget;
public static Item steel_pickaxe;
public static Item steel_powder;
public static Item steel_shovel;
public static Item steel_sword;
public static Item steel_rod;
public static Item steel_gear;
public static Item stone_crackhammer;
public static Item tin_axe;
public static Item tin_boots;
public static Item tin_chestplate;
public static Item tin_crackhammer;
public static Item tin_door;
public static Item tin_helmet;
public static Item tin_hoe;
public static Item tin_ingot;
public static Item tin_leggings;
public static Item tin_nugget;
public static Item tin_pickaxe;
public static Item tin_powder;
public static Item tin_shovel;
public static Item tin_sword;
public static Item tin_rod;
public static Item wood_crackhammer;
public static Item zinc_ingot;
public static Item zinc_nugget;
public static Item zinc_powder;
public static Item zinc_rod;
/**
* Gets the inventory item corresponding to a given door block
* @param b The door block
* @return The item that the player should use to place that kind of door
*/
public static Item getDoorItemForBlock(BlockMetalDoor b){
return doorMap.get(b);
}
private static boolean initDone = false;
public static void init(){
if(initDone) return;
cyano.basemetals.init.Blocks.init();
try {
expandCombatArrays(net.minecraft.item.ItemAxe.class);
}catch (IllegalAccessException | NoSuchFieldException ex){
FMLLog.severe("Error modifying item classes: %s", ex);
}
adamantine_axe = create_axe(Materials.adamantine);
adamantine_boots = create_boots(Materials.adamantine);
adamantine_chestplate = create_chestplate(Materials.adamantine);
adamantine_crackhammer = create_crackhammer(Materials.adamantine);
adamantine_door = create_door(Materials.adamantine, Blocks.adamantine_door);
adamantine_helmet = create_helmet(Materials.adamantine);
adamantine_hoe = create_hoe(Materials.adamantine);
adamantine_ingot = create_ingot(Materials.adamantine);
adamantine_leggings = create_leggings(Materials.adamantine);
adamantine_nugget = create_nugget(Materials.adamantine);
adamantine_pickaxe = create_pickaxe(Materials.adamantine);
adamantine_powder = create_powder(Materials.adamantine);
adamantine_shovel = create_shovel(Materials.adamantine);
adamantine_sword = create_sword(Materials.adamantine);
adamantine_rod = create_rod(Materials.adamantine);
adamantine_gear = create_gear(Materials.adamantine);
aquarium_axe = create_axe(Materials.aquarium);
aquarium_blend = create_blend(Materials.aquarium);
aquarium_boots = create_boots(Materials.aquarium);
aquarium_chestplate = create_chestplate(Materials.aquarium);
aquarium_crackhammer = create_crackhammer(Materials.aquarium);
aquarium_door = create_door(Materials.aquarium, Blocks.aquarium_door);
aquarium_helmet = create_helmet(Materials.aquarium);
aquarium_hoe = create_hoe(Materials.aquarium);
aquarium_ingot = create_ingot(Materials.aquarium);
aquarium_leggings = create_leggings(Materials.aquarium);
aquarium_nugget = create_nugget(Materials.aquarium);
aquarium_pickaxe = create_pickaxe(Materials.aquarium);
aquarium_powder = create_powder(Materials.aquarium);
aquarium_shovel = create_shovel(Materials.aquarium);
aquarium_sword = create_sword(Materials.aquarium);
aquarium_rod = create_rod(Materials.aquarium);
brass_axe = create_axe(Materials.brass);
brass_blend = create_blend(Materials.brass);
brass_boots = create_boots(Materials.brass);
brass_chestplate = create_chestplate(Materials.brass);
brass_crackhammer = create_crackhammer(Materials.brass);
brass_door = create_door(Materials.brass,Blocks.brass_door);
brass_helmet = create_helmet(Materials.brass);
brass_hoe = create_hoe(Materials.brass);
brass_ingot = create_ingot(Materials.brass);
brass_leggings = create_leggings(Materials.brass);
brass_nugget = create_nugget(Materials.brass);
brass_pickaxe = create_pickaxe(Materials.brass);
brass_powder = create_powder(Materials.brass);
brass_shovel = create_shovel(Materials.brass);
brass_sword = create_sword(Materials.brass);
brass_rod = create_rod(Materials.brass);
bronze_axe = create_axe(Materials.bronze);
bronze_blend = create_blend(Materials.bronze);
bronze_boots = create_boots(Materials.bronze);
bronze_chestplate = create_chestplate(Materials.bronze);
bronze_crackhammer = create_crackhammer(Materials.bronze);
bronze_door = create_door(Materials.bronze,Blocks.bronze_door);
bronze_helmet = create_helmet(Materials.bronze);
bronze_hoe = create_hoe(Materials.bronze);
bronze_ingot = create_ingot(Materials.bronze);
bronze_leggings = create_leggings(Materials.bronze);
bronze_nugget = create_nugget(Materials.bronze);
bronze_pickaxe = create_pickaxe(Materials.bronze);
bronze_powder = create_powder(Materials.bronze);
bronze_shovel = create_shovel(Materials.bronze);
bronze_sword = create_sword(Materials.bronze);
bronze_rod = create_rod(Materials.bronze);
bronze_gear = create_gear(Materials.bronze);
carbon_powder = new Item().setRegistryName(BaseMetals.MODID, "carbon_powder").setUnlocalizedName(BaseMetals.MODID+"."+"carbon_powder").setCreativeTab(ItemGroups.tab_items);
GameRegistry.register(carbon_powder);
itemRegistry.put(carbon_powder, "carbon_powder");
OreDictionary.registerOre("dustCoal", carbon_powder);
OreDictionary.registerOre("dustCarbon", carbon_powder);
coldiron_axe = create_axe(Materials.coldiron);
coldiron_boots = create_boots(Materials.coldiron);
coldiron_chestplate = create_chestplate(Materials.coldiron);
coldiron_crackhammer = create_crackhammer(Materials.coldiron);
coldiron_door = create_door(Materials.coldiron,Blocks.coldiron_door);
coldiron_helmet = create_helmet(Materials.coldiron);
coldiron_hoe = create_hoe(Materials.coldiron);
coldiron_ingot = create_ingot(Materials.coldiron);
coldiron_leggings = create_leggings(Materials.coldiron);
coldiron_nugget = create_nugget(Materials.coldiron);
coldiron_pickaxe = create_pickaxe(Materials.coldiron);
coldiron_powder = create_powder(Materials.coldiron);
coldiron_shovel = create_shovel(Materials.coldiron);
coldiron_sword = create_sword(Materials.coldiron);
coldiron_rod = create_rod(Materials.coldiron);
coldiron_gear = create_gear(Materials.coldiron);
copper_axe = create_axe(Materials.copper);
copper_boots = create_boots(Materials.copper);
copper_chestplate = create_chestplate(Materials.copper);
copper_crackhammer = create_crackhammer(Materials.copper);
copper_door = create_door(Materials.copper,Blocks.copper_door);
copper_helmet = create_helmet(Materials.copper);
copper_hoe = create_hoe(Materials.copper);
copper_ingot = create_ingot(Materials.copper);
copper_leggings = create_leggings(Materials.copper);
copper_nugget = create_nugget(Materials.copper);
copper_pickaxe = create_pickaxe(Materials.copper);
copper_powder = create_powder(Materials.copper);
copper_shovel = create_shovel(Materials.copper);
copper_sword = create_sword(Materials.copper);
copper_rod = create_rod(Materials.copper);
cupronickel_axe = create_axe(Materials.cupronickel);
cupronickel_blend = create_blend(Materials.cupronickel);
cupronickel_boots = create_boots(Materials.cupronickel);
cupronickel_chestplate = create_chestplate(Materials.cupronickel);
cupronickel_crackhammer = create_crackhammer(Materials.cupronickel);
cupronickel_door = create_door(Materials.cupronickel, Blocks.cupronickel_door);
cupronickel_helmet = create_helmet(Materials.cupronickel);
cupronickel_hoe = create_hoe(Materials.cupronickel);
cupronickel_ingot = create_ingot(Materials.cupronickel);
cupronickel_leggings = create_leggings(Materials.cupronickel);
cupronickel_nugget = create_nugget(Materials.cupronickel);
cupronickel_pickaxe = create_pickaxe(Materials.cupronickel);
cupronickel_powder = create_powder(Materials.cupronickel);
cupronickel_shovel = create_shovel(Materials.cupronickel);
cupronickel_sword = create_sword(Materials.cupronickel);
cupronickel_rod = create_rod(Materials.cupronickel);
cupronickel_gear = create_gear(Materials.cupronickel);
diamond_crackhammer = create_crackhammer(Materials.vanilla_diamond);
electrum_axe = create_axe(Materials.electrum);
electrum_blend = create_blend(Materials.electrum);
electrum_boots = create_boots(Materials.electrum);
electrum_chestplate = create_chestplate(Materials.electrum);
electrum_crackhammer = create_crackhammer(Materials.electrum);
electrum_door = create_door(Materials.electrum,Blocks.electrum_door);
electrum_helmet = create_helmet(Materials.electrum);
electrum_hoe = create_hoe(Materials.electrum);
electrum_ingot = create_ingot(Materials.electrum);
electrum_leggings = create_leggings(Materials.electrum);
electrum_nugget = create_nugget(Materials.electrum);
electrum_pickaxe = create_pickaxe(Materials.electrum);
electrum_powder = create_powder(Materials.electrum);
electrum_shovel = create_shovel(Materials.electrum);
electrum_sword = create_sword(Materials.electrum);
electrum_rod = create_rod(Materials.electrum);
gold_powder = create_powder(Materials.vanilla_gold);
gold_rod = create_rod(Materials.vanilla_gold);
gold_crackhammer = create_crackhammer(Materials.vanilla_gold);
invar_axe = create_axe(Materials.invar);
invar_blend = create_blend(Materials.invar);
invar_boots = create_boots(Materials.invar);
invar_chestplate = create_chestplate(Materials.invar);
invar_crackhammer = create_crackhammer(Materials.invar);
invar_door = create_door(Materials.invar, Blocks.invar_door);
invar_helmet = create_helmet(Materials.invar);
invar_hoe = create_hoe(Materials.invar);
invar_ingot = create_ingot(Materials.invar);
invar_leggings = create_leggings(Materials.invar);
invar_nugget = create_nugget(Materials.invar);
invar_pickaxe = create_pickaxe(Materials.invar);
invar_powder = create_powder(Materials.invar);
invar_shovel = create_shovel(Materials.invar);
invar_sword = create_sword(Materials.invar);
invar_rod = create_rod(Materials.invar);
invar_gear = create_gear(Materials.invar);
iron_crackhammer = create_crackhammer(Materials.vanilla_iron);
iron_nugget = create_nugget(Materials.vanilla_iron);
iron_powder = create_powder(Materials.vanilla_iron);
iron_rod = create_rod(Materials.vanilla_iron);
iron_gear = create_gear(Materials.vanilla_iron);
lead_axe = create_axe(Materials.lead);
lead_boots = create_boots(Materials.lead);
lead_chestplate = create_chestplate(Materials.lead);
lead_crackhammer = create_crackhammer(Materials.lead);
lead_door = create_door(Materials.lead,Blocks.lead_door);
lead_helmet = create_helmet(Materials.lead);
lead_hoe = create_hoe(Materials.lead);
lead_ingot = create_ingot(Materials.lead);
lead_leggings = create_leggings(Materials.lead);
lead_nugget = create_nugget(Materials.lead);
lead_pickaxe = create_pickaxe(Materials.lead);
lead_powder = create_powder(Materials.lead);
lead_shovel = create_shovel(Materials.lead);
lead_sword = create_sword(Materials.lead);
lead_rod = create_rod(Materials.lead);
platinum_axe = create_axe(Materials.platinum);
platinum_boots = create_boots(Materials.platinum);
platinum_chestplate = create_chestplate(Materials.platinum);
platinum_crackhammer = create_crackhammer(Materials.platinum);
platinum_door = create_door(Materials.platinum, Blocks.platinum_door);
platinum_helmet = create_helmet(Materials.platinum);
platinum_hoe = create_hoe(Materials.platinum);
platinum_ingot = create_ingot(Materials.platinum);
platinum_leggings = create_leggings(Materials.platinum);
platinum_nugget = create_nugget(Materials.platinum);
platinum_pickaxe = create_pickaxe(Materials.platinum);
platinum_powder = create_powder(Materials.platinum);
platinum_shovel = create_shovel(Materials.platinum);
platinum_sword = create_sword(Materials.platinum);
platinum_rod = create_rod(Materials.platinum);
stone_crackhammer = create_crackhammer(Materials.vanilla_stone);
wood_crackhammer = create_crackhammer(Materials.vanilla_wood);
// mercury is special
mercury_ingot = new Item().setRegistryName(BaseMetals.MODID, "mercury_ingot").setUnlocalizedName(BaseMetals.MODID+"."+"mercury_ingot").setCreativeTab(ItemGroups.tab_items);
GameRegistry.register(mercury_ingot);
itemRegistry.put(mercury_ingot, "mercury_ingot");
OreDictionary.registerOre("ingotMercury", mercury_ingot);
OreDictionary.registerOre("quicksilver", mercury_ingot);
mercury_powder = new Item().setRegistryName(BaseMetals.MODID, "mercury_powder").setUnlocalizedName(BaseMetals.MODID+"."+"mercury_powder").setCreativeTab(ItemGroups.tab_items);
GameRegistry.register(mercury_powder);
itemRegistry.put(mercury_powder, "mercury_powder");
OreDictionary.registerOre("dustMercury", mercury_powder);
mithril_axe = create_axe(Materials.mithril);
mithril_blend = create_blend(Materials.mithril);
mithril_boots = create_boots(Materials.mithril);
mithril_chestplate = create_chestplate(Materials.mithril);
mithril_crackhammer = create_crackhammer(Materials.mithril);
mithril_door = create_door(Materials.mithril, Blocks.mithril_door);
mithril_helmet = create_helmet(Materials.mithril);
mithril_hoe = create_hoe(Materials.mithril);
mithril_ingot = create_ingot(Materials.mithril);
mithril_leggings = create_leggings(Materials.mithril);
mithril_nugget = create_nugget(Materials.mithril);
mithril_pickaxe = create_pickaxe(Materials.mithril);
mithril_powder = create_powder(Materials.mithril);
mithril_shovel = create_shovel(Materials.mithril);
mithril_sword = create_sword(Materials.mithril);
mithril_rod = create_rod(Materials.mithril);
mithril_gear = create_gear(Materials.mithril);
nickel_axe = create_axe(Materials.nickel);
nickel_boots = create_boots(Materials.nickel);
nickel_chestplate = create_chestplate(Materials.nickel);
nickel_crackhammer = create_crackhammer(Materials.nickel);
nickel_door = create_door(Materials.nickel, Blocks.nickel_door);
nickel_helmet = create_helmet(Materials.nickel);
nickel_hoe = create_hoe(Materials.nickel);
nickel_ingot = create_ingot(Materials.nickel);
nickel_leggings = create_leggings(Materials.nickel);
nickel_nugget = create_nugget(Materials.nickel);
nickel_pickaxe = create_pickaxe(Materials.nickel);
nickel_powder = create_powder(Materials.nickel);
nickel_shovel = create_shovel(Materials.nickel);
nickel_sword = create_sword(Materials.nickel);
nickel_rod = create_rod(Materials.nickel);
silver_axe = create_axe(Materials.silver);
silver_boots = create_boots(Materials.silver);
silver_chestplate = create_chestplate(Materials.silver);
silver_crackhammer = create_crackhammer(Materials.silver);
silver_door = create_door(Materials.silver,Blocks.silver_door);
silver_helmet = create_helmet(Materials.silver);
silver_hoe = create_hoe(Materials.silver);
silver_ingot = create_ingot(Materials.silver);
silver_leggings = create_leggings(Materials.silver);
silver_nugget = create_nugget(Materials.silver);
silver_pickaxe = create_pickaxe(Materials.silver);
silver_powder = create_powder(Materials.silver);
silver_shovel = create_shovel(Materials.silver);
silver_sword = create_sword(Materials.silver);
silver_rod = create_rod(Materials.silver);
starsteel_axe = create_axe(Materials.starsteel);
starsteel_boots = create_boots(Materials.starsteel);
starsteel_chestplate = create_chestplate(Materials.starsteel);
starsteel_crackhammer = create_crackhammer(Materials.starsteel);
starsteel_door = create_door(Materials.starsteel,Blocks.starsteel_door);
starsteel_helmet = create_helmet(Materials.starsteel);
starsteel_hoe = create_hoe(Materials.starsteel);
starsteel_ingot = create_ingot(Materials.starsteel);
starsteel_leggings = create_leggings(Materials.starsteel);
starsteel_nugget = create_nugget(Materials.starsteel);
starsteel_pickaxe = create_pickaxe(Materials.starsteel);
starsteel_powder = create_powder(Materials.starsteel);
starsteel_shovel = create_shovel(Materials.starsteel);
starsteel_sword = create_sword(Materials.starsteel);
starsteel_rod = create_rod(Materials.starsteel);
starsteel_gear = create_gear(Materials.starsteel);
steel_axe = create_axe(Materials.steel);
steel_blend = create_blend(Materials.steel);
steel_boots = create_boots(Materials.steel);
steel_chestplate = create_chestplate(Materials.steel);
steel_crackhammer = create_crackhammer(Materials.steel);
steel_door = create_door(Materials.steel,Blocks.steel_door);
steel_helmet = create_helmet(Materials.steel);
steel_hoe = create_hoe(Materials.steel);
steel_ingot = create_ingot(Materials.steel);
steel_leggings = create_leggings(Materials.steel);
steel_nugget = create_nugget(Materials.steel);
steel_pickaxe = create_pickaxe(Materials.steel);
steel_powder = create_powder(Materials.steel);
steel_shovel = create_shovel(Materials.steel);
steel_sword = create_sword(Materials.steel);
steel_rod = create_rod(Materials.steel);
steel_gear = create_gear(Materials.steel);
tin_axe = create_axe(Materials.tin);
tin_boots = create_boots(Materials.tin);
tin_chestplate = create_chestplate(Materials.tin);
tin_crackhammer = create_crackhammer(Materials.tin);
tin_door = create_door(Materials.tin, Blocks.tin_door);
tin_helmet = create_helmet(Materials.tin);
tin_hoe = create_hoe(Materials.tin);
tin_ingot = create_ingot(Materials.tin);
tin_leggings = create_leggings(Materials.tin);
tin_nugget = create_nugget(Materials.tin);
tin_pickaxe = create_pickaxe(Materials.tin);
tin_powder = create_powder(Materials.tin);
tin_shovel = create_shovel(Materials.tin);
tin_sword = create_sword(Materials.tin);
tin_rod = create_rod(Materials.tin);
zinc_ingot = create_ingot(Materials.zinc);
zinc_nugget = create_nugget(Materials.zinc);
zinc_powder = create_powder(Materials.zinc);
zinc_rod = create_rod(Materials.zinc);
for(Item i : itemRegistry.keySet()){
allItems.put(itemRegistry.get(i), i);
if(i instanceof IOreDictionaryEntry){OreDictionary.registerOre(((IOreDictionaryEntry)i).getOreDictionaryName(), i);}
}
int ss = 0;
classSortingValues.put(BlockMetalOre.class, ++ss * 10000);
classSortingValues.put(BlockMetalBlock.class, ++ss * 10000);
classSortingValues.put(BlockMetalPlate.class, ++ss * 10000);
classSortingValues.put(BlockMetalBars.class, ++ss * 10000);
classSortingValues.put(BlockMetalDoor.class, ++ss * 10000);
classSortingValues.put(BlockMetalTrapDoor.class, ++ss * 10000);
classSortingValues.put(InteractiveFluidBlock.class, ++ss * 10000);
classSortingValues.put(ItemMetalIngot.class, ++ss * 10000);
classSortingValues.put(ItemMetalNugget.class, ++ss * 10000);
classSortingValues.put(ItemMetalPowder.class, ++ss * 10000);
classSortingValues.put(ItemMetalBlend.class, classSortingValues.get(ItemMetalPowder.class));
classSortingValues.put(ItemMetalCrackHammer.class, ++ss * 10000);
classSortingValues.put(ItemMetalPickaxe.class, ++ss * 10000);
classSortingValues.put(ItemMetalShovel.class, ++ss * 10000);
classSortingValues.put(ItemMetalAxe.class, ++ss * 10000);
classSortingValues.put(ItemMetalHoe.class, ++ss * 10000);
classSortingValues.put(ItemMetalSword.class, ++ss * 10000);
classSortingValues.put(ItemMetalArmor.class, ++ss * 10000);
classSortingValues.put(GenericMetalItem.class, ++ss * 10000);
classSortingValues.put(ItemMetalDoor.class, classSortingValues.get(BlockMetalDoor.class));
List<MetalMaterial> metlist = new ArrayList<>(Materials.getAllMetals().size());
metlist.addAll(Materials.getAllMetals());
metlist.sort((MetalMaterial a, MetalMaterial b)-> a.getName().compareToIgnoreCase(b.getName()));
for(int i = 0; i < metlist.size(); i++){
materialSortingValues.put(metlist.get(i), i*100);
}
initDone = true;
}
private static Item registerItem(Item item, String name, MetalMaterial metal, CreativeTabs tab){
item.setRegistryName(BaseMetals.MODID, name);
item.setUnlocalizedName(BaseMetals.MODID+"."+name);
GameRegistry.register(item);
itemRegistry.put(item, name);
if(tab != null){
item.setCreativeTab(tab);
}
if(metal != null){
itemsByMetal.computeIfAbsent(metal, (MetalMaterial g)->new ArrayList<>());
itemsByMetal.get(metal).add(item);
}
return item;
}
private static Item create_ingot(MetalMaterial metal){
return registerItem(new ItemMetalIngot(metal), metal.getName()+"_"+"ingot", metal, ItemGroups.tab_items);
}
private static Item create_nugget(MetalMaterial metal){
return registerItem(new ItemMetalNugget(metal), metal.getName()+"_"+"nugget", metal, ItemGroups.tab_items);
}
private static Item create_powder(MetalMaterial metal){
return registerItem(new ItemMetalPowder(metal), metal.getName()+"_"+"powder", metal, ItemGroups.tab_items);
}
private static Item create_blend(MetalMaterial metal){
return registerItem(new ItemMetalBlend(metal), metal.getName()+"_"+"blend", metal, ItemGroups.tab_items);
}
private static Item create_rod(MetalMaterial metal){
return registerItem(new GenericMetalItem(metal), metal.getName()+"_"+"rod", metal, ItemGroups.tab_items);
}
private static Item create_gear(MetalMaterial metal){
Item i = registerItem(new GenericMetalItem(metal), metal.getName()+"_"+"gear", metal, ItemGroups.tab_items);
OreDictionary.registerOre("gear"+metal.getCapitalizedName(),i);
return i;
}
private static Item create_axe(MetalMaterial metal){
return registerItem(new ItemMetalAxe(metal), metal.getName()+"_"+"axe", metal, ItemGroups.tab_tools);
}
private static Item create_crackhammer(MetalMaterial metal){
return registerItem(new ItemMetalCrackHammer(metal), metal.getName()+"_"+"crackhammer", metal, ItemGroups.tab_tools);
}
private static Item create_hoe(MetalMaterial metal){
return registerItem(new ItemMetalHoe(metal), metal.getName()+"_"+"hoe", metal, ItemGroups.tab_tools);
}
private static Item create_pickaxe(MetalMaterial metal){
return registerItem(new ItemMetalPickaxe(metal), metal.getName()+"_"+"pickaxe", metal, ItemGroups.tab_tools);
}
private static Item create_shovel(MetalMaterial metal){
return registerItem(new ItemMetalShovel(metal), metal.getName()+"_"+"shovel", metal, ItemGroups.tab_tools);
}
private static Item create_sword(MetalMaterial metal){
return registerItem(new ItemMetalSword(metal), metal.getName()+"_"+"sword", metal, ItemGroups.tab_tools);
}
private static Item create_helmet(MetalMaterial metal){
return registerItem(ItemMetalArmor.createHelmet(metal), metal.getName()+"_"+"helmet", metal, ItemGroups.tab_tools);
}
private static Item create_chestplate(MetalMaterial metal){
return registerItem(ItemMetalArmor.createChestplate(metal), metal.getName()+"_"+"chestplate", metal, ItemGroups.tab_tools);
}
private static Item create_leggings(MetalMaterial metal){
return registerItem(ItemMetalArmor.createLeggings(metal), metal.getName()+"_"+"leggings", metal, ItemGroups.tab_tools);
}
private static Item create_boots(MetalMaterial metal){
return registerItem(ItemMetalArmor.createBoots(metal), metal.getName()+"_"+"boots", metal, ItemGroups.tab_tools);
}
private static Item create_door(MetalMaterial metal,BlockDoor door){
Item item = new ItemMetalDoor(door,metal);
registerItem(item, metal.getName()+"_"+"door"+"_"+"item", metal, ItemGroups.tab_blocks);
item.setUnlocalizedName(BaseMetals.MODID+"."+metal.getName()+"_"+"door"); // Dirty Hack to set name right
doorMap.put(door, item);
return item;
}
/**
* Uses reflection to expand the size of the combat damage and attack speed arrays to prevent initialization
* index-out-of-bounds errors
* @param itemClass The class to modify
*/
private static void expandCombatArrays(Class itemClass) throws IllegalAccessException, NoSuchFieldException {
// WARNING: this method contains black magic
final int expandedSize = 256;
Field[] fields = itemClass.getDeclaredFields();
for(Field f : fields){
if(Modifier.isStatic(f.getModifiers())
&& f.getType().isArray()
&& f.getType().getComponentType().equals(float.class)){
FMLLog.info("%s: Expanding array variable %s.%s to size %s", Thread.currentThread().getStackTrace()[0], itemClass.getSimpleName(), f.getName(), expandedSize);
f.setAccessible(true); // bypass 'private' key word
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); // bypass 'final' key word
float[] newArray = new float[expandedSize];
Arrays.fill(newArray,0F);
System.arraycopy(f.get(null),0,newArray,0, Array.getLength(f.get(null)));
f.set(null,newArray);
}
}
}
public static int getSortingValue(ItemStack a){
int classVal = 990000;
int metalVal = 9900;
if(a.getItem() instanceof ItemBlock && ((ItemBlock)a.getItem()).getBlock() instanceof IMetalObject){
classVal = classSortingValues.computeIfAbsent(((ItemBlock)a.getItem()).getBlock().getClass(),
(Class c)->990000);
metalVal = materialSortingValues.computeIfAbsent(((IMetalObject)((ItemBlock)a.getItem()).getBlock()).getMetalMaterial(),
(MetalMaterial m)->9900);
} else if(a.getItem() instanceof IMetalObject){
classVal = classSortingValues.computeIfAbsent(a.getItem().getClass(),
(Class c)->990000);
metalVal = materialSortingValues.computeIfAbsent(((IMetalObject)a.getItem()).getMetalMaterial(),
(MetalMaterial m)->9900);
}
return classVal + metalVal + (a.getMetadata() % 100);
}
@SideOnly(Side.CLIENT)
public static void registerItemRenders(FMLInitializationEvent event){
for(Item i : itemRegistry.keySet()){
Minecraft.getMinecraft().getRenderItem().getItemModelMesher()
.register(i, 0,
new ModelResourceLocation(BaseMetals.MODID+":"+itemRegistry.get(i), "inventory"));
}
}
}