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
|
package gtPlusPlus.xmod.gregtech.loaders;
import gregtech.api.enums.*;
import gregtech.api.interfaces.IOreRecipeRegistrator;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.core.util.math.MathUtils;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
public class RecipeGen_BlastSmelterGT_Ex implements IOreRecipeRegistrator {
private final OrePrefixes[] mSmeltingPrefixes = {
OrePrefixes.crushed,
OrePrefixes.crushedPurified,
OrePrefixes.crushedCentrifuged,
OrePrefixes.dust,
OrePrefixes.dustPure,
OrePrefixes.dustImpure,
OrePrefixes.dustRefined,
OrePrefixes.dustSmall,
OrePrefixes.dustTiny
};
public RecipeGen_BlastSmelterGT_Ex() {
for (OrePrefixes tPrefix : this.mSmeltingPrefixes) tPrefix.add(this);
}
public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack) {
switch (aPrefix) {
case dust:
ItemStack tDustStack;
if ((null != (tDustStack = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L))) && (!aMaterial.contains(SubTag.NO_SMELTING))) {
if (aMaterial.mBlastFurnaceRequired) {
addBlastRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), null, null, null, aMaterial.mBlastFurnaceTemp > 1750 ? GT_OreDictUnificator.get(OrePrefixes.ingotHot, aMaterial.mSmeltInto, tDustStack, 1L) : GT_Utility.copyAmount(1L, new Object[]{tDustStack}), null, (int) Math.max(aMaterial.getMass() / 40L, 1L) * aMaterial.mBlastFurnaceTemp, 120, aMaterial);
if (aMaterial.mBlastFurnaceTemp <= 1000) {
GT_ModHandler.addRCBlastFurnaceRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), GT_Utility.copyAmount(1L, new Object[]{tDustStack}), aMaterial.mBlastFurnaceTemp);
}
}
}
case dustSmall:
if (aMaterial.mBlastFurnaceRequired) {
addBlastRecipe(GT_Utility.copyAmount(4L, new Object[]{aStack}), null, null, null, aMaterial.mBlastFurnaceTemp > 1750 ? GT_OreDictUnificator.get(OrePrefixes.ingotHot, aMaterial.mSmeltInto, GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), 1L) : GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), null, (int) Math.max(aMaterial.getMass() / 40L, 1L) * aMaterial.mBlastFurnaceTemp, 120, aMaterial);
}
break;
case dustTiny:
if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMELTING)) {
if (aMaterial.mBlastFurnaceRequired) {
addBlastRecipe(GT_Utility.copyAmount(9L, new Object[]{aStack}), null, null, null, aMaterial.mBlastFurnaceTemp > 1750 ? GT_OreDictUnificator.get(OrePrefixes.ingotHot, aMaterial.mSmeltInto, GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), 1L) : GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L), null, (int) Math.max(aMaterial.getMass() / 40L, 1L) * aMaterial.mBlastFurnaceTemp, 120, aMaterial);
}
}
break;
default:
if (!aMaterial.contains(SubTag.NO_SMELTING)) {
if ((aMaterial.mBlastFurnaceRequired) || (aMaterial.mDirectSmelting.mBlastFurnaceRequired)) {
addBlastRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), null, null, null, aMaterial.mBlastFurnaceTemp > 1750 ? GT_OreDictUnificator.get(OrePrefixes.ingotHot, aMaterial, GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), 1L) : GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), null, (int) Math.max(aMaterial.getMass() / 4L, 1L) * aMaterial.mBlastFurnaceTemp, 120, aMaterial);
if (aMaterial.mBlastFurnaceTemp <= 1000)
GT_ModHandler.addRCBlastFurnaceRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), aMaterial.mBlastFurnaceTemp * 2);
}
}
break;
}
}
public boolean addBlastRecipe(ItemStack input1, ItemStack input2,
FluidStack fluid1, FluidStack fluid2, ItemStack output1,
ItemStack output2, int time, int euCost, Materials smeltInto) {
//Set up variables.
ItemStack[] components;
int count = 0;
if (smeltInto == Materials._NULL){
//If the material is null then we probably don't want to try.
return false;
}
if (input1 != null && input2 != null){
count = 2;
}
else if (input1 == null && input2 == null){
//If both inputs are null, then we don't want to try.
return false;
}
else if (input1 == null || input2 == null){
count = 1;
}
if (fluid1 != null || fluid2 != null){
//If it uses an input fluid, we cannot handle this. So let's not try. (Annealed copper for example)
return false;
}
//Set up input components.
ItemStack configCircuit = ItemUtils.getGregtechCircuit(count);
components = new ItemStack[]{configCircuit, input1, input2};
//Add Blast Smelter Recipe.
CORE.RA.addBlastSmelterRecipe(
components,
smeltInto.mSmeltInto.getMolten(144L),
100,
MathUtils.roundToClosestInt(time*0.8),
euCost); // EU Cost
return false;
}
}
|