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.FromLocationfor merging resource-pack folders or.zipfiles in list order. - Added
Generation.Import.FromUrlfor downloading and merging resource-pack.zipfiles directly from URLs. - Added
Generation.Import.ExternalPackOrderfor explicitly ordering packs inplugins/MythicCrucible/external_packs/; unlisted packs follow alphabetically. - External pack merging is atlas-aware.
- ModelEngine textures are routed into
items.jsonon 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
SendOnUpdaterebroadcast. - Delete
plugins/MythicCrucible/generation/.last_deployto 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>.zipand rotate automatically after regeneration. PublicURLmust now be the base address; remove any/resource_pack.zipsuffix from existing configurations.- Added optional
DispatchThreadsandBacklogself-hosting settings, defaulting to4and0.
Generation:
Deployment:
Type: SELFHOST
SelfHosting:
Port: 8080
DispatchThreads: 4
Backlog: 0
AutoSend:
PublicURL: http://my.server:8080
Oversized GUI Models
- Added per-item
Generation.OversizedInGuifor allowing generated models to extend beyond the 16x16 GUI slot on 1.21.6+. - Added
Generation.ForceOversizedInGuias 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.Namespacevalues 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
ExcludeOverlaysvalues 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
CustomModelDatais0. - Legacy CMD shield and trident overrides are now placed in the
crucible_legacyoverlay on 1.21.4+. - Item-definition transformations now survive serialization so vanilla shields no longer flip on 1.21.5+/26.1.
MythicCrucibleGeneratePackEventnow fires after the generated pack is fully written.
Items
Arrow Options and Stats
- Added the
ArrowPierceoption to arrow-shooting items. - Added hardcoded
ARROW_DAMAGEandARROW_PIERCEitem stats.
PiercingBow:
Material: BOW
ArrowPierce: 2
Custom Music Discs
- Added
JukeboxPlayableandJukeboxSongsupport 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
EquipSlotnow accepts a list or comma-separated string so an item can equip into multiple slots.- Items with an
Equippablecomponent now default toEquippable.SlotwhenEquipSlotis omitted. - An explicit
EquipSlotcontinues 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, andDefaultTemplatecan apply a shared fallback layout for stats, augments, and item lore.
Configuration:
LoreTemplates:
EnableDefaultTemplate: true
DefaultTemplateName: DEFAULT
Bags
- Added
Inventory.OpenActionswithHAND,INVENTORY_CLICK, andINVENTORY_SHIFT_CLICKoptions. - 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~onBagPickupskill triggers. - Added
Inventory.PreventShulkerNesting, enabled by default. - Added case-insensitive
Inventory.WhitelistandInventory.Blacklistfilters 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
PreventBagNestingand auto-pickup workflows. - Fixed stat ratios producing or retaining
NaNwhen an old stat range has no span. - Fixed stat lore order changing after item deserialization or augmentation.
- Fixed lore-template color parsing.
- Fixed
PreventRenamingnot 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..endranges 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
CustomModelDatanow supportsstring/,float/,color/, andboolean/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, andViewRangeon 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
setFurnitureStatenow 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
modelinstead of always using the base block model. - Added
zrotation 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
~onPressFcan now fire without requiring a Crucible item in hand.- Added
Configuration.ItemSkills.PressFInInventoriesfor optionally firing~onPressFwhile an inventory is open. ~onPressQand~onPressCtrlQare now implemented natively and do not require ProtocolLib or PacketEvents.
Configuration:
ItemSkills:
PressFInInventories: true
Trigger Fixes
- Fixed
~onHeldand~onUnHeldnot firing when inventory clicks change the held slot. - Fixed
~onJoinand~onSpawnfiring 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~onBowHitfrom firing. - Fixed item
~onInteractfiring twice for a single right-click.
Mechanics
ConsumeItemDurability
consumeItemDurabilitynow respects an explicitly configured slot instead of scanning the inventory for another matching item.
Conditions
NEW: isConsuming
- Added
isConsumingfor checking whether the entity is actively consuming an item.
Conditions:
- isConsuming true
Item Durability
itemDurabilitynow 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_nameandlore. - Registered
item.*placeholders under scope prefixes so forms such as<caster.item.*>resolve correctly.
Custom Menus
Inventory Key Handling
Configuration.ItemSkills.PressFInInventoriesallows~onPressFhandling while inventory and custom-menu views are open.
Recipes
Recipe Discovery
- Added per-recipe
AutoDiscoverandDiscoverIngredientscontrols. - Recipes can be discovered when the player obtains an indexed ingredient.
- When
AutoDiscoveris enabled without an explicit list, discoverable materials are derived from the recipe ingredients. AutoDiscoverdefaults tofalse.- Ingredient discovery respects recipe permissions and now uses an indexed lookup.
Recipes:
discoverable_sword:
Type: SHAPED
AutoDiscover: true
DiscoverIngredients:
- DIAMOND
- STICK
Transmute Recipes
- Added
TRANSMUTErecipes on Minecraft 1.21.2+. InputandMaterialaccept 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
PreserveLevelfor carrying an item's upgrade level through smithing transform recipes. - Added
PreserveAugmentsfor 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
VanillaUIFilterfalling 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
-nflag 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
EquipLevelandUpgrades.SetEquipLevelnow use the player's MythicRPG archetype level when MythicRPG is installed.EquipLevelKeychooses the archetype group and defaults toCLASS.- 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
MythicCrucibleAPIinterface andMythicCrucibleProviderentry point. - Added furniture item checks, fit checks, placement, removal, block lookup, and furniture item-ID lookup.
- Added
getFurnitureFootprintfor retrieving the rotated collision blocks required by furniture. - Added
FurniturePlacementResultwith detailed success and failure reasons. - Added player-aware
placeFurnitureandplaceFurnitureResultoverloads. - Player-attributed placement passes the player as the
BLOCK_PLACEskill 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
furnitureFitsfirst 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
MythicCrucibleGeneratePackEventfiring 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
NaNvalues. - 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
PreventRenamingnot blocking anvil output. - Fixed equipped weapon parsing thread safety.
- Fixed
consumeItemDurabilityignoring its explicit slot. - Fixed
itemDurabilityreporting 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/~onUnHeldinventory-click handling. - Fixed
~onJoin/~onSpawnrunning before player profile initialization. - Fixed
~onBowHitnot firing for projectile-hit damage. - Fixed
~onInteractfiring 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
MCPACKSas 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
DuringConfigurationfor 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
ExcludeOverlaysto opt out of exact versions or ranges.
Generation:
ExcludeOverlays:
- "< 1.21.4"
- ">= 26.1"
Item Definition Support
- Added support for item model
Conditiondefinitions.
MagicShield:
Material: SHIELD
Generation:
Model: item/magic_shield
Condition:
Property: minecraft:using_item
Model: item/magic_shield_blocking
- Added support for item model
Selectdefinitions.
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
Compositedefinitions.
LayeredBlade:
Material: DIAMOND_SWORD
Generation:
Composite:
- Model: item/blade_base
- Model: item/blade_gem_overlay
- Added support for item model
RangeDispatchdefinitions.
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: truefor 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: PAINTINGitems 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
missingnomodel 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.InfiniteQuiverto allow bows to shoot without consuming arrows. - Extended
Options.InfiniteQuiversupport to crossbows.
EndlessBow:
Material: BOW
Options:
InfiniteQuiver: true
PreventBlockInteraction
- Added
Options.PreventBlockInteractionto stop an item from right-clicking blocks when used.
MagicWand:
Material: BLAZE_ROD
Options:
PreventBlockInteraction: true
Multiline Augment Tooltips
- Augment
Tooltipcan 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
uto item upgrade stat formulas. urepresents 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
ItemDataplaceholders now support text wrapping.- Added
wrapLinePrefix,wrapPrefix, andwlpaliases forwrapLineColor. - Formatting tags such as
<red>are ignored when calculating wrap length. \nin 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
ConnectionModelsfor 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
~onHeldand~onUnHeldnot firing when pick-block changes the held item. - Fixed wrong bow power being passed to
~onShooton newer versions. - Fixed held item skills persisting after hand item changes.
Mechanics
ConsumeItem
consumeitemnow 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.
consumeuseddurabilitynow callsPlayerItemDamageEventwhen applying positive damage.consumeuseddurabilitynow damages the actual used inventory item instead of a stale item reference.
- consumeuseddurability{amount="<caster.var.durability_cost>";breakitem=true}
RegenerateLore / UpdateLore
regenerateLore/updateLorecan now update Crucible items even when the item does not use a lore template.
- updateLore
Conditions
NEW: containerType
- Added
containerType, withinventoryTypeandcontaineraliases. - Checks the active container type from inventory interaction metadata.
Conditions:
- containerType{type=CHEST,BARREL} true
HasItem
hasItemnow 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.*/emojiplaceholders. - Added entity-scoped item NBT placeholders.
- Added slot-specific item NBT placeholder support through
<item.SLOT.nbt>. item.statanditem.stat.displaynow work during item generation and outside lore-only contexts.- Fixed conditional parsing in
ItemDataplaceholders. - 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
RecipeGroupso 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
IngredientsLeftovernow supports:numberand:-numbersuffixes.- 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
hasitemandconsumeitem.
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.xvolatile 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
CustomBlockDatainto the API module. - Added
BowBridgeAPI for version-specific bow and crossbow handling. - Added custom equippable slot API support.
- Exposed custom equipment API helpers.
- Improved
CrucibleSupport#addItemToGenerationso 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
ItemUpdaterNPEs 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
updateLorefor items without a lore template. - Fixed
ItemDataplaceholders when no live item stack is available. - Fixed conditional placeholder parsing in
ItemDataplaceholders. - Fixed
ItemDatawrap length counting MiniMessage formatting tags as visible characters. - Fixed
<item.upgrade/level.description>edge cases. - Fixed
consumeitemfailures with dynamic filters. - Fixed
consumeUsedDurabilityso 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
~onShooton 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
GlowingFramenot 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
hasItemruntime 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.xfollow-up issues.