Skip to content

Commit a82e046

Browse files
committed
Cache various values that are based on number of installed upgrades
1 parent cc383ac commit a82e046

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

src/main/java/mekanism/common/tile/machine/TileEntityElectricPump.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public class TileEntityElectricPump extends TileEntityMekanism implements IConfi
8383
*/
8484
private static final int BASE_TICKS_REQUIRED = 19;
8585
public static final int MAX_FLUID = 10_000;
86+
private static final int BASE_OUTPUT_RATE = 256;
8687

8788
/**
8889
* This pump's tank
@@ -101,6 +102,7 @@ public class TileEntityElectricPump extends TileEntityMekanism implements IConfi
101102
*/
102103
public int operatingTicks;
103104
private boolean usedEnergy = false;
105+
private int outputRate = BASE_OUTPUT_RATE;
104106
/**
105107
* The nodes that have full sources near them or in them
106108
*/
@@ -179,7 +181,7 @@ protected boolean onUpdateServer() {
179181
if (fluidHandlerAbove.isEmpty()) {
180182
fluidHandlerAbove = List.of(Capabilities.FLUID.createCache((ServerLevel) level, worldPosition.above(), Direction.DOWN));
181183
}
182-
FluidUtils.emit(fluidHandlerAbove, fluidTank, 256 * (1 + upgradeComponent.getUpgrades(Upgrade.SPEED)));
184+
FluidUtils.emit(fluidHandlerAbove, fluidTank, outputRate);
183185
}
184186
return sendUpdatePacket;
185187
}
@@ -369,6 +371,7 @@ public void recalculateUpgrades(Upgrade upgrade) {
369371
super.recalculateUpgrades(upgrade);
370372
if (upgrade == Upgrade.SPEED) {
371373
ticksRequired = MekanismUtils.getTicks(this, BASE_TICKS_REQUIRED);
374+
outputRate = BASE_OUTPUT_RATE * (1 + upgradeComponent.getUpgrades(Upgrade.SPEED));
372375
}
373376
}
374377

src/main/java/mekanism/common/tile/machine/TileEntityElectrolyticSeparator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public class TileEntityElectrolyticSeparator extends TileEntityRecipeMachine<Ele
9696
*/
9797
public static final long MAX_GAS = 2_400;
9898
public static final int MAX_FLUID = 24_000;
99+
private static final int BASE_DUMP_RATE = 8;
99100
private static final BiFunction<FloatingLong, TileEntityElectrolyticSeparator, FloatingLong> BASE_ENERGY_CALCULATOR =
100101
(base, tile) -> base.multiply(tile.getRecipeEnergyMultiplier());
101102

@@ -124,6 +125,7 @@ public class TileEntityElectrolyticSeparator extends TileEntityRecipeMachine<Ele
124125
private FloatingLong clientEnergyUsed = FloatingLong.ZERO;
125126
private FloatingLong recipeEnergyMultiplier = FloatingLong.ONE;
126127
private int baselineMaxOperations = 1;
128+
private long dumpRate = BASE_DUMP_RATE;
127129

128130
private final IOutputHandler<@NotNull ElectrolysisRecipeOutput> outputHandler;
129131
private final IInputHandler<@NotNull FluidStack> inputHandler;
@@ -246,7 +248,7 @@ protected boolean onUpdateServer() {
246248
private void handleTank(IGasTank tank, GasMode mode) {
247249
if (!tank.isEmpty()) {
248250
if (mode == GasMode.DUMPING) {
249-
tank.shrinkStack(8 * (long) Math.pow(2, upgradeComponent.getUpgrades(Upgrade.SPEED)), Action.EXECUTE);
251+
tank.shrinkStack(dumpRate, Action.EXECUTE);
250252
} else if (mode == GasMode.DUMPING_EXCESS) {
251253
long target = getDumpingExcessTarget(tank);
252254
long stored = tank.getStored();
@@ -319,7 +321,9 @@ public CachedRecipe<ElectrolysisRecipe> createNewCachedRecipe(@NotNull Electroly
319321
public void recalculateUpgrades(Upgrade upgrade) {
320322
super.recalculateUpgrades(upgrade);
321323
if (upgrade == Upgrade.SPEED) {
322-
baselineMaxOperations = (int) Math.pow(2, upgradeComponent.getUpgrades(Upgrade.SPEED));
324+
double speed = Math.pow(2, upgradeComponent.getUpgrades(Upgrade.SPEED));
325+
baselineMaxOperations = (int) speed;
326+
dumpRate = (long) (BASE_DUMP_RATE * speed);
323327
}
324328
}
325329

src/main/java/mekanism/common/tile/qio/TileEntityQIOFilterHandler.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public class TileEntityQIOFilterHandler extends TileEntityQIOComponent implement
1717

1818
@SuppressWarnings({"unchecked", "rawtypes"})
1919
private final SortableFilterManager<QIOFilter<?>> filterManager = new SortableFilterManager<QIOFilter<?>>((Class) QIOFilter.class, this::markForSave);
20+
private int maxTransitCount = 64;
21+
private int maxTransitTypes = 1;
2022

2123
public TileEntityQIOFilterHandler(IBlockProvider blockProvider, BlockPos pos, BlockState state) {
2224
super(blockProvider, pos, state);
@@ -27,6 +29,18 @@ public SortableFilterManager<QIOFilter<?>> getFilterManager() {
2729
return filterManager;
2830
}
2931

32+
@Override
33+
public void recalculateUpgrades(Upgrade upgrade) {
34+
super.recalculateUpgrades(upgrade);
35+
if (upgrade == Upgrade.SPEED) {
36+
int speedUpgrades = upgradeComponent.getUpgrades(Upgrade.SPEED);
37+
// 64 to 320 items
38+
maxTransitCount = 64 + 32 * speedUpgrades;
39+
// 1 to 5 types
40+
maxTransitTypes = Math.round(1F + speedUpgrades / 2F);
41+
}
42+
}
43+
3044
@Override
3145
public void writeSustainedData(CompoundTag dataMap) {
3246
super.writeSustainedData(dataMap);
@@ -46,13 +60,11 @@ public void addContainerTrackers(MekanismContainer container) {
4660
}
4761

4862
protected int getMaxTransitCount() {
49-
// 64 to 320 items
50-
return 64 + 32 * upgradeComponent.getUpgrades(Upgrade.SPEED);
63+
return maxTransitCount;
5164
}
5265

5366
protected int getMaxTransitTypes() {
54-
// 1 to 5 types
55-
return Math.round(1F + upgradeComponent.getUpgrades(Upgrade.SPEED) / 2F);
67+
return maxTransitTypes;
5668
}
5769

5870
//Methods relating to IComputerTile

0 commit comments

Comments
 (0)