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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
package gregtech.common.items;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Materials;
import gregtech.api.items.GT_Generic_Item;
import gregtech.api.util.GT_Utility;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Stream;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.oredict.OreDictionary;
@SuppressWarnings({"rawtypes", "unchecked"})
public class GT_FluidDisplayItem extends GT_Generic_Item {
private static final Map<Fluid, String> sFluidTooltips = new HashMap<>();
public GT_FluidDisplayItem() {
super("GregTech_FluidDisplay", "Fluid Display", null);
ItemList.Display_Fluid.set(this);
}
@Override
protected void addAdditionalToolTips(List<String> aList, ItemStack aStack, EntityPlayer aPlayer) {
if (FluidRegistry.getFluid(aStack.getItemDamage()) != null) {
String tChemicalFormula =
getChemicalFormula(new FluidStack(FluidRegistry.getFluid(aStack.getItemDamage()), 1));
if (!tChemicalFormula.isEmpty())
aList.add(EnumChatFormatting.YELLOW + tChemicalFormula + EnumChatFormatting.RESET);
}
NBTTagCompound aNBT = aStack.getTagCompound();
if (GT_Values.D1 || Minecraft.getMinecraft().gameSettings.advancedItemTooltips) {
Fluid tFluid = FluidRegistry.getFluid(aStack.getItemDamage());
if (tFluid != null) {
aList.add("Registry: " + tFluid.getName());
}
}
if (aNBT != null) {
long tToolTipAmount = aNBT.getLong("mFluidDisplayAmount");
if (tToolTipAmount > 0L) {
aList.add(EnumChatFormatting.BLUE + "Amount: " + GT_Utility.formatNumbers(tToolTipAmount) + " L"
+ EnumChatFormatting.GRAY);
}
aList.add(EnumChatFormatting.RED + "Temperature: "
+ GT_Utility.formatNumbers(aNBT.getLong("mFluidDisplayHeat")) + " K" + EnumChatFormatting.GRAY);
aList.add(EnumChatFormatting.GREEN
+ String.format(transItem("018", "State: %s"), aNBT.getBoolean("mFluidState") ? "Gas" : "Liquid")
+ EnumChatFormatting.GRAY);
}
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister aIconRegister) {}
@Override
public IIcon getIconFromDamage(int aMetaData) {
return Stream.of(FluidRegistry.getFluid(aMetaData), FluidRegistry.WATER)
.filter(Objects::nonNull)
.map(Fluid::getStillIcon)
.filter(Objects::nonNull)
.findFirst()
.orElseThrow(IllegalStateException::new);
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack aStack, int aRenderPass) {
Fluid tFluid = FluidRegistry.getFluid(aStack.getItemDamage());
return tFluid == null ? 16777215 : tFluid.getColor();
}
@Override
public int getSpriteNumber() {
return 0;
}
@Override
public String getUnlocalizedName(ItemStack aStack) {
if (aStack != null) {
return GT_Utility.getFluidName(FluidRegistry.getFluid(aStack.getItemDamage()), false);
}
return "";
}
@Override
public String getItemStackDisplayName(ItemStack aStack) {
if (aStack != null) {
return GT_Utility.getFluidName(FluidRegistry.getFluid(aStack.getItemDamage()), true);
}
return "";
}
@SideOnly(Side.CLIENT)
public String getChemicalFormula(FluidStack aRealFluid) {
return sFluidTooltips.computeIfAbsent(aRealFluid.getFluid(), fluid -> {
for (ItemStack tContainer : GT_Utility.getContainersFromFluid(aRealFluid)) {
if (isCell(tContainer)) {
Materials tMaterial = getMaterialFromCell(tContainer);
if (!tMaterial.equals(Materials._NULL)) {
if (tMaterial.mChemicalFormula.equals("?")) {
return "";
} else {
return tMaterial.mChemicalFormula;
}
} else {
// For GT++ Fluid Display
// GT++ didn't register a Material in GT, so I have too find the Chemical Formula in its cell's
// tooltip
List tTooltip = tContainer.getTooltip(null, true);
for (Object tInfo : tTooltip) {
if (!((String) tInfo).contains(" ")
&& !((String) tInfo).contains(":")
&& tTooltip.indexOf(tInfo) != 0) {
return (String) tInfo;
}
}
}
}
}
return "";
});
}
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item aItem, CreativeTabs aTab, List aList) {
if (GT_Values.D1) {
int i = 0;
for (int j = FluidRegistry.getMaxID(); i < j; i++) {
ItemStack tStack = GT_Utility.getFluidDisplayStack(FluidRegistry.getFluid(i));
if (tStack != null) {
aList.add(tStack);
}
}
}
}
public static boolean isCell(ItemStack tItemStack) {
for (int tOreDict : OreDictionary.getOreIDs(tItemStack)) {
String tOreDictName = OreDictionary.getOreName(tOreDict);
if (tOreDictName.startsWith("cell")) return true;
}
return false;
}
public static Materials getMaterialFromCell(ItemStack tItemStack) {
for (int tOreDict : OreDictionary.getOreIDs(tItemStack)) {
String tOreDictName = OreDictionary.getOreName(tOreDict);
if (tOreDictName.startsWith("cell")) {
return Materials.getRealMaterial(
tOreDictName.replace("cell", "").replace("Molten", "").replace("Plasma", ""));
}
}
return Materials._NULL;
}
}
|