/
FuelRecipeMaker.java
77 lines (66 loc) · 2.23 KB
/
FuelRecipeMaker.java
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
package mezz.jei.plugins.vanilla.furnace;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraftforge.oredict.OreDictionary;
import mezz.jei.api.IGuiHelper;
import mezz.jei.api.IItemRegistry;
import mezz.jei.util.StackUtil;
public class FuelRecipeMaker {
@Nonnull
public static List<FuelRecipe> getFuelRecipes(IItemRegistry itemRegistry, IGuiHelper guiHelper) {
List<ItemStack> fuelStacks = itemRegistry.getFuels();
Set<String> oreDictNames = new HashSet<>();
List<FuelRecipe> fuelRecipes = new ArrayList<>(fuelStacks.size());
for (ItemStack fuelStack : fuelStacks) {
if (fuelStack == null) {
continue;
}
int[] oreIDs = OreDictionary.getOreIDs(fuelStack);
if (oreIDs.length > 0) {
for (int oreID : oreIDs) {
String name = OreDictionary.getOreName(oreID);
if (oreDictNames.contains(name)) {
continue;
}
oreDictNames.add(name);
List<ItemStack> oreDictFuels = OreDictionary.getOres(name);
Collection<ItemStack> oreDictFuelsSet = StackUtil.getAllSubtypes(oreDictFuels);
removeNoBurnTime(oreDictFuelsSet);
if (oreDictFuels.isEmpty()) {
continue;
}
int burnTime = getBurnTime(oreDictFuels.get(0));
fuelRecipes.add(new FuelRecipe(guiHelper, oreDictFuelsSet, burnTime));
}
} else {
List<ItemStack> fuels = StackUtil.getSubtypes(fuelStack);
removeNoBurnTime(fuels);
if (fuels.isEmpty()) {
continue;
}
int burnTime = getBurnTime(fuels.get(0));
fuelRecipes.add(new FuelRecipe(guiHelper, fuels, burnTime));
}
}
return fuelRecipes;
}
private static void removeNoBurnTime(Collection<ItemStack> itemStacks) {
Iterator<ItemStack> iterator = itemStacks.iterator();
while (iterator.hasNext()) {
ItemStack itemStack = iterator.next();
if (getBurnTime(itemStack) == 0) {
iterator.remove();
}
}
}
private static int getBurnTime(ItemStack itemStack) {
return TileEntityFurnace.getItemBurnTime(itemStack);
}
}