/*
* This file is part of Matter Overdrive
* Copyright (c) 2015., Simeon Radivoev, All rights reserved.
*
* Matter Overdrive is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Matter Overdrive is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>.
*/
package matteroverdrive.compat.modules.nei;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.NEIServerUtils;
import codechicken.nei.PositionedStack;
import codechicken.nei.api.IOverlayHandler;
import codechicken.nei.api.IRecipeOverlayRenderer;
import codechicken.nei.recipe.TemplateRecipeHandler;
import matteroverdrive.Reference;
import matteroverdrive.data.recipes.InscriberRecipe;
import matteroverdrive.handler.recipes.InscriberRecipes;
import matteroverdrive.util.MOStringHelper;
import matteroverdrive.util.RenderUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import java.awt.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by Simeon on 12/2/2015.
*/
public class CraftingHandlerInscriber extends TemplateRecipeHandler
{
ResourceLocation background = new ResourceLocation(Reference.PATH_GUI + "inscriber_nei.png");
ResourceLocation arrowTexture = new ResourceLocation(Reference.TEXTURE_ARROW_PROGRESS);
@Override
public void loadTransferRects()
{
this.transferRects.add(new RecipeTransferRect(new Rectangle(55,20, 26, 18), "mo_inscriber", new Object[0]));
}
@Override
public String getGuiTexture() {
return Reference.PATH_GUI + "inscriber_nei.png";
}
@Override
public void drawProgressBar(int x, int y, int tx, int ty, int w, int h, float completion, int direction)
{
GuiDraw.changeTexture(arrowTexture);
GuiDraw.drawTexturedModalRect(x, y, 24, 0, 48, 16);
}
@Override
public void drawExtras(int recipe)
{
GuiDraw.changeTexture(arrowTexture);
int ticks = ((CashedInscriberRecipe)arecipes.get(recipe)).getTime();
int width = (int)(((float)(this.cycleticks % ticks) / (float)ticks) * 24);
RenderUtils.drawPlaneWithUV(57,20,0,width,16,0.5,0,width/48f,1);
Minecraft.getMinecraft().fontRenderer.drawString(String.format("-%,d RF",((CashedInscriberRecipe)arecipes.get(recipe)).getEnergy()),72,52,Reference.COLOR_HOLO_RED.getColor());
}
@Override
public void loadCraftingRecipes(String outputId, Object... results) {
if(outputId.equals("mo_inscriber") && this.getClass() == CraftingHandlerInscriber.class) {
Iterator<InscriberRecipe> iterator = InscriberRecipes.getRecipes().iterator();
while(iterator.hasNext()) {
InscriberRecipe recipe = iterator.next();
CashedInscriberRecipe cachedRecipe = new CashedInscriberRecipe(recipe);
cachedRecipe.computeVisuals();
this.arecipes.add(cachedRecipe);
}
} else {
super.loadCraftingRecipes(outputId, results);
}
}
@Override
public void drawBackground(int recipe) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GuiDraw.changeTexture(this.getGuiTexture());
//GL11.glDisable(GL11.GL_TEXTURE_2D);
RenderUtils.drawPlane(23,5,0,120,72);
}
@Override
public int recipiesPerPage() {
return 1;
}
@Override
public void loadCraftingRecipes(ItemStack result) {
Iterator<InscriberRecipe> iterator = InscriberRecipes.getRecipes().iterator();
while (iterator.hasNext()) {
InscriberRecipe recipe = iterator.next();
if (NEIServerUtils.areStacksIdentical(result,recipe.getRecipeOutput())) {
CashedInscriberRecipe cachedRecipe = new CashedInscriberRecipe(recipe);
cachedRecipe.computeVisuals();
this.arecipes.add(cachedRecipe);
}
}
}
@Override
public void loadUsageRecipes(ItemStack ingredient) {
Iterator<InscriberRecipe> iterator = InscriberRecipes.getRecipes().iterator();
while (iterator.hasNext()) {
InscriberRecipe recipe = iterator.next();
if (NEIServerUtils.areStacksIdentical(ingredient,recipe.getMain()) || NEIServerUtils.areStacksIdentical(ingredient,recipe.getSec()))
{
CashedInscriberRecipe cachedRecipe = new CashedInscriberRecipe(recipe);
cachedRecipe.computeVisuals();
this.arecipes.add(cachedRecipe);
}
}
}
@Override
public boolean hasOverlay(GuiContainer gui, Container container, int recipe) {
return false;
}
@Override
public IRecipeOverlayRenderer getOverlayRenderer(GuiContainer gui, int recipe) {
return null;
}
@Override
public IOverlayHandler getOverlayHandler(GuiContainer gui, int recipe) {
return null;
}
@Override
public String getRecipeName() {
return MOStringHelper.translateToLocal("gui.inscriber.name");
}
@Override
public String getOverlayIdentifier() {
return "mo_inscriber";
}
public class CashedInscriberRecipe extends CachedRecipe
{
PositionedStack main;
PositionedStack sec;
PositionedStack result;
int time;
int energy;
public CashedInscriberRecipe(InscriberRecipe recipe)
{
main = new PositionedStack(recipe.getMain(),33,20);
sec = new PositionedStack(recipe.getSec(),33,47);
result = new PositionedStack(recipe.getRecipeOutput(),91,20);
time = recipe.getTime();
energy = recipe.getEnergy();
}
@Override
public List<PositionedStack> getIngredients() {
ArrayList stacks = new ArrayList();
stacks.add(main);
stacks.add(sec);
return stacks;
}
@Override
public PositionedStack getResult() {
return result;
}
public void computeVisuals() {
this.main.generatePermutations();
this.sec.generatePermutations();
this.result.generatePermutations();
}
public int getTime()
{
return time;
}
public int getEnergy()
{
return energy;
}
}
}