16
16
import sunsetsatellite .catalyst .fluids .api .IMassFluidInventory ;
17
17
import sunsetsatellite .catalyst .fluids .util .FluidStack ;
18
18
19
- import java .util .ArrayList ;
20
- import java .util .HashMap ;
21
- import java .util .Map ;
19
+ import java .util .*;
20
+ import java .util .stream .Collectors ;
22
21
23
22
public class TileEntityFluidContainer extends TileEntity
24
23
implements IFluidInventory , IFluidTransfer {
@@ -54,8 +53,9 @@ public void take(@NotNull FluidStack fluidStack, Direction dir){
54
53
if (fluidTransfer .getConnection (dir .getOpposite ()) == Connection .OUTPUT || fluidTransfer .getConnection (dir .getOpposite ()) == Connection .BOTH ){
55
54
int maxFlow = Math .min (transferSpeed ,fluidInv .getTransferSpeed ());
56
55
if (acceptedFluids .get (activeFluidSlots .get (dir )).contains (fluidStack .getLiquid ())) {
57
- if (canInsertFluid (activeFluidSlots .get (dir ), new FluidStack (fluidStack .liquid , maxFlow ))) {
58
- FluidStack transferablePortion = fluidStack .splitStack (maxFlow );
56
+ int maxAmount = Math .min (fluidStack .amount , maxFlow );
57
+ if (canInsertFluid (activeFluidSlots .get (dir ), new FluidStack (fluidStack .liquid , maxAmount ))) {
58
+ FluidStack transferablePortion = fluidStack .splitStack (maxAmount );
59
59
if (fluidContents [activeFluidSlots .get (dir )] == null ) {
60
60
fluidContents [activeFluidSlots .get (dir )] = transferablePortion ;
61
61
} else {
@@ -81,16 +81,18 @@ public void give(Direction dir){
81
81
if (tile instanceof IMassFluidInventory ){
82
82
IMassFluidInventory massFluidInv = (IMassFluidInventory ) tile ;
83
83
if (fluidStack .isFluidEqual (massFluidInv .getFilter (dir .getOpposite ())) || massFluidInv .getFilter (dir .getOpposite ()) == null ){
84
- if (massFluidInv .canInsertFluid (new FluidStack (fluidStack .liquid ,maxFlow ))){
85
- FluidStack transferablePortion = fluidStack .splitStack (maxFlow );
84
+ int maxAmount = Math .min (fluidStack .amount , maxFlow );
85
+ if (massFluidInv .canInsertFluid (new FluidStack (fluidStack .liquid ,maxAmount ))){
86
+ FluidStack transferablePortion = fluidStack .splitStack (maxAmount );
86
87
massFluidInv .insertFluid (transferablePortion );
87
88
}
88
89
}
89
90
} else {
90
91
int otherSlot = fluidInv .getActiveFluidSlot (dir .getOpposite ());
91
92
if (fluidInv .getAllowedFluidsForSlot (otherSlot ).contains (fluidStack .getLiquid ())){
92
- if (fluidInv .canInsertFluid (otherSlot ,new FluidStack (fluidStack .liquid ,maxFlow ))){
93
- FluidStack transferablePortion = fluidStack .splitStack (maxFlow );
93
+ int maxAmount = Math .min (fluidStack .amount , maxFlow );
94
+ if (fluidInv .canInsertFluid (otherSlot ,new FluidStack (fluidStack .liquid ,maxAmount ))){
95
+ FluidStack transferablePortion = fluidStack .splitStack (maxAmount );
94
96
fluidInv .insertFluid (otherSlot ,transferablePortion );
95
97
}
96
98
/*if(fluidInv.getFluidInSlot(otherSlot) == null){
@@ -109,7 +111,7 @@ public void give(Direction dir){
109
111
public FluidStack insertFluid (int slot , FluidStack fluidStack ) {
110
112
FluidStack stack = fluidContents [slot ];
111
113
FluidStack split = fluidStack .splitStack (Math .min (fluidStack .amount ,getRemainingCapacity (slot )));
112
- if (stack != null ){
114
+ if (stack != null && split . amount > 0 ){
113
115
fluidContents [slot ].amount += split .amount ;
114
116
} else {
115
117
fluidContents [slot ] = split ;
@@ -169,6 +171,7 @@ public void readFromNBT(CompoundTag CompoundTag1) {
169
171
@ Override
170
172
public void tick () {
171
173
super .tick ();
174
+ fluidContents = Arrays .stream (fluidContents ).map ((F )-> (F != null && F .amount <= 0 ) ? null : F ).toArray (FluidStack []::new );
172
175
if (!worldObj .isClientSide ){
173
176
for (EntityPlayer player : worldObj .players ) {
174
177
if (player instanceof EntityPlayerMP ){
0 commit comments