Skip to content

FORMAT & MIN ENGINE VERSION 1.20.30

This tutorial assumes an advanced understanding of blocks. Check out the blocks guide before starting.

EXPERIMENTAL

Requires Holiday Creator Features for use of block tag Molang queries and to trigger block events.

Creating your own tree with decaying leaves is complex, but possible! Follow this tutorial and you'll have your own in no time.

  • Features:

    • Decaying leaves
    • Tree Feature compatable
    • If leaves were broken using shears, they will drop the block
    • Leaves don't decay if placed by player
    • Logs are strippable and rotatable
    • Stripping logs is compatible with tools from other add-ons (if they have the minecraft:is_axe tag)
    • Saplings can be bonemealed and grow the tree (with structures)
  • Issues:

    • If you make a structure with these blocks, it will crash the game when generated using features.

Decaying Leaves

You will notice straight away that our custom leaves have a long list to search for a vanilla log/custom log by its block tag, although the code example uses the custom logs for this tutorial. The value is 4 and this method is used to search for the nearest log in a circular radius.

Decaying Leaves Showcase

Our custom leaves disables ticking when placed by the player which doesn't make the leaves decay and this removes the requirements for another duplicate leave block.

Custom Log

Stripped Log

Here all components are the same

Custom Sapling

For the sapling we will need structures of our tree to make the sapling semi-realistic as features cannot currently be placed with commands on Minecraft Bedrock.

Sapling Placer

Loot Tables

Exporting Structures

Build a tree for your sapling to grow into!

Tree Features

TIP

Tree Features are a really great way to get actual custom trees. You need some understanding on how they work but for this tutorial you can uses these templates.

Resource Pack (optional guide)

Now it is time to make a resource pack!

Make translations for blocks:

RP/texts/en_US.lang
tile.wiki:custom_log.name=Custom Log
tile.wiki:custom_leaves.name=Custom Leaves
tile.wiki:custom_stripped_log.name=Custom Stripped Log
tile.wiki:custom_sapling.name=Custom Sapling
item.wiki:custom_sapling_placer=Custom Sapling

Make terrain_texture.json and textures.

RP/textures/terrain_texture.json
json
{
  "resource_pack_name": "custom-trees",
  "texture_name": "atlas.terrain",
  "num_mip_levels": 4,
  "padding": 8,
  "texture_data": {
    "custom_leaves": {
      "textures": "textures/blocks/leaves_oak"
    },
    "custom_log": {
      "textures": "textures/blocks/log_oak"
    },
    "custom_log_top": {
      "textures": "textures/blocks/log_oak_top"
    },
    "custom_stripped_log": {
      "textures": "textures/blocks/stripped_oak_log"
    },
    "custom_stripped_log_top": {
      "textures": "textures/blocks/stripped_oak_log_top"
    },
    "custom_sapling": {
      "textures": "textures/blocks/sapling_oak"
    }
  }
}

Make geometry for sapling:

RP/models/blocks/custom_sapling.geo.json
json
{
  "format_version": "1.12.0",
  "minecraft:geometry": [
    {
      "description": {
        "identifier": "geometry.custom_sapling",
        "texture_width": 16,
        "texture_height": 16,
        "visible_bounds_width": 2,
        "visible_bounds_height": 2.5,
        "visible_bounds_offset": [0, 0.75, 0]
      },
      "bones": [
        {
          "name": "sapling",
          "pivot": [0, 0, 0],
          "cubes": [
            {
              "origin": [-8, 0, 0],
              "size": [16, 16, 0],
              "pivot": [0, 0, 0],
              "rotation": [0, 45, 0],
              "uv": {
                "north": {"uv": [0, 0], "uv_size": [16, 16]}
              }
            },
            {
              "origin": [-8, 0, 0],
              "size": [16, 16, 0],
              "pivot": [0, 0, 0],
              "rotation": [0, -45, 0],
              "uv": {
                "north": {"uv": [0, 0], "uv_size": [16, 16]}
              }
            }
          ]
        }
      ]
    }
  ]
}

Make item_texture file

RP/textures/item_texture.json
json
{
  "resource_pack_name": "custom-trees",
  "texture_name": "atlas.items",
  "texture_data": {
    "custom_sapling_placer": {
      "textures": "textures/blocks/sapling_oak"
    }
  }
}

Add sounds to blocks

RP/blocks.json
json
{
  "format_version": [1, 1, 0],
  "wiki:custom_leaves": {
    "sound": "grass"
  },
  "wiki:custom_log": {
    "sound": "wood"
  },
  "wiki:custom_stripped_log": {
    "sound": "wood"
  },
  "wiki:custom_sapling": {
    "sound": "grass"
  }
}

Result

What you have created:

📁BP
📁blocks
📝custom_leaves.json
📝custom_log.json
📝custom_stripped_log.json
📝custom_sapling.json
📁features
📝custom_tree_feature.json
📁feature_rules
📝custom_tree_feature_rule.json
📁items
📝custom_sapling_placer.json
📁loot_tables
📁blocks
📝custom_leaves.json
📝custom_leaves_shears.json
📝custom_sapling.json
📁structures
🏛custom_tree.mcstructure
📁RP
📝blocks.json
📁texts
🈵en_US.lang
📁textures
📝terrain_texture.json
📝item_texture.json
📁models
📁blocks
📝custom_sapling.geo.json

Download Example Pack

Template Pack to use in-game to get the idea.

Download MCADDON