99import net .minecraftforge .fluids .IFluidTank ;
1010
1111import codechicken .nei .recipe .StackInfo ;
12- import gregtech .api .util .GTUtility ;
1312
1413public class FluidInteractions {
1514
16- /**
17- * Gets fluid actually stored in item. Used for transferring fluid.
18- */
19- public static FluidStack getFluidForRealItem (ItemStack itemStack ) {
15+ public static FluidStack getFluidForItem (ItemStack itemStack ) {
2016 FluidStack fluidStack = null ;
2117 if (itemStack .getItem () instanceof IFluidContainerItem container ) {
2218 fluidStack = container .getFluid (itemStack );
@@ -27,82 +23,44 @@ public static FluidStack getFluidForRealItem(ItemStack itemStack) {
2723 if (fluidStack == null && ModularUI .Mods .NEI .isLoaded ()) {
2824 fluidStack = StackInfo .getFluid (itemStack );
2925 }
30- if (ModularUI .Mods .GT5U .isLoaded () && fluidStack == null ) {
31- fluidStack = GTUtility .getFluidForFilledItem (itemStack , true );
32- }
3326 return fluidStack ;
3427 }
3528
36- /**
37- * Gets fluid for use in phantom slot.
38- */
39- public static FluidStack getFluidForPhantomItem (ItemStack itemStack ) {
40- FluidStack fluidStack = null ;
29+ public static ItemStack getFullFluidContainer (ItemStack itemStack , FluidStack fluidToFill ) {
4130 if (itemStack .getItem () instanceof IFluidContainerItem container ) {
42- fluidStack = container .getFluid (itemStack .copy ());
43- }
44- if (fluidStack == null ) {
45- fluidStack = FluidContainerRegistry .getFluidForFilledItem (itemStack .copy ());
46- }
47- if (fluidStack == null && ModularUI .Mods .NEI .isLoaded ()) {
48- fluidStack = StackInfo .getFluid (itemStack .copy ());
49- }
50- if (ModularUI .Mods .GT5U .isLoaded () && fluidStack == null ) {
51- fluidStack = GTUtility .getFluidForFilledItem (itemStack , true );
52- }
53- return fluidStack ;
54- }
31+ FluidStack containerFluid = container .getFluid (itemStack );
32+ int containerFluidAmount = containerFluid != null ? containerFluid .amount : 0 ;
5533
56- public static ItemStack fillFluidContainer (FluidStack fluidStack , ItemStack itemStack ) {
57- ItemStack filledContainer = fillFluidContainerWithoutIFluidContainerItem (fluidStack , itemStack );
58- if (filledContainer == null ) {
59- filledContainer = fillFluidContainerWithIFluidContainerItem (fluidStack , itemStack );
60- }
61- if (filledContainer == null ) {
62- filledContainer = FluidContainerRegistry .fillFluidContainer (fluidStack , itemStack );
63- if (filledContainer == null ) return itemStack ; // give up and return original clicked stack
64- FluidStack newFluid = getFluidForRealItem (filledContainer );
65- fluidStack .amount -= newFluid .amount ;
66- }
67- return filledContainer ;
68- }
34+ ItemStack copyStack = itemStack .copy ();
35+ int filled = container .fill (copyStack , fluidToFill , true );
6936
70- public static ItemStack fillFluidContainerWithoutIFluidContainerItem (FluidStack fluidStack , ItemStack itemStack ) {
71- if (ModularUI .Mods .GT5U .isLoaded ()) {
72- return GTUtility .fillFluidContainer (fluidStack , itemStack , true , false );
37+ if (containerFluidAmount + filled == container .getCapacity (copyStack )) {
38+ return copyStack ;
39+ }
40+
41+ return null ;
7342 }
74- return null ;
43+
44+ return FluidContainerRegistry .fillFluidContainer (fluidToFill , itemStack );
7545 }
7646
77- public static ItemStack fillFluidContainerWithIFluidContainerItem (FluidStack fluidStack , ItemStack itemStack ) {
78- if (itemStack .getItem () instanceof IFluidContainerItem itemContainer ) {
79- int tFilledAmount = itemContainer .fill (itemStack , fluidStack , true );
80- if (tFilledAmount > 0 ) {
81- fluidStack .amount -= tFilledAmount ;
82- return itemStack ;
47+ public static ItemStack getEmptyFluidContainer (ItemStack itemStack ) {
48+ if (itemStack .getItem () instanceof IFluidContainerItem container ) {
49+ FluidStack fluidStack = container .getFluid (itemStack );
50+ if (fluidStack == null ) {
51+ return null ;
8352 }
84- }
85- return null ;
86- }
8753
88- public static ItemStack getContainerForFilledItem (ItemStack itemStack ) {
89- ItemStack stack = getContainerForFilledItemWithoutIFluidContainerItem (itemStack );
90- if (stack == null && itemStack .getItem () instanceof IFluidContainerItem container ) {
91- stack = itemStack .copy ();
92- if (container .drain (stack , Integer .MAX_VALUE , true ) == null )
54+ ItemStack stack = itemStack .copy ();
55+ FluidStack drained = container .drain (stack , Integer .MAX_VALUE , true );
56+
57+ if (drained == null || drained .amount < fluidStack .amount ) {
9358 return null ;
59+ }
60+ return stack ;
9461 }
95- if (stack == null ) {
96- stack = FluidContainerRegistry .drainFluidContainer (itemStack .copy ());
97- }
98- return stack ;
99- }
10062
101- public static ItemStack getContainerForFilledItemWithoutIFluidContainerItem (ItemStack itemStack ) {
102- if (ModularUI .Mods .GT5U .isLoaded ()) {
103- return GTUtility .getContainerForFilledItem (itemStack , false );
104- }
105- return null ;
63+ return FluidContainerRegistry .drainFluidContainer (itemStack );
10664 }
10765
10866 public static int getRealCapacity (IFluidTank fluidTank ) {
0 commit comments