-
Notifications
You must be signed in to change notification settings - Fork 152
Expand file tree
/
Copy pathFluidNetTank.java
More file actions
executable file
·81 lines (71 loc) · 2.96 KB
/
FluidNetTank.java
File metadata and controls
executable file
·81 lines (71 loc) · 2.96 KB
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
package gregtech.common.pipelike.fluidpipe.net;
import com.google.common.base.Preconditions;
import gregtech.api.util.PerTickIntCounter;
import gregtech.common.pipelike.fluidpipe.FluidPipeProperties;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
public class FluidNetTank extends FluidTank {
private final FluidPipeNet handle;
private final PerTickIntCounter drainedThisTick = new PerTickIntCounter(0);
public FluidNetTank(FluidPipeNet handle) {
super(0);
this.handle = handle;
}
private int getMaxThroughput() {
return handle.getMaxThroughput();
}
@Override
public int fill(FluidStack resource, boolean doFill) {
Preconditions.checkNotNull(resource, "resource");
FluidStack copyStack = resource.copy();
copyStack.amount = Math.min(copyStack.amount, getMaxThroughput());
FluidPipeProperties properties = handle.getNodeData();
boolean isLeakingPipe = copyStack.getFluid().isGaseous(copyStack) && !properties.gasProof;
boolean isBurningPipe = copyStack.getFluid().getTemperature(copyStack) > properties.maxFluidTemperature;
if (isLeakingPipe || isBurningPipe) {
handle.destroyNetwork(isLeakingPipe, isBurningPipe);
return copyStack.amount;
}
int result = super.fill(copyStack, doFill);
if (result != 0 && doFill)
this.handle.markDirty();
return result;
}
@Override
public FluidStack drain(FluidStack resource, boolean doDrain) {
if (resource == null) {
return null;
}
int maxDrainLeftThisTick = getMaxThroughput() - drainedThisTick.get(handle.getWorldData());
int originalAmount = resource.amount;
resource.amount = Math.min(originalAmount, maxDrainLeftThisTick);
FluidStack resultDrained = super.drain(resource, doDrain);
resource.amount = originalAmount;
if (resultDrained != null && doDrain) {
drainedThisTick.increment(handle.getWorldData(), resultDrained.amount);
this.handle.markDirty();
}
return resultDrained;
}
@Override
public FluidStack drain(int maxDrain, boolean doDrain) {
int maxDrainLeftThisTick = getMaxThroughput() - drainedThisTick.get(handle.getWorldData());
maxDrain = Math.min(maxDrain, maxDrainLeftThisTick);
if (maxDrain == 0) {
return null;
}
FluidStack resultDrained = super.drain(maxDrain, doDrain);
if (resultDrained != null && doDrain) {
drainedThisTick.increment(handle.getWorldData(), resultDrained.amount);
this.handle.markDirty();
}
return resultDrained;
}
public void updateTankCapacity(int newTankCapacity) {
this.capacity = newTankCapacity;
if (this.fluid != null) {
this.fluid.amount = Math.min(this.fluid.amount, newTankCapacity);
this.handle.markDirty();
}
}
}