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
|
package gregtech.api.util;
import static gtPlusPlus.api.recipe.GTPPRecipeMaps.semiFluidFuels;
import java.util.HashMap;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack;
import gregtech.api.recipe.RecipeMaps;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.util.minecraft.FluidUtils;
public class SemiFluidFuelHandler {
public static boolean addSemiFluidFuel(ItemStack aFuelItem, int aFuelValue) {
FluidStack p = FluidContainerRegistry.getFluidForFilledItem(aFuelItem);
if (p != null && aFuelValue > 0) {
return addSemiFluidFuel(p, aFuelValue);
} else {
Logger.INFO("Fuel value for " + aFuelItem.getDisplayName() + " is <= 0, ignoring.");
}
return false;
}
public static boolean addSemiFluidFuel(FluidStack aFuel, int aFuelValue) {
FluidStack p = aFuel;
if (p != null && aFuelValue > 0) {
GT_Recipe aRecipe = new GT_Recipe(
true,
new ItemStack[] {},
new ItemStack[] {},
null,
new int[] {},
new FluidStack[] { p },
null,
0,
0,
aFuelValue);
if (aRecipe.mSpecialValue > 0) {
Logger.INFO(
"Added " + aRecipe.mFluidInputs[0].getLocalizedName()
+ " to the Semi-Fluid Generator fuel map. Fuel Produces "
+ (aRecipe.mSpecialValue * 1000)
+ "EU per 1000L.");
semiFluidFuels.add(aRecipe);
return true;
}
} else {
Logger.INFO("Fuel value for " + p != null ? p.getLocalizedName() : "NULL Fluid" + " is <= 0, ignoring.");
}
return false;
}
public static boolean generateFuels() {
final FluidStack aCreosote = FluidUtils.getFluidStack("creosote", 1000);
final FluidStack aHeavyFuel = FluidUtils.getFluidStack("liquid_heavy_fuel", 1000);
final FluidStack aHeavyOil = FluidUtils.getFluidStack("liquid_heavy_oil", 1000);
final HashMap<Integer, Pair<FluidStack, Integer>> aFoundFluidsFromItems = new HashMap<>();
// Find Fluids From items
for (final GT_Recipe r : RecipeMaps.denseLiquidFuels.getAllRecipes()) {
GT_Recipe g = r.copy();
if (g != null && g.mEnabled && g.mInputs.length > 0 && g.mInputs[0] != null) {
for (ItemStack i : g.mInputs) {
FluidStack f = FluidContainerRegistry.getFluidForFilledItem(i);
if (f != null) {
Pair<FluidStack, Integer> aData = new Pair<>(f, g.mSpecialValue);
aFoundFluidsFromItems.put(aData.hashCode(), aData);
}
}
} else if (g != null && g.mEnabled && g.mFluidInputs.length > 0 && g.mFluidInputs[0] != null) {
boolean aContainsCreosote = false;
for (FluidStack f : g.mFluidInputs) {
if (f.isFluidEqual(aCreosote)) {
aContainsCreosote = true;
}
}
g.mSpecialValue *= aContainsCreosote ? 6 : 3;
Logger.INFO(
"Added " + g.mFluidInputs[0].getLocalizedName()
+ " to the Semi-Fluid Generator fuel map. Fuel Produces "
+ g.mSpecialValue
+ "EU per 1000L.");
semiFluidFuels.add(g);
}
}
for (Pair<FluidStack, Integer> p : aFoundFluidsFromItems.values()) {
if (p != null) {
int aFuelValue = p.getValue();
if (p.getKey()
.isFluidEqual(aCreosote)) {
aFuelValue *= 6;
} else if (p.getKey()
.isFluidEqual(aHeavyFuel)
|| p.getKey()
.isFluidEqual(aHeavyOil)) {
aFuelValue *= 1.5;
} else {
aFuelValue *= 2;
}
if (aFuelValue <= (128 * 3)) {
GT_Recipe aRecipe = new GT_Recipe(
true,
new ItemStack[] {},
new ItemStack[] {},
null,
new int[] {},
new FluidStack[] { p.getKey() },
null,
0,
0,
aFuelValue);
if (aRecipe.mSpecialValue > 0) {
Logger.INFO(
"Added " + aRecipe.mFluidInputs[0].getLocalizedName()
+ " to the Semi-Fluid Generator fuel map. Fuel Produces "
+ (aRecipe.mSpecialValue * 1000)
+ "EU per 1000L.");
semiFluidFuels.add(aRecipe);
}
} else {
Logger.INFO(
"Boosted Fuel value for " + p.getKey()
.getLocalizedName() + " exceeds 512k, ignoring.");
}
}
}
return !semiFluidFuels.getAllRecipes()
.isEmpty();
}
}
|