There is a specific class that defines the recipes for your new workbench block. I'll post a few of the key ideas below, but just know it's only to make the git I provide later on to make a little more sense for your situation.
In the recipes class, I "defined" recipes through a table:
private static final TwoByTwoRecipe INSTANCE = new TwoByTwoRecipes();
private final Table<ItemStack, ItemStack, ItemStack> craftingList = HashBasedTable.<ItemStack, ItemStack, ItemStack>create();
// Item One | Item Two | Result
The recipes would then be constructed as such:
addCustomRecipe(new ItemStack(Items.ItemOne), new ItemStack(Items.ItemTwo), new ItemStack(Items.Result));
Of which would call on:
public void addCustomRecipe(ItemStack input1, ItemStack input2, ItemStack result)
{
if(getRecipeResult(input1, input2) != ItemStack.EMPTY) return;
this.craftingList.put(input1, input2, result);
}
A final method would compare the two results, and determine if the item can be crafted by checking each of the slots.
You can take a look at how I did it through the files here: https://github.com/CammiePone/Voidaic-Arcania/tree/master/src/main/java/com/camellias/voidaicarcania/common/blocks/machines/blockbotanyaltar , but be aware that the block is more based off of a furnace and requires a fuel. But you should be able to reverse engineer it based off of the examples above. It's interaction with the container should be relatively the same, but you can disregard the fuel requirements.