aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/VolumetricFlaskHelper.java
blob: 76bb378377fb1b129c54d78869cc4d8bc0c3f514 (plain)
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;
	}
	
}