aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/recipe/RecipeMapBackendProperties.java
blob: 7262b794ab234d5f0e8eea3505a163cd8d00e049 (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
76
77
package gregtech.api.recipe;

import java.util.function.Function;

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

import gregtech.api.util.FieldsAreNonnullByDefault;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_RecipeBuilder;
import gregtech.api.util.MethodsReturnNonnullByDefault;

/**
 * Data object to store properties used for {@link RecipeMapBackend}. Use {@link #builder()} for creation.
 */
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
public final class RecipeMapBackendProperties {

    static RecipeMapBackendPropertiesBuilder builder() {
        return new RecipeMapBackendPropertiesBuilder();
    }

    /**
     * Minimum amount of item inputs required for the recipes.
     */
    public final int minItemInputs;
    /**
     * Minimum amount of fluid inputs required for the recipes.
     */
    public final int minFluidInputs;

    /**
     * Whether this backend should check for equality of special slot when searching recipe.
     */
    public final boolean specialSlotSensitive;

    /**
     * If recipe builder should stop optimizing inputs.
     */
    public final boolean disableOptimize;

    /**
     * Changes how recipes are emitted by a particular recipe builder.
     */
    public final Function<? super GT_RecipeBuilder, ? extends Iterable<? extends GT_Recipe>> recipeEmitter;

    /**
     * Runs a custom hook on all recipes added <b>via builder</b>.
     */
    @Nullable
    public final Function<? super GT_Recipe, ? extends GT_Recipe> recipeTransformer;

    @Nullable
    public final String recipeConfigCategory;
    @Nullable
    public final Function<? super GT_Recipe, String> recipeConfigKeyConvertor;

    RecipeMapBackendProperties(int minItemInputs, int minFluidInputs, boolean specialSlotSensitive,
        boolean disableOptimize,
        Function<? super GT_RecipeBuilder, ? extends Iterable<? extends GT_Recipe>> recipeEmitter,
        @Nullable Function<? super GT_Recipe, ? extends GT_Recipe> recipeTransformer,
        @Nullable String recipeConfigCategory, @Nullable Function<? super GT_Recipe, String> recipeConfigKeyConvertor) {
        if (minItemInputs < 0 || minFluidInputs < 0) {
            throw new IllegalArgumentException("minItemInputs and minFluidInputs cannot be negative");
        }
        this.minItemInputs = minItemInputs;
        this.minFluidInputs = minFluidInputs;
        this.specialSlotSensitive = specialSlotSensitive;
        this.disableOptimize = disableOptimize;
        this.recipeEmitter = recipeEmitter;
        this.recipeTransformer = recipeTransformer;
        this.recipeConfigCategory = recipeConfigCategory;
        this.recipeConfigKeyConvertor = recipeConfigKeyConvertor;
    }
}