package crazypants.enderio.item; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import com.enderio.core.api.client.gui.IResourceTooltipProvider; import com.enderio.core.client.handlers.SpecialTooltipHandler; import com.google.common.collect.Lists; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import crazypants.enderio.EnderIO; import crazypants.enderio.EnderIOTab; import crazypants.enderio.ModObject; public class ItemEnderFood extends ItemFood implements IResourceTooltipProvider { @SideOnly(Side.CLIENT) public class SpecialFont extends FontRenderer { private FontRenderer wrapped; private ItemStack stack = EnderFood.ENDERIOS.getStack(); private int inARow = 0; public SpecialFont(FontRenderer wrapped) { super(Minecraft.getMinecraft().gameSettings, new ResourceLocation("textures/font/ascii.png"), Minecraft.getMinecraft().renderEngine, false); this.wrapped = wrapped; } @Override public int drawString(String string, int x, int y, int color, boolean p_85187_5_) { boolean pop = false; if (isSmallText(string)) { GL11.glPushMatrix(); GL11.glScalef(0.5f, 0.5f, 0.5f); GL11.glTranslated(x, y, 0); GL11.glTranslated(0, -this.FONT_HEIGHT * inARow + FONT_HEIGHT, 0); inARow++; pop = true; } else { inARow = 0; } int ret = wrapped.drawString(string, x, y, color, p_85187_5_); if (pop) { GL11.glPopMatrix(); } return ret; } @Override public int getStringWidth(String p_78256_1_) { int ret = wrapped.getStringWidth(p_78256_1_); if (isSmallText(p_78256_1_)) { ret /= 2; } return ret; } private boolean isSmallText(String string) { List<String> lines = Lists.newArrayList(); SpecialTooltipHandler.addDetailedTooltipFromResources(lines, getUnlocalizedNameForTooltip(stack)); return lines.contains(EnumChatFormatting.getTextWithoutFormattingCodes(string)); } @Override public int getCharWidth(char p_78263_1_) { return wrapped.getCharWidth(p_78263_1_); } } public enum EnderFood { ENDERIOS("itemEnderios", 10, 0.8f); public final String unlocalisedName; public final int hunger; public final float saturation; public static final EnderFood[] VALUES = values(); private EnderFood(String name, int hunger, float saturation) { this.unlocalisedName = name; this.hunger = hunger; this.saturation = saturation; } public ItemStack getStack() { return getStack(1); } public ItemStack getStack(int size) { return new ItemStack(EnderIO.itemEnderFood, size, ordinal()); } public static EnderFood get(ItemStack stack) { return VALUES[stack.getItemDamage() % VALUES.length]; } } public static ItemEnderFood create() { ItemEnderFood ret = new ItemEnderFood(); GameRegistry.registerItem(ret, ModObject.itemEnderFood.unlocalisedName); return ret; } @SideOnly(Side.CLIENT) private IIcon[] icons; @SideOnly(Side.CLIENT) private SpecialFont fr; public ItemEnderFood() { super(0, false); setCreativeTab(EnderIOTab.tabEnderIO); setMaxStackSize(1); setHasSubtypes(true); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void getSubItems(Item item, CreativeTabs tab, List list) { for (EnderFood f : EnderFood.VALUES) { list.add(f.getStack()); } } @Override public String getUnlocalizedName(ItemStack p_77667_1_) { return "enderio." + EnderFood.get(p_77667_1_).unlocalisedName; } @Override public void registerIcons(IIconRegister register) { icons = new IIcon[EnderFood.VALUES.length]; for (EnderFood f : EnderFood.VALUES) { icons[f.ordinal()] = register.registerIcon("enderio:" + f.unlocalisedName); } } @Override public IIcon getIconFromDamage(int damage) { return icons[damage % icons.length]; } @Override public int func_150905_g(ItemStack p_150905_1_) { return EnderFood.get(p_150905_1_).hunger; } @Override public float func_150906_h(ItemStack p_150906_1_) { return EnderFood.get(p_150906_1_).saturation; } @Override public String getUnlocalizedNameForTooltip(ItemStack itemStack) { return getUnlocalizedName(itemStack); } @Override @SideOnly(Side.CLIENT) public FontRenderer getFontRenderer(ItemStack stack) { if (fr == null) { fr = new SpecialFont(Minecraft.getMinecraft().fontRenderer); } return fr; } }