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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
package tectech.thing.metaTileEntity.multi.godforge;
import static gregtech.api.util.GTUtility.formatNumbers;
import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap;
import static gregtech.common.misc.WirelessNetworkManager.getUserEU;
import static net.minecraft.util.EnumChatFormatting.GREEN;
import static net.minecraft.util.EnumChatFormatting.RED;
import static net.minecraft.util.EnumChatFormatting.RESET;
import static net.minecraft.util.EnumChatFormatting.YELLOW;
import java.math.BigInteger;
import java.util.ArrayList;
import net.minecraft.util.EnumChatFormatting;
import org.jetbrains.annotations.NotNull;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.logic.ProcessingLogic;
import gregtech.api.recipe.RecipeMap;
import gregtech.api.recipe.check.CheckRecipeResult;
import gregtech.api.recipe.check.CheckRecipeResultRegistry;
import gregtech.api.util.GTRecipe;
import gregtech.api.util.MultiblockTooltipBuilder;
import gregtech.api.util.OverclockCalculator;
import tectech.recipe.TecTechRecipeMaps;
public class MTEMoltenModule extends MTEBaseModule {
private long EUt = 0;
private int currentParallel = 0;
public MTEMoltenModule(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional);
}
public MTEMoltenModule(String aName) {
super(aName);
}
@Override
public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new MTEMoltenModule(mName);
}
long wirelessEUt = 0;
@Override
protected ProcessingLogic createProcessingLogic() {
return new ProcessingLogic() {
@NotNull
@Override
protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) {
if (recipe.mSpecialValue > getHeat()) {
return CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue);
}
if (recipe.mEUt > getProcessingVoltage()) {
return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt);
}
wirelessEUt = (long) recipe.mEUt * getMaxParallel();
if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) {
return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration);
}
return CheckRecipeResultRegistry.SUCCESSFUL;
}
@NotNull
@Override
protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) {
return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage())
.setRecipeHeat(recipe.mSpecialValue)
.setHeatOC(true)
.setHeatDiscount(true)
.setMachineHeat(Math.max(recipe.mSpecialValue, getHeatForOC()))
.setHeatDiscountMultiplier(getHeatEnergyDiscount())
.setDurationDecreasePerOC(getOverclockTimeFactor());
}
@NotNull
@Override
protected CheckRecipeResult onRecipeStart(@NotNull GTRecipe recipe) {
if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) {
return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration);
}
addToPowerTally(
BigInteger.valueOf(calculatedEut)
.multiply(BigInteger.valueOf(duration)));
addToRecipeTally(calculatedParallels);
currentParallel = calculatedParallels;
EUt = calculatedEut;
setCalculatedEut(0);
return CheckRecipeResultRegistry.SUCCESSFUL;
}
};
}
@Override
protected void setProcessingLogicPower(ProcessingLogic logic) {
logic.setAvailableVoltage(Long.MAX_VALUE);
logic.setAvailableAmperage(Integer.MAX_VALUE);
logic.setAmperageOC(false);
logic.setMaxParallel(getMaxParallel());
logic.setSpeedBonus(getSpeedBonus());
logic.setEuModifier(getEnergyDiscount());
}
@Override
public RecipeMap<?> getRecipeMap() {
return TecTechRecipeMaps.godforgeMoltenRecipes;
}
@Override
public String[] getInfoData() {
ArrayList<String> str = new ArrayList<>();
str.add(
"Progress: " + GREEN
+ formatNumbers(mProgresstime / 20)
+ RESET
+ " s / "
+ YELLOW
+ formatNumbers(mMaxProgresstime / 20)
+ RESET
+ " s");
str.add(
"Currently using: " + RED
+ (getBaseMetaTileEntity().isActive() ? formatNumbers(EUt) : "0")
+ RESET
+ " EU/t");
str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel()));
str.add(
YELLOW + "Current Parallel: "
+ RESET
+ (getBaseMetaTileEntity().isActive() ? formatNumbers(currentParallel) : "0"));
str.add(YELLOW + "Heat Capacity: " + RESET + formatNumbers(getHeat()));
str.add(YELLOW + "Effective Heat Capacity: " + RESET + formatNumbers(getHeatForOC()));
str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus()));
str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount()));
str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor()));
return str.toArray(new String[0]);
}
@Override
public MultiblockTooltipBuilder createTooltip() {
final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder();
tt.addMachineType("Blast Smelter")
.addInfo("This is a module of the Godforge.")
.addInfo("Must be part of a Godforge to function.")
.addInfo("Used for high temperature material liquefaction.")
.addSeparator(EnumChatFormatting.AQUA, 74)
.addInfo("The second module of the Godforge, this module melts materials directly into")
.addInfo("their liquid form. If an output material does not have a liquid form, it will be output")
.addInfo("as a regular solid instead.")
.addInfo("This module is specialized towards parallel processing.")
.beginStructureBlock(7, 7, 13, false)
.addStructureInfo(
EnumChatFormatting.GOLD + "20"
+ EnumChatFormatting.GRAY
+ " Singularity Reinforced Stellar Shielding Casing")
.addStructureInfo(
EnumChatFormatting.GOLD + "20"
+ EnumChatFormatting.GRAY
+ " Boundless Gravitationally Severed Structure Casing")
.addStructureInfo(
EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit")
.addStructureInfo(
EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing")
.addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing")
.toolTipFinisher(EnumChatFormatting.AQUA, 74);
return tt;
}
}
|