package tonius.neiintegration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.StatCollector;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.fluids.IFluidContainerItem;
import org.lwjgl.input.Keyboard;
import codechicken.nei.NEIServerUtils;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.versioning.DefaultArtifactVersion;
import cpw.mods.fml.common.versioning.VersionParser;
import cpw.mods.fml.common.versioning.VersionRange;
public class Utils {
public static String translate(String unlocalized, boolean prefix) {
return StatCollector.translateToLocal((prefix ? "neiintegration." : "") + unlocalized);
}
public static String translate(String unlocalized) {
return translate(unlocalized, true);
}
public static boolean areStacksSameTypeCraftingSafe(ItemStack stack1, ItemStack stack2) {
if (stack1 != null && stack2 != null) {
return NEIServerUtils.areStacksSameTypeCrafting(stack1, stack2);
}
return false;
}
public static List<ItemStack> getItemVariations(ItemStack base) {
List<ItemStack> variations = new ArrayList<ItemStack>();
base.getItem().getSubItems(base.getItem(), null, variations);
Iterator<ItemStack> itr = variations.iterator();
ItemStack stack;
while (itr.hasNext()) {
stack = itr.next();
if (!base.isItemEqual(stack) || !stack.hasTagCompound()) {
itr.remove();
}
}
if (variations.isEmpty()) {
return Collections.singletonList(base);
}
return variations;
}
public static FluidStack getFluidStack(ItemStack stack) {
if (stack != null) {
FluidStack fluidStack = null;
Block block = Block.getBlockFromItem(stack.getItem());
if (stack.getItem() instanceof IFluidContainerItem) {
fluidStack = ((IFluidContainerItem) stack.getItem()).getFluid(stack);
}
if (fluidStack == null) {
fluidStack = FluidContainerRegistry.getFluidForFilledItem(stack);
}
if (fluidStack == null && block instanceof IFluidBlock) {
Fluid fluid = ((IFluidBlock) block).getFluid();
if (fluid != null) {
fluidStack = new FluidStack(fluid, 1000);
}
}
if (fluidStack == null && (block == Blocks.water || block == Blocks.flowing_water)) {
fluidStack = new FluidStack(FluidRegistry.WATER, 1000);
}
if (fluidStack == null && (block == Blocks.lava || block == Blocks.flowing_lava)) {
fluidStack = new FluidStack(FluidRegistry.LAVA, 1000);
}
return fluidStack;
}
return null;
}
public static boolean areFluidsSameType(FluidStack fluidStack1, FluidStack fluidStack2) {
if (fluidStack1 == null || fluidStack2 == null) {
return false;
}
return fluidStack1.getFluid() == fluidStack2.getFluid();
}
public static boolean isFluidBlock(ItemStack stack) {
if (stack == null || stack.getItem() == null) {
return false;
}
Block block = Block.getBlockFromItem(stack.getItem());
if (block == null) {
return false;
}
return block instanceof IFluidBlock || block == Blocks.water || block == Blocks.flowing_water || block == Blocks.lava || block == Blocks.flowing_lava;
}
public static boolean isShiftKeyDown() {
return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT);
}
public static Class getClass(String name) {
try {
Class clazz = Class.forName(name);
return clazz;
} catch (Exception e) {
NEIIntegration.log.error("Failed to find class " + name);
}
return null;
}
public static boolean isModLoaded(String modid) {
return Loader.isModLoaded(modid);
}
public static boolean isModLoaded(String modid, String versionRangeString) {
if (!isModLoaded(modid)) {
return false;
}
ModContainer mod = Loader.instance().getIndexedModList().get(modid);
VersionRange versionRange = VersionParser.parseRange(versionRangeString);
DefaultArtifactVersion required = new DefaultArtifactVersion(modid, versionRange);
return required.containsVersion(mod.getProcessedVersion());
}
}