blob: 9bbe087e540188c5967c001afd3e48bbc2084647 (
plain)
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
|
package gregtech.api.recipe.maps;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidContainerItem;
import gregtech.api.enums.GTValues;
import gregtech.api.recipe.RecipeMapBackend;
import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder;
import gregtech.api.util.GTRecipe;
import gregtech.api.util.GTUtility;
import gregtech.api.util.MethodsReturnNonnullByDefault;
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class FluidCannerBackend extends RecipeMapBackend {
public FluidCannerBackend(RecipeMapBackendPropertiesBuilder propertiesBuilder) {
super(propertiesBuilder);
}
@Override
protected GTRecipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) {
if (items.length == 0 || items[0] == null) {
return null;
}
if (fluids.length > 0 && fluids[0] != null) {
ItemStack filledItem = GTUtility.fillFluidContainer(fluids[0], items[0], false, true);
FluidStack fluidToTake = GTUtility.getFluidForFilledItem(filledItem, true);
if (fluidToTake != null) {
return GTValues.RA.stdBuilder()
.itemInputs(GTUtility.copyAmount(1, items[0]))
.itemOutputs(filledItem)
.fluidInputs(fluidToTake)
.duration(Math.max(fluidToTake.amount / 64, 16))
.eut(1)
.noOptimize()
.noBuffer()
.build()
.orElse(null);
}
}
FluidStack drainedFluid = GTUtility.getFluidForFilledItem(items[0], true);
if (drainedFluid != null) {
return GTValues.RA.stdBuilder()
.itemInputs(GTUtility.copyAmount(1, items[0]))
.itemOutputs(GTUtility.getContainerItem(items[0], true))
.fluidOutputs(drainedFluid)
.duration(Math.max(drainedFluid.amount / 64, 16))
.eut(1)
.noBuffer()
.build()
.orElse(null);
}
return null;
}
@Override
public boolean containsInput(ItemStack item) {
return super.containsInput(item) || (item.getItem() instanceof IFluidContainerItem
&& ((IFluidContainerItem) item.getItem()).getCapacity(item) > 0);
}
@Override
public boolean containsInput(Fluid fluid) {
return true;
}
}
|