Skip to content

Dynamic Tiers

RoarkCats edited this page Aug 14, 2026 · 8 revisions

Data Structure

Dynamic Tiers are data-driven and can be defined or changed with a datapack.
Tiers can be defined under the following directories:

<Pack>/data/<namespace>/dynamic_multitools/dynamic_tier/<tier>.json

Format

  • String: mod_id (optional, defaults to minecraft) - Used to generate recipes from standard tool ID paths, part of material translation key
  • String: material - Used to generate recipes from standard tool ID paths, part of material translation key
    • Supports a single * asterisk character optionally separating tool material prefix and suffix id parts
    • Ex: foo*bar maps to material translation key foo_bar and tool item ids such as foo_pickaxe_bar
  • Int: color (optional, defaults to -1) - Decimal RGB color tinting for texture layer 1 (tool head)
  • Int: rod_color (optional, defaults to -1) - Decimal RGB color tinting for texture layer 0 (tool rod), default rod texture is wooden, best left at -1
  • String: tier_base (optional) - Used as a base tier from which to pull values from an existing hardcoded tier
    • Tier base does not recognize Dynamic Tiers, only regular tool tiers logged when joining a server
    • Tier string should be lowercase and supports partial matching regex
    • If tier string matches multiple tiers, the first will be used (order may vary on server load)
  • Int: durability (optional) - Sets or overrides tier durability (should be the same as tool set, config controls multiplier)
  • Float: speed (optional) - Sets or overrides tier mining speed (should be the same as tool set, config controls multiplier)
  • Float: damage_bonus (optional) - Sets or overrides tier attack damage (should be the same as tool set, added to multitool base stats)
  • Block Tag: incorrect_blocks_for_drops (optional) - Sets or overrides tier block mining level, commonly used for pickaxe ore level restrictions
  • Int: enchantability (optional) - Sets or overrides tier enchantability for enchanting tables
  • Ingredient: repair_ingredient (optional) - Sets or overrides tier anvil repair ingredient
  • Ingredient: material_ingredient (optional, defaults to repair ingredient) - Sets tier crafting material ingredient
  • Ingredient: rod_ingredient (optional, defaults to #c:rods/wooden) - Sets tier crafting rod ingredient
  • Ingredient: smithing_upgrade_ingredient (optional*) - Sets tier smithing upgrade template, replaces crafting recipe
  • ResourceLocation: smithing_upgrade_from_tier (optional*) - Sets tier smithing upgrade base item tier, replaces crafting recipe
  • Components: default_components (optional) - Applies any additional component overrides (enchantments, custom model data, rarity, etc.)

* Both smithing upgrade fields are required together to function, replacing the crafting recipe with a smithing upgrade recipe.

Tier Base

The tier_base field is a String referencing a vanilla or modded tier hardcoded in. It provides default values for durability, speed, damage_bonus, incorrect_blocks_for_drops, enchantability, repair_ingredient, and thus also material_ingredient. These can still be overriden if desired.

If you are adding a dynamic tier to support a mod's tools, you most likely want to reference their existing tier. You can do this by finding their tier name in your client or server logs upon joining a world if the mod is installed. After selecting a tier base, all that's really required is to set the mod id, material name, and color.

If a tier base is not available or sufficient, it can be supplemented by defining all the fields it provides individually. If no tier base is provided and a single field listed above is missing, the pack will fail to load.

Examples

Adding a basic dynamic tier based on an existing tier with an override:

{
  "material": "diamond",
  "tier_base": "diamond",
  "color": 3403470,
  "enchantability":  12
}

Adding a dynamic tier based on an existing tier with a smithing recipe and custom textures:
(Requires custom model implementation, see Texture Overrides, not a real builtin tier)
(Empty texture tints specified to override tints from diamond tier)

{
  "material": "netherite",
  "tier_base": "netherite",
  "smithing_upgrade_ingredient": {
    "item": "netherite_upgrade_smithing_template"
  },
  "smithing_upgrade_from_tier": "dynamic_multitools:diamond",
  "default_components": {
    "custom_model_data": 1,
    "dynamic_multitools:texture_tints": []
  }
}

Adding a dynamic tier manually for a mod that has tools for a recipe:

{
  "mod_id": "ethium_reimagined",
  "material": "ethium",
  "color": 7632895,
  "rod_color": 6978047,
  "durability": 2500,
  "speed":  12.0,
  "damage_bonus":  5.0,
  "incorrect_blocks_for_drops":  "minecraft:incorrect_for_netherite_tool",
  "enchantability":  18,
  "repair_ingredient":  {
    "item": "ethium_reimagined:ethium_ingot"
  }
}

Adding a dynamic tier with default enchantments and additional tinted layers:

{
  "mod_id": "betternether",
  "material": "flaming_ruby",
  "tier_base": "flaming_ruby",
  "default_components": {
    "custom_model_data": 7,
    "dynamic_multitools:texture_tints": [-1, 16723200, 3403470]
    "enchantments": {
      "levels": {
        "fire_aspect": 3
      }
    }
  }
}

Overriding

The default builtin dynamic tiers can be overriden manually with a data pack using a file path matching that of the mod:

<Pack>/data/dynamic_multitools/dynamic_multitools/dynamic_tier/<tier>.json

Files there with the same name as the default files will override them, to best fit any environment.

Disabling

The default builtin dynamic tiers can be selectively disabled by preventing them from loading with a data pack pack.mcmeta:

{
  "pack": {
    "description": "Disables builtin wooden and stone multitools",
    "pack_format": 48
  },
  "filter": {
    "block": [
      {
        "namespace": "dynamic_multitools",
        "path": "dynamic_multitools/dynamic_tier/(wood.*|stone).json"
      }
    ]
  }
}

The vanilla path field accepts a regex path starting from within the namespaced data directory.

Clone this wiki locally