aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_Ex.java
blob: 31823932ee700e5de48b709b369f05566a6569c6 (plain)
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;
	}
	
}