Skip to content

Commit d7183c8

Browse files
committed
fix energy detector may cause stackoverflow
close #801
1 parent 4c823c0 commit d7183c8

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

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

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class EnergyStorageProxy implements IEnergyStorage {
88
private final EnergyDetectorEntity energyDetectorTE;
99
private int maxTransferRate;
1010
private int transferredInThisTick = 0;
11+
private boolean receiving = false;
1112

1213
public EnergyStorageProxy(EnergyDetectorEntity energyDetectorTE, int maxTransferRate) {
1314
this.energyDetectorTE = energyDetectorTE;
@@ -21,14 +22,23 @@ public boolean canReceive() {
2122

2223
@Override
2324
public int receiveEnergy(int maxReceive, boolean simulate) {
24-
IEnergyStorage out = energyDetectorTE.getOutputStorage();
25-
if (out == null)
25+
if (this.receiving) {
2626
return 0;
27-
int transferred = out.receiveEnergy(Math.min(maxReceive, maxTransferRate - transferredInThisTick), simulate);
28-
if (!simulate) {
29-
transferredInThisTick += transferred;
3027
}
31-
return transferred;
28+
this.receiving = true;
29+
try {
30+
IEnergyStorage out = energyDetectorTE.getOutputStorage();
31+
if (out == null) {
32+
return 0;
33+
}
34+
int transferred = out.receiveEnergy(Math.min(maxReceive, maxTransferRate - transferredInThisTick), simulate);
35+
if (!simulate) {
36+
transferredInThisTick += transferred;
37+
}
38+
return transferred;
39+
} finally {
40+
this.receiving = false;
41+
}
3242
}
3343

3444
@Override

0 commit comments

Comments
 (0)