package openblocks.common.item; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.List; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; import openblocks.OpenBlocks; import openblocks.common.entity.EntityAssistant; import openblocks.common.entity.EntityCartographer; public class ItemCartographer extends Item { // just in case public enum AssistantType { CARTOGRAPHER("cartographer", "cartographer") { @Override public EntityAssistant createAssistant(World world, EntityPlayer owner, ItemStack stack) { return new EntityCartographer(world, owner, stack); } }; public final String untranslatedName; public final String iconName; private IIcon icon; private AssistantType(String name, String iconName) { this.untranslatedName = "openblocks.assistant_" + name; this.iconName = "openblocks:assistant_" + iconName; } public abstract EntityAssistant createAssistant(World world, EntityPlayer owner, ItemStack stack); public final static AssistantType VALUES[] = values(); } public ItemCartographer() { setMaxDamage(0); setHasSubtypes(true); setCreativeTab(OpenBlocks.tabOpenBlocks); setMaxStackSize(1); } @Override @SideOnly(Side.CLIENT) public IIcon getIconIndex(ItemStack stack) { return getTypeFromItem(stack).icon; } @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister register) { for (AssistantType type : AssistantType.VALUES) type.icon = register.registerIcon(type.iconName); } @Override @SideOnly(Side.CLIENT) @SuppressWarnings({ "rawtypes", "unchecked" }) public void getSubItems(Item item, CreativeTabs tab, List result) { for (AssistantType type : AssistantType.VALUES) result.add(new ItemStack(this, 1, type.ordinal())); } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if (!player.capabilities.isCreativeMode) --stack.stackSize; if (!world.isRemote) { AssistantType type = getTypeFromItem(stack); if (type != null) { EntityAssistant cartographer = type.createAssistant(world, player, stack); world.spawnEntityInWorld(cartographer); } } return stack; } public static AssistantType getTypeFromItem(ItemStack stack) { int typeId = stack.getItemDamage(); if (typeId < 0 || typeId > AssistantType.VALUES.length) typeId = 0; return AssistantType.VALUES[typeId]; } public ItemStack createStack(AssistantType type) { return new ItemStack(this, 1, type.ordinal()); } }