Skip to content

Fletching recipes

Fletching recipes are datapack JSON files, so a datapack can add new ones or replace the built-in ones without code.

Generator

Fill in the slots and copy the result. Use the buttons to start from a built-in recipe.

Start from:
top
middle
bottom
output
Makes 4 × Arrow
Save asdata/mypack/recipe/fletching/arrow_from_bone.json
{
  "type": "fletchingrecipe:fletching",
  "top": {
    "ingredient": "minecraft:bone",
    "count": 1
  },
  "middle": {
    "ingredient": "minecraft:stick",
    "count": 1
  },
  "bottom": {
    "ingredient": "minecraft:feather",
    "count": 1
  },
  "output": {
    "id": "minecraft:arrow",
    "count": 4
  }
}
Put it in a datapack and run /reload. A file at the same path as a built-in recipe replaces it.

Where the file goes

text
my_pack/
├── pack.mcmeta
└── data/
    └── <namespace>/
        └── recipe/
            └── <name>.json

Any namespace and name work. Subfolders are allowed, so data/mypack/recipe/fletching/bone_arrow.json has the id mypack:fletching/bone_arrow.

Put the datapack in the world's datapacks folder and run /reload. Players' JEI updates straight away.

Format

json
{
  "type": "fletchingrecipe:fletching",
  "top": {
    "ingredient": "minecraft:flint",
    "count": 1
  },
  "middle": {
    "ingredient": "minecraft:stick",
    "count": 1
  },
  "bottom": {
    "ingredient": "minecraft:feather",
    "count": 1
  },
  "output": {
    "id": "minecraft:arrow",
    "count": 8
  }
}
FieldRequiredMeaning
typeYesAlways fletchingrecipe:fletching
topYesIngredient for the top slot
middleYesIngredient for the middle slot
bottomNoIngredient for the bottom slot. Leave it out and the recipe only matches when the bottom slot is empty.
outputYesThe item stack the recipe makes

Slot ingredients

FieldTypeMeaning
ingredientIngredientWhat the slot accepts. See below.
countPositive integer, optional (default 1)How many items the slot needs, and how many one craft takes

An ingredient can be written three ways:

json
"ingredient": "minecraft:feather"
json
"ingredient": ["minecraft:feather", "minecraft:phantom_membrane"]
json
"ingredient": "#minecraft:planks"

Output

FieldTypeMeaning
idItem idThe item made
countPositive integer, optional (default 1)How many one craft makes
componentsObject, optionalData components on the item, such as a potion

For example, a recipe that makes Arrows of Poison:

json
"output": {
  "id": "minecraft:tipped_arrow",
  "count": 8,
  "components": {
    "minecraft:potion_contents": {
      "potion": "minecraft:poison"
    }
  }
}

Replacing a built-in recipe

Add a file with the same id to your datapack. The built-in recipes are:

RecipeFile
Arrowdata/fletchingrecipe/recipe/fletching/arrow.json
Spectral arrowdata/fletchingrecipe/recipe/fletching/spectral_arrow.json

Things to know

  • Recipes are checked before tipped and explosive arrows. A recipe that matches the same items takes their place.
  • If two recipes match the same items, the game picks one of them. Give each recipe a distinct combination.
  • Plain ingredients ignore components: "minecraft:lingering_potion" accepts every lingering potion.
  • The output is always the same item. It does not copy anything from the ingredients.

All Rights Reserved.