docs: public static void dumpRecipes(String filename) throws IOException
      {
          FileOutputStream fos = new FileOutputStream(filename);
          OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");
          BufferedWriter writer = new BufferedWriter(osw);
          List<?> recipes = CraftingManager.getInstance().getRecipeList();
          for (Object obj : recipes)
          {
              if (obj == null)
                  continue;
              if (obj instanceof IRecipe)
              {
                  ItemStack is = ((IRecipe)obj).getRecipeOutput();
                  if (is == null)
                      continue;
                  String s = is.getCount() + "x" + is.getUnlocalizedName() + " = ";
                  List<ItemStack> ingredients = getIngredients((IRecipe)obj);
                  if (ingredients == null)
                      continue;
                  boolean first = true;
                  for (ItemStack isIngredient : ingredients)
                  {
                      if (!first)
                          s += ", ";
                      s += isIngredient.getCount() + "x" + isIngredient.getUnlocalizedName();
                      s += "(" + isIngredient.getDisplayName() + ")";
                      first = false;
                  }
                  s += "\n";
                  writer.write(s);
              }
          }
          Iterator<?> furnaceIt = FurnaceRecipes.instance().getSmeltingList().keySet().iterator();
          while (furnaceIt.hasNext())
          {
              ItemStack isInput = (ItemStack)furnaceIt.next();
              ItemStack isOutput = (ItemStack)FurnaceRecipes.instance().getSmeltingList().get(isInput);
              String s = isOutput.getCount() + "x" + isOutput.getUnlocalizedName() + " = FUEL + " + isInput.getCount() + "x" + isInput.getUnlocalizedName() + "\n";
              writer.write(s);
          }
          writer.close();
      }