/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [Feb 8, 2014, 1:11:42 PM (GMT)]
*/
package vazkii.botania.common.lexicon.page;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import net.minecraft.init.Items;
import org.lwjgl.opengl.GL11;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.resources.I18n;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.oredict.OreDictionary;
import vazkii.botania.api.internal.IGuiLexiconEntry;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.lexicon.LexiconRecipeMappings;
import vazkii.botania.api.recipe.RecipeManaInfusion;
import vazkii.botania.client.core.handler.HUDHandler;
import vazkii.botania.client.core.helper.RenderHelper;
import vazkii.botania.client.lib.LibResources;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.tile.mana.TilePool;
import vazkii.botania.common.core.helper.ItemNBTHelper;
public class PageManaInfusionRecipe extends PageRecipe {
private static final ResourceLocation manaInfusionOverlay = new ResourceLocation(LibResources.GUI_MANA_INFUSION_OVERLAY);
private final List<RecipeManaInfusion> recipes;
private int ticksElapsed = 0;
private int recipeAt = 0;
private final ItemStack renderStack;
public PageManaInfusionRecipe(String unlocalizedName, List<RecipeManaInfusion> recipes) {
super(unlocalizedName);
this.recipes = recipes;
renderStack = new ItemStack(ModBlocks.pool, 1, 0);
ItemNBTHelper.setBoolean(renderStack, "RenderFull", true);
}
public PageManaInfusionRecipe(String unlocalizedName, RecipeManaInfusion recipe) {
this(unlocalizedName, Collections.singletonList(recipe));
}
@Override
public void onPageAdded(LexiconEntry entry, int index) {
for(RecipeManaInfusion recipe : recipes)
LexiconRecipeMappings.map(recipe.getOutput(), entry, index);
}
@Override
@SideOnly(Side.CLIENT)
public void renderRecipe(IGuiLexiconEntry gui, int mx, int my) {
RecipeManaInfusion recipe = recipes.get(recipeAt);
TextureManager render = Minecraft.getMinecraft().renderEngine;
FontRenderer font = Minecraft.getMinecraft().fontRendererObj;
Object input = recipe.getInput();
if(input instanceof String)
input = OreDictionary.getOres((String) input).get(0);
renderItemAtGridPos(gui, 1, 1, (ItemStack) input, false);
renderStack.setItemDamage(recipe.getOutput().getItem() == Item.getItemFromBlock(ModBlocks.pool) ? 2 : 0);
renderItemAtGridPos(gui, 2, 1, renderStack, false);
renderItemAtGridPos(gui, 3, 1, recipe.getOutput(), false);
if(recipe.getCatalyst() != null) {
Block block = recipe.getCatalyst().getBlock();
if (Item.getItemFromBlock(block) != Items.AIR) {
renderItemAtGridPos(gui, 1, 2, new ItemStack(block, 1, block.getMetaFromState(recipe.getCatalyst())), false);
}
}
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
String manaUsage = I18n.format("botaniamisc.manaUsage");
font.drawString(manaUsage, gui.getLeft() + gui.getWidth() / 2 - font.getStringWidth(manaUsage) / 2, gui.getTop() + 105, 0x66000000);
int ratio = 10;
int x = gui.getLeft() + gui.getWidth() / 2 - 50;
int y = gui.getTop() + 115;
if(mx > x + 1 && mx <= x + 101 && my > y - 14 && my <= y + 11)
ratio = 1;
HUDHandler.renderManaBar(x, y, 0x0000FF, 0.75F, recipe.getManaToConsume(), TilePool.MAX_MANA / ratio);
String ratioString = I18n.format("botaniamisc.ratio", ratio);
String dropString = I18n.format("botaniamisc.drop") + " " + TextFormatting.BOLD + "(?)";
boolean hoveringOverDrop = false;
boolean unicode = font.getUnicodeFlag();
font.setUnicodeFlag(true);
int dw = font.getStringWidth(dropString);
int dx = x + 35 - dw / 2;
int dy = gui.getTop() + 30;
if(mx > dx && mx <= dx + dw && my > dy && my <= dy + 10)
hoveringOverDrop = true;
font.drawString(dropString, dx, dy, 0x77000000);
font.drawString(ratioString, x + 50 - font.getStringWidth(ratioString) / 2, y + 5, 0x99000000);
font.setUnicodeFlag(unicode);
GlStateManager.disableBlend();
render.bindTexture(manaInfusionOverlay);
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1F, 1F, 1F, 1F);
((GuiScreen) gui).drawTexturedModalRect(gui.getLeft(), gui.getTop(), 0, 0, gui.getWidth(), gui.getHeight());
GlStateManager.disableBlend();
if(hoveringOverDrop) {
String key = RenderHelper.getKeyDisplayString("key.drop");
String tip0 = I18n.format("botaniamisc.dropTip0", TextFormatting.GREEN + key + TextFormatting.WHITE);
String tip1 = I18n.format("botaniamisc.dropTip1", TextFormatting.GREEN + key + TextFormatting.WHITE);
RenderHelper.renderTooltip(mx, my, Arrays.asList(tip0, tip1));
}
}
@Override
@SideOnly(Side.CLIENT)
public void updateScreen() {
if(GuiScreen.isShiftKeyDown())
return;
if(ticksElapsed % 20 == 0) {
recipeAt++;
if(recipeAt == recipes.size())
recipeAt = 0;
}
++ticksElapsed;
}
@Override
public List<ItemStack> getDisplayedRecipes() {
ArrayList<ItemStack> list = new ArrayList<>();
for(RecipeManaInfusion r : recipes)
list.add(r.getOutput());
return list;
}
}