Skip to content

Commit 7edca73

Browse files
danyadevchrombread
andauthored
Refactor fluid slot filling/draining logic & better support for IFluidContainerItem (#93)
Co-authored-by: chrombread <chrombread8@gmail.com> Co-authored-by: chrombread <119648279+chrombread@users.noreply.github.com>
1 parent 80869b5 commit 7edca73

File tree

3 files changed

+214
-116
lines changed

3 files changed

+214
-116
lines changed

dependencies.gradle

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,18 @@ dependencies {
3939

4040
implementation("com.github.GTNewHorizons:NotEnoughItems:2.8.68-GTNH:dev")
4141
compileOnly("com.github.GTNewHorizons:Hodgepodge:2.7.60:dev") { transitive = false }
42-
compileOnly("com.github.GTNewHorizons:GT5-Unofficial:5.09.52.283:dev") { transitive = false }
42+
43+
devOnlyNonPublishable("com.github.GTNewHorizons:GT5-Unofficial:5.09.52.283:dev") {
44+
exclude group: 'com.github.GTNewHorizons', module: 'ModularUI2'
45+
}
46+
4347
compileOnly("com.github.GTNewHorizons:ModularUI:1.3.1:dev") { transitive = false }
4448
implementation("com.github.GTNewHorizons:Baubles-Expanded:2.2.6-GTNH:dev") { transitive = false }
4549
compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev")
4650
//compileOnly rfg.deobf("curse.maven:neverenoughanimation-1062347:6552319")
4751
compileOnly files("libs/neverenoughanimations-v1.0.6-1-7-10.8+91c551807b-dirty-dev.jar")
4852
compileOnly("org.jetbrains:annotations:24.0.1")
49-
53+
5054
//runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.8.68-GTNH:dev")
5155
// For Thaumcraft runtime
5256
//runtimeOnlyNonPublishable("com.github.GTNewHorizons:Baubles:1.0.4:dev")

src/main/java/com/cleanroommc/modularui/utils/fluid/FluidInteractions.java

Lines changed: 25 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,10 @@
99
import net.minecraftforge.fluids.IFluidTank;
1010

1111
import codechicken.nei.recipe.StackInfo;
12-
import gregtech.api.util.GTUtility;
1312

1413
public 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

Comments
 (0)