equivalent-exchange-3/src/main/java/com/pahimar/ee3/util/EnergyValueHelper.java

121 lines
5 KiB
Java

package com.pahimar.ee3.util;
import com.pahimar.ee3.api.EnergyValue;
import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.exchange.OreStack;
import com.pahimar.ee3.exchange.WrappedStack;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.oredict.OreDictionary;
import java.util.List;
import java.util.Map;
public class EnergyValueHelper
{
public static EnergyValue computeEnergyValueFromRecipe(Map<WrappedStack, EnergyValue> stackValueMappings, WrappedStack outputStack, List<WrappedStack> inputStacks)
{
float computedValue = 0f;
for (WrappedStack wrappedStack : inputStacks)
{
EnergyValue wrappedStackValue;
int stackSize = -1;
if (wrappedStack.getWrappedObject() instanceof ItemStack)
{
ItemStack itemStack = (ItemStack) wrappedStack.getWrappedObject();
// Check if we are dealing with a potential fluid
if (FluidContainerRegistry.getFluidForFilledItem(itemStack) != null)
{
if (itemStack.getItem().getContainerItem(itemStack) != null)
{
stackSize = FluidContainerRegistry.getFluidForFilledItem(itemStack).amount;
wrappedStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(stackValueMappings, FluidContainerRegistry.getFluidForFilledItem(itemStack));
}
else
{
wrappedStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(stackValueMappings, wrappedStack);
}
}
else if (itemStack.getItem().getContainerItem(itemStack) != null)
{
ItemStack containerItemStack = itemStack.getItem().getContainerItem(itemStack);
if (EnergyValueRegistry.getInstance().hasEnergyValue(itemStack) && EnergyValueRegistry.getInstance().hasEnergyValue(containerItemStack))
{
float itemStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(stackValueMappings, itemStack).getEnergyValue();
float containerStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(stackValueMappings, containerItemStack).getEnergyValue();
wrappedStackValue = new EnergyValue(itemStackValue - containerStackValue);
}
else
{
wrappedStackValue = new EnergyValue(0);
}
}
else if (!itemStack.getItem().doesContainerItemLeaveCraftingGrid(itemStack))
{
wrappedStackValue = new EnergyValue(0);
}
else if (OreDictionary.getOreIDs(itemStack).length > 0)
{
wrappedStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(stackValueMappings, wrappedStack, true);
}
else
{
wrappedStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(stackValueMappings, wrappedStack);
}
}
else if (wrappedStack.getWrappedObject() instanceof OreStack)
{
OreStack oreStack = (OreStack) wrappedStack.getWrappedObject();
wrappedStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(stackValueMappings, wrappedStack);
for (ItemStack itemStack : OreDictionary.getOres(oreStack.oreName))
{
if (!itemStack.getItem().doesContainerItemLeaveCraftingGrid(itemStack))
{
wrappedStackValue = new EnergyValue(0);
}
}
}
else
{
wrappedStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(stackValueMappings, wrappedStack);
}
if (wrappedStackValue != null)
{
if (stackSize == -1)
{
stackSize = wrappedStack.getStackSize();
}
computedValue += wrappedStackValue.getEnergyValue() * stackSize;
}
else
{
return null;
}
}
return factorEnergyValue(new EnergyValue(computedValue), outputStack.getStackSize());
}
public static EnergyValue factorEnergyValue(EnergyValue energyValue, int factor)
{
return factorEnergyValue(energyValue, (float) factor);
}
public static EnergyValue factorEnergyValue(EnergyValue energyValue, float factor)
{
if ((Float.compare(factor, 0f) != 0) && (energyValue != null))
{
return new EnergyValue(energyValue.getEnergyValue() * 1f / factor);
}
else
{
return energyValue;
}
}
}