Why does this exist?
Without this library you need multiple mixins, this library handles that for you!
More than 1 mod can use this library at the same time!
Currently, I am not aware of any other libraries that do this
Currently, this library only supports Fabric 1.20.4, 1.20.6, and 1.21 If you want it for a different version, create an issue on the GitHub page
in onInitializeClient:
ChangeGroupForRecipeCallback.EVENT.register(recipeEntry -> {
    if (recipeEntry.value() instanceof CustomRecipe customRecipe) {
        if (customRecipe.getResult(null).isIn(CustomItemTags.FRUIT)) {
            return Optional.of(CustomRecipeBookAdditions.FRUIT_GROUP);
        }
        if (customRecipe.getResult(null).isIn(CustomItemTags.MEAT)) {
            return Optional.of(CustomRecipeBookAdditions.MEAT_GROUP);
        }
        if (customRecipe.getResult(null).isIn(CustomItemTags.METALS) || customRecipe.getResult(null).isIn(CustomItemTags.GEMS)) {
            return Optional.of(CustomRecipeBookAdditions.METALS_AND_GEMS_GROUP);
        }
    }
    return Optional.empty();
});Then, it is recommended to create a new class to store all of the groups and categories, like this:
public class CustomRecipeBookAdditions {
    public static final RecipeBookGroup CUSTOM_SEARCH_GROUP = RecipeBookLibApi.registerGroup("CUSTOM_SEARCH_GROUP", new ItemStack(Items.COMPASS));
    public static final RecipeBookGroup FRUIT_GROUP = RecipeBookLibApi.registerGroup("FRUIT_GROUP", new ItemStack(Items.APPLE));
    public static final RecipeBookGroup MEAT_GROUP = RecipeBookLibApi.registerGroup("MEAT_GROUP", new ItemStack(Items.COOKED_BEEF));
    public static final RecipeBookGroup METALS_AND_GEMS_GROUP = RecipeBookLibApi.registerGroup("METALS_AND_GEMS_GROUP", new ItemStack(Items.IRON_INGOT), new ItemStack(Items.EMERALD));
    public static final List<RecipeBookGroup> CUSTOM_CRAFTING_GROUPS = ImmutableList.of(
            CUSTOM_SEARCH_GROUP,
            FRUIT_GROUP,
            MEAT_GROUP,
            METALS_AND_GEMS_GROUP
    );
    public static final RecipeBookCategory CUSTOM_CRAFTING = RecipeBookLibApi.registerCategory("CUSTOM_CRAFTING", CUSTOM_CRAFTING_GROUPS);
    static {
        RecipeBookLibApi.registerSearchGroup(CUSTOM_SEARCH_GROUP, List.of(
                FRUIT_GROUP,
                MEAT_GROUP,
                METALS_AND_GEMS_GROUP
        ));
    }
    public static void registerRecipeBookAdditions() {
        YourMod.LOGGER.info("Registering recipe book additions for " + YourMod.MOD_ID);
    }
}and don't forget to "wake up" the class by calling registerRecipeBookAdditions in onInitialize.
Then, in your custom screen handler that extends AbstractRecipeScreenHandler, you can use the custom category like this:
@Override
public RecipeBookCategory getCategory() {
    return CustomRecipeBookAdditions.CUSTOM_CRAFTING;
}RecipeBookLib by 7410 is licensed under CC BY-NC 4.0