Skip to content

Commit b6cad8c

Browse files
committed
port MetaOreDictItem
1 parent c1e9780 commit b6cad8c

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package gregtech.api.items.metaitem;
2+
3+
import com.google.common.base.CaseFormat;
4+
import com.google.common.collect.ImmutableList;
5+
import gnu.trove.map.hash.TIntObjectHashMap;
6+
import gregtech.api.unification.OreDictUnifier;
7+
import gregtech.api.unification.material.info.MaterialIconSet;
8+
import gregtech.api.unification.material.info.MaterialIconType;
9+
import gregtech.api.unification.ore.OrePrefix;
10+
import net.minecraft.client.renderer.block.model.ModelBakery;
11+
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
12+
import net.minecraft.item.ItemStack;
13+
import net.minecraft.util.ResourceLocation;
14+
import net.minecraftforge.fml.relauncher.Side;
15+
import net.minecraftforge.fml.relauncher.SideOnly;
16+
17+
import java.util.HashMap;
18+
import java.util.List;
19+
import java.util.Map;
20+
21+
public class MetaOreDictItem extends StandardMetaItem {
22+
23+
private static final Map<Short, OreDictValueItem> ITEMS = new HashMap<>();
24+
private static final List<MaterialIconType> DISALLOWED_TYPES = ImmutableList.of(
25+
MaterialIconType.block, MaterialIconType.foilBlock, MaterialIconType.wire,
26+
MaterialIconType.ore, MaterialIconType.frameGt, MaterialIconType.pipeHuge,
27+
MaterialIconType.pipeLarge, MaterialIconType.pipeSide, MaterialIconType.pipeSmall,
28+
MaterialIconType.pipeMedium, MaterialIconType.pipeTiny);
29+
30+
public MetaOreDictItem(short metaItemOffset) {
31+
super(metaItemOffset);
32+
}
33+
34+
@Override
35+
public void registerSubItems() {
36+
for (OreDictValueItem item : ITEMS.values()) {
37+
addItem(item.id, item.getName());
38+
OreDictUnifier.registerOre(new ItemStack(this, 1, item.id), item.getOre());
39+
}
40+
}
41+
42+
@Override
43+
@SideOnly(Side.CLIENT)
44+
protected int getColorForItemStack(ItemStack stack, int tintIndex) {
45+
if (tintIndex == 0) {
46+
OreDictValueItem item = ITEMS.get((short) stack.getItemDamage());
47+
return item == null ? 0xFFFFFF : item.materialRGB;
48+
}
49+
return super.getColorForItemStack(stack, tintIndex);
50+
}
51+
52+
@Override
53+
@SideOnly(Side.CLIENT)
54+
public void registerModels() {
55+
super.registerModels();
56+
TIntObjectHashMap<ModelResourceLocation> alreadyRegistered = new TIntObjectHashMap<>();
57+
for (Map.Entry<Short, OreDictValueItem> metaItem : ITEMS.entrySet()) {
58+
OrePrefix prefix = metaItem.getValue().orePrefix;
59+
MaterialIconSet materialIconSet = metaItem.getValue().materialIconSet;
60+
if (prefix.materialIconType == null || DISALLOWED_TYPES.contains(prefix.materialIconType))
61+
continue;
62+
int registrationKey = prefix.id * 1000 + materialIconSet.ordinal();
63+
if (!alreadyRegistered.containsKey(registrationKey)) {
64+
prefix.materialIconType.getItemModelPath(materialIconSet);
65+
ResourceLocation resourceLocation = prefix.materialIconType.getItemModelPath(materialIconSet);
66+
ModelBakery.registerItemVariants(this, resourceLocation);
67+
alreadyRegistered.put(registrationKey, new ModelResourceLocation(resourceLocation, "inventory"));
68+
}
69+
ModelResourceLocation resourceLocation = alreadyRegistered.get(registrationKey);
70+
metaItemsModels.put(metaItem.getKey(), resourceLocation);
71+
}
72+
}
73+
74+
public static class OreDictValueItem {
75+
76+
private final String materialName;
77+
private final int materialRGB;
78+
private final MaterialIconSet materialIconSet;
79+
private final short id;
80+
private final OrePrefix orePrefix;
81+
82+
public OreDictValueItem(short id, String materialName, int materialRGB, MaterialIconSet materialIconSet, OrePrefix orePrefix) {
83+
this.id = id;
84+
this.materialName = materialName;
85+
this.materialRGB = materialRGB;
86+
this.materialIconSet = materialIconSet;
87+
this.orePrefix = orePrefix;
88+
ITEMS.put(id, this);
89+
}
90+
91+
public String getOre() {
92+
return orePrefix.name() + CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, materialName);
93+
}
94+
95+
public ItemStack getItemStack(int amount) {
96+
ItemStack stack = OreDictUnifier.get(getOre());
97+
stack.setCount(amount);
98+
return stack;
99+
}
100+
101+
public ItemStack getItemStack() {
102+
return getItemStack(1);
103+
}
104+
105+
public String getName() {
106+
return materialName + '_' + CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, orePrefix.name());
107+
}
108+
}
109+
}

0 commit comments

Comments
 (0)