1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
package gtPlusPlus.xmod.gregtech.common.helpers;
import java.lang.reflect.Method;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
public class VolumetricFlaskHelper {
private static final Class sClassVolumetricFlask;
private static final Method sMethodGetFlaskMaxCapacity;
private static Item mFlask;
static {
if (Meta_GT_Proxy.sDoesVolumetricFlaskExist) {
sClassVolumetricFlask = ReflectionUtils.getClass("gregtech.common.items.GT_VolumetricFlask");
sMethodGetFlaskMaxCapacity = ReflectionUtils.getMethod(sClassVolumetricFlask, "getMaxCapacity", new Class[] {});
}
else {
sClassVolumetricFlask = null;
sMethodGetFlaskMaxCapacity = null;
}
}
public static ItemStack getVolumetricFlask(int aAmount) {
ItemStack aFlask = ItemUtils.getValueOfItemList("VOLUMETRIC_FLASK", aAmount, (ItemStack) null);
return aFlask;
}
public static boolean isVolumetricFlask(ItemStack aStack) {
if (mFlask == null) {
ItemStack aFlask = ItemUtils.getValueOfItemList("VOLUMETRIC_FLASK", 1, (ItemStack) null);
if (aFlask != null) {
mFlask = aFlask.getItem();
}
}
if (aStack.getItem() == mFlask) {
return true;
}
return false;
}
public static int getMaxFlaskCapacity(ItemStack aStack) {
if (aStack != null && sMethodGetFlaskMaxCapacity != null) {
Item aItem = aStack.getItem();
if (sClassVolumetricFlask.isInstance(aItem)) {
int aMaxCapacity = (int) ReflectionUtils.invokeNonBool(aItem, sMethodGetFlaskMaxCapacity, new Object[] {});
return aMaxCapacity;
}
}
return 0;
}
public static int getFlaskCapacity(ItemStack aStack) {
int capacity = 1000;
if (aStack.hasTagCompound()) {
NBTTagCompound nbt = aStack.getTagCompound();
if (nbt.hasKey("Capacity", 3))
capacity = nbt.getInteger("Capacity");
}
return Math.min(getMaxFlaskCapacity(aStack), capacity);
}
public static boolean setNewFlaskCapacity(ItemStack aStack, int aCapacity) {
if (aStack == null || aCapacity <= 0) {
return false;
}
aCapacity = Math.min(aCapacity, getMaxFlaskCapacity(aStack));
NBTTagCompound nbt = aStack.getTagCompound();
if (nbt == null) {
aStack.setTagCompound(nbt = new NBTTagCompound());
}
nbt.setInteger("Capacity", aCapacity);
return true;
}
}
|