Added PackOverrides and FileOverrides to packinfo.yml, the inverse of PackDependencies and FileDependencies: a pack, or some of its files, is skipped when the listed pack or plugin IS present. All four keys now accept conditions combined with &&, ||, ! and parentheses, and a name can be a plugin, another pack's folder name, or MythicMobsPremium
Fixed FileDependencies never excluding files on a real server
Added Hidden: true to metaskills, and hidden mobs, items and skills are left out of more tab-completes. Hidden things still work by their full name, and /mm mobs list still shows everything
my_utility_skill:
Hidden: true
Skills:
- message{m="Called by other skills, never typed by hand"}
Mob pathfinding and the target scans of AI goals now run on worker threads (Premium only, and not on Folia). It is on by default: set General.AsyncPathfinding in config-general.yml (Threads: 0 uses a quarter of the CPU cores, at least 1), or Options.AsyncPathfinding on a single mob
Added spawner editing to /mm menu: /mm menu spawners (alias /mm menu s) opens the spawner browser and /mm menu spawners <name> opens that spawner's editor
The spawner browser shows each spawner's mob type, world, coordinates, live mob count, cooldown and warmup. Left-click teleports to it, right-click edits it, and a button creates a spawner at your location
The spawner editor changes the mob type, level, group, mob limits, cooldown, warmup, radii, ranges and chance, toggles the timer, player check, flames, breakable, leash options, random rotation and world scaling, resets timers, deletes the spawner after a typed confirmation, and saves to the file immediately
Added Attack Speed, Flying Speed, Knockback Resistance, Follow Range, Step Height and Scale to the mob editor
The Create Mob and Delete Mob buttons work, Search and Filter filter the option list, and Get Mob Egg is visible again (right-click it to spawn the mob)
Added the TooltipStyle option to menu icons, and fixed Hide having no effect on them (#2313)
Fixed the spawner browser failing to open when any spawner existed
Fixed right-clicking Set Faction deleting the whole mob from its config file
Fixed right-clicking Health, Damage and Armor erroring instead of clearing the value
Fixed Toggle View cycling a "Groups" mode identical to "Show All", and spawner menu buttons that did nothing or carried copied "Create Mob" and "Filter Mobs" labels
Stats
Vanilla attributes that have no stat of their own are now registered as STATIC stats from the server's attribute registry, named after the attribute (for example NAME_TAG_DISTANCE), so attributes added in new Minecraft versions can be used as stats
Added the 26.2 attributes AIR_DRAG_MODIFIER, BELOW_NAME_DISTANCE, BOUNCINESS, FRICTION_MODIFIER and NAME_TAG_DISTANCE to the default stats.yml
Fixed damage variables missing, and cancelevent having no effect, in PRE stat skills (#10096)
Mechanics
NEW: tickRate
Added the tickRate mechanic (1.20.4+) with rate (0 to 20), duration and reset. It needs no extra plugins
On players only the target's own client slows down, and rate=0 freezes every non-player entity on their screen
Mobs and other entities are ticked less often by the server, so movement, attacks and AI slow down together for everyone, and rate=0 stops them completely (Folia included)
Added the addDamageTag mechanic (option tag, aliases t, name, n), which adds a damage tag for ~onAttack triggers, auras and attack stats. The damageTag condition reads it
NEW: setTextOpacity
Added the setTextOpacity mechanic (alias textOpacity), which fades the text of a text display or of the current projectile's TEXT bullet
opacity (aliases o, alpha) goes from 0 to 255 and defaults to 255. interpolationDuration (aliases duration, d) is the fade time in ticks, and the default of -1 keeps the display's current interpolation duration
setTextDisplay can now also set the text of a projectile's TEXT bullet
NEW: Execution Audiences
Added ExecutionAudience (also Options.ExecutionAudience) to mobs and metaskills. It limits who sees the output of everything the skill runs: messages, speak, sounds, particles, disguises, glow, block masks, bullets, summoned mobs and the mob itself. It takes an audience type, an @Targeter, or NONE for nobody
A nested skill's ExecutionAudience narrows the audience already in effect for that call only, and never widens it
summon passes the skill's audience to the summoned mob, and a mob keeps its audience through restarts and chunk loads
Added the addToAudience (aliases addaudience, audienceadd) and removeFromAudience (aliases removeaudience, audienceremove) mechanics, which change the audience of the running skill and of its mob. They act on the player targets of their line, or on the players of audience (alias a) when it is set. mobs (alias m) is a targeter for other mobs to change as well, and ignoreSkillAudience (alias isa, default false) leaves the running skill's audience alone and only changes those mobs
Added the unsetAudience mechanic (aliases clearaudience, audienceclear), which removes the restriction from the running skill and its mob, or from the mobs of mobs. It takes mobs and ignoreSkillAudience too
Boss bars, sendtitle, sendactionmessage, hologram and summonPassenger do not follow the audience yet
Skills:
- addToAudience @self
- message{m="Only the caster sees this"} @PlayersInWorld
Damage
Added the then option (alias of onDamage) to damage, basedamage, percentdamage, consume, hit, lightning and shoot. It runs a skill for each target the damage was really applied to, skipping targets that were invulnerable, dead, in immunity frames or resistant. Shield-blocked hits still count as landed (#2309, #4589)
Added the <skill.var.damage-dealt> skill variable, holding what the target actually took after armor and resistance instead of the configured amount. It can be read on any later line and inside a then block
Skills:
- damage{a=10} @target
- command{c="say took <skill.var.damage-dealt>"}
Added triggerSkillDamage (alias tsd) to pair with ts=true, so one damage mechanic can fire both ~onAttack and ~onSkillDamage. ts=true on its own still fires only ~onAttack
Damage with a non-attack cause such as dc=MAGIC now fires ~onSkillDamage, and <skill.var.damage-cause>, <skill.var.damage-tags> and the damageTag condition work on it
DropItem Owner
Added the owner option to dropitem, so only that player can pick up the drop. Owner mechanics, targeters, conditions and <owner.*> placeholders now also work with dropped items (#10118)
Added conditions (aliases cond, c) to the onDamaged aura component. With cancelEvent on, the hit is only cancelled when the conditions pass. They do not change whether the onHit skill runs or a charge is used (#10024, #10026)
The chance option of mechanics accepts placeholders (#2293)
Particles missing from Mythic's own particle table are now resolved through the server's Particle enum and can be used by their enum name, so new vanilla particles work without an update
Conditions
inBounds accepts the new shapes, location targeters, and corner overrides listed under Triggers
Fixed heightAbove/heightBelow not resolving caster and skill placeholders in height when the targets are locations
Added the snowing condition (alias isSnowing), checking whether it is snowing at the target location
Added the isInAudience condition (aliases inaudience, audiencecontains), true for a player in the execution audience, or for any player when the skill has none, and false for anything that is not a player
Added the ?@ inline condition prefix, which checks a condition against each target of its line after the targeter has run and drops the targets that fail, like TargetConditions on a metaskill
The named time conditions now cover the 24000-tick day with no overlaps or gaps: day is 0 to 11999, dusk 12000 to 12999, night 13000 to 22999 and dawn 23000 to 23999
Block filters accept partial block states: oak_stairs[facing=north] matches stairs of any half and shape, a namespaced id such as minecraft:oak_stairs matches every state, and *[waterlogged=true] matches any block with that state
Fixed caster-only conditions such as serverBefore always evaluating false in menu icon conditions, dialog viewer conditions, raytrace hit filters and composite conditions (#2297)
Fixed itemIsSimilar never matching an empty slot against AIR
Fixed notEmpty and isEmpty not working in lore templates (#10028)
Targeters
NEW: bound
Added the @bound targeter (alias @bounds), targeting the living entities inside a cuboid, sphere, or cylinder, with the same options as inBounds
- ignite @bound{shape=sphere;l=@selfLocation;r=8}
Mobs
NEW: Sulfur Cube Options
Sulfur cubes now support Baby, Adult and AgeLock
Added the Archetype option (bouncy, explosive, sticky, hot, slow_flat) and the setSulfurCubeArchetype{archetype=hot} mechanic (#10094)
Added the meleeAttackConditional, arrowAttackConditional, bowAttackConditional, crossbowAttackConditional, moveWithinDistanceOfTargetConditional and goToLocationConditional AI goals, which only run while their conditions match
The conditional goals take targetConditions and mobConditions, and goToLocationConditional takes locationConditions and mobConditions. fleeConditional and moveTowardsTargetConditional gained mobConditions too
moveTowardsTargetConditional gained minrange, the distance at which the mob stops moving closer (#10039)
crossbowAttack gained speed and attackRadius, and bowAttack and crossbowAttack are now skipped on mobs that cannot use them
Added mob triggers that fire once for each player who moves into or out of a region, checked on the mob's timer clock; @trigger is the player. Leaving by logging out, dying, or changing worlds does not fire onPlayerExit
Skills:
- message{m=Turn back while you can} @trigger ~onPlayerEnter{shape=sphere;location=@selfLocation;radius=20}
NEW: onTotemPop
Added the onTotemPop trigger (alias onTotem), fired when a Totem of Undying saves a mob. It runs synchronously, so cancelevent stops the totem from saving the mob
NEW: onLeash / onUnleash
Added the onLeash (alias onLeashed) trigger for when a player leashes a mob, and onUnleash (alias onUnleashed) for when a mob is unleashed. @trigger is the player, and for onUnleash it is empty when something other than a player unleashed the mob. cancelevent cancels the leash or unleash (#10060)
Bounds Shapes
onEnterBounds, onExitBounds, onPlayerEnter, onPlayerExit, inBounds, and @bound accept shape=sphere (with location and radius) and shape=cylinder (also height), besides the default two-corner cuboid
Corners and locations accept a location targeter such as @selfLocation or @CasterSpawnLocation, resolved on every check
Added x1/y1/z1 and x2/y2/z2, replacing one coordinate of a resolved corner, e.g. for a region between two pins at any height
Bounds trigger config errors now say what is wrong, e.g. a cylinder without height
Skills:
- teleport @CasterSpawnLocation ~onExitBounds{shape=sphere;location=@CasterSpawnLocation;radius=20}
- message{m=Welcome to the arena} @trigger ~onPlayerEnter{c1=arena_a;c2=arena_b;y1=-64;y2=320}
Dialogs
Added ForEach and PageSize to body elements and buttons: one copy per target or value, split into pages (<dialog.page>, <dialog.pages>)
Added Skills (inline mechanics) to buttons
Added clickable text: <skill:Name:key=value> in body text runs a skill on click
Initial works on every input type. Inputs start with values carried from the previous dialog
Option labels support MiniMessage and placeholders
Item elements accept Mythic items, vanilla item lines such as DIAMOND{amount=3}, drop tables and placeholders
Conditions on body elements, inputs and buttons can read dialog.* values
Added MythicDialogOpenEvent, MythicDialogClickEvent and DialogManager#open
/mm dialogs show accepts key=value pairs
Placeholders resolve inside MiniMessage tags in all MythicMobs text, such as <head:<target.name>>
<char> accepts codes above FFFF, such as <char.1F600>
Fixed WAIT_FOR_RESPONSE dialogs staying on the waiting screen when a click runs no skills (1.21.8+)
Fixed hasDialogOpen staying true after the player left or used the ExitButton
Fixed button clicks writing their values into the opening skill's variables
Fixed closeDialog causing errors on 1.21.6 and 1.21.7
MiniMessage tags typed into text inputs show as plain text
Clicks on a dialog that is no longer shown are ignored
Fixed Multiline on text inputs not applying, and added MaxLines and Height (1 to 512 pixels), which only apply when Multiline is true (#10002)
Added riding (aliases vehicle, mount), passenger (alias rider) and passengers (alias riders), returning the UUID of the entity the scoped entity is riding, the UUID of its main passenger, and a list of the UUIDs of all its passengers
Added <mythicitem.[MythicItem].lore>, returning the item's lore lines joined by new lines. Menu lore now splits placeholder values on new lines (#10061)
Added <skill.audience-uuids>, returning the UUIDs of the skill's execution audience separated by commas, or nothing when it has none
Fixed % (remainder) never enabling math mode in placeholders
Fixed the scoped item.amount placeholder always returning 0
Fixed removed placeholders.yml keys staying registered after /mm reload (#10086)
Items
NEW: Item Components
Added UseEffects (SpeedMultiplier, CanSprint, InteractVibrations), SwingAnimation (Type of NONE, WHACK or STAB, and Duration in ticks) and MinimumAttackCharge (1.21.11+)
Added AttackAnimation and InteractAnimation (26.3+). On 26.3 SwingAnimation sets both
Fixed an invalid BreakSound value making the whole item silently fail to load. It now logs a config error
Fixed BlocksAttacks only loading when it was typed as BlocksAttaacks
Fixed BlocksAttacks blocking nothing by default and rejecting # tags
Fixed BlocksAttacks.BypassedBy throwing NoSuchMethodError on 26.1+
Fixed DefaultItemOptions.PreventCrafting in config-items.yml never being read (Crucible #327)
Fixed item templates dropping nested NBT keys from every merged template except the last one (#10042)
Fixed the getCustomData item meta keyword not reading nested custom_data compounds
Fixed a NullPointerException when clearing the lore of an item that has none
API
Added MechanicRegistry.registerProvider and ConditionRegistry.registerProvider, so a plugin can override a built-in mechanic or condition. A provider is asked when a line is parsed and returns a replacement, usually one that wraps the built-in and delegates to it. Providers chain, the original keeps its cooldown, targeter, conditions and targeting flags, and a replacement that drops an interface of the original is rejected
ConditionRegistry.registerProvider((name, config, current) ->
name.equals("RAINING") ? new MyRainCondition() : null);
Added execution audience support to the API: SkillMetadata#getExecutionAudienceState, #getExecutionAudience, #setExecutionAudience, #hasExecutionAudience and #isolateExecutionAudience, overloads of MythicMob#spawn, SkillEventBus#processTrigger and SkillEventBus#buildSkillMetadata that take an audience, and MobManager#applyMobAudience, #applyAudienceVisibility, #registerAudienceTrackedEntity and #unregisterAudienceTrackedEntity
Added MythicAudienceLoadEvent, which lets a plugin supply a custom audience type with register(SkillAudience) when a mob or skill names one that Mythic does not know
Added AsyncPathNavigation#getPathFuture, which turns the placeholder path an async navigation returns from createPath into a future for the computed path. Call it right after createPath
Mythic eggs now respect a cancelled interaction, and MythicMobEggEvent carries the player (#10004)
Added Display to drop tables, readable through DropTable#getDisplayName
Added CHANGE_DESTROY_DIRECTION to PlayerActionPacketEvent for 26.3
Compatibility
Added support for Minecraft 26.3
Fixed playAnimation swing and critical hit animations on 26.3
Fixed DISPLAY bullets jittering at spawn on 26.3 (#10044)
Fixed HIDE_POTION_EFFECTS on 1.20.5+ by mapping it to HIDE_ADDITIONAL_TOOLTIP
Fixed Mythic eggs throwing IllegalAccessError on 26.2
Improved Folia handling: the Geyser effect animation runs on its target's region thread, projectile hits across regions work, the random spawn generator no longer blocks the global region thread, forced-sync metaskills no longer run on the global region thread, and prison block cleanup runs on the owning region
Fixed mobs whose entity was retired without a death event staying registered on Folia, and their despawn now runs on the owning region (#10003)
Fixed 41 conditions, including blockTypeInRadius, hasItem, inLiquid, isBaby, mounted and structure, reading from the wrong region thread on Folia
Fixed teleports and schedulers on Folia for the pin teleport command, spawner menu teleports, onDamaged and projectileRebound auras, cinematicCamera, enderbeam, look, throw and armor stand and mob bullets
Fixed bStats metrics throwing UnsupportedOperationException on Folia (#10027)
Fixed Crucible items missing lore on Folia
Fixed the score condition erroring on Folia when the objective does not exist (#10106)
Fixed auras never ticking or expiring on Folia
Bug Fixes / Other
Optimized random spawning: the spawn point search no longer takes chunk snapshots (27.5 µs to 0.9 µs per search, 199.7 KB to 1.9 KB allocated), the mob scan stops at the local cap (32.9 µs to 5.9 µs), mob counting is faster, and one-player spawn groups skip the chunk dedupe set
Optimized repeat and forEach loops, which no longer copy the variable key set on every pass (18% faster repeat, 43 to 53% less allocation)
Optimized display bullets flying straight by skipping the rotation math (80 ns to 2 ns per bullet tick)
Optimized blockmask ownership tracking with per-player primitive maps
Optimized saving mob children: only persistent children are written to the parent's persistent data, which reduces the cost of mobs that spawn many short-lived children such as MOB bullets
Replaced the whole-world entity scan in the livingNearTargetLocation targeter with a radius query
Reduced per-tick work in skill dispatch, mob lookups and damage events: skill mechanics and damage events no longer build debug messages that are thrown away when debug is off, mob lookups by UUID do one registry lookup instead of two or three, stats with no modifiers skip the modifier sum, and metaskills with parameters copy their data once instead of twice
Skipped discarded work on trigger, targeter and placeholder paths: trigger dispatch and damage triggers no longer build names for debug messages that are thrown away, config values without a placeholder no longer build a lookup context, targeters that return one entity use a plain list instead of a hash set, cooldown lookups check for cooldown state before reading the clock, skills no longer fire the skill event when no plugin is listening, and setting a variable builds one placeholder context instead of two
Optimized projectile hit detection queries, the entity lookup cache, and stat and float parsing
Fixed vanilla override mobs never dropping their natural equipment (#2296)
Fixed setlevel leaving the mob's current health at its old value
Fixed equipment changes re-adding the AI goals that - clear had removed
Fixed mob equipment being unreadable for the first 5 ticks after spawn
Fixed ~onLoad firing on spawn, caused by lookups before a mob was registered rebuilding it from its persistent data
Fixed mob variables being lost on an unclean restart. They are now autosaved instead of only on chunk unload and clean shutdown
Fixed mobs loaded from disk missing the default Variables of their type (#10049)
Fixed mob auras ending when a chunk or world unloads on mobs with Despawn: false (#10008)
Fixed the last signal not being saved when a mob unloads
Fixed parent assignment finishing after ~onSpawn skills had already run
Fixed MythicMobDespawnEvent firing during kills (#10005)
Fixed random spawns loading twice, and random spawn Cooldown ignoring placeholders
Fixed a startup error when the random spawn generator ticked before the timings handler existed
Fixed cluster random spawn groups being evaluated off the main thread on Paper
Fixed a drop that yields no item aborting the rest of its drop table (#10023)
Fixed the native Model: block not applying on a mob's first spawn (#10031)
Fixed multi-line nameplates inheriting the formatting of the first line (#10035)
Fixed PassthroughDamage removing thrown tridents, so Loyalty tridents return again (#10012)
Fixed PreventVanillaDamage mobs still reporting their vanilla damage to ~onAttack (#2294)
Fixed skill clock stalls caused by blocking entity lookups in the children condition and targeter
Fixed ThreatTable looking up entities off the server thread
Fixed moveTowardsTargetConditional never pursuing its target (#10034)
Fixed fleeConditional and nearestConditionalTarget spamming errors when no conditions are set
Fixed moveWithinDistanceOfTarget wandering and getting stuck instead of walking straight to the target
Fixed scaleByAttackCooldown (sbac) reading the post-reset attack cooldown from ~onSwing, and the attack_cooldown placeholder reading it in onAttack auras, on 26.1+ (#2257)
Fixed damageTag conditions not working in onDamaged aura skills (#10022)
Fixed skill damage keeping no attacker when its damage cause is not an entity attack (#10021)
Fixed the hit mechanic with ts=false firing the mob's own ~onAttack triggers (#10051)
Fixed a melee hit cancelled by another plugin after MythicMobs' damage handler (for example MMOItems' disable-melee-attacks through MythicLib) starting the attacker's immunity window and blocking skill damage within NoDamageTicks. Hits MythicMobs cancels itself no longer start it either (#10103)
Fixed auras expiring early when refreshed between ticks. Expiry now follows a fixed deadline, so auras end when their duration does
Fixed an async aura tick ending the aura before its onDeath component could fire
Fixed a race that could stop auras from registering
Fixed castinstead and orelsecast skills losing their skill parameters
Fixed deferred mechanics and loop iterations reading the wrong skill variables
Fixed metaskill condition elements overwriting each other's results
Fixed numeric variables updated at the same moment overwriting each other
Fixed a skill cooldown cleanup that could rarely discard an active lock before it was ready to be released
Fixed an audience snapshot race during skill setup
Fixed the goto mechanic trying to run after its world became invalid
Fixed projectiles overshooting maxRange at high velocity
Fixed the ringAroundOrigin and randomRingPoint targeters crashing the server with more than 360 points
Fixed ARROW projectile bullets spawning with the wrong rotation
Fixed location targeters ignoring an explicit 0 for coordinateYaw and coordinatePitch
Fixed particlebox drawing a sphere and sending the square of amount particles
Fixed blockwave blanking sign text and other block entity data when it restores blocks (#10085)
Fixed weather{type=sunny} leaving thunder running
Fixed cinematicCamera leaving the player frozen for good when its world cannot be found
Fixed a left click during a DISPLAY cinematic kicking the player
Fixed global-data.json failing to save with AccessDeniedException on shutdown (#10111)
5.13.0
General
Added PackDependencies and FileDependencies to packinfo.yml, letting a pack declare which plugins/files it needs so Mythic skips (instead of parsing and erroring on) content gated behind a missing dependency
Spawners gained Chance, RandomRotation, and UseWorldScaling options; most spawner fields (Cooldown, Warmup, MobsPerSpawn, MobLevel, Radius, RadiusY, ActivationRange, ScalingRange, LeashRange) now accept placeholders and ranged values instead of only flat numbers
Numeric attributes across 40+ mechanics (missile, projectile, beam, summon, orbital, lightning, shootfireball, volley, raytrace, particle effect mechanics, and more) now accept placeholders instead of only static numbers
Added Hide, HideFlags, Glint, and Enchantments icon options to menu configs; fixed conditionally-overridden icons showing item flags they shouldn't (#2232)
Stats
Changed CRITICAL_STRIKE_DAMAGE back to a compounding multiplier on final damage instead of being folded into the same additive pool as mechanics like modifyDamage{}
Fixed a lost-update race in stat recompute that could drop concurrent stat changes (e.g. from async auras); health regen now reads the live stat value every tick instead of a cache that could desync
Mechanics
NEW: Cinematics System
Added a scripted camera system for cutscenes, boss intros, and scripted reveals: keyframed camera paths are defined under cutscenes/ (or inline) and played back for a player with the cinematicCamera mechanic (aliases cinecam, camerapath), supporting looping, per-leg easing curves, a packet-only DISPLAY camera or a TELEPORT-based fallback, and optional onStart/onEnd skills
Added the cinematicCancel mechanic (aliases cinecancel, stopcinematic) to stop an active cinematic early
Added the isInCinematic condition (aliases incinematic, incine, cinematicactive) and the cinematic.active, cinematic.frame, and cinematic.progress placeholders
Added the /mm camera <pathId> add|remove command for building camera paths in-game
Added MythicCinematicStartEvent (cancellable) and MythicCinematicEndEvent API events for addons
Fixed the DISPLAY camera mode not loading chunks along the camera path
Added the clearpath mechanic (aliases stoppath, clearnavigation, stopnavigation), clearing the target mob's current navigation path
- clearpath @self
Mount Mode
Added a mode option to the mount and summonPassenger mechanics: ADD (adds as a passenger), SET (sets the passenger, fails if one already exists, previous default behavior), or REPLACE (replaces all current passengers)
Added a ce/cancelEvent option to the ondeath aura component: on a successful on-death skill (Paper only), the death event is now cancelled and the entity revived instead of dying
- aura{onDeathSkill=ReviveSkill;ce=true} @self
Aura Component cancelOn* Flags
cancelOnDeath, cancelOnCasterDeath, cancelOnTeleport, cancelOnChangeWorld, cancelOnGiveDamage, and cancelOnTakeDamage can now be set on an individual aura component instead of only the aura line (#2254)
setProjectileDirection now supports entity-target dispatch (e.g. @target) in addition to location targets (#2229)
Added hitBlockConditions (alias hbcond) to missile, projectile, and slashProjectile, letting conditions evaluated against the hit block decide whether the projectile is allowed to stop there
The forEach mechanic now exposes the current loop index via <skill.var.index>
The delay mechanic's ticks parameter now also accepts placeholders
aura merging can now override the attachment of an already-running instance instead of always keeping the original
Added the firefly particle type
Conditions
NEW: isCancelled
Added the isCancelled condition (aliases isCanceled, cancelled, canceled), checking whether the triggering event is currently cancelled, e.g. after an earlier cancelevent in the same skill chain
Added the skyLightLevel condition, testing the sky light level (light from the sky only) at the target location
- skylightlevel{l=10}
entityType Condition: Nested Variant Matching
entityType/mobtype now accepts per-type constraints (variant, color, style, mainGene, hiddenGene, biome, profession, crack, bodyColor, patternColor, pattern) to match specific animal variants, villager professions/biomes, sheep/llama/shulker colors, iron golem crack state, tropical fish patterns, and more
Added a shape option (SPHERE default, CYLINDER, SQUARE) to mobsInRadius, matching the shape option already on the EntitiesInRadius/EntitiesNearOrigin targeters
Added the angry condition (alias isAngry) for bees, wolves, and vexes
Added the pollinated condition (aliases isPollinated, hasNectar) for bees
Expanded isSheared to also check bogged and snowmen
variableContains gained an EXACT_ENTRY (aliases EXACTENTRY, EE) compare type, matching a whole comma-separated entry instead of a substring
heightAbove/heightBelow now resolve their height value with the casting skill's metadata, so it accepts skill variables and other placeholders
Added the inBounds condition (aliases withinBounds, insideBounds); see onEnterBounds below
Targeters
NEW: targetinvulnerable
Added the targetinvulnerable targeter option (default true); set to false to skip invulnerable entities (e.g. Options.Invincible mobs)
@EntitiesInRadius{r=10;targetinvulnerable=false}
mythic / vanilla Filters
Added mythic and vanilla as target/ignore filter values, restricting a targeter to only Mythic entities or only non-Mythic (vanilla) ones
Added targettextdisplays, targetitemdisplays, targetblockdisplays, and targetinteractions filters (all default true), letting skills include or exclude text/item/block display and interaction entities
Misc
The uuid targeter now accepts a comma-separated list of UUIDs instead of only one
Mobs
NEW: Default Level
Added a top-level Level mob option (aliases MobLevel, Options.Level) setting the mob's default level, used whenever it spawns without an explicit one (spawner, /mm mobs spawn, totem, mob bullet, etc); accepts a fixed value or a minTOmax range rolled per spawn
Spawners with no MobLevel set now use the mob's own Level (or 1) instead of spawning level 0 mobs
Negative LevelModifiers values now work (previously silently ignored), so a stat can decrease per level
Mob level is never clamped below 1 anymore, including stray fractional levels from world scaling
A mob's saved level is read back correctly on reload/chunk-reload instead of being guessed from health
Added DefaultMobOptions.PreventJockeyMounts, PreventConversion, PreventLeashing, PreventItemPickup, and NoDamageTicks global defaults in config-mobs.yml; fixed DefaultMobOptions.PreventVanillaDamage never being read
Triggers
NEW: onEnterBounds / onExitBounds
Added mob triggers that fire when a mob crosses into or out of an axis-aligned box defined by two corners (checked on the mob's timer clock; a mob spawning inside fires onEnterBounds on its first check). Corners accept a pin name, world,x,y,z, or x,y,z, and support placeholders/math
Skills:
- message{m="Entered the arena"} @World ~onEnterBounds{corner1=world,100,64,100;corner2=world,120,80,120}
Placeholders
NEW: min / max / clamp
Added .min{amount=X}, .max{amount=X}, and .clamp{min=A;max=B} meta placeholders for bounding a numeric placeholder or variable inline, instead of variableSet+variableInRange chains
Added location.temperature (aliases l.temp, temp), returning the adjusted biome temperature at a location
Added absorption (alias absorb), returning the scoped entity's current absorption (golden) health
<skill.var.damage-type> now falls back to the damage's tags (comma-joined) instead of the literal SKILL when no element is set; added <skill.var.damage-tags> for the raw tag list
Added slot.item, returning the item in an entity's equipment/inventory slot as a drillable item value supporting item meta-keywords
Items
BAG-type items now default their stack size to 1 (still overridable via Options.StackSize)
API
Added MythicLoadedEvent, fired once the plugin has fully finished loading
Added MythicCinematicStartEvent/MythicCinematicEndEvent (see Cinematics System above)
MythicTriggerEvent now implements Cancellable
Added a LootBag#give overload taking a BiFunction so addons can override how drop items are added to a player's inventory
Added a LootBag#give overload taking a BiConsumer for custom handling of items that don't fit in the player's inventory
Fixed addon-registered placeholders being dropped when MythicPlaceholdersLoadEvent fired before the addon subscribed to it (#2214)
Restored the deprecated SkillCondition#evaluateLocation(AbstractLocation) overload for addon compatibility
Compatibility
Added support for Minecraft 26.2
Improved Folia handling across triggers, spawners, mechanics, projectiles, and particle batching (region-thread dispatch for altitude, DEATH/death-observer, random spawn, spawner ticking, mechanic entity state, projectile onHit, and scheduler usage)
Fixed ~onMount/~onDismount throwing NoClassDefFoundError on 1.20.1
Fixed EntityKnockbackEvent breaking plugin load on 1.20.4
Fixed a snow golem entity-type lookup crash and guarded breeze projectile detection on pre-1.21
Bug Fixes / Other
Cached compiled math expressions in placeholders, conditions, and variable math for up to ~20x faster evaluation
Reduced per-tick allocations in skill delay placeholders, targeters, and projectile packet dispatch
Optimized packet-bullet rotation parsing, entity-teleport packets, AoE condition location resolution, and boss bar range checks
Optimized player-movement tracking with a lock-free per-player location holder instead of cloning Location on every move event
Reduced target-list copying in hot SkillMetadata clones
Replaced chunk iteration with a direct AABB spatial query in getEntitiesNearLocation, with NaN/Infinite-coordinate guards and finite world-height bounds
Made VariableRegistry/PlayerVariableRegistry lock-free and stopped firing MythicPlayerVariableSetEvent twice per bulk-write entry
Reduced per-tick allocations across projectile, packet-render, and damage-trigger hot paths
Kept VariableRegistry's backing map a ConcurrentHashMap after Gson deserialization instead of rebuilding it as Gson's LinkedTreeMap
Shared a single WorldUnloadEvent listener across all active projectiles instead of one per projectile
Skipped allocating a knockback-resistance AttributeModifier/UUID per hit in doDamage unless actually needed
Optimized the packet-entity renderer's per-tick player iteration and switched packet yaw/pitch to primitive storage
Replaced Stream pipelines with plain loops in ILocationSelector filtering
Removed throwaway list allocations in PacketEntityRenderer.sendPacket
Cut projectile per-tick packet dispatch overhead and cached entity UUIDs during target evaluation
Cut roughly a second off every /mm reload by caching jar annotation scans and skipping a per-item exception when no shield color is set
Sped up /mm reload further by narrowing config lookup-cache invalidation to just the affected section
Reduced per-tick target-evaluation overhead in projectile hit detection
Reduced redundant block-state lookups during projectile collision checks
Reduced allocations in projectile target buffering
Optimized CylinderShape/SquareShape targeters, altitude condition, and stun mechanic location lookups; onDamaged aura matching no longer allocates a HashMap per hit
Optimized pin targeter random picks and hoisted repeated lookups out of timer-skill and mob-clock loops
Fixed O(n²) slowdown in targetinterval batching and RandomRingPointTargeter picks as target counts grow
Fixed particletornado's cloud particle sending invalid data and spamming "particle data is void" in console
Fixed a NullPointerException in skill cooldown checks and mechanic dispatch when a caster's entity was null
Fixed mobs keeping vanilla random equipment when their chunk unloaded before the deferred equip pass ran
Fixed recoil's pitch/yaw options not resolving placeholders/math expressions per cast (#2265)
Fixed disabled stats not loading their display/formatting config, which NPE'd Crucible item lore generation
Fixed ~onBowHit not firing for Crucible's simulated projectile skill damage (#2261)
Fixed the damage mechanic's re-entrancy guard dropping onAttack-triggered damage even with triggerSkills/ts=true set (#2269)
Fixed attribute-mapped stat changes (e.g. from async aura ticks) applying off the entity's owning thread and corrupting the attribute tracker (#2270)
Fixed hugSurface/heightFromSurface on the totem mechanic not actually positioning the model (#2267)
Fixed orbital bullet=DISPLAY rendering off its circular path due to a forward offset (#2237)
Fixed the DamageModifier stat's TriggerStats/ParentStats reading from the wrong stat's config scope (#2213)
Fixed dialog element/button conditions being evaluated against the caster instead of the viewer, buttons ignoring their own conditions/cooldown, and dialogs not reloading on /mm reload (#2251)
Fixed the sound mechanic's volume not supporting placeholders
Fixed the metaskill mechanic evaluating its target skill's Conditions twice per cast (#2246)
Fixed random-spawn maxHeight not being bounded to the world's build height limit (#2260)
Fixed a Model Engine model being applied twice on spawn when Model.Id was configured
Fixed duration fields (e.g. Cooldown, mechanic durations) losing the ability to be given as a random range after duration units were added
Fixed the speak{} mechanic's speech-bubble hologram rendering dark
Fixed tracklocation and other location-targeted mechanics silently doing nothing when cast with an entity targeter
Fixed the onDeath aura component not firing on player deaths
Fixed the onDeath aura component never firing when cancelOnDeath was enabled
Fixed spawner warmup not arming when the async despawn clock finalized a kill as a despawn before the death event arrived (#2204)
Guarded entity teleports against unloaded/null worlds, including the teleport mechanic and a projectile's end skill on world unload
Fixed recoil/fear forced rotation kicking players with "Invalid move player packet received"
Fixed the charged/creeperCharged condition failing to load due to a constructor mismatch
Fixed generated tooltip_style component keys not resolving under the MythicCrucible pack namespace
Fixed damage modifiers that reduce entity vs entity damage to exactly 0 not applying unless CancelDamageIfZero was also enabled
Fixed a race between the async mob clock and EntityDeathEvent that could skip the DEATH trigger or miss a killer's PreventMobKillDrops on quick deaths
Fixed shoot mechanic's ITEM and BLOCK projectile types not working
Fixed blockwave throwing LIGHT blocks
5.12.1
General
Particle effects are now queued and bundled to greatly reduce packet usage, and particle effects will not respect the client's particle settings (configurable)
Added support for using duration units in skill cooldowns and most mechanics with durations and intervals by adding a suffix (e.g. 5s = 5 seconds, 20t = 20 ticks)
incombat can now check players tracked by the combat-tag tracker
Improved Folia handling for RandomSpawnGenerator
Improved Folia handling for SetTextDisplayMechanic entity writes
Improved caster scheduling for virtual casters
Optimized MythicMenu rendering by skipping per-render placeholder resolution for static placeholders
Optimized text pixel length calculation
Cached regex metakeyword patterns
Optimized boss bar updates
Optimized single-token placeholder parsing
Optimized random location target selection
Optimized final damage calculation
Optimized spawner clock ticking
Optimized target condition evaluation allocations
Optimized random generation in ChanceCondition
Optimized drop hot paths
Optimized EntitiesNearbyTargeter
Optimized PlaceholderInt parsing
Optimized IEntitySelector player filtering
Optimized variable string joins
Optimized MapVariable, MapSerializer, and AuraRegistry loops
Fixed blockwave to use the existing BlockState when no material is specified
Fixed setDisplayEntityItem nt supporting block display entities
Fixed some issues with default stat base values in stats.yml
Fixed sortNum placeholder output for list variables
Fixed sortNum placeholder output for set variables
Fixed documented defaults not being honored in playersInRadius
Fixed MiniMessage tags not parsing in custom kill messages
Fixed default flash particles not being colored white
Fixed overlapping blockmask mechanics with durations so newer masks keep their duration when older masks expire
Fixed RandomSpawnerREPLACE recursion on Mythic-initiated spawns
Fixed hasitem defaulting amount to the condition variable instead of >0
Fixed nameplate brightness
Fixed stat executor loading order
Fixed parent command handling for command skills
Fixed stats.yml extraction timing so addons can register stats early
Fixed particlelineequation ignoring eqy and eqz
Fixed teleport losing preservepitch and preserveyaw during safe spawn lookup
Fixed particlesphere applying yoffset twice
Fixed trail particle location key using the source instead of the target
Fixed aura{cancelOnDeath=false} persisting through player respawn
Fixed MythicMobDeathEvent and drops being missed during async skill clock races
Fixed 1.21.1 compatibility issues
Fixed inverted BukkitAttribute.values() filtering
Fixed onTick auras continuing after expiry
Fixed negative-duration aura loops
Fixed nested entity targeters in location= slots not applying sort, conditions, or limit
Fixed onattack skill variables for damage-amount
Fixed onattack skill variables for damage-type
Fixed onattack skill variables for damage-cause
Fixed MobsNearOrigin throwing an NPE when type is missing
Fixed MobsNearOrigin to log a config error when type is missing
Fixed pickupitem leaving fancy-drop PDC on picked-up items
Fixed giveitem filling decorated pots instead of dropping items beside them
Fixed summoning issues
Fixed durations returning excessive precision
Fixed math formulas returning excessive precision
Fixed damage{} not respecting triggerSkills
Fixed stun allowing players to teleport upward
Fixed stun restoring g= as an aura group option
Fixed -1 not giving infinite duration on potions
5.12.0
General
Added support for 1.21.11 and 26.1.x (requires Java 25)
Added automatic config updating
Improved case-insensitive config loading
Added new files/ pack directory
Added auto-generated .internal pack. This will contain some assets that can be auto-generated by Crucible, along with other helpful internal things that can modified.
Stats System
Updated the default stats.yml with better base values
Added missing stats to the default stats.yml
Added LOOT_BIAS stat for affecting weighted droptables
Mechanics
NEW: Aura Components
Rewrote auras to be component-based so a single aura can combine multiple effects