docs: public static boolean attemptCrafting(EntityPlayerMP player, IRecipe recipe)
      {
          if (player == null || recipe == null)
              return false;
  
          ItemStack is = recipe.getRecipeOutput();
          if (is == null)
              return false;
  
          List<ItemStack> ingredients = getIngredients(recipe);
          if (playerHasIngredients(player, ingredients))
          {
              // We have the ingredients we need, so directly manipulate the inventory.
              // First, remove the ingredients:
              removeIngredientsFromPlayer(player, ingredients);
              // Now add the output of the recipe:
  
              ItemStack resultForInventory = is.copy();
              ItemStack resultForReward = is.copy();
              player.inventory.addItemStackToInventory(resultForInventory);
              RewardForCollectingItemImplementation.GainItemEvent event = new RewardForCollectingItemImplementation.GainItemEvent(resultForReward);
              MinecraftForge.EVENT_BUS.post(event);
  
              return true;
          }
          return false;
      }