Files
NotEnoughItems/src/main/java/codechicken/nei/recipe/stackinfo/GTFluidStackStringifyHandler.java
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

83 lines
2.7 KiB
Java
Raw Normal View History

2022-01-02 23:30:54 +02:00
package codechicken.nei.recipe.stackinfo;
import java.lang.reflect.Method;
2022-01-02 23:30:54 +02:00
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import codechicken.nei.api.IStackStringifyHandler;
public class GTFluidStackStringifyHandler implements IStackStringifyHandler {
2022-01-02 23:30:54 +02:00
public static Class GTDisplayFluid = null;
public static Method getFluidDisplayStack = null;
public static Method getFluidFromDisplayStack = null;
2022-01-02 23:30:54 +02:00
static {
try {
final Class gtUtility = Class.forName("gregtech.api.util.GT_Utility");
GTDisplayFluid = Class.forName("gregtech.common.items.GT_FluidDisplayItem");
getFluidFromDisplayStack = gtUtility.getMethod("getFluidFromDisplayStack", ItemStack.class);
getFluidDisplayStack = gtUtility.getMethod("getFluidDisplayStack", FluidStack.class, boolean.class);
} catch (Exception ignored) {
/* Do nothing */
}
2022-01-02 23:30:54 +02:00
}
public NBTTagCompound convertItemStackToNBT(ItemStack stack, boolean saveStackSize) {
2022-01-02 23:30:54 +02:00
if (GTDisplayFluid != null && GTDisplayFluid.isInstance(stack.getItem())) {
final FluidStack fluidStack = getFluid(stack);
2022-01-07 19:06:05 +02:00
if (fluidStack != null) {
final NBTTagCompound nbTag = new NBTTagCompound();
nbTag.setString("gtFluidName", fluidStack.getFluid().getName());
nbTag.setInteger("Count", saveStackSize ? fluidStack.amount : 1);
2022-01-07 19:06:05 +02:00
return nbTag;
}
2022-01-02 23:30:54 +02:00
}
return null;
}
public ItemStack convertNBTToItemStack(NBTTagCompound nbtTag) {
2022-01-02 23:30:54 +02:00
if (getFluidDisplayStack != null && nbtTag.hasKey("gtFluidName")) {
final String fluidName = nbtTag.getString("gtFluidName");
final Fluid fluid = FluidRegistry.getFluid(fluidName);
final int amount = nbtTag.getInteger("Count");
try {
final Object obj = getFluidDisplayStack.invoke(null, new FluidStack(fluid, amount), true);
if (obj != null) {
return (ItemStack) obj;
}
} catch (Exception e) {}
2022-01-02 23:30:54 +02:00
}
return null;
}
public FluidStack getFluid(ItemStack stack) {
2022-01-02 23:30:54 +02:00
if (getFluidFromDisplayStack != null && GTDisplayFluid != null && GTDisplayFluid.isInstance(stack.getItem())) {
try {
final Object obj = getFluidFromDisplayStack.invoke(null, stack);
2022-01-02 23:30:54 +02:00
if (obj != null) {
return (FluidStack) obj;
}
} catch (Exception e) {}
2022-01-02 23:30:54 +02:00
}
2022-01-02 23:30:54 +02:00
return null;
}
}