@Override public void register(IModRegistry registry) { registry.addRecipes(RecipeManager.getInstance().getRecipes(DrinkRecipe.class).stream().map(DrinkRecipeWrapper::new).collect(Collectors.toList()), RecipeUIDs.DRINK); registry.handleRecipes(DrinkRecipeWrapper.class, recipe -> recipe, RecipeUIDs.DRINK); registry.addRecipeClickArea(GuiContainerDrinkMachine.class, 87, 27, 27, 25, RecipeUIDs.DRINK); registry.addRecipeClickArea(GuiContainerSmeltingDrinkMachine.class, 87, 27, 27, 25, RecipeUIDs.DRINK); registry.addRecipeCatalyst(new ItemStack(FCRBlocks.DRINK_MACHINE), RecipeUIDs.DRINK); registry.addRecipeCatalyst(new ItemStack(FCRBlocks.SMELTING_DRINK_MACHINE), RecipeUIDs.DRINK); }
@Nullable public <T, R extends Recipe<T>> R getIngredientRecipeNullable(Class<R> recipeClass, T input) { if (!(input instanceof RecipeInput) && !((((RecipeInput) input).value instanceof ItemStack[]) || ((RecipeInput) input).value instanceof Item[])) return null; return getRecipes(recipeClass).stream() .filter(recipe -> recipe.getInput() instanceof RecipeInput) .filter(recipe -> ((RecipeInput) recipe.getInput()).getValue() instanceof Ingredient[]) .filter(recipe -> ((RecipeInput) recipe.getInput()).getValue().length == ((RecipeInput) input).getValue().length) .filter(recipe -> { Ingredient[] ingredients = (Ingredient[]) ((RecipeInput) recipe.getInput()).getValue(); Object[] inputs = ((RecipeInput) input).getValue(); for (int i = 0; i < inputs.length; i++) { ItemStack stack; if (inputs[i] instanceof Item) stack = new ItemStack((Item) inputs[i]); else stack = (ItemStack) inputs[i]; if (!ingredients[i].apply(stack)) return false; } return true; }) .findAny().orElse(null); } }