Skip to content

Commit 68d8a5d

Browse files
committed
fix energy detector may cause stackoverflow
close #801
1 parent 898cbc3 commit 68d8a5d

1 file changed

Lines changed: 17 additions & 8 deletions

File tree

src/main/java/de/srendi/advancedperipherals/common/util/EnergyStorageProxy.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public class EnergyStorageProxy implements IEnergyStorage {
1010
private final EnergyDetectorEntity energyDetectorTE;
1111
private int maxTransferRate;
1212
private int transferedInThisTick = 0;
13+
private boolean receiving = false;
1314

1415
public EnergyStorageProxy(EnergyDetectorEntity energyDetectorTE, int maxTransferRate) {
1516
this.energyDetectorTE = energyDetectorTE;
@@ -23,14 +24,22 @@ public boolean canReceive() {
2324

2425
@Override
2526
public int receiveEnergy(int maxReceive, boolean simulate) {
26-
Optional<IEnergyStorage> out = energyDetectorTE.getOutputStorage();
27-
return out.map(outStorage -> {
28-
int transferred = outStorage.receiveEnergy(Math.min(maxReceive, maxTransferRate - transferedInThisTick), simulate);
29-
if (!simulate) {
30-
transferedInThisTick += transferred;
31-
}
32-
return transferred;
33-
}).orElse(0);
27+
if (this.receiving) {
28+
return 0;
29+
}
30+
this.receiving = true;
31+
try {
32+
Optional<IEnergyStorage> out = energyDetectorTE.getOutputStorage();
33+
return out.map(outStorage -> {
34+
int transferred = outStorage.receiveEnergy(Math.min(maxReceive, maxTransferRate - transferedInThisTick), simulate);
35+
if (!simulate) {
36+
transferedInThisTick += transferred;
37+
}
38+
return transferred;
39+
}).orElse(0);
40+
} finally {
41+
this.receiving = false;
42+
}
3443
}
3544

3645
@Override

0 commit comments

Comments
 (0)