equivalent-exchange-3/ee3_common/com/pahimar/ee3/item/crafting/RecipesAlchemicalBagDyes.java
2013-03-08 13:40:59 -05:00

148 lines
4.6 KiB
Java

package com.pahimar.ee3.item.crafting;
import java.util.ArrayList;
import net.minecraft.block.BlockCloth;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.world.World;
import com.pahimar.ee3.item.ItemAlchemicalBag;
/**
* Equivalent-Exchange-3
*
* RecipesAlchemicalBagDyes
*
* @author pahimar
* @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html)
*
*/
public class RecipesAlchemicalBagDyes implements IRecipe {
@Override
public boolean matches(InventoryCrafting inventoryCrafting, World world) {
ItemStack itemStack = null;
ArrayList<ItemStack> arrayList = new ArrayList<ItemStack>();
for (int i = 0; i < inventoryCrafting.getSizeInventory(); ++i) {
ItemStack currentStack = inventoryCrafting.getStackInSlot(i);
if (currentStack != null) {
if (currentStack.getItem() instanceof ItemAlchemicalBag) {
if (itemStack != null)
return false;
itemStack = currentStack;
}
else {
if (currentStack.itemID != Item.dyePowder.itemID)
return false;
arrayList.add(currentStack);
}
}
}
return itemStack != null && !arrayList.isEmpty();
}
@Override
public ItemStack getCraftingResult(InventoryCrafting inventoryCrafting) {
ItemStack itemStack = null;
ItemAlchemicalBag itemAlchemicalBag = null;
int[] colorChannels = new int[3];
int i = 0;
int j = 0;
int k, j1, k1, l1;
int currentColor, newColor;
float red, green, blue;
for (k = 0; k < inventoryCrafting.getSizeInventory(); ++k) {
ItemStack currentStack = inventoryCrafting.getStackInSlot(k);
if (currentStack != null) {
if (currentStack.getItem() instanceof ItemAlchemicalBag) {
itemAlchemicalBag = (ItemAlchemicalBag) currentStack.getItem();
if (itemStack != null)
return null;
itemStack = currentStack.copy();
itemStack.stackSize = 1;
if (itemAlchemicalBag.hasColor(currentStack)) {
currentColor = itemAlchemicalBag.getColor(itemStack);
red = (currentColor >> 16 & 255) / 255.0F;
green = (currentColor >> 8 & 255) / 255.0F;
blue = (currentColor & 255) / 255.0F;
i = (int) (i + Math.max(red, Math.max(green, blue)) * 255.0F);
colorChannels[0] = (int) (colorChannels[0] + red * 255.0F);
colorChannels[1] = (int) (colorChannels[1] + green * 255.0F);
colorChannels[2] = (int) (colorChannels[2] + blue * 255.0F);
++j;
}
}
else {
if (currentStack.itemID != Item.dyePowder.itemID)
return null;
float[] dyeColorChannels = EntitySheep.fleeceColorTable[BlockCloth.getBlockFromDye(currentStack.getItemDamage())];
j1 = (int) (dyeColorChannels[0] * 255.0F);
k1 = (int) (dyeColorChannels[1] * 255.0F);
newColor = (int) (dyeColorChannels[2] * 255.0F);
i += Math.max(j1, Math.max(k1, newColor));
colorChannels[0] += j1;
colorChannels[1] += k1;
colorChannels[2] += newColor;
++j;
}
}
}
if (itemAlchemicalBag == null)
return null;
else {
k = colorChannels[0] / j;
l1 = colorChannels[1] / j;
currentColor = colorChannels[2] / j;
red = (float) i / (float) j;
green = Math.max(k, Math.max(l1, currentColor));
k = (int) (k * red / green);
l1 = (int) (l1 * red / green);
currentColor = (int) (currentColor * red / green);
newColor = (k << 8) + l1;
newColor = (newColor << 8) + currentColor;
itemAlchemicalBag.setColor(itemStack, newColor);
return itemStack;
}
}
@Override
public int getRecipeSize() {
return 10;
}
@Override
public ItemStack getRecipeOutput() {
return null;
}
}