Complete Configuration Reference

Configuration Reference

Current CoreToolsX YAML files, reload boundaries, runtime model, permissions, troubleshooting, and production checks.

0. Before You Configure

Minimum requirements are Paper 1.21.11+, Java 21+, CoreToolsX installed on a Paper server, and a permission plugin only if progression locks are enabled.

Default behavior is conservative: progression locks, skin durability, and fire/lava stripping are disabled by default, foreign custom item transformations are blocked when detected, and VISUAL_SKIN mode works without a resource pack.

1. File Layout

plugins/CoreToolsX/
  config.yml
  tool-upgrades.yml
  tool-skins.yml
  messages.yml
  resource-pack/        # optional addon for REAL_TIER inventory models

plugin.yml is bundled inside the jar and documents commands, aliases, permissions, and plugin identity.

2. Reload vs Restart

Use /coretoolsx reload for normal YAML edits, recipe changes, message edits, lore template changes, progression permission node changes in YAML, and recipe re-registration. Restart when replacing the jar, changing Paper/Minecraft version, or recovering from startup-only errors.

The optional resource-pack addon does not require a server restart after zip changes, but players must reload or reselect the pack client-side.

3. Clean Setup Checklist

  • Install the jar and let defaults generate.
  • Keep tool-skin.inventory-model.mode: VISUAL_SKIN unless the optional resource-pack addon is installed.
  • Decide whether to keep recipes.override-vanilla-equipment-recipes: true.
  • Configure upgrade and skin permissions only if progression-locks.enabled: true.
  • Keep custom item behavior on BLOCK_IF_DETECTED unless conversion is intentional.
  • Test recipes with separate one-item ingredient slots.

4. Runtime Model

CoreToolsX has two item modes. Normal upgraded tools use vanilla material as the source of truth and do not receive CoreToolsX PDC. Skinned netherite tools change material for the visual skin, keep netherite-equivalent tool behavior, and store clean material, skin identity, lore snapshot, model mode, and optional skin durability in PDC.

Already-skinned tools cannot be upgraded or skinned again until stripped. Supported types are sword, pickaxe, axe, shovel, hoe, and spear.

5. config.yml

Controls global debug mode, protected vanilla recipe behavior, recipe book discovery, ingredient groups, default upgrade behavior, generated lore, inventory model mode, skin removal, fire/lava stripping, progression locks, and custom item protection.

# CoreToolsX main configuration.
#
# CoreToolsX is designed as a Paper-only vanilla+ tool progression plugin.
# This file controls global behavior. Recipe definitions live in:
# - tool-upgrades.yml
# - tool-skins.yml
#
# All text shown to players is configured in messages.yml.

settings:
  # Enables extra startup/reload diagnostic logs.
  # Keep false on production unless you are debugging configuration or recipe behavior.
  debug: false

tool-skin:
  inventory-model:
    # Controls the item model stored on skinned tools.
    #
    # VISUAL_SKIN:
    # - Default and resource-pack-free mode.
    # - A netherite tool skinned as iron becomes an IRON_* item with netherite
    #   tool components, so it looks iron both in inventory and in hand.
    #
    # REAL_TIER:
    # - Requires the CoreToolsX resource-pack addon.
    # - The real item Material still becomes the visual skin Material, but
    #   CoreToolsX sets item_model to coretoolsx:skinned/<material>.
    # - The addon model shows netherite in GUI/ground contexts and the visual
    #   skin model in hand. Without the addon, the item will render as a
    #   missing/invalid custom model.
    mode: VISUAL_SKIN

recipes:
  # When true, CoreToolsX blocks protected vanilla direct tool recipe outputs at
  # crafting time and uses progression recipes instead. It does not remove
  # minecraft:* recipes from the server registry, so reload/disable is safe.
  # Wooden tools and vanilla diamond -> netherite smithing are not touched.
  override-vanilla-equipment-recipes: true

  # Cooldown used by blocked-crafting messages to avoid chat spam.
  # Value is in server ticks. 20 ticks = 1 second.
  blocked-message-cooldown-ticks: 40

  recipe-book:
    # Registers static placeholder recipes so players can discover CoreToolsX
    # recipes naturally in the vanilla recipe book.
    enabled: true

ingredient-groups:
  # Ingredient groups let upgrade/skin definitions reference a named set instead
  # of a single Bukkit Material. Runtime matching is MATERIAL_ONLY, so any item
  # whose Material is listed here can satisfy that ingredient cost.
  #
  # The static recipe-book entry still uses the first valid material as the
  # representative ingredient; the runtime matcher accepts the whole group.
  WOOD_TOOL_MATERIALS:
    - OAK_PLANKS

  STONE_TOOL_MATERIALS:
    - COBBLESTONE
    - COBBLED_DEEPSLATE
    - BLACKSTONE

  COPPER_TOOL_MATERIALS:
    - COPPER_INGOT

  IRON_TOOL_MATERIALS:
    - IRON_INGOT

  GOLD_TOOL_MATERIALS:
    - GOLD_INGOT

  DIAMOND_TOOL_MATERIALS:
    - DIAMOND

upgrades:
  # Master switch for tool upgrade crafting.
  enabled: true

  # Default cost behavior used when an tool-upgrades.yml entry does not override it.
  # VANILLA_RECIPE_COST means shovel/spear 1, sword/hoe 2, pickaxe/axe 3.
  cost-mode: VANILLA_RECIPE_COST

  # Durability behavior after an upgrade:
  # - REFILL: output item is fully repaired.
  # - KEEP_DAMAGE: preserves the exact damage value when possible.
  # - KEEP_PERCENTAGE: preserves the percentage of durability already used.
  durability-mode: REFILL

  # When true, anvil repair cost is preserved by Bukkit/Paper meta conversion
  # whenever the target item supports it. When false, upgrade output repair cost
  # is cleared.
  preserve-repair-cost: true

skins:
  # Master switch for visual skin recipes.
  enabled: true

  # V1 skin crafting is intentionally fixed to clean netherite tools in a
  # vanilla crafting table. The output Material becomes the selected visual
  # skin tier, but receives netherite-equivalent components. Already-skinned
  # items must be stripped first.

  lore:
    # Adds generated CoreToolsX lore lines that identify the active visual skin.
    # CoreToolsX snapshots the original item lore into PDC before rebuilding
    # the final lore from generated-lines.
    enabled: true

    # Legacy single-line format. Used only if generated-lines is empty.
    format: "<reset><gray>Skin: <white>{skin}"

    # MiniMessage lines rendered from current config every time the item is
    # refreshed, dyed, fixed, or skin durability changes.
    # The final item lore is exactly this list after placeholder expansion.
    # To display the saved original item lore, add a line that is exactly
    # {item_lore}. If this line is missing, the saved original lore remains in
    # PDC for skin removal/reset, but is not shown on the skinned item.
    #
    # Available placeholders:
    # - {item_lore}: must be its own list entry; expands to the saved original lore
    # - {skin}
    # - {skin_id}
    # - {real_tier}
    # - {visual_skin}
    # - {clean_material}
    # - {skin_durability_current}
    # - {skin_durability_max}
    # - {skin_durability_damage}
    # - {skin_durability_remaining}
    # - {skin_durability_percent}
    # - {skin_durability_bar}
    generated-lines:
      - "{item_lore}"
      - "<gray>Skin: <white>{skin}"
      # Example durability line. Uncomment it when skin-durability is enabled
      # in tool-skins.yml and you want the skin durability shown in lore.
      # - "<gray>Skin Durability: <white>{skin_durability_current}</white>/<white>{skin_durability_max}</white> {skin_durability_bar}"
skin-removal:
  # Master switch for removing a skin through crafting.
  enabled: true

  # Tool required in the crafting matrix with a skinned tool.
  # If damage-tool is true and consume-tool is false, this material must have
  # durability. Otherwise removal recipes are skipped and a config warning is logged.
  tool: SHEARS

  # If true, one shears item is consumed.
  consume-tool: false

  # If true, shears take durability damage instead of being consumed.
  damage-tool: true

  # Durability damage applied to shears when damage-tool is true.
  damage-amount: 1

skin-stripping:
  # If false, dropped skinned tools are protected from configured fire/lava
  # destruction causes and keeps the skin.
  #
  # If true, configured causes strip the skin and convert the item back into
  # clean netherite instead of destroying it.
  enabled: false

  # Supported v1 causes:
  # - LAVA
  # - FIRE
  causes:
    - LAVA
    - FIRE

  # MVP supports STRIP_SKIN only.
  mode: STRIP_SKIN

progression-locks:
  # Master switch for permission-based progression locks.
  # CoreToolsX does not store progression state internally.
  enabled: false

  blocks:
    # Blocks protected direct crafting/skin recipes when permission checks fail.
    crafting: true

    # Blocks tool upgrade recipes when permission checks fail.
    upgrades: true

    # Default false: found/traded/given tools remain usable.
    # If true, using tools requires coretoolsx.use.<tier>.
    usage: false

  permissions:
    # Players with this permission bypass all CoreToolsX progression checks.
    bypass: "coretoolsx.progression.bypass"

    # Prefix used when usage locking is enabled.
    # Example: coretoolsx.use.netherite
    usage-prefix: "coretoolsx.use"

compatibility:
  custom-items:
    # Custom item protection mode:
    # - BLOCK_IF_DETECTED: block transformation if foreign PDC data is found.
    # - REPLACE_ANYWAY: allow CoreToolsX transformations even when foreign PDC
    #   data is present. Use only when you know those custom items are safe.
    behavior: BLOCK_IF_DETECTED

{item_lore} must be its own generated lore entry. If it is missing, original lore remains stored in PDC but is not displayed.

6. tool-upgrades.yml

Defines normal tool progression recipes. Supported fields include enabled, from-tier, from-material, to-tier, to-material, ingredient, cost-mode, count, and permission.

# CoreToolsX tool upgrade definitions.
#
# These recipes change the real vanilla Material of the tool. Normal upgraded
# tools do not receive CoreToolsX PDC; the Material remains the source of truth.
#
# Supported fields:
# - enabled: true/false
# - from-tier: WOOD, STONE, COPPER, IRON, GOLD, DIAMOND, NETHERITE
# - from-material: exact Bukkit Material for a special one-tool recipe
# - to-tier: target tier for all configured tool types
# - to-material: exact Bukkit Material for a special one-tool recipe
# - ingredient: Bukkit Material or ingredient-groups.<id> from config.yml
# - cost-mode: VANILLA_RECIPE_COST or CUSTOM
# - count: explicit ingredient count, used only when cost-mode is CUSTOM
# - permission: permission required when progression locks are enabled
#
# VANILLA_RECIPE_COST means:
# - shovel: 1
# - spear: 1
# - sword: 2
# - hoe: 2
# - pickaxe: 3
# - axe: 3

upgrades:
  wood_to_stone:
    enabled: true
    from-tier: WOOD
    to-tier: STONE
    ingredient: STONE_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.upgrade.wood_to_stone"

  stone_to_copper:
    enabled: true
    from-tier: STONE
    to-tier: COPPER
    ingredient: COPPER_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.upgrade.stone_to_copper"

  copper_to_iron:
    enabled: true
    from-tier: COPPER
    to-tier: IRON
    ingredient: IRON_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.upgrade.copper_to_iron"

  iron_to_diamond:
    enabled: true
    from-tier: IRON
    to-tier: DIAMOND
    ingredient: DIAMOND_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.upgrade.iron_to_diamond"

  iron_to_gold:
    # Gold is an optional endpoint branch, separate from the main diamond path.
    enabled: true
    from-tier: IRON
    to-tier: GOLD
    ingredient: GOLD_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.upgrade.iron_to_gold"

The default upgrade chain is wood to stone, stone to copper, copper to iron, iron to diamond, and iron to gold. VANILLA_RECIPE_COST means shovel/spear 1, sword/hoe 2, pickaxe/axe 3.

7. tool-skins.yml

Defines netherite-only visual skin recipes and controls optional skin durability. Default skin ids are wood, stone, copper, iron, gold, and diamond.

# CoreToolsX netherite tool skin definitions.
#
# Skin recipes are netherite-only. A skin changes the real item Material to the
# visual tier, then CoreToolsX applies netherite-equivalent tool components.
#
# Example: a netherite pickaxe with the iron skin becomes an IRON_PICKAXE with
# netherite max damage, tool rules, weapon data, and CoreToolsX PDC.
#
# Supported fields:
# - enabled: true/false
# - display-name: name used in generated lore and messages
# - ingredient: Bukkit Material or ingredient-groups.<id> from config.yml
# - cost-mode: VANILLA_RECIPE_COST or CUSTOM
# - count: explicit ingredient count, used only when cost-mode is CUSTOM
# - permission: permission required when progression locks are enabled
#
# VANILLA_RECIPE_COST means:
# - shovel: 1
# - spear: 1
# - sword: 2
# - hoe: 2
# - pickaxe: 3
# - axe: 3

skins:
  wood:
    enabled: true
    display-name: "Wood"
    ingredient: WOOD_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.skin.wood"

  stone:
    enabled: true
    display-name: "Stone"
    ingredient: STONE_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.skin.stone"

  copper:
    enabled: true
    display-name: "Copper"
    ingredient: COPPER_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.skin.copper"

  iron:
    enabled: true
    display-name: "Iron"
    ingredient: IRON_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.skin.iron"

  gold:
    enabled: true
    display-name: "Gold"
    ingredient: GOLD_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.skin.gold"

  diamond:
    enabled: true
    display-name: "Diamond"
    ingredient: DIAMOND_TOOL_MATERIALS
    cost-mode: VANILLA_RECIPE_COST
    permission: "coretoolsx.skin.diamond"

skin-durability:
  # Skin durability is stored in CoreToolsX PDC and applies only to skinned
  # tools. It does not replace vanilla DAMAGE/MAX_DAMAGE on the real item.
  #
  # Supported v1 modes:
  # - DISABLED: no skin durability is tracked.
  # - GLOBAL: every skin uses global.max-durability.
  # - BY_SKIN: each skin reads by-skin.materials.<skin>, then fallback values.
  # - BY_ITEM: each tool reads by-item.materials.<skin>.<type>, then fallback values.
  mode: DISABLED

  global:
    max-durability: 5000

  by-skin:
    default-max-durability: 5000
    materials:
      wood: 3500
      stone: 4500
      copper: 5000
      iron: 6500
      gold: 2500
      diamond: 9000

  by-item:
    default-max-durability: 5000
    materials:
      wood:
        default-max-durability: 3500
        sword: 2500
        pickaxe: 3200
        axe: 3200
        shovel: 1800
        hoe: 2200
        spear: 2500

      stone:
        default-max-durability: 4500
        sword: 3200
        pickaxe: 4100
        axe: 4100
        shovel: 2300
        hoe: 2800
        spear: 3200

      copper:
        default-max-durability: 5000
        sword: 3600
        pickaxe: 4550
        axe: 4550
        shovel: 2550
        hoe: 3150
        spear: 3600

      iron:
        default-max-durability: 6500
        sword: 4700
        pickaxe: 5900
        axe: 5900
        shovel: 3300
        hoe: 4100
        spear: 4700

      gold:
        default-max-durability: 2500
        sword: 1800
        pickaxe: 2250
        axe: 2250
        shovel: 1250
        hoe: 1550
        spear: 1800

      diamond:
        default-max-durability: 9000
        sword: 6500
        pickaxe: 8200
        axe: 8200
        shovel: 4600
        hoe: 5700
        spear: 6500

  damage:
    mode: MIRROR_REAL_DAMAGE
    multiplier: 1.0

  on-break: REMOVE_SKIN

  mending:
    mode: DISABLED

  placeholders:
    disabled-value: ""
    bar-segments: 10
    bar-full: "<green>|"
    bar-empty: "<dark_gray>|"

Skin durability modes are DISABLED, GLOBAL, BY_SKIN, and BY_ITEM. Mending modes are DISABLED, SPLIT, and DOUBLE.

8. messages.yml

Messages use Adventure MiniMessage. The configured prefix is prepended automatically. Only documented placeholders near each message should be used.

Inspect messages are useful for checking current material, clean material, visual skin, inventory model mode, CoreToolsX data, generated lore state, original lore snapshot, skin durability, tier, and tool type.

# CoreToolsX messages.
#
# All user-facing text should live here.
# Messages use Adventure MiniMessage syntax:
# https://docs.advntr.dev/minimessage/format.html
#
# Placeholder format is {placeholder}. A message only receives placeholders
# that are meaningful for that specific command or event.

# Prefix is prepended automatically by MessageService to every configured message.
prefix: "<dark_gray>[<aqua>CoreToolsX</aqua>]</dark_gray> "

commands:
  # Generic permission failure for commands.
  no-permission: "<red>You do not have permission to do this."

  # Sent when an unknown /coretoolsx subcommand is used.
  unknown: "<red>Unknown command. Use <white>/coretoolsx help</white>."

  # Sent after /coretoolsx reload successfully reloads configs and recipes.
  reloaded: "<green>CoreToolsX reloaded."

  # Placeholder:
  # - {version}: plugin version from plugin.yml
  version: "<gray>CoreToolsX version <white>{version}</white>."

  # Help command lines. Permission-gated lines are only shown when the sender
  # has the corresponding permission.
  help-header: "<gray>CoreToolsX commands:"
  help-version: "<dark_gray>- <aqua>/coretoolsx version</aqua>"
  help-reload: "<dark_gray>- <aqua>/coretoolsx reload</aqua>"
  help-inspect: "<dark_gray>- <aqua>/coretoolsx inspect</aqua>"
  help-fixitem: "<dark_gray>- <aqua>/coretoolsx fixitem</aqua>"

  # Sent when a player-only command is run from console.
  player-only: "<red>This command can only be used by a player."

crafting:
  # Sent when a protected vanilla tool recipe is blocked.
  blocked-vanilla-craft: "<red>You must upgrade the previous tool tier first."

  # Sent when permission-based progression blocks an upgrade or skin recipe.
  no-permission: "<red>You do not have permission for this tool progression."

  # Sent when compatibility mode blocks transformation of a detected custom item.
  custom-item-blocked: "<red>This custom item cannot be modified by CoreToolsX."

progression:
  # Sent when progression-locks.blocks.usage is true and the player lacks
  # the required coretoolsx.use.<tier> permission.
  usage-blocked: "<red>You do not have permission to use this tool tier."

admin:
  # Sent by /coretoolsx inspect when the player has no held item.
  inspect-empty-hand: "<red>Hold a tool item first."

  # Sent by /coretoolsx fixitem when the player has no held item.
  fix-empty-hand: "<red>Hold a tool item first."

  # Sent by /coretoolsx fixitem when the held item is not CoreToolsX skinned tool.
  fix-not-skinned: "<red>This item is not a CoreToolsX skinned tool item."

  # Sent by /coretoolsx fixitem after the profile/lore/PDC refresh completes.
  fixed: "<green>Item fixed."

  inspect:
    # Header for /coretoolsx inspect output.
    header: "<gray>Item inspection:"

    # Placeholder:
    # - {material}: current Bukkit Material name
    current-material: "<dark_gray>- <gray>Current Material: <white>{material}</white>"

    # Placeholder:
    # - {material}: saved clean netherite Material for skinned tool
    clean-material: "<dark_gray>- <gray>Clean Material: <white>{material}</white>"

    # Placeholder:
    # - {skin}: saved visual skin tier
    visual-skin: "<dark_gray>- <gray>Visual Skin: <white>{skin}</white>"

    # Placeholder:
    # - {mode}: REAL_TIER or VISUAL_SKIN
    inventory-model-mode: "<dark_gray>- <gray>Inventory Model Mode: <white>{mode}</white>"

    # Placeholder:
    # - {value}: true/false
    has-core-data: "<dark_gray>- <gray>Has CoreToolsX Data: <white>{value}</white>"

    # Placeholder:
    # - {value}: true/false
    generated-lore: "<dark_gray>- <gray>Generated Skin Lore: <white>{value}</white>"

    # Placeholder:
    # - {value}: true/false
    original-lore: "<dark_gray>- <gray>Original Lore Snapshot: <white>{value}</white>"

    # Placeholder:
    # - {damage}: skin durability damage stored in PDC
    # - {max}: skin max durability stored in PDC
    # - {remaining}: max minus damage
    # - {percent}: remaining percent
    skin-durability: "<dark_gray>- <gray>Skin Durability: <white>{remaining}</white>/<white>{max}</white> <dark_gray>({percent}%, damage {damage})"

    # Sent when skin durability mode is disabled or the item has no skin
    # durability PDC.
    skin-durability-disabled: "<dark_gray>- <gray>Skin Durability: <white>disabled</white>"

    # Placeholder:
    # - {tier}: detected tool tier for normal tool
    tier: "<dark_gray>- <gray>Tier: <white>{tier}</white>"

    # Placeholder:
    # - {piece}: detected tool type for normal tool
    piece: "<dark_gray>- <gray>Type: <white>{piece}</white>"

9. plugin.yml

Complete bundled plugin descriptor. Maven resolves ${project.version} when the release jar is built.

name: CoreToolsX
main: it.icewolf23x.coretoolsx.CoreToolsXPlugin
version: ${project.version}
api-version: '1.21'
description: Vanilla+ tool progression and netherite tool skins for Paper.
author: IceWolf23X
prefix: CoreToolsX
commands:
  coretoolsx:
    description: CoreToolsX main command.
    usage: /coretoolsx
    aliases:
      - ctx
permissions:
  coretoolsx.admin:
    description: Grants all CoreToolsX admin permissions.
    default: op
    children:
      coretoolsx.admin.reload: true
      coretoolsx.admin.inspect: true
      coretoolsx.admin.fixitem: true
      coretoolsx.progression.bypass: true
  coretoolsx.admin.reload:
    description: Allows reloading CoreToolsX configuration.
    default: op
  coretoolsx.admin.inspect:
    description: Allows inspecting held CoreToolsX tool items.
    default: op
  coretoolsx.admin.fixitem:
    description: Allows repairing CoreToolsX metadata/profile on the held item.
    default: op
  coretoolsx.progression.bypass:
    description: Bypasses CoreToolsX permission progression locks.
    default: op
  coretoolsx.skin.*:
    description: Allows every CoreToolsX tool skin.
    default: op
    children:
      coretoolsx.skin.wood: true
      coretoolsx.skin.stone: true
      coretoolsx.skin.copper: true
      coretoolsx.skin.iron: true
      coretoolsx.skin.gold: true
      coretoolsx.skin.diamond: true
  coretoolsx.upgrade.*:
    description: Allows every CoreToolsX tool upgrade.
    default: op
    children:
      coretoolsx.upgrade.wood_to_stone: true
      coretoolsx.upgrade.stone_to_copper: true
      coretoolsx.upgrade.copper_to_iron: true
      coretoolsx.upgrade.iron_to_gold: true
      coretoolsx.upgrade.iron_to_diamond: true
  coretoolsx.use.*:
    description: Allows using every CoreToolsX tool tier when usage locks are enabled.
    default: op
    children:
      coretoolsx.use.wood: true
      coretoolsx.use.stone: true
      coretoolsx.use.copper: true
      coretoolsx.use.iron: true
      coretoolsx.use.gold: true
      coretoolsx.use.diamond: true
      coretoolsx.use.netherite: true

10. Permissions

coretoolsx.admin
coretoolsx.admin.reload
coretoolsx.admin.inspect
coretoolsx.admin.fixitem
coretoolsx.progression.bypass
coretoolsx.upgrade.*
coretoolsx.skin.*
coretoolsx.use.*

Usage permissions matter only when both progression-locks.enabled and progression-locks.blocks.usage are true.

11. Troubleshooting Quick Reference

No recipe appears

  • Check recipes.recipe-book.enabled.
  • Check the relevant entry has enabled: true.
  • Run /coretoolsx reload.
  • Check console warnings for invalid materials or costs above 8.

Recipe output appears but clicking does nothing

  • Check progression permissions if locks are enabled.
  • Use separate one-item ingredient slots.
  • Confirm the base item is not already skinned.
  • Check custom item compatibility mode.

Skinned tool lost expected lore

Ensure {item_lore} exists in skins.lore.generated-lines, then hold the item and run /coretoolsx fixitem.

Missing texture or wrong inventory model

Use VISUAL_SKIN mode with no pack, or install the CoreToolsX resource-pack addon before enabling REAL_TIER.

Player cannot use tools

Check progression-locks.blocks.usage, then grant coretoolsx.use.<tier> or coretoolsx.progression.bypass.

12. Production Validation Checklist

  • Run /coretoolsx reload.
  • Confirm console has no CoreToolsX warnings.
  • Craft one normal upgrade from each configured path.
  • Craft one skin recipe.
  • Remove one skin with shears.
  • Inspect a skinned item with /coretoolsx inspect.
  • Run /coretoolsx fixitem.
  • Test fire/lava behavior if skin stripping changed.
  • Test permissions with a non-op account if progression locks are enabled.