package com.pahimar.ee.item.base; import com.pahimar.ee.EquivalentExchange; import com.pahimar.ee.creativetab.CreativeTab; import com.pahimar.ee.init.ModItems; import com.pahimar.ee.util.ResourceLocationHelper; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; import java.util.List; public class ItemBase extends Item implements IItemVariantHolder<ItemBase> { private final String BASE_NAME; private final String[] VARIANTS; public ItemBase(String name, String ... variants) { super(); setRegistryName(name); setUnlocalizedName(name); setCreativeTab(CreativeTab.EE_TAB); setMaxStackSize(1); setNoRepair(); BASE_NAME = name; if (variants.length > 0) { VARIANTS = variants; } else { VARIANTS = new String[0]; } ModItems.register(this); } @Override public String getUnlocalizedName(ItemStack itemStack) { if (hasSubtypes && itemStack.getMetadata() < VARIANTS.length) { return String.format("item.%s:%s", EquivalentExchange.MOD_ID, VARIANTS[Math.abs(itemStack.getMetadata() % VARIANTS.length)]); } else { return String.format("item.%s:%s", EquivalentExchange.MOD_ID, BASE_NAME); } } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs creativeTab, NonNullList<ItemStack> list) { if (getHasSubtypes() && VARIANTS.length > 0) { for (int meta = 0; meta < VARIANTS.length; ++meta) { list.add(new ItemStack(this, 1, meta)); } } else { super.getSubItems(item, creativeTab, list); } } @SideOnly(Side.CLIENT) public void initModelsAndVariants() { if (getCustomMeshDefinition() != null) { for (int i = 0; i < VARIANTS.length; i++) { ModelBakery.registerItemVariants(this, ResourceLocationHelper.getModelResourceLocation(VARIANTS[i])); } ModelLoader.setCustomMeshDefinition(this, getCustomMeshDefinition()); } else { if (getHasSubtypes() && VARIANTS.length > 0) { List<ModelResourceLocation> modelResources = new ArrayList<>(); for (int i = 0; i < VARIANTS.length; i++) { modelResources.add(ResourceLocationHelper.getModelResourceLocation(VARIANTS[i])); } ModelBakery.registerItemVariants(this, modelResources.toArray(new ModelResourceLocation[0])); ModelLoader.setCustomMeshDefinition(this, itemStack -> modelResources.get(itemStack.getMetadata())); } else { ModelLoader.setCustomModelResourceLocation(this, 0, new ModelResourceLocation(getRegistryName().toString())); } } } @Override public ItemBase getItem() { return this; } @Override public String[] getVariants() { return VARIANTS; } }