Changelog

Crucible 5.13.0

General

  • Added Paper 26.2 support.
  • Added external resource-pack imports from local paths and URLs, pack validation, and unchanged-deployment skipping.
  • Added custom music discs and oversized GUI item models.
  • Expanded bags with configurable open actions, skill triggers, content filters, and safer inventory persistence.
  • Added tripwire saplings, per-variant custom-block models, and redstone power triggers.
  • Added transmute recipes, recipe discovery controls, and smithing preservation options.
  • Added a stable public furniture API with placement results, footprint queries, and player attribution.

Resource Pack Generation

External Pack Import

  • Added Generation.Import.FromLocation for merging resource-pack folders or .zip files in list order.
  • Added Generation.Import.FromUrl for downloading and merging resource-pack .zip files directly from URLs.
  • Added Generation.Import.ExternalPackOrder for explicitly ordering packs in plugins/MythicCrucible/external_packs/; unlisted packs follow alphabetically.
  • External pack merging is atlas-aware.
  • ModelEngine textures are routed into items.json on 1.21.11+/26.x.
Generation:
  Import:
    FromLocation:
    - plugins/Emojy/pack.zip
    - packs/my_extra_pack
    FromUrl:
    - https://example.com/shared_assets.zip
    ExternalPackOrder:
    - base_pack
    - overrides.zip

Pack Validation

  • Generated packs are now checked for broken texture references and report problems in the console.
  • Image files that are not valid PNGs, such as renamed JPEGs, are detected and converted automatically.
  • Cached vanilla resource-pack archives are validated before reuse.
  • Vanilla resource-pack extraction now writes atomically to avoid leaving partial caches.

Deployment Changes

  • Added Generation.Deployment.SkipUnchanged.
  • When the generated pack matches the last successful deployment, Crucible skips the upload and SendOnUpdate rebroadcast.
  • Delete plugins/MythicCrucible/generation/.last_deploy to force another upload if the remote copy was removed.
Generation:
  Deployment:
    Enabled: true
    SkipUnchanged: true

Self-Hosting Changes

  • Replaced the NanoHTTPD self-hosting server with the JDK HTTP server.
  • Self-hosted pack URLs are now hash-stamped as <PublicURL>/<sha1>.zip and rotate automatically after regeneration.
  • PublicURL must now be the base address; remove any /resource_pack.zip suffix from existing configurations.
  • Added optional DispatchThreads and Backlog self-hosting settings, defaulting to 4 and 0.
Generation:
  Deployment:
    Type: SELFHOST
    SelfHosting:
      Port: 8080
      DispatchThreads: 4
      Backlog: 0
    AutoSend:
      PublicURL: http://my.server:8080

Oversized GUI Models

  • Added per-item Generation.OversizedInGui for allowing generated models to extend beyond the 16x16 GUI slot on 1.21.6+.
  • Added Generation.ForceOversizedInGui as the global default; individual items can still opt out.
LargeSword:
  Material: DIAMOND_SWORD
  Generation:
    Model: item/large_sword
    OversizedInGui: true

Pack Generation Improvements

  • Greatly improved generated item-model performance.
  • Pack merge logic now preserves shader, atlas, and font JSON structures instead of corrupting them.
  • Per-pack generation and merge folders are now loaded during pack merging.
  • Non-default Generation.Namespace values are now honored for custom armor and generated pack folders.
  • Generated model filenames now stay consistent with their item-definition references.
  • Fixed blanket atlas deduplication removing non-vanilla entity and armor texture directories.
  • Fixed scalar ExcludeOverlays values being ignored.
  • Fixed overlay pack-format drift and Windows path separators inside generated zip files.
  • Fixed PackSquash dropping overlay directories from optimized packs.
  • Hardened resource-pack zip loading and downloads.
  • Fixed legacy custom-model-data overrides being generated when CustomModelData is 0.
  • Legacy CMD shield and trident overrides are now placed in the crucible_legacy overlay on 1.21.4+.
  • Item-definition transformations now survive serialization so vanilla shields no longer flip on 1.21.5+/26.1.
  • MythicCrucibleGeneratePackEvent now fires after the generated pack is fully written.

Items

Arrow Options and Stats

  • Added the ArrowPierce option to arrow-shooting items.
  • Added hardcoded ARROW_DAMAGE and ARROW_PIERCE item stats.
PiercingBow:
  Material: BOW
  ArrowPierce: 2

Custom Music Discs

  • Added JukeboxPlayable and JukeboxSong support for custom music discs.
  • Custom songs support a sound event, duration, description, comparator output, and audible range.
  • A server restart is required the first time a custom jukebox song is added; later changes can be reloaded normally.
MyDisc:
  Material: MUSIC_DISC_13
  Display: "<aqua>C418 - My Cool Song"
  JukeboxPlayable: mythic:my_song
  JukeboxSong:
    SoundEvent: mythic:music.my_song
    Duration: 142.0
    Description: "<aqua>C418 - My Cool Song"
    ComparatorOutput: 15
    Range: 16.0

Multiple Equip Slots

  • EquipSlot now accepts a list or comma-separated string so an item can equip into multiple slots.
  • Items with an Equippable component now default to Equippable.Slot when EquipSlot is omitted.
  • An explicit EquipSlot continues to override the equippable component.
VersatileCharm:
  Material: AMETHYST_SHARD
  EquipSlot:
  - HAND
  - OFFHAND

Default Lore Templates

  • Added an optional default lore template in config-items.yml.
  • EnableDefaultTemplate, DefaultTemplateName, and DefaultTemplate can apply a shared fallback layout for stats, augments, and item lore.
Configuration:
  LoreTemplates:
    EnableDefaultTemplate: true
    DefaultTemplateName: DEFAULT

Bags

  • Added Inventory.OpenActions with HAND, INVENTORY_CLICK, and INVENTORY_SHIFT_CLICK options.
  • Bags can now be opened by right-clicking them in an inventory, and another bag can be opened while a bag is already open.
  • Added ~onBagOpen, ~onBagClose, ~onBagNearlyFull, ~onBagFull, and ~onBagPickup skill triggers.
  • Added Inventory.PreventShulkerNesting, enabled by default.
  • Added case-insensitive Inventory.Whitelist and Inventory.Blacklist filters for material names and Crucible item IDs.
  • Bag content filters apply to place, swap, shift-click, hotbar swap, drag, and auto-pickup actions while always allowing withdrawal.
  • Whitelists take precedence over blacklists.
GemSatchel:
  Type: BAG
  Inventory:
    Size: 27
    OpenActions:
    - HAND
    - INVENTORY_CLICK
    - INVENTORY_SHIFT_CLICK
    PreventShulkerNesting: true
    Whitelist:
    - DIAMOND
    - magic_herb
  Skills:
  - title{title="<red>Satchel Full!"} @self ~onBagFull
  - particles{p=happy_villager} @self ~onBagPickup

Item and Lore Fixes

  • Bag contents now survive item-version updates.
  • Fixed multiple bag inventory desynchronization cases, including PreventBagNesting and auto-pickup workflows.
  • Fixed stat ratios producing or retaining NaN when an old stat range has no span.
  • Fixed stat lore order changing after item deserialization or augmentation.
  • Fixed lore-template color parsing.
  • Fixed PreventRenaming not blocking anvil renames.
  • Improved thread safety while parsing equipped weapons.
  • Fixed equipment-set counts excluding main-hand and off-hand items.

Furniture

Furniture Component Ranges

  • Barrier and light component offsets now accept inclusive start..end ranges on each axis.
  • Added conversion support for expanding furniture component ranges.
LargeLamp:
  Type: FURNITURE
  Furniture:
    Barriers:
    - "0..1,0..2,0"
    Lights:
    - "0..1,0..2,0 15"

Granular Placement Rules

  • Furniture floor, ceiling, and wall placement can now be configured independently.
WallShelf:
  Type: FURNITURE
  Furniture:
    Placement:
      Floor: false
      Ceiling: false
      Wall: true

Typed Custom Model Data

  • Furniture CustomModelData now supports string/, float/, color/, and boolean/ typed values and lists.
  • Typed data works on initial placement, per-state definitions, and runtime state changes.
  • Existing numeric values remain supported.
SignalLamp:
  Type: FURNITURE
  Furniture:
    CustomModelData:
    - string/powered
    - boolean/true

Display Furniture Options

  • Added parsing and application for ShadowRadius, ShadowStrength, and ViewRange on display furniture.
  • These settings can be inherited and overridden by furniture states.
DisplayStatue:
  Type: FURNITURE
  Furniture:
    Type: DISPLAY
    ShadowRadius: 0.5
    ShadowStrength: 1.0
    ViewRange: 2.0

Furniture State and Inventory Reliability

  • setFurnitureState now inherits unspecified settings from the base furniture definition instead of resetting them.
  • Furniture inventories are now stored as byte arrays so large contents such as written books no longer exceed the PDC string limit.
  • State changes and rotations now preserve the live contents of open furniture inventories.
  • Open furniture inventories are now unregistered safely when the backing frame changes or the furniture is removed.
  • Fixed color and persistent data being written back to removed furniture frames during state changes.
  • Fixed duplicate off-hand processing for furniture interaction and rotation.
  • Fixed furniture inventory re-opening the same view unnecessarily.

Other Furniture Fixes

  • Fixed a memory leak when unloading worlds containing furniture.
  • Fixed furniture generation overrides not applying.
  • Fixed furniture failing to inherit its item model during implicit generation.
  • Fixed WorldEdit furniture paste spawning duplicates.
  • Improved WorldEdit furniture rotation handling.
  • Fixed furniture drops losing conditional lore because empty drop metadata was used.

Custom Blocks

Tripwire Saplings

  • Tripwire custom blocks can now grow into WorldEdit schematics naturally or when bone-mealed.
  • Supports a single schematic or weighted schematic list, natural growth timing, bone-meal speedup, block replacement, and placement conditions.
  • Added ~onGrow, with the bone-mealing player as the trigger and the sapling block as the origin.
GrowingSapling:
  Type: BLOCK
  CustomBlock:
    Type: TRIPWIRE
    Id: 1
    Sapling:
      Schematic: oak_tree.schem
      GrowsNaturally: true
      NaturalGrowthTime: 6000
      GrowsFromBoneMeal: true
      BoneMealGrowthSpeedup: 1200
      ReplaceBlocks: false
      Conditions:
      - lightLevel{l=10}
      - biome{b=PLAINS,FOREST}
  CustomBlockSkills:
  - particles{p=happy_villager;a=20} @origin ~onGrow

Custom Block Variants

  • Custom block variants can now specify their own model instead of always using the base block model.
  • Added z rotation for block-state variants on supported pack formats.
VariantBlock:
  Type: BLOCK
  CustomBlock:
    Type: MUSHROOM
    Id: 130
    Variants:
    - model: block/variant_a
      weight: 2
      z: 90
      uvLock: true

Redstone Power Triggers

  • Added ~onPowered, which fires once when a custom block gains redstone power.
  • Added ~onUnpowered, which fires once when a custom block loses all redstone power.
  • Power detection covers levers, buttons, pressure plates, dust, torches, repeaters, comparators, observers, and redstone blocks.
  • Skills run at the block location and expose <skill.var.block-internalid>.
AlarmBlock:
  Type: BLOCK
  CustomBlock:
    Type: MUSHROOM
    Id: 130
  CustomBlockSkills:
  - sound{s=block.anvil.hit} @origin ~onPowered
  - sound{s=block.note_block.pling} @origin ~onUnpowered

Triggers

NEW: ~onBlock

  • Blocking items can now run a skill when they block an attack.
  • The attacker is passed as the target.
  • The blocked damage is available through <skill.var.damage-blocked>.
Skills:
- effect:sound{s=item.shield.block} @self ~onBlock
- damage{a=<skill.var.damage-blocked>} @target ~onBlock

Press-Key Triggers

  • ~onPressF can now fire without requiring a Crucible item in hand.
  • Added Configuration.ItemSkills.PressFInInventories for optionally firing ~onPressF while an inventory is open.
  • ~onPressQ and ~onPressCtrlQ are now implemented natively and do not require ProtocolLib or PacketEvents.
Configuration:
  ItemSkills:
    PressFInInventories: true

Trigger Fixes

  • Fixed ~onHeld and ~onUnHeld not firing when inventory clicks change the held slot.
  • Fixed ~onJoin and ~onSpawn firing before the Crucible profile loaded, which prevented held and worn item skills from running reliably.
  • Fixed projectile-hit damage not being tagged as PROJECTILE, preventing ~onBowHit from firing.
  • Fixed item ~onInteract firing twice for a single right-click.

Mechanics

ConsumeItemDurability

  • consumeItemDurability now respects an explicitly configured slot instead of scanning the inventory for another matching item.

Conditions

NEW: isConsuming

  • Added isConsuming for checking whether the entity is actively consuming an item.
Conditions:
- isConsuming true

Item Durability

  • itemDurability now checks remaining durability instead of raw accumulated damage.

Placeholders

PlaceholderAPI Font Images

  • Font images can now be used through %fontimage_name%, %mythic_fontimage_name%, and %mythic_glyph_name% PlaceholderAPI placeholders.
  • Optional row and column suffixes are supported, such as %fontimage_name_2_3%.
  • Existing %mythic_emoji_name% placeholders continue to work.

Item NBT and Scope Fixes

  • Item NBT placeholders can now read modern data components such as custom_name and lore.
  • Registered item.* placeholders under scope prefixes so forms such as <caster.item.*> resolve correctly.

Custom Menus

Inventory Key Handling

  • Configuration.ItemSkills.PressFInInventories allows ~onPressF handling while inventory and custom-menu views are open.

Recipes

Recipe Discovery

  • Added per-recipe AutoDiscover and DiscoverIngredients controls.
  • Recipes can be discovered when the player obtains an indexed ingredient.
  • When AutoDiscover is enabled without an explicit list, discoverable materials are derived from the recipe ingredients.
  • AutoDiscover defaults to false.
  • Ingredient discovery respects recipe permissions and now uses an indexed lookup.
Recipes:
  discoverable_sword:
    Type: SHAPED
    AutoDiscover: true
    DiscoverIngredients:
    - DIAMOND
    - STICK

Transmute Recipes

  • Added TRANSMUTE recipes on Minecraft 1.21.2+.
  • Input and Material accept vanilla materials, Mythic item IDs, |-separated alternatives, or item tags beginning with #.
UpgradedBlade:
  Material: DIAMOND_SWORD
  Recipes:
    blade_transmute:
      Type: TRANSMUTE
      Input: BaseBlade
      Material: NETHERITE_INGOT

Smithing Preservation

  • Added PreserveLevel for carrying an item's upgrade level through smithing transform recipes.
  • Added PreserveAugments for carrying augment slots, installed augments, and augment stats through smithing transforms.
  • Both options default to false.
Recipes:
  upgraded_sword:
    Type: SMITHING
    PreserveLevel: true
    PreserveAugments: true

Recipe Fixes

  • Fixed wildcard arguments in VanillaUIFilter falling through to material parsing.
  • Fixed recipe collections and discovery indexes not being cleared during unregister/reload.
  • Improved ingredient-discovery indexing.
  • Temporarily disabled Crucible recipe processing in crafter blocks to prevent unsafe automated crafting behavior.

External Compatibilities

Conversion Commands

  • Added /crucible convert nexo, /crucible convert oraxen, and /crucible convert itemsadder.
  • Conversion writes Mythic item packs and copies supported resource-pack assets before reloading packs and items.
  • The optional -n flag preserves the source plugin's namespace.
  • ItemsAdder conversion also handles supported font images and recipes.
/crucible convert nexo -n
/crucible convert oraxen -n
/crucible convert itemsadder -n

MythicRPG

  • EquipLevel and Upgrades.SetEquipLevel now use the player's MythicRPG archetype level when MythicRPG is installed.
  • EquipLevelKey chooses the archetype group and defaults to CLASS.
  • Players without an archetype in that group continue to fall back to vanilla experience level.

WorldEdit

  • Fixed duplicate furniture when pasting entity-aware WorldEdit selections.
  • Fixed and improved pasted furniture rotation handling.

Paper and ModelEngine

  • Added Paper 26.2 volatile support.
  • Improved 1.21.1 compatibility for item-use handling and item data components.
  • ModelEngine textures now merge into the correct atlas on 1.21.11+/26.x.

API

  • Added the stable MythicCrucibleAPI interface and MythicCrucibleProvider entry point.
  • Added furniture item checks, fit checks, placement, removal, block lookup, and furniture item-ID lookup.
  • Added getFurnitureFootprint for retrieving the rotated collision blocks required by furniture.
  • Added FurniturePlacementResult with detailed success and failure reasons.
  • Added player-aware placeFurniture and placeFurnitureResult overloads.
  • Player-attributed placement passes the player as the BLOCK_PLACE skill trigger so <trigger.name> and <target.name> resolve.
  • Player attribution does not fire a placement event or perform region/protection checks; integrations should call the player-aware furnitureFits first when those checks are required.
  • Published API sources alongside the API artifact.

Bug Fixes & Optimizations

  • Greatly optimized generated item-model and pack-generation performance.
  • Fixed generated model filenames disagreeing with item-definition references.
  • Fixed generation overrides not applying to furniture.
  • Fixed non-default generation namespaces for custom armor and pack folders.
  • Fixed non-vanilla entity and armor textures being removed during atlas deduplication.
  • Fixed shader, atlas, and font JSON corruption during pack merging.
  • Fixed per-pack generation and merge folders not loading during pack merging.
  • Fixed scalar overlay exclusions, overlay pack-format drift, and Windows zip paths.
  • Fixed PackSquash dropping overlay directories.
  • Fixed unsafe or partial cached vanilla pack downloads and extraction.
  • Fixed broken-image files and missing texture references going undetected.
  • Fixed unnecessary pack uploads and player rebroadcasts when generated output is unchanged.
  • Fixed MythicCrucibleGeneratePackEvent firing before the pack was fully written.
  • Fixed legacy model overrides for zero custom model data, shields, and tridents.
  • Fixed item-definition transformations being lost during serialization.
  • Fixed several 1.21.1 item-use, durability, and model-data component compatibility issues.
  • Fixed arrow stat registration load order.
  • Fixed stat ratio calculations for zero-span ranges and existing NaN values.
  • Fixed stat lore order changing during deserialization and augmentation.
  • Fixed main-hand and off-hand equipment not counting toward item sets.
  • Fixed bag contents being lost during item-version updates.
  • Fixed bag desynchronization during clicks, nesting checks, and auto-pickup.
  • Fixed filtered bag auto-pickup bypassing PreventShulkerNesting.
  • Fixed lore-template color parsing.
  • Fixed PreventRenaming not blocking anvil output.
  • Fixed equipped weapon parsing thread safety.
  • Fixed consumeItemDurability ignoring its explicit slot.
  • Fixed itemDurability reporting damage instead of remaining durability.
  • Fixed furniture world-unload memory leaks.
  • Fixed implicit furniture models and generation overrides.
  • Fixed furniture state changes resetting unspecified base settings.
  • Fixed furniture inventories exceeding the PDC string-size limit.
  • Fixed furniture state changes, rotations, and removals losing live open-inventory contents.
  • Fixed duplicate off-hand furniture interactions and rotations.
  • Fixed furniture drops losing conditional lore.
  • Fixed duplicate and incorrectly rotated furniture from WorldEdit paste.
  • Fixed recipe discovery registration, indexing, and reload cleanup.
  • Fixed wildcard vanilla UI filters being parsed as materials.
  • Fixed ~onHeld / ~onUnHeld inventory-click handling.
  • Fixed ~onJoin / ~onSpawn running before player profile initialization.
  • Fixed ~onBowHit not firing for projectile-hit damage.
  • Fixed ~onInteract firing twice per right-click.
  • Fixed <caster.item.*> placeholder scope registration.
  • Updated sapling, ore, furniture, and schematic location-condition evaluation for the current Mythic API.

Crucible 5.12.0

General

  • Added 26.1.x and 1.21.11 support
  • Added Folia support
  • Major rewrite of pack generation.
  • Pack generation will now work out of the box using mcpacks.
  • Added custom equippable slots with custom menu support.
  • Added inventory interaction triggers for place, take, move, and drag/drop workflows.
  • Added connectable furniture, furniture occlusion culling, and WorldEdit furniture copy/paste support.
  • Added random tick skills for custom blocks and furniture.

Resource Pack Generation

Pack Generation Rewrite

  • Reworked the generator into smaller dedicated generators for item models, legacy overrides, pack merges, sounds, fonts, tooltips, textures, paintings, and missing texture patching.
  • Added safer generation sessions and clearer generation error logging.
  • Added per-pack and per-item generation namespaces.
SomeItem:
  Material: DIAMOND_SWORD
  Generation:
    Namespace: cosmetics
    Model: item/ruby_blade
    Texture: item/ruby_blade

PackSquash Integration

  • Added optional PackSquash support for optimizing generated zipped packs.
Generation:
  PackSquash:
    Enabled: true
    ExecutablePath: plugins/MythicCrucible/generation/packsquash/packsquash
    SettingsPath: plugins/MythicCrucible/generation/packsquash/packsquash.toml
    CacheSize: 5

MCPacks Deployment

  • Added MCPACKS as a resource pack deployment type.
  • Deployment can now return the uploaded pack URL and SHA1 from MCPacks automatically.
Generation:
  Deployment:
    Enabled: true
    Type: MCPACKS
    AutoSend:
      Enabled: true
      SendOnUpdate: true
      Force: false

Configuration-Phase Pack Sending

  • Added DuringConfiguration for sending packs during Paper's configuration phase on supported versions.
Generation:
  Deployment:
    AutoSend:
      Enabled: true
      DuringConfiguration: true

Overlay Exclusions

  • Pack overlays are generated for supported versions by default.
  • Added ExcludeOverlays to opt out of exact versions or ranges.
Generation:
  ExcludeOverlays:
  - "< 1.21.4"
  - ">= 26.1"

Item Definition Support

  • Added support for item model Condition definitions.
MagicShield:
  Material: SHIELD
  Generation:
    Model: item/magic_shield
    Condition:
      Property: minecraft:using_item
      Model: item/magic_shield_blocking
  • Added support for item model Select definitions.
MenuIcon:
  Material: PAPER
  Generation:
    Model: item/menu_icon
    Select:
      Property: minecraft:display_context
      Cases:
      - When:
        - gui
        Model: item/menu_icon_gui
  • Added support for item model Composite definitions.
LayeredBlade:
  Material: DIAMOND_SWORD
  Generation:
    Composite:
    - Model: item/blade_base
    - Model: item/blade_gem_overlay
  • Added support for item model RangeDispatch definitions.
ChargedBow:
  Material: BOW
  Generation:
    Model: item/charged_bow
    RangeDispatch:
      Property: minecraft:use_duration
      Scale: 0.05
      Entries:
      - Threshold: 0.65
        Model: item/charged_bow_pulling_1
      - Threshold: 0.9
        Model: item/charged_bow_pulling_2
  • Added support for extra tint entries during item model generation.
  • Supports constant, custom model data, dye, firework, grass, map color, potion, and team tint types.
TintedBlade:
  Material: DIAMOND_SWORD
  Generation:
    Model: item/tinted_blade
    Tint:
    - Type: DYE
      Index: 0
      Default: "#FFFFFF"

Empty Model Definitions

  • Added Empty: true for modern item model branches that should intentionally render nothing.
HiddenCaseItem:
  Material: PAPER
  Generation:
    Model: item/base_icon
    Select:
      Property: minecraft:display_context
      Cases:
      - Value: gui
        Empty: true

Custom Painting Generation

  • Added Type: PAINTING items for generating 1.21.4+ painting variants.
AncientMapPainting:
  Type: PAINTING
  Material: PAINTING
  Painting:
    Width: 2
    Height: 1
    Texture: painting/ancient_map
    Title: "Ancient Map"
    Author: "Mythic"

Other

  • Added generated tooltip asset support.
  • Added custom painting atlas/data generation.
  • Added 1.21.11 atlas split handling for newer pack formats.
  • Added missing texture patching for missing or missingno model references.
  • Added path sanitizing for generated model paths so invalid resource-location characters are replaced safely.

Items

Custom Equippables

  • Added custom equippable slots defined in config-items.yml
  • Items can use custom slots through EquipSlot.

Example config-items.yml entry:

Configuration:
  Equippables:
    Enabled: true
    CustomSlots:
    - Id: RING
      EquipSlot: HAND
      Display: Ring
      EquipConditions:
      - haspermission{p=items.ring} true

Example item config:

RubyRing:
  Material: AMETHYST_SHARD
  EquipSlot: RING

InfiniteQuiver

  • Added Options.InfiniteQuiver to allow bows to shoot without consuming arrows.
  • Extended Options.InfiniteQuiver support to crossbows.
EndlessBow:
  Material: BOW
  Options:
    InfiniteQuiver: true

PreventBlockInteraction

  • Added Options.PreventBlockInteraction to stop an item from right-clicking blocks when used.
MagicWand:
  Material: BLAZE_ROD
  Options:
    PreventBlockInteraction: true

Multiline Augment Tooltips

  • Augment Tooltip can now be a list.
SharpnessAugment:
  Material: AMETHYST_SHARD
  Augmentation:
    Type: GEM
    Tooltip:
    - "<gray>Increases weapon damage"
    - "<dark_gray>Socket this into a weapon"

Item Upgrades

  • Added u to item upgrade stat formulas.
  • u represents the upgrade level relative to the item's default level.
UpgradeSword:
  Material: IRON_SWORD
  Upgrades:
    DefaultLevel: 1
    Stats:
      Equations:
      - DAMAGE ADDITIVE v+u*0.5

Item Updates

  • Upgraded item levels now persist across item updates.
  • Item stat ratios can be preserved during item updates.
  • Item stats are now removed when they no longer exist on the updated item definition.
  • Lore updates now work on items that do not use a LoreTemplate.
  • Lore wrapping now respects explicit newlines.

ItemData

  • ItemData placeholders now support text wrapping.
  • Added wrapLinePrefix, wrapPrefix, and wlp aliases for wrapLineColor.
  • Formatting tags such as <red> are ignored when calculating wrap length.
  • \n in item lore is now supported.
StoryItem:
  Material: PAPER
  ItemData:
    description: "<gray>This is a long description that should wrap cleanly."
  Lore:
  - "<item.data.description{wrap=32;wrapLinePrefix=\"<gray>\"}>"

Furniture

Connectable Furniture

  • Added ConnectionModels for furniture that changes model based on neighboring furniture of the same type.
  • Supports default, straight, left end, right end, inner corner, and outer corner models.
CastleWall:
  Type: FURNITURE
  Furniture:
    Type: DISPLAY
    ConnectionModels:
      Default: mythic:item/wall_default
      Straight: mythic:item/wall_straight
      Left: mythic:item/wall_left
      Right: mythic:item/wall_right
      Inner: mythic:item/wall_inner
      Outer: mythic:item/wall_outer

Furniture Occlusion Culling

  • Added optional per-player furniture culling behind solid blocks.
  • Can be configured globally and overridden per furniture with Cullable.
Configuration:
  Furniture:
    Culling:
      Enabled: true
      Interval: 1
      ForceAll: true
      MinDistance: 0.0
      MaxDistance: 64.0
      PaddingWidth: 0.0
      PaddingHeight: 0.0

HiddenStatue:
  Type: FURNITURE
  Furniture:
    Cullable: true

WorldEdit Furniture Copy/Paste

  • Added WorldEdit support for copying and pasting furniture entities.
  • Furniture type, state, color, orientation, and variables are restored during paste.
//copy -e
//paste -e

Furniture Generation

  • Furniture now uses generated item models when explicit furniture models are not provided.
  • Furniture hitboxes no longer depend on old pre-1.19.4 checks.
  • Furniture state lights and barriers are cleaned up more reliably when returning to a default state.
  • Furniture middle-click pickup now handles newer pick-item behavior.

Custom Blocks

~onRandomTick for Custom Blocks

  • Custom block skills can now run from random tick logic.
  • The optional interval uses vanilla-style random tick chance math.
GlowingOre:
  Type: BLOCK
  CustomBlockSkills:
  - effect:particles{p=glow;a=5} @self ~onRandomTick:4096

Custom Block Handling

  • Custom block placement is now prevented on entities and functional blocks when appropriate.
  • Note block custom block state protection was improved.
  • Custom block random tick skills run from a block caster so location-based skills have a proper origin.

Triggers

NEW: ~onInventoryPlace

  • Added item trigger for placing an item into an inventory slot.
  • Exposes item and container context variables/placeholders.
TrackedGem:
  Material: EMERALD
  Skills:
  - message{m="Placed <item.name> into <container.type>"} @self ~onInventoryPlace

NEW: ~onInventoryTake

  • Added item trigger for taking an item from an inventory slot.
  • Exposes item and container context variables/placeholders.
TrackedGem:
  Material: EMERALD
  Skills:
  - message{m="Took <item.amount>x <item.type>"} @self ~onInventoryTake

NEW: ~onInventoryMove

  • Added item trigger for shift-click and hotbar inventory movement.
  • Resolves the target inventory so conditions can check where the item is moving.
TrackedGem:
  Material: EMERALD
  Skills:
  - message{m="Moved item into <container.type>"} @self ~onInventoryMove

NEW: ~onDragDrop

  • Added item trigger for dragging one item onto another item.
  • Exposes cursor item and target item context.
SocketGem:
  Material: AMETHYST_SHARD
  Skills:
  - message{m="Dropped <item.type> onto <skill.var.target.type>"} @self ~onDragDrop

NEW: ~onUsePrimary

  • Added a primary-use item trigger that ignores incidental right-clicks such as eating, blocking, drawing bows, using rods, placing blocks, and interacting with functional blocks.
CasterWand:
  Material: BLAZE_ROD
  Skills:
  - skill{s=CastWandSpell} @self ~onUsePrimary

NEW: ~onAugmentation

  • Added augmentation trigger aliases for augment application.
SocketableSword:
  Material: IRON_SWORD
  Skills:
  - message{m="Augmented <item.name>"} @self ~onAugmentation

NEW: ~onRandomTick for Furniture

  • Furniture skills can now run from random tick logic.
MysticLamp:
  Type: FURNITURE
  FurnitureSkills:
  - effect:particles{p=end_rod;a=2} @self ~onRandomTick:2048

Trigger Fixes

  • Fixed ~onHeld and ~onUnHeld not firing when pick-block changes the held item.
  • Fixed wrong bow power being passed to ~onShoot on newer versions.
  • Fixed held item skills persisting after hand item changes.

Mechanics

ConsumeItem

  • consumeitem now supports runtime item filters with placeholders and variables.
  • Runtime matchers are cached after the filter resolves.
- consumeitem{item="<caster.var.required_item>";amount=1;runtime=true}

Durability Mechanics

  • Durability mechanics now support placeholders in the amount field.
  • consumeuseddurability now calls PlayerItemDamageEvent when applying positive damage.
  • consumeuseddurability now damages the actual used inventory item instead of a stale item reference.
- consumeuseddurability{amount="<caster.var.durability_cost>";breakitem=true}

RegenerateLore / UpdateLore

  • regenerateLore / updateLore can now update Crucible items even when the item does not use a lore template.
- updateLore

Conditions

NEW: containerType

  • Added containerType, with inventoryType and container aliases.
  • Checks the active container type from inventory interaction metadata.
Conditions:
- containerType{type=CHEST,BARREL} true

HasItem

  • hasItem now supports placeholder and variable-backed item filters.
  • Runtime item filter resolution now uses the caster context in skill metadata.
Conditions:
- hasItem{i="<caster.var.required_item>"} true

Placeholders

NEW: Item Interaction Placeholders

  • Added item context placeholders for inventory and drag/drop triggers.
  • New placeholders include <item.amount>, <item.crucibleid>, <item.custommodeldata>, <item.enchants>, <item.equip.slot>, <item.name>, <item.slot>, and <item.unbreakable>.
- message{m="<item.amount>x <item.name> in slot <item.slot>"} @self ~onInventoryTake

NEW: Container Placeholders

  • Added target container placeholders for container size, item counts, slot type, and slot amount.
- message{m="Chest size: <container.size>, diamonds: <container.count.DIAMOND>"} @self
- message{m="Slot 0: <container.slot.0.amount>x <container.slot.0.type>"} @self

NEW: Open Container Placeholders

  • Added open-container variants for reading the player's currently open external inventory.
- message{m="Open size: <open.container.size>"} @self
- message{m="Open slot 4: <open.container.slot.4.type>"} @self

NEW: Set Pieces Placeholder

  • Added <caster.set.SET_ID.pieces> style placeholders for equipment set piece counts.
- message{m="Set pieces: <caster.set.NetherKnight.pieces>"} @self

NEW: Caster Furniture Variable Placeholder

  • Added <caster.furniture.var.KEY> for reading furniture variables from the caster furniture.
- message{m="Charge: <caster.furniture.var.charge>"} @self

Placeholder Engine Updates

  • Updated Crucible placeholders to use the newer Mythic placeholder API.
  • Added wildcard support for fontimage.* / emoji placeholders.
  • Added entity-scoped item NBT placeholders.
  • Added slot-specific item NBT placeholder support through <item.SLOT.nbt>.
  • item.stat and item.stat.display now work during item generation and outside lore-only contexts.
  • Fixed conditional parsing in ItemData placeholders.
  • Fixed <item.data> edge cases.
  • Fixed <item.upgrade.description> and <item.upgrade/level.description> when no live item stack is provided.

Custom Menus

NEW: armor Button Function

  • Added a custom menu button function that exposes a vanilla armor or hand slot in a menu.
HelmetButton:
  Mapping: H
  Function:
    Type: armor
    Slot: HEAD

NEW: custom_equippable Button Function

  • Added a custom menu button function for custom equippable slots.
RingButton:
  Mapping: R
  Function:
    Type: custom_equippable
    Slot: RING

Recipes

NEW: Recipe Groups

  • Added RecipeGroup so recipes can be assigned to a Bukkit recipe-book group.
MySword:
  Material: IRON_SWORD
  Recipes:
    shaped_sword:
      Type: SHAPED
      RecipeGroup: mythic_weapons
      Ingredients:
      - "m IRON_INGOT 1|m IRON_INGOT 1|m IRON_INGOT 1"

NEW: IngredientsLeftover Durability Suffixes

  • IngredientsLeftover now supports :number and :-number suffixes.
  • Positive numbers set remaining durability.
  • Negative numbers subtract durability from the leftover item.
RepairRecipe:
  Material: IRON_SWORD
  Recipes:
    repair:
      Type: SHAPED
      IngredientsLeftover:
      - "m IRON_PICKAXE 1:-5|v AIR 0|v AIR 0"

Crafting Performance

  • Improved recipe matching performance.
  • Fixed unbounded list growth in crafting stations.
  • Improved ItemUpdateManager detection speed.
  • Added runtime item filter support for Crucible hasitem and consumeitem.

External Compatibilities

Nexo

  • Added Nexo item support through NexoId.
  • Crucible reloads when Nexo item data finishes loading.
  • Added Nexo MiniMessage parsing support.
NexoDisplayItem:
  Material: PAPER
  NexoId: custom_hat
  Display: "<gold>Custom Hat"

WorldEdit

  • Added furniture copy/paste support when using entity-aware WorldEdit operations.
  • Existing custom block parser support now uses the generated pack namespace.
//copy -e
//paste -e

Folia

  • Added Folia compatibility metadata and scheduler adjustments.
  • Fixed Folia issues with furniture occlusion culling.
  • Fixed async block modification caused by furniture conditions.

Paper

  • Added Paper 26.1.x volatile support.
  • Added Paper 1.21.5+ configuration-phase pack dispatch support.

Pack Integrations

  • Improved ModelEngine pack merging.
  • Added MythicHUD pack merging.
  • Improved HappyHUD and Emojy pack merging.
  • Added support for MCPacks deployment.

API

  • Moved public CustomBlockData into the API module.
  • Added BowBridge API for version-specific bow and crossbow handling.
  • Added custom equippable slot API support.
  • Exposed custom equipment API helpers.
  • Improved CrucibleSupport#addItemToGeneration so externally generated items are registered with the pack generator.
  • Added generation feedback for generated item model keys.
  • Added generated sound and generated tooltip lookup helpers.

Bug Fixes & Optimizations

  • Optimized pack generation performance.
  • Optimized Blockbench model parsing during generation.
  • Optimized ItemUpdateManager detection speed.
  • Optimized crafting recipe matching and crafting station memory growth.
  • Fixed startup load order issues after the Gradle/NMS refactor.
  • Fixed duplicate vanilla path pack generation.
  • Fixed false missing-texture warnings from pack template inheritance.
  • Fixed false missing-texture warnings for bows and crossbows.
  • Fixed generated overlay names so they respect lowercase resource-location casing rules.
  • Fixed model paths with invalid characters by sanitizing them before generation.
  • Fixed generated pack configuration phase blocking until the client resolves the pack.
  • Fixed S3 deployment options for path-style URLs, chunked encoding, public-read ACLs, and regions.
  • Fixed item stats not applying for newly defined stats.
  • Fixed item stats not being removed when the new item definition removes them.
  • Fixed stat randomization for crafting.
  • Fixed premature stat rounding on new lore generation.
  • Fixed stat ratio persistence on item updates.
  • Fixed upgraded item levels being lost during item updates.
  • Fixed ItemUpdater NPEs when an old stat range is no longer present.
  • Fixed item updates relocking unlocked augment slots.
  • Fixed lore templates not splitting wrapped lines on newline.
  • Fixed updateLore for items without a lore template.
  • Fixed ItemData placeholders when no live item stack is available.
  • Fixed conditional placeholder parsing in ItemData placeholders.
  • Fixed ItemData wrap length counting MiniMessage formatting tags as visible characters.
  • Fixed <item.upgrade/level.description> edge cases.
  • Fixed consumeitem failures with dynamic filters.
  • Fixed consumeUsedDurability so slot swapping cannot avoid durability loss.
  • Fixed custom durability mechanics to fire PlayerItemDamageEvent.
  • Fixed several equip slot null and edge-case errors.
  • Fixed ArmorEquipEvent null log spam.
  • Fixed lore updates after item updates.
  • Fixed custom equippable slot edge cases.
  • Fixed custom equipment API edge cases.
  • Fixed Nexo component conversion issues.
  • Fixed additional Nexo compatibility issues.
  • Fixed fishing rod display state while cast.
  • Fixed wrong bow power being passed to ~onShoot on newer versions.
  • Fixed furniture variables in multiple reload and persistence cases.
  • Fixed furniture middle-click pickup.
  • Fixed furniture state lights and barriers not being removed when returning to the default state.
  • Fixed GlowingFrame not working for furniture states.
  • Fixed furniture not auto-mapping generated models when none is defined.
  • Fixed async block modification caused by furniture conditions.
  • Fixed custom block placement on entities and functional blocks.
  • Fixed note block custom block state protection.
  • Fixed recipe leftover durability behavior.
  • Fixed recipe matching performance regressions.
  • Fixed bag auto-pickup issues and PlaceholderAPI initialization issues.
  • Fixed self-referential item conditions causing stack overflow on reload.
  • Fixed hasItem runtime placeholders resolving without the caster context.
  • Fixed merge logic not respecting configured toggles.
  • Fixed generated custom armor rotation limits for newer versions.
  • Fixed several Paper 26.1.x follow-up issues.

Older Changelogs

Updated Aug 19, 2026