Bedrock Snippets

Custom Trees

View Source

custom_trees > bp > blocks > custom_leaves.json

{
  "format_version": "1.20.30",
  "minecraft:block": {
    "description": {
      "identifier": "wiki:custom_leaves",
      "states": {
        "wiki:decay_tier": [4, 3, 2, 1, 0], // Distance in blocks to find the log
        "wiki:should_decay": [true, false], // Used when placed by the player or with features
        "wiki:opaque": [false, true] // Optional; makes the leaves opaque when surrounded
      }
    },
    "components": {
      "tag:custom_leaves": {},
      "minecraft:loot": "loot_tables/empty.json",
      "minecraft:unit_cube": {},
      "minecraft:on_player_placing": {
        "event": "wiki:stop_decay"
      },
      // Triggers event that spawns different loot
      "minecraft:on_player_destroyed": {
        "event": "wiki:on_destroyed"
      },
      // We need both of these to work with world generation
      "minecraft:queued_ticking": {
        "looping": true,
        "interval_range": [0, 0],
        "on_tick": {
          "event": "wiki:check"
        }
      },
      "minecraft:random_ticking": {
        "on_tick": {
          "event": "wiki:check"
        }
      },
      "minecraft:destructible_by_explosion": {
        "explosion_resistance": 1
      },
      "minecraft:destructible_by_mining": {
        "seconds_to_destroy": 0.3
      },
      "minecraft:map_color": "#DDDDDD",
      "minecraft:light_dampening": 0,
      "minecraft:material_instances": {
        "*": {
          "texture": "custom_leaves",
          "render_method": "blend"
        }
      }
    },
    "events": {
      // Defines the loot for the tool
      "wiki:on_destroyed": {
        "sequence": [
          {
            "condition": "q.is_item_name_any('slot.weapon.mainhand','minecraft:shears')",
            "spawn_loot": {
              "table": "loot_tables/blocks/custom_leaves_shears.json"
            }
          },
          {
            "condition": "!q.is_item_name_any('slot.weapon.mainhand','minecraft:shears')",
            "spawn_loot": {
              "table": "loot_tables/blocks/custom_leaves.json"
            }
          }
        ]
      },
      // Checks for the log
      "wiki:check": {
        "sequence": [
          {
            "condition": "q.block_state('wiki:should_decay')",
            "set_block_state": {
              "wiki:decay_tier": "(q.block_neighbor_has_any_tag(0,0,-1,'log') || q.block_neighbor_has_any_tag(0,0,1,'log') || q.block_neighbor_has_any_tag(-1,0,0,'log') || q.block_neighbor_has_any_tag(1,0,0,'log') || q.block_neighbor_has_any_tag(0,-1,0,'log') || q.block_neighbor_has_any_tag(0,1,0,'log')) ? 4 : ((q.block_neighbor_has_any_tag(0,0,-1,'decay_tier_4') || q.block_neighbor_has_any_tag(0,0,1,'decay_tier_4') || q.block_neighbor_has_any_tag(-1,0,0,'decay_tier_4') || q.block_neighbor_has_any_tag(1,0,0,'decay_tier_4') || q.block_neighbor_has_any_tag(0,-1,0,'decay_tier_4') || q.block_neighbor_has_any_tag(0,1,0,'decay_tier_4')) ? 3 : ( (q.block_neighbor_has_any_tag(0,0,-1,'decay_tier_3') || q.block_neighbor_has_any_tag(0,0,1,'decay_tier_3 ') || q.block_neighbor_has_any_tag(-1,0,0,'decay_tier_3') || q.block_neighbor_has_any_tag(1,0,0,'decay_tier_3') || q.block_neighbor_has_any_tag(0,-1,0,'decay_tier_3') || q.block_neighbor_has_any_tag(0,1,0,'decay_tier_3')) ? 2 : ( (q.block_neighbor_has_any_tag(0,0,-1,'decay_tier_2') || q.block_neighbor_has_any_tag(0,0,1,'decay_tier_2') || q.block_neighbor_has_any_tag(-1,0,0,'decay_tier_2') || q.block_neighbor_has_any_tag(1,0,0,'decay_tier_2') || q.block_neighbor_has_any_tag(0,-1,0,'decay_tier_2') || q.block_neighbor_has_any_tag(0,1,0,'decay_tier_2')) ? 1 : 0 ) ) )"
            }
          },
          {
            "set_block_state": {
              "wiki:opaque": "q.block_neighbor_has_any_tag(0,0,-1,'log','stone','custom_leaves') && q.block_neighbor_has_any_tag(0,0,1,'log','stone','custom_leaves') && q.block_neighbor_has_any_tag(0,1,0,'log','stone','custom_leaves') && q.block_neighbor_has_any_tag(0,-1,0,'log','stone','custom_leaves') && q.block_neighbor_has_any_tag(-1,0,0,'log','stone','custom_leaves') && q.block_neighbor_has_any_tag(1,0,0,'log','stone','custom_leaves')"
            }
          }
        ]
      },
      // When placed
      "wiki:stop_decay": {
        "set_block_state": {
          "wiki:should_decay": false
        }
      },
      // When decayed
      "wiki:decay": {
        "die": {},
        "spawn_loot": {
          "table": "loot_tables/blocks/custom_leaves.json"
        }
      }
    },
    "permutations": [
      {
        "condition": "q.block_state('wiki:decay_tier') == 0",
        "components": {
          "minecraft:random_ticking": {
            "on_tick": {
              "event": "wiki:decay"
            }
          },
          "tag:decay_tier_0": {}
        }
      },
      {
        "condition": "q.block_state('wiki:decay_tier') == 1",
        "components": {
          "tag:decay_tier_1": {}
        }
      },
      {
        "condition": "q.block_state('wiki:decay_tier') == 2",
        "components": {
          "tag:decay_tier_2": {}
        }
      },
      {
        "condition": "q.block_state('wiki:decay_tier') == 3",
        "components": {
          "tag:decay_tier_3": {}
        }
      },
      {
        "condition": "q.block_state('wiki:decay_tier') == 4",
        "components": {
          "tag:decay_tier_4": {}
        }
      },
      {
        "condition": "q.block_state('wiki:opaque')",
        "components": {
          "minecraft:material_instances": {
            "*": {
              "texture": "custom_leaves",
              "render_method": "opaque"
            }
          }
        }
      }
    ]
  }
}
Copied to Clipboard