package joshie.harvest.cooking.render; import gnu.trove.map.TIntObjectMap; import gnu.trove.map.hash.TIntObjectHashMap; import joshie.harvest.cooking.HFCooking; import joshie.harvest.cooking.item.ItemMeal; import joshie.harvest.cooking.item.ItemMeal.Meal; import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import static joshie.harvest.cooking.tile.TileCooking.IN_UTENSIL; public class MealDefinition implements ItemMeshDefinition { private final TIntObjectMap<ModelResourceLocation> alts = new TIntObjectHashMap<>(); private final TIntObjectMap<ModelResourceLocation> meals = new TIntObjectHashMap<>(); public MealDefinition() { Item item = HFCooking.MEAL; //Register the normal meals for (Meal meal: Meal.values()) { ModelResourceLocation model = new ModelResourceLocation(item.getRegistryName(), meal.getName()); ModelBakery.registerItemVariants(item, model); meals.put(meal.ordinal(), model); //Check for alts if (meal.hasAltTexture()) { ModelResourceLocation altModel = new ModelResourceLocation(item.getRegistryName(), meal.getName() + "_alt"); ModelBakery.registerItemVariants(item, altModel); alts.put(meal.ordinal(), altModel); } } } private int getMealMetaFromStack(ItemStack stack) { if (stack.getItemDamage() >= 0 && stack.getItemDamage() < ItemMeal.MEALS.length) { return stack.getItemDamage(); } return 0; } @Override @SuppressWarnings("ConstantConditions") public ModelResourceLocation getModelLocation(ItemStack stack) { if (stack.hasTagCompound()) { Meal meal = HFCooking.MEAL.getEnumFromStack(stack); if (meal.hasAltTexture()) { return stack.getTagCompound().hasKey(IN_UTENSIL) ? alts.get(getMealMetaFromStack(stack)) : meals.get(getMealMetaFromStack(stack)); } } return meals.get(getMealMetaFromStack(stack)); } }