aboutsummaryrefslogtreecommitdiff
path: root/gigagramfab/src/main/java/net/glease/ggfab/api/GGFabRecipeMaps.java
blob: 088e9a77823416978ce2ebe87d692d3541cff39e (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
package net.glease.ggfab.api;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

import net.glease.ggfab.GGItemList;
import net.minecraft.item.ItemStack;

import com.gtnewhorizons.modularui.common.widget.ProgressBar;

import gregtech.api.enums.ToolDictNames;
import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.recipe.RecipeMap;
import gregtech.api.recipe.RecipeMapBackend;
import gregtech.api.recipe.RecipeMapBuilder;
import gregtech.api.recipe.RecipeMetadataKey;
import gregtech.api.recipe.metadata.SimpleRecipeMetadataKey;
import gregtech.api.util.GT_Recipe;

public class GGFabRecipeMaps {

    public static final RecipeMetadataKey<ToolDictNames> OUTPUT_TYPE = SimpleRecipeMetadataKey
            .create(ToolDictNames.class, "output_type");
    public static final RecipeMetadataKey<Integer> OUTPUT_COUNT = SimpleRecipeMetadataKey
            .create(Integer.class, "output_count");
    public static final RecipeMap<RecipeMapBackend> toolCastRecipes = RecipeMapBuilder.of("ggfab.recipe.toolcast")
            .maxIO(1, 4, 1, 0).minInputs(1, 1).progressBar(GT_UITextures.PROGRESSBAR_ARROW, ProgressBar.Direction.RIGHT)
            .recipeEmitter(b -> {
                Optional<GT_Recipe> rr = b.noOptimize().validateNoInput().validateInputFluidCount(0, 1)
                        .validateNoOutput().validateNoOutputFluid().build();
                if (!rr.isPresent()) return Collections.emptyList();
                ToolDictNames outputType = b.getMetadata(OUTPUT_TYPE);
                GT_Recipe r = rr.get();
                int outputSize = b.getMetadataOrDefault(OUTPUT_COUNT, 0);
                if (outputSize > 64 * 4 || outputSize <= 0) return Collections.emptyList();
                ItemStack shape, output;
                try {
                    shape = GGItemList.valueOf("Shape_One_Use_" + outputType).get(0L);
                    output = GGItemList.valueOf("One_Use_" + outputType).get(outputSize);
                } catch (IllegalArgumentException ex) {
                    // this looks like python not java, but I don't have better way around this
                    return Collections.emptyList();
                }
                output.stackSize = outputSize;
                List<ItemStack> outputs = new ArrayList<>();
                int maxStackSize = output.getMaxStackSize();
                while (output.stackSize > maxStackSize) outputs.add(output.splitStack(maxStackSize));
                outputs.add(output);
                r.mInputs = new ItemStack[] { shape };
                r.mOutputs = outputs.toArray(new ItemStack[0]);
                return Collections.singletonList(r);
            }).build();
}