• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CyclopsMC / IntegratedDynamics / 20210191346

14 Dec 2025 03:32PM UTC coverage: 19.514% (-33.5%) from 53.061%
20210191346

push

github

rubensworks
Remove deprecations

663 of 8728 branches covered (7.6%)

Branch coverage included in aggregate %.

6786 of 29445 relevant lines covered (23.05%)

1.09 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/org/cyclops/integrateddynamics/core/recipe/type/RecipeDryingBasin.java
1
package org.cyclops.integrateddynamics.core.recipe.type;
2

3
import com.mojang.datafixers.util.Either;
4
import net.minecraft.core.HolderLookup;
5
import net.minecraft.world.item.ItemStack;
6
import net.minecraft.world.item.Items;
7
import net.minecraft.world.item.crafting.*;
8
import net.minecraft.world.item.crafting.display.RecipeDisplay;
9
import net.minecraft.world.item.crafting.display.SlotDisplay;
10
import net.minecraft.world.level.Level;
11
import net.neoforged.neoforge.fluids.FluidStack;
12
import org.cyclops.cyclopscore.recipe.ItemStackFromIngredient;
13
import org.cyclops.cyclopscore.recipe.type.IInventoryFluid;
14
import org.cyclops.integrateddynamics.RegistryEntries;
15
import org.cyclops.integrateddynamics.core.recipe.display.RecipeDisplayDryingBasin;
16

17
import java.util.List;
18
import java.util.Optional;
19

20
/**
21
 * Drying basin recipe
22
 * @author rubensworks
23
 */
24
public class RecipeDryingBasin implements Recipe<IInventoryFluid> {
25

26
    private final Optional<Ingredient> inputIngredient;
27
    private final Optional<FluidStack> inputFluid;
28
    private final Optional<Either<ItemStack, ItemStackFromIngredient>> outputItem;
29
    private final Optional<FluidStack> outputFluid;
30
    private final int duration;
31

32
    private PlacementInfo placementInfo;
33

34
    public RecipeDryingBasin(Optional<Ingredient> inputIngredient, Optional<FluidStack> inputFluid,
35
                             Optional<Either<ItemStack, ItemStackFromIngredient>> outputIngredient, Optional<FluidStack> outputFluid, int duration) {
×
36
        this.inputIngredient = inputIngredient;
×
37
        this.inputFluid = inputFluid;
×
38
        this.outputItem = outputIngredient;
×
39
        this.outputFluid = outputFluid;
×
40
        this.duration = duration;
×
41
    }
×
42

43
    public Optional<Ingredient> getInputIngredient() {
44
        return inputIngredient;
×
45
    }
46

47
    public Optional<FluidStack> getInputFluid() {
48
        return inputFluid;
×
49
    }
50

51
    public Optional<Either<ItemStack, ItemStackFromIngredient>> getOutputItem() {
52
        return outputItem;
×
53
    }
54

55
    public Optional<ItemStack> getOutputItemFirst() {
56
        return getOutputItem().map(either -> either.map(l -> l, ItemStackFromIngredient::getFirstItemStack));
×
57
    }
58

59
    public Optional<FluidStack> getOutputFluid() {
60
        return outputFluid;
×
61
    }
62

63
    public int getDuration() {
64
        return duration;
×
65
    }
66

67
    @Override
68
    public boolean matches(IInventoryFluid inv, Level worldIn) {
69
        return inputIngredient.map(p -> p.test(inv.getItem(0))).orElse(inv.getItem(0).isEmpty())
×
70
                && inputFluid.map(f -> f.getFluid() == inv.getFluidHandler().getResource(0).getFluid()).orElse(inv.getFluidHandler().getResource(0).isEmpty())
×
71
                && inputFluid.map(f -> f.getAmount() <= inv.getFluidHandler().getAmountAsInt(0)).orElse(inv.getFluidHandler().getAmountAsInt(0) == 0);
×
72
    }
73

74
    @Override
75
    public ItemStack assemble(IInventoryFluid inv, HolderLookup.Provider registryAccess) {
76
        return this.getOutputItemFirst().get().copy();
×
77
    }
78

79
    @Override
80
    public RecipeSerializer<? extends Recipe<IInventoryFluid>> getSerializer() {
81
        return RegistryEntries.RECIPESERIALIZER_DRYING_BASIN.get();
×
82
    }
83

84
    @Override
85
    public RecipeType<? extends Recipe<IInventoryFluid>> getType() {
86
        return RegistryEntries.RECIPETYPE_DRYING_BASIN.get();
×
87
    }
88

89
    @Override
90
    public PlacementInfo placementInfo() {
91
        if (this.placementInfo == null) {
×
92
            this.placementInfo = PlacementInfo.create(this.inputIngredient.orElse(Ingredient.of(Items.BUCKET)));
×
93
        }
94
        return this.placementInfo;
×
95
    }
96

97
    @Override
98
    public RecipeBookCategory recipeBookCategory() {
99
        return RegistryEntries.RECIPEBOOKCATEGORY_DRYING_BASIN.get();
×
100
    }
101

102
    @Override
103
    public List<RecipeDisplay> display() {
104
        return List.of(new RecipeDisplayDryingBasin(
×
105
                this.getInputIngredient().map(Ingredient::display).orElse(SlotDisplay.Empty.INSTANCE),
×
106
                this.getInputFluid().orElse(FluidStack.EMPTY),
×
107
                this.getOutputItemFirst().<SlotDisplay>map(SlotDisplay.ItemStackSlotDisplay::new).orElse(SlotDisplay.Empty.INSTANCE),
×
108
                this.getOutputFluid().orElse(FluidStack.EMPTY),
×
109
                new SlotDisplay.ItemSlotDisplay(RegistryEntries.BLOCK_DRYING_BASIN.get().asItem()),
×
110
                this.getDuration()
×
111
        ));
112
    }
113
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc