/* * Copyright (c) 2018, 2019, 2020 shedaniel * Licensed under the MIT License (the "License"). */ package me.shedaniel.rei.plugin.crafting; import me.shedaniel.rei.api.EntryStack; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.ShapelessRecipe; import net.minecraft.util.Identifier; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; public class DefaultShapelessDisplay implements DefaultCraftingDisplay { private ShapelessRecipe display; private List> input; private List output; public DefaultShapelessDisplay(ShapelessRecipe recipe) { this.display = recipe; this.input = recipe.getPreviewInputs().stream().map(i -> { List entries = new ArrayList<>(); for (ItemStack stack : i.getMatchingStacksClient()) { entries.add(EntryStack.create(stack)); } return entries; }).collect(Collectors.toList()); this.output = Collections.singletonList(EntryStack.create(recipe.getOutput())); } @Override public Optional> getOptionalRecipe() { return Optional.ofNullable(display); } @Override public Optional getRecipeLocation() { return Optional.ofNullable(display).map(ShapelessRecipe::getId); } @Override public List> getInputEntries() { return input; } @Override public List getOutputEntries() { return output; } @Override public List> getRequiredEntries() { return input; } @Override public int getWidth() { if (display.getPreviewInputs().size() > 4) return 3; return 2; } @Override public int getHeight() { if (display.getPreviewInputs().size() > 4) return 3; return 2; } }