package gory_moon.moarsigns.integration.nei;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.api.stack.PositionedStack;
import codechicken.nei.recipe.TemplateRecipeHandler;
import gory_moon.moarsigns.api.MaterialInfo;
import gory_moon.moarsigns.api.MaterialRegistry;
import gory_moon.moarsigns.api.SignInfo;
import gory_moon.moarsigns.api.SignRegistry;
import gory_moon.moarsigns.client.interfaces.GuiExchange;
import gory_moon.moarsigns.items.ItemMoarSign;
import gory_moon.moarsigns.items.ModItems;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.translation.I18n;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class NEIExchangeUsageHandler extends TemplateRecipeHandler {
private static List<ItemStack> getVariationStacks(ArrayList<SignInfo> infos) {
List<ItemStack> stacks = new ArrayList<ItemStack>();
for (SignInfo info : infos) {
stacks.add(ModItems.SIGN.createMoarItemStack(info.material.path + info.itemName, info.isMetal));
}
return stacks;
}
@Override
public String getGuiTexture() {
return "moarsigns:textures/gui/sign_exchange_nei.png";
}
@Override
public String getRecipeName() {
return I18n.translateToLocal("crafting.moarsigns.sign.exchange");
}
@Override
public Class<? extends GuiContainer> getGuiClass() {
return GuiExchange.class;
}
@Override
public void drawBackground(int recipeIndex) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GuiDraw.changeTexture(getGuiTexture());
GuiDraw.drawTexturedModalRect(0, 0, 0, 0, 164, 118);
}
@Override
public int recipiesPerPage() {
return 1;
}
@Override
public void loadUsageRecipes(ItemStack ingredient) {
if (ingredient != null && ingredient.getItem() != null && ingredient.getItem() instanceof ItemMoarSign) {
String texture = ItemMoarSign.getTextureFromNBTFull(ingredient.getTagCompound());
SignInfo signInfo = SignRegistry.get(texture);
if (signInfo == null || signInfo.material == null || signInfo.material.materialName == null)
return;
HashSet<MaterialInfo> materials = MaterialRegistry.get(signInfo.material.materialName);
if (materials == null || materials.size() <= 1) {
return;
}
ArrayList<SignInfo> signs = SignRegistry.getSignInfoFromMaterials(materials);
if (signs == null || signs.size() <= 1) {
return;
}
List<ItemStack> variations = getVariationStacks(signs);
addCached(variations, ingredient);
}
}
private void addCached(List<ItemStack> variations, ItemStack base) {
this.arecipes.add(new CachedExchangeRecipe(variations, base));
}
public class CachedExchangeRecipe extends CachedRecipe {
private List<PositionedStack> input = new ArrayList<PositionedStack>();
private List<PositionedStack> outputs = new ArrayList<PositionedStack>();
public CachedExchangeRecipe(List<ItemStack> variations, ItemStack base) {
PositionedStack pStack = new PositionedStack(base != null ? base : variations, 75, 13);
pStack.setMaxSize(1);
this.input.add(pStack);
int row = 0;
int col = 0;
for (ItemStack v : variations) {
this.outputs.add(new PositionedStack(v, 3 + 18 * col, 43 + 18 * row));
col++;
if (col > 9) {
col = 0;
row++;
}
}
}
@Override
public List<PositionedStack> getIngredients() {
return getCycledIngredients(cycleticks / 20, this.input);
}
@Override
public List<PositionedStack> getOtherStacks() {
return outputs;
}
@Override
public PositionedStack getResult() {
return null;
}
}
}