aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/recipe/maps/FuelBackend.java
blob: e5f0ab40d140abd96d52b8b2b9082d4d454e0681 (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
74
75
package gregtech.api.recipe.maps;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;

import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;

import gregtech.api.recipe.RecipeMapBackend;
import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder;
import gregtech.api.util.GTRecipe;
import gregtech.api.util.GTRecipeBuilder;
import gregtech.api.util.GTUtility;
import gregtech.api.util.MethodsReturnNonnullByDefault;

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class FuelBackend extends RecipeMapBackend {

    private final Map<String, GTRecipe> recipesByFluidInput = new HashMap<>();

    public FuelBackend(RecipeMapBackendPropertiesBuilder propertiesBuilder) {
        super(propertiesBuilder.disableOptimize());
    }

    @Override
    protected Collection<GTRecipe> doAdd(GTRecipeBuilder builder) {
        if (builder.getDuration() == -1) {
            builder.duration(0);
        }
        if (builder.getEUt() == -1) {
            builder.eut(0);
        }
        return super.doAdd(builder);
    }

    @Override
    public GTRecipe compileRecipe(GTRecipe recipe) {
        super.compileRecipe(recipe);
        if (recipe.mInputs != null && GTUtility.getNonnullElementCount(recipe.mInputs) == 1
            && (recipe.mFluidInputs == null || GTUtility.getNonnullElementCount(recipe.mFluidInputs) == 0)) {
            FluidStack fluidStack = GTUtility.getFluidForFilledItem(recipe.mInputs[0], true);
            if (fluidStack != null) {
                fluidStack.amount = 0;
                recipesByFluidInput.put(
                    fluidStack.getFluid()
                        .getName(),
                    recipe);
            }
        } else if ((recipe.mInputs == null || GTUtility.getNonnullElementCount(recipe.mInputs) == 0)
            && recipe.mFluidInputs != null
            && GTUtility.getNonnullElementCount(recipe.mFluidInputs) >= 1
            && recipe.mFluidInputs[0] != null) {
                recipesByFluidInput.put(
                    recipe.mFluidInputs[0].getFluid()
                        .getName(),
                    recipe);
            }
        return recipe;
    }

    @Nullable
    public GTRecipe findFuel(FluidStack fluidStack) {
        return findFuel(fluidStack.getFluid());
    }

    @Nullable
    public GTRecipe findFuel(Fluid fluid) {
        return recipesByFluidInput.get(fluid.getName());
    }
}