package choonster.testmod3.item; import choonster.testmod3.util.IVariant; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; /** * An item with multiple variants. * <p> * Test for this thread: * http://www.minecraftforge.net/forum/index.php/topic,40652.0.html * * @author Choonster */ public class ItemVariants extends ItemTestMod3 { public ItemVariants() { super("variants_item"); } @Override public String getUnlocalizedName(ItemStack stack) { return super.getUnlocalizedName(stack) + "." + EnumType.byMetadata(stack.getMetadata()).getName(); } @SideOnly(Side.CLIENT) @Override public void getSubItems(Item itemIn, CreativeTabs tab, NonNullList<ItemStack> subItems) { final List<ItemStack> items = Stream.of(EnumType.values()) .map(enumType -> new ItemStack(itemIn, 1, enumType.getMeta())) .collect(Collectors.toList()); subItems.addAll(items); } public enum EnumType implements IVariant { VARIANT_A(0, "a"), VARIANT_B(1, "b"), VARIANT_C(2, "c"); private static final EnumType[] META_LOOKUP = Stream.of(values()).sorted(Comparator.comparing(EnumType::getMeta)).toArray(EnumType[]::new); private final int meta; private final String name; EnumType(int meta, String name) { this.meta = meta; this.name = name; } public int getMeta() { return meta; } @Override public String getName() { return name; } public static EnumType byMetadata(int meta) { if (meta < 0 || meta >= META_LOOKUP.length) { meta = 0; } return META_LOOKUP[meta]; } } }