209 lines
6.4 KiB
Java
209 lines
6.4 KiB
Java
package WayofTime.alchemicalWizardry.book.entries;
|
|
|
|
import java.awt.Color;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.gui.GuiButton;
|
|
import net.minecraft.client.renderer.RenderHelper;
|
|
import net.minecraft.client.renderer.entity.RenderItem;
|
|
import net.minecraft.client.renderer.texture.TextureManager;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.item.crafting.IRecipe;
|
|
import net.minecraft.item.crafting.ShapedRecipes;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraftforge.oredict.ShapedOreRecipe;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
import org.lwjgl.opengl.GL12;
|
|
|
|
import WayofTime.alchemicalWizardry.ModItems;
|
|
import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipeRegistry;
|
|
import WayofTime.alchemicalWizardry.api.items.ShapedBloodOrbRecipe;
|
|
import WayofTime.alchemicalWizardry.book.classes.guide.GuiEntry;
|
|
|
|
public class EntryCraftingRecipe implements IEntry{
|
|
public EntryCraftingRecipe(IRecipe recipes){
|
|
this.recipes = recipes;
|
|
populate(recipes);
|
|
}
|
|
public IRecipe recipes;
|
|
|
|
public ItemStack[] recipe;
|
|
public ItemStack output;
|
|
|
|
public ArrayList<ItemIcon> icons = new ArrayList<ItemIcon>();
|
|
|
|
@SuppressWarnings("unchecked")
|
|
public void populate(IRecipe recipe){
|
|
if(recipe instanceof ShapedRecipes){
|
|
ShapedRecipes rec = (ShapedRecipes)recipe;
|
|
if(rec != null && rec.recipeItems != null && rec.recipeItems.length > 0){
|
|
this.recipe = rec.recipeItems;
|
|
this.output = rec.getRecipeOutput();
|
|
}
|
|
}else if(recipe instanceof ShapedOreRecipe){
|
|
ShapedOreRecipe rec = (ShapedOreRecipe)recipe;
|
|
this.recipe = new ItemStack[rec.getInput().length];;
|
|
for(int i = 0; i < rec.getInput().length; i++){
|
|
ItemStack s = null;
|
|
if(rec.getInput()[i] instanceof ItemStack){
|
|
s = (ItemStack)rec.getInput()[i];
|
|
}else{
|
|
s = ((ArrayList<ItemStack>)rec.getInput()[i]).get(0);
|
|
}
|
|
this.recipe[i] = s;
|
|
this.output = rec.getRecipeOutput();
|
|
}
|
|
}else if(recipe instanceof ShapedBloodOrbRecipe){
|
|
ShapedBloodOrbRecipe rec = (ShapedBloodOrbRecipe)recipe;
|
|
this.recipe = new ItemStack[rec.getInput().length];;
|
|
for(int i = 0; i < rec.getInput().length; i++){
|
|
ItemStack s = null;
|
|
if(rec.getInput()[i] instanceof ItemStack){
|
|
s = (ItemStack)rec.getInput()[i];
|
|
}else if(rec.getInput()[i] instanceof Integer)
|
|
{
|
|
s = AltarRecipeRegistry.orbMap.get((Integer)rec.getInput()[i]);
|
|
}else if(rec.getInput()[i] instanceof Object){
|
|
System.out.println(rec.getInput()[i].getClass());
|
|
s = new ItemStack(ModItems.masterBloodOrb);
|
|
}else{
|
|
s = ((ArrayList<ItemStack>)rec.getInput()[i]).get(0);
|
|
}
|
|
this.recipe[i] = s;
|
|
this.output = rec.getRecipeOutput();
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void draw(GuiEntry entry, int width, int height, int left, int top, EntityPlayer player, String key, int page, int mX, int mY){
|
|
int x, y;
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glEnable(GL11.GL_BLEND);
|
|
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
|
GL11.glColor4f(1F, 1F, 1F, 1F);
|
|
RenderHelper.enableGUIStandardItemLighting();
|
|
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
|
GL11.glEnable(GL11.GL_DEPTH_TEST);
|
|
renderOverlay(entry, width, height, left, top);
|
|
|
|
/** Row 1 */
|
|
x = (left + width / 2) - (65-31);
|
|
y = (height/2 - 18) + (18*0);
|
|
drawIcon(0, x, y);
|
|
|
|
x = left + width / 2 - (65-48) + 1;
|
|
y = (height/2 - 18) + (18*(3-3));
|
|
drawIcon(1, x, y);
|
|
|
|
x = left + width / 2 - (65-(48+16)-3);
|
|
y = (height/2 - 18) + (18*(6-6));
|
|
drawIcon(2, x, y);
|
|
|
|
/** Row 2 */
|
|
x = (left + width / 2) - (65-31);
|
|
y = (height/2 - 18) + (18*1);
|
|
drawIcon(3, x, y);
|
|
|
|
x = left + width / 2 - (65-48) + 1;
|
|
y = (height/2 - 18) + (18*(4-3));
|
|
drawIcon(4, x, y);
|
|
|
|
x = left + width / 2 - (65-(48+16)-3);
|
|
y = (height/2 - 18) + (18*(7-6));
|
|
drawIcon(5, x, y);
|
|
|
|
/** Row 3 */
|
|
x = (left + width / 2) - (65-31);
|
|
y = (height/2 - 18) + (18*2);
|
|
drawIcon(6, x, y);
|
|
|
|
x = left + width / 2 - (65-48) + 1;
|
|
y = (height/2 - 18) + (18*(5-3));
|
|
drawIcon(7, x, y);
|
|
|
|
x = left + width / 2 - (65-(48+16)-3);
|
|
y = (height/2 - 18) + (18*(8-6));
|
|
drawIcon(8, x, y);
|
|
|
|
/** Result */
|
|
x = left + width / 2 - (65-(48+48)-5);
|
|
y = (height/2 - 18) + (18*(4-3));
|
|
drawIcon(this.output, x, y);
|
|
|
|
RenderHelper.disableStandardItemLighting();
|
|
|
|
GL11.glDisable(GL11.GL_LIGHTING);
|
|
|
|
GL11.glPopMatrix();
|
|
|
|
for(ItemIcon icon : icons){
|
|
if(icon.stack != null)
|
|
icon.onMouseBetween(mX, mY);
|
|
}
|
|
}
|
|
|
|
public void drawIcon(int entry, int x, int y){
|
|
RenderItem ri = new RenderItem();
|
|
if(recipe != null && recipe.length > 0 && recipe[entry] != null){
|
|
ri.renderItemAndEffectIntoGUI(Minecraft.getMinecraft().fontRenderer, Minecraft.getMinecraft().getTextureManager(), recipe[entry], x, y);
|
|
ri.renderItemOverlayIntoGUI(Minecraft.getMinecraft().fontRenderer, Minecraft.getMinecraft().getTextureManager(), recipe[entry], x, y);
|
|
|
|
icons.add(new ItemIcon(recipe[entry], x, y));
|
|
}
|
|
}
|
|
|
|
public void drawIcon(ItemStack stack, int x, int y){
|
|
RenderItem ri = new RenderItem();
|
|
ri.renderItemAndEffectIntoGUI(Minecraft.getMinecraft().fontRenderer, Minecraft.getMinecraft().getTextureManager(), stack, x, y);
|
|
ri.renderItemOverlayIntoGUI(Minecraft.getMinecraft().fontRenderer, Minecraft.getMinecraft().getTextureManager(), stack, x, y);
|
|
|
|
icons.add(new ItemIcon(stack, x, y));
|
|
}
|
|
|
|
public void renderOverlay(GuiEntry entry, int width, int height, int left, int top){
|
|
TextureManager tm = Minecraft.getMinecraft().getTextureManager();
|
|
tm.bindTexture(new ResourceLocation("bloodutils:textures/gui/crafting.png"));
|
|
entry.drawTexturedModalRect(left, (height/2 - 18) + (18*0) - 17, 0, 0, width, height);
|
|
}
|
|
|
|
@SuppressWarnings("rawtypes")
|
|
@Override
|
|
public void initGui(int width, int height, int left, int top,
|
|
EntityPlayer player, List buttonList){
|
|
|
|
}
|
|
|
|
@Override
|
|
public void actionPerformed(GuiButton button){
|
|
|
|
}
|
|
|
|
static class ItemIcon {
|
|
public ItemIcon(ItemStack stack, int x, int y){
|
|
this.stack = stack;
|
|
this.x = x;
|
|
this.y = y;
|
|
}
|
|
public ItemStack stack;
|
|
public int x, y;
|
|
|
|
public void onMouseBetween(int mX, int mY){
|
|
int xSize = x + 16;
|
|
int ySize = y + 16;
|
|
|
|
|
|
if(mX > x && mX < xSize && mY > y && mY < ySize){
|
|
GL11.glDisable(GL11.GL_DEPTH_TEST);
|
|
if(stack != null && stack.getDisplayName() != null)
|
|
Minecraft.getMinecraft().fontRenderer.drawString(stack.getDisplayName(), mX + 6, mY, new Color(139, 137, 137).getRGB());
|
|
GL11.glEnable(GL11.GL_DEPTH_TEST);
|
|
}
|
|
}
|
|
}
|
|
} |