Skip to content

Commit c4aab5b

Browse files
committed
fix negative eut
1 parent 067d32f commit c4aab5b

File tree

8 files changed

+58
-73
lines changed

8 files changed

+58
-73
lines changed

src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import gregtech.api.GTValues;
44
import gregtech.api.capability.GregtechDataCodes;
55
import gregtech.api.capability.GregtechTileCapabilities;
6+
import gregtech.api.capability.IEnergyContainer;
67
import gregtech.api.capability.IMultiblockController;
78
import gregtech.api.capability.IMultipleTankHandler;
89
import gregtech.api.capability.IWorkable;
@@ -101,17 +102,25 @@ public AbstractRecipeLogic(MetaTileEntity tileEntity, RecipeMap<?> recipeMap, bo
101102
/**
102103
* @return the energy container's energy input per second
103104
*/
104-
protected abstract long getEnergyInputPerSecond();
105+
protected long getEnergyInputPerSecond() {
106+
return getEnergyContainer().getInputPerSec();
107+
}
105108

106109
/**
107110
* @return the energy container's current stored energy
108111
*/
109-
protected abstract long getEnergyStored();
112+
protected long getEnergyStored() {
113+
return getEnergyContainer().getEnergyStored();
114+
}
110115

111116
/**
112117
* @return the energy container's maximum energy capacity
113118
*/
114-
protected abstract long getEnergyCapacity();
119+
protected long getEnergyCapacity() {
120+
return getEnergyContainer().getEnergyCapacity();
121+
}
122+
123+
protected abstract IEnergyContainer getEnergyContainer();
115124

116125
/**
117126
* Draw energy from the energy container
@@ -120,12 +129,22 @@ public AbstractRecipeLogic(MetaTileEntity tileEntity, RecipeMap<?> recipeMap, bo
120129
* @param simulate whether to simulate energy extraction or not
121130
* @return true if the energy can/was drained, otherwise false
122131
*/
123-
protected abstract boolean drawEnergy(long recipeEUt, boolean simulate);
132+
protected boolean drawEnergy(long recipeEUt, boolean simulate) {
133+
// this should be the ONLY time eut is negative!
134+
if (consumesEnergy()) recipeEUt = -recipeEUt;
135+
long resultEnergy = getEnergyStored() + recipeEUt;
136+
if (resultEnergy >= 0L && resultEnergy <= getEnergyCapacity()) {
137+
if (!simulate) getEnergyContainer().changeEnergy(recipeEUt);
138+
return true;
139+
} else return false;
140+
}
124141

125142
/**
126143
* @return the maximum voltage the machine can use/handle for recipe searching
127144
*/
128-
public abstract long getMaxVoltage();
145+
public long getMaxVoltage() {
146+
return Math.max(getEnergyContainer().getInputVoltage(), getEnergyContainer().getOutputVoltage());
147+
}
129148

130149
/**
131150
*
@@ -941,7 +960,7 @@ public String[] getAvailableOverclockingTiers() {
941960
protected void setupRecipe(@NotNull Recipe recipe) {
942961
this.progressTime = 1;
943962
setMaxProgress(ocResult.duration());
944-
this.recipeEUt = consumesEnergy() ? ocResult.eut() : -ocResult.eut();
963+
this.recipeEUt = ocResult.eut();
945964

946965
int recipeTier = GTUtility.getTierByVoltage(recipe.getEUt());
947966
int machineTier = getOverclockForTier(getMaximumOverclockVoltage());
@@ -1226,7 +1245,7 @@ public void deserializeNBT(@NotNull NBTTagCompound compound) {
12261245
if (progressTime > 0) {
12271246
this.isActive = true;
12281247
this.maxProgressTime = compound.getInteger("MaxProgress");
1229-
this.recipeEUt = compound.getLong("RecipeEUt");
1248+
this.recipeEUt = Math.abs(compound.getLong("RecipeEUt"));
12301249
NBTTagList itemOutputsList = compound.getTagList("ItemOutputs", Constants.NBT.TAG_COMPOUND);
12311250
this.itemOutputs = new ArrayList<>(itemOutputsList.tagCount());
12321251
for (int i = 0; i < itemOutputsList.tagCount(); i++) {

src/main/java/gregtech/api/capability/impl/BoilerRecipeLogic.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package gregtech.api.capability.impl;
22

33
import gregtech.api.GTValues;
4+
import gregtech.api.capability.IEnergyContainer;
45
import gregtech.api.capability.IMultiblockController;
56
import gregtech.api.capability.IMultipleTankHandler;
67
import gregtech.api.recipes.Recipe;
@@ -330,6 +331,12 @@ public long getMaxVoltage() {
330331
return 0;
331332
}
332333

334+
@Override
335+
protected IEnergyContainer getEnergyContainer() {
336+
GTLog.logger.error("Large Boiler called getEnergyContainer(), this should not be possible!");
337+
return IEnergyContainer.DEFAULT;
338+
}
339+
333340
/**
334341
* @param fluidHandler the handler to drain from
335342
* @param amount the amount to drain

src/main/java/gregtech/api/capability/impl/MultiblockFuelRecipeLogic.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -95,19 +95,9 @@ protected long boostProduction(long production) {
9595
}
9696

9797
@Override
98-
protected boolean drawEnergy(long recipeEUt, boolean simulate) {
99-
long euToDraw = boostProduction(recipeEUt);
100-
long resultEnergy = getEnergyStored() - euToDraw;
101-
if (resultEnergy >= 0L && resultEnergy <= getEnergyCapacity()) {
102-
if (!simulate) getEnergyContainer().changeEnergy(-euToDraw);
103-
return true;
104-
}
105-
return false;
106-
}
107-
108-
@Override
109-
public long getInfoProviderEUt() {
110-
return boostProduction(super.getInfoProviderEUt());
98+
protected void setupRecipe(@NotNull Recipe recipe) {
99+
super.setupRecipe(recipe);
100+
this.recipeEUt = boostProduction(this.recipeEUt);
111101
}
112102

113103
@Override

src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -384,35 +384,11 @@ protected void performMufflerOperations() {
384384
}
385385
}
386386

387-
@Override
388-
protected long getEnergyInputPerSecond() {
389-
return getEnergyContainer().getInputPerSec();
390-
}
391-
392-
@Override
393-
protected long getEnergyStored() {
394-
return getEnergyContainer().getEnergyStored();
395-
}
396-
397-
@Override
398-
protected long getEnergyCapacity() {
399-
return getEnergyContainer().getEnergyCapacity();
400-
}
401-
402-
@Override
403-
protected boolean drawEnergy(long recipeEUt, boolean simulate) {
404-
long resultEnergy = getEnergyStored() - recipeEUt;
405-
if (resultEnergy >= 0L && resultEnergy <= getEnergyCapacity()) {
406-
if (!simulate) getEnergyContainer().changeEnergy(-recipeEUt);
407-
return true;
408-
} else return false;
409-
}
410-
411387
@Override
412388
public long getMaxVoltage() {
413389
IEnergyContainer energyContainer = getEnergyContainer();
414390
if (!consumesEnergy()) {
415-
// Generators
391+
// Generator Multiblocks
416392
long voltage = energyContainer.getOutputVoltage();
417393
long amperage = energyContainer.getOutputAmperage();
418394
if (energyContainer instanceof EnergyContainerList && amperage == 1) {
@@ -424,7 +400,7 @@ public long getMaxVoltage() {
424400
}
425401
return voltage;
426402
} else {
427-
// Machines
403+
// Machine Multiblocks
428404
if (energyContainer instanceof EnergyContainerList energyList) {
429405
long highestVoltage = energyList.getHighestInputVoltage();
430406
if (energyList.getNumHighestInputContainers() > 1) {

src/main/java/gregtech/api/capability/impl/PrimitiveRecipeLogic.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package gregtech.api.capability.impl;
22

33
import gregtech.api.GTValues;
4+
import gregtech.api.capability.IEnergyContainer;
45
import gregtech.api.metatileentity.multiblock.RecipeMapPrimitiveMultiblockController;
56
import gregtech.api.recipes.RecipeMap;
67
import gregtech.api.recipes.logic.OCParams;
@@ -33,6 +34,11 @@ protected long getEnergyCapacity() {
3334
return Integer.MAX_VALUE;
3435
}
3536

37+
@Override
38+
protected IEnergyContainer getEnergyContainer() {
39+
return IEnergyContainer.DEFAULT;
40+
}
41+
3642
@Override
3743
protected boolean drawEnergy(long recipeEUt, boolean simulate) {
3844
return true; // spoof energy being drawn

src/main/java/gregtech/api/capability/impl/RecipeLogicEnergy.java

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,8 @@ public RecipeLogicEnergy(MetaTileEntity tileEntity, RecipeMap<?> recipeMap,
2525
}
2626

2727
@Override
28-
protected long getEnergyInputPerSecond() {
29-
return energyContainer.get().getInputPerSec();
30-
}
31-
32-
@Override
33-
protected long getEnergyStored() {
34-
return energyContainer.get().getEnergyStored();
35-
}
36-
37-
@Override
38-
protected long getEnergyCapacity() {
39-
return energyContainer.get().getEnergyCapacity();
40-
}
41-
42-
@Override
43-
protected boolean drawEnergy(long recipeEUt, boolean simulate) {
44-
long resultEnergy = getEnergyStored() - recipeEUt;
45-
if (resultEnergy >= 0L && resultEnergy <= getEnergyCapacity()) {
46-
if (!simulate) energyContainer.get().changeEnergy(-recipeEUt);
47-
return true;
48-
}
49-
return false;
50-
}
51-
52-
@Override
53-
public long getMaxVoltage() {
54-
return Math.max(energyContainer.get().getInputVoltage(), energyContainer.get().getOutputVoltage());
28+
protected IEnergyContainer getEnergyContainer() {
29+
return energyContainer.get();
5530
}
5631

5732
@Override

src/main/java/gregtech/api/capability/impl/RecipeLogicSteam.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import gregtech.api.GTValues;
44
import gregtech.api.capability.GregtechDataCodes;
5+
import gregtech.api.capability.IEnergyContainer;
56
import gregtech.api.capability.IVentable;
67
import gregtech.api.damagesources.DamageSources;
78
import gregtech.api.metatileentity.MetaTileEntity;
@@ -215,6 +216,11 @@ protected long getEnergyCapacity() {
215216
return (long) Math.floor(steamFluidTank.getCapacity() * conversionRate);
216217
}
217218

219+
@Override
220+
protected IEnergyContainer getEnergyContainer() {
221+
return IEnergyContainer.DEFAULT;
222+
}
223+
218224
@Override
219225
protected boolean drawEnergy(long recipeEUt, boolean simulate) {
220226
int resultDraw = GTUtility.safeCastLongToInt((long) Math.ceil(recipeEUt / conversionRate));

src/main/java/gregtech/api/capability/impl/SteamMultiblockRecipeLogic.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package gregtech.api.capability.impl;
22

33
import gregtech.api.GTValues;
4+
import gregtech.api.capability.IEnergyContainer;
45
import gregtech.api.capability.IMultipleTankHandler;
56
import gregtech.api.metatileentity.multiblock.RecipeMapSteamMultiblockController;
67
import gregtech.api.recipes.Recipe;
@@ -47,6 +48,11 @@ public IFluidTank getSteamFluidTankCombined() {
4748
return steamFluidTankCombined;
4849
}
4950

51+
@Override
52+
protected IEnergyContainer getEnergyContainer() {
53+
return IEnergyContainer.DEFAULT;
54+
}
55+
5056
@Override
5157
protected IItemHandlerModifiable getInputInventory() {
5258
RecipeMapSteamMultiblockController controller = (RecipeMapSteamMultiblockController) metaTileEntity;

0 commit comments

Comments
 (0)