/******************************************************************************* * AbyssalCraft * Copyright (c) 2012 - 2017 Shinoow. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-3.0.txt * * Contributors: * Shinoow - implementation ******************************************************************************/ package com.shinoow.abyssalcraft.integration.jei.ritual; import java.util.Collections; import java.util.List; import java.util.Map; import javax.annotation.Nonnull; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.shinoow.abyssalcraft.api.APIUtils; import com.shinoow.abyssalcraft.api.item.ACItems; import com.shinoow.abyssalcraft.api.ritual.NecronomiconCreationRitual; import com.shinoow.abyssalcraft.api.ritual.NecronomiconRitual; import com.shinoow.abyssalcraft.api.ritual.RitualRegistry; import com.shinoow.abyssalcraft.lib.NecronomiconText; public class RitualRecipeWrapper extends BlankRecipeWrapper { private final Object[] offerings; private final Object sacrifice; private final ItemStack output; private final int bookType; private final NecronomiconRitual ritual; private Map<Integer, String> dimToString = Maps.newHashMap(); public RitualRecipeWrapper(@Nonnull NecronomiconCreationRitual ritual){ if(ritual.getOfferings().length < 8){ offerings = new Object[8]; for(int i = 0; i < ritual.getOfferings().length; i++) offerings[i] = ritual.getOfferings()[i]; }else offerings = ritual.getOfferings(); sacrifice = ritual.getSacrifice(); output = ritual.getItem(); bookType = ritual.getBookType(); this.ritual = ritual; } public Object[] getOfferings(){ return offerings; } public Object getSacrifice(){ return sacrifice; } public int getBookType(){ return bookType; } public List<ItemStack> getOutputs(){ return Collections.singletonList(output); } @Override public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { dimToString.put(-1, I18n.format(NecronomiconText.LABEL_ANYWHERE, new Object[0])); dimToString.putAll(RitualRegistry.instance().getDimensionNameMappings()); FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; boolean unicode = fr.getUnicodeFlag(); fr.setUnicodeFlag(true); if(ritual.requiresSacrifice()) fr.drawString(I18n.format(NecronomiconText.LABEL_SACRIFICE, new Object[0]), 93, 124, 0xC40000); fr.drawSplitString(I18n.format(NecronomiconText.LABEL_LOCATION, new Object[0]) + ": " + getDimension(ritual.getDimension()), 93, 85, 70, 0); fr.drawSplitString(I18n.format(NecronomiconText.LABEL_REQUIRED_ENERGY, new Object[0]) + ": " + ritual.getReqEnergy() + " PE", 93, 108, 70, 0); fr.setUnicodeFlag(unicode); } private String getDimension(int dim){ if(!dimToString.containsKey(dim)) dimToString.put(dim, "DIM"+dim); return dimToString.get(dim); } private ItemStack getItem(int par1){ switch(par1){ case 0: return new ItemStack(ACItems.necronomicon); case 1: return new ItemStack(ACItems.abyssal_wasteland_necronomicon); case 2: return new ItemStack(ACItems.dreadlands_necronomicon); case 3: return new ItemStack(ACItems.omothol_necronomicon); case 4: return new ItemStack(ACItems.abyssalnomicon); default: return new ItemStack(ACItems.necronomicon); } } private boolean list(Object obj){ return obj == null ? false : obj instanceof ItemStack[] || obj instanceof String || obj instanceof List; } private List<ItemStack> getList(Object obj){ if(obj instanceof ItemStack[]) return Lists.newArrayList((ItemStack[])obj); if(obj instanceof String) return OreDictionary.getOres((String)obj); if(obj instanceof List) return (List)obj; return Collections.emptyList(); } @Override public void getIngredients(IIngredients ingredients) { List<List<ItemStack>> input = Lists.newArrayList(); for(Object obj : offerings) input.add(list(obj) ? getList(obj) : Collections.singletonList(APIUtils.convertToStack(obj))); input.add(Collections.singletonList(APIUtils.convertToStack(sacrifice))); input.add(Collections.singletonList(getItem(bookType))); ingredients.setInputLists(ItemStack.class, input); ingredients.setOutput(ItemStack.class, output); } }