package blusunrize.immersiveengineering.common.crafting;
import blusunrize.immersiveengineering.api.tool.BulletHandler;
import blusunrize.immersiveengineering.common.IEContent;
import blusunrize.immersiveengineering.common.items.IEItemInterfaces.IColouredItem;
import blusunrize.immersiveengineering.common.util.ItemNBTHelper;
import blusunrize.immersiveengineering.common.util.Utils;
import com.google.common.collect.Lists;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import java.util.List;
public class RecipeFlareBullets implements IRecipe
{
@Override
public boolean matches(InventoryCrafting inv, World world)
{
ItemStack bullet = null;
List<ItemStack> list = Lists.newArrayList();
for(int i=0;i<inv.getSizeInventory();i++)
{
ItemStack stackInSlot = inv.getStackInSlot(i);
if(stackInSlot!=null)
{
if(bullet == null && IEContent.itemBullet.equals(stackInSlot.getItem()) && "flare".equals(ItemNBTHelper.getString(stackInSlot, "bullet")))
bullet = stackInSlot;
else if(Utils.isDye(stackInSlot))
list.add(stackInSlot);
else
return false;
}
}
return bullet != null && !list.isEmpty();
}
@Override
public ItemStack getCraftingResult(InventoryCrafting inv)
{
int[] colourArray = new int[3];
int j = 0;
int totalColourSets = 0;
ItemStack bullet = null;
for(int i=0;i<inv.getSizeInventory();i++)
{
ItemStack stackInSlot = inv.getStackInSlot(i);
if(stackInSlot!=null)
if(bullet == null && IEContent.itemBullet.equals(stackInSlot.getItem()) && "flare".equals(ItemNBTHelper.getString(stackInSlot, "bullet")))
{
bullet = stackInSlot;
int colour = ((IColouredItem)bullet.getItem()).getColourForIEItem(bullet, 1);
float r = (float)(colour >> 16 & 255) / 255.0F;
float g = (float)(colour >> 8 & 255) / 255.0F;
float b = (float)(colour & 255) / 255.0F;
j = (int)((float)j + Math.max(r, Math.max(g, b)) * 255.0F);
colourArray[0] = (int)((float)colourArray[0] + r * 255.0F);
colourArray[1] = (int)((float)colourArray[1] + g * 255.0F);
colourArray[2] = (int)((float)colourArray[2] + b * 255.0F);
++totalColourSets;
}
else if(Utils.isDye(stackInSlot))
{
float[] afloat = EntitySheep.getDyeRgb(EnumDyeColor.byDyeDamage(Utils.getDye(stackInSlot)));
int r = (int)(afloat[0] * 255.0F);
int g = (int)(afloat[1] * 255.0F);
int b = (int)(afloat[2] * 255.0F);
j += Math.max(r, Math.max(g, b));
colourArray[0] += r;
colourArray[1] += g;
colourArray[2] += b;
++totalColourSets;
}
}
if(bullet!=null)
{
ItemStack newBullet = Utils.copyStackWithAmount(bullet, 1);
int r = colourArray[0] / totalColourSets;
int g = colourArray[1] / totalColourSets;
int b = colourArray[2] / totalColourSets;
float colourMod = (float)j / (float)totalColourSets;
float highestColour = (float)Math.max(r, Math.max(g, b));
r = (int)((float)r * colourMod / highestColour);
g = (int)((float)g * colourMod / highestColour);
b = (int)((float)b * colourMod / highestColour);
int newColour = (r << 8) + g;
newColour = (newColour << 8) + b;
ItemNBTHelper.setInt(newBullet, "flareColour", newColour);
return newBullet;
}
return null;
}
@Override
public int getRecipeSize()
{
return 10;
}
@Override
public ItemStack getRecipeOutput()
{
return BulletHandler.getBulletStack("flare");
}
@Override
public ItemStack[] getRemainingItems(InventoryCrafting inv)
{
return ForgeHooks.defaultRecipeGetRemainingItems(inv);
}
}