Casting
Active (or on-use) spells can be cast in a variety of ways depending on how the server is configured.
Casting Spells
by Command
Any active learned spell can be cast with /cast <spell> as long as the player has permission to use the command.
While not the fastest way to cast, it's the most basic and does not require any binding setup.
from the Spellbook
Active spells can be cast directly from the Spellbook menu (/spellbook). Left-clicking a usable spell casts it. Right-clicking opens the binding window so the player can assign that spell to a quickcast slot (when player bindings are enabled).
Quickcasting
Quickcasting lets a player cast their bound spells without typing commands. It's configured server-wide in config-spells.yml under Configuration.Casting.QuickCasting. Pick one of the methods below by setting QuickCasting.Method:.
| Method | Description |
|---|---|
NONE |
Quickcasting disabled |
HOTBAR |
Toggle a cast bar on/off; tap the slot number (1-9) to cast the spell bound to that slot |
CLICK_COMBO |
Perform a sequence of clicks/keys (e.g. LRR) to cast the spell tied to that combo |
The method can be activated by an in-game action set under QuickCasting.Activation:
| Activator | Description |
|---|---|
NONE |
No activator (open via API/menu) |
SWAP_HANDS |
Swapping hands (vanilla F key) |
DROP_ITEM |
Dropping an item (vanilla Q key) |
Common Options
These apply regardless of Method, set under Configuration.Casting.QuickCasting:
| Option | Description | Default |
|---|---|---|
BindableSlots |
Number of quickcast slots a player can bind spells to | 5 |
PlayerBindings |
Whether players can set their own bindings. When false, only server/archetype bindings apply |
true |
ActivationSkill |
Mythic skill list run when quickcasting is activated | [] |
Display.Type |
Where the overlay renders (same values as Location below). Takes precedence over Location |
falls back to Location (shipped config: SUBTITLE) |
Display.UpdateIntervalTicks |
How often the text overlay re-renders (action/title/subtitle types). Accepts a Mythic duration | 10t |
Display.Prefix |
Text prepended to the rendered overlay | <gray>[</gray> |
Display.Suffix |
Text appended to the rendered overlay | <gray>]</gray> |
Display.Separator |
Separator placed between overlay entries | " " |
HUD.Layout |
MythicHUD layout enabled while quickcasting is active (used when the render type is MYTHICHUD) |
casting_layout |
HOTBAR — Cast Bar
The cast bar can hold up to a configured number of bound spells (default 5, max 9). When toggled on, the player taps the slot number to cast the spell bound there.
QuickCasting.Location controls where the bar is rendered:
ITEMS— overlays spell icons on the player's hotbarACTION_MESSAGE— renders bound spells on the action bar using unicode iconsTITLE/SUBTITLE— renders into the title areaMYTHICHUD— renders via Mythic HUDNONE— no display
The render target is chosen by Display.Type (see Common Options); Location is the older key and is used only when Display.Type is unset.
Hotbar-specific options under Configuration.Casting.QuickCasting.HotBar:
| Option | Description | Default |
|---|---|---|
SingleCast |
Whether the cast bar hides itself after a single cast | true |
OffsetKeys |
Whether slot numbers are offset from the player's currently selected hotbar slot | false (shipped config: true) |
Display.UseIcons |
Whether to render each bound spell's configured icon instead of its display name | false |
CLICK_COMBO — Click / Dance Combos
The player toggles the combo input mode, then enters a short sequence of inputs to cast a spell. There are two modes set under Configuration.Casting.QuickCasting.ClickCombos.Mode:
SLOTS— slot-based combos. Each binding slot has a fixed input pattern (e.g. slot 1 =LL, slot 2 =LR). Whichever slot's combo matches casts the spell bound to that slot.SPELLS— spell-defined combos. Each spell with aClickCombo:orClickCombos:value casts when its pattern is matched, regardless of bindings.
Available Inputs
A combo pattern is a sequence of input tokens. Available tokens:
| Token | Action |
|---|---|
L |
Left-click |
R |
Right-click |
C |
Crouch / sneak |
Q |
Drop item |
F |
Swap hands |
W |
Move forward (with UseMovementKeys) |
A |
Strafe left (with UseMovementKeys) |
S |
Move backward (with UseMovementKeys) |
D |
Strafe right (with UseMovementKeys) |
J |
Jump (with UseMovementKeys) |
UseMovementKeys: true enables W/A/S/D/J for "dance casting" — building combos from movement directions instead of (or alongside) clicks.
If the activator is set to SWAP_HANDS or DROP_ITEM, those keys are consumed for toggling the combo mode and become unavailable as combo inputs while the activator is active.
Notable Tuning Options
All configured under Configuration.Casting.QuickCasting.ClickCombos:
| Option | Description | Default |
|---|---|---|
Activator |
Which input starts a combo session (SWAP_HANDS, DROP_ITEM, or NONE). Independent of the top-level Activation. |
SWAP_HANDS |
ToggleActivatorCancels |
If true, pressing the activator again cancels the current session |
true |
KeepSessionOpen |
If true, the session/overlay stays active indefinitely (like the hotbar); the buffer still resets on idle/cast/invalid input, and only the activator closes it |
false |
AllowedInputs |
List of tokens accepted as combo inputs | [] (shipped config: [L, R, C, Q, F, W, A, S, D, J]) |
ComboLength |
Number of inputs in a fixed-length combo | 3 |
VariableLengthCombos |
Allow combos of varying length to match (e.g. both LL and LLR) |
false |
TimeoutMs |
How long the player has between inputs before the buffer resets | 800 |
RequireSneakForInputs |
Require sneaking for L/R inputs to count |
false |
CancelVanillaActions |
Suppress vanilla effects of inputs while the combo overlay is open | true |
DisableOnInvalidCombo |
Close the combo overlay automatically if no matching combo exists | true |
AllowInvalidCombos |
Allow buffers that don't match any combo (paired with DisableOnInvalidCombo) |
false |
AllowSpellCombosWithBindings |
In SLOTS mode, also allow direct spell combos to cast |
false |
FreezeMovementDuringCombo |
Stop the player while building a combo | false |
InputSkill |
Mythic skill list run when an input is accepted | |
FailedSkill |
Mythic skill list run when a combo fails to match |
Display Hints
With ClickCombos.Display.ShowHints: true, the combo overlay shows the next valid inputs after the buffer. IconMap: lets you replace each input token with custom Unicode/font characters for in-world icons.
EmptyText sets what is shown between the overlay prefix and suffix while the buffer is empty (default <dark_gray>...</dark_gray>). Set it to "" to show nothing until the first input.
The hint string is wrapped with these options under ClickCombos.Display:
| Option | Description | Default |
|---|---|---|
HintPrefix |
Text placed before the hint list | " <dark_gray>" |
HintSeparator |
Separator between hinted inputs | / |
HintSuffix |
Text placed after the hint list | </dark_gray> |
Configuration:
Casting:
QuickCasting:
Method: CLICK_COMBO
Activation: SWAP_HANDS
Location: ACTION_MESSAGE
ClickCombos:
Mode: SLOTS
ComboLength: 3
AllowedInputs: [L, R]
Slots:
1: LLL
2: LLR
3: LRL
4: LRR
Display:
EmptyText: "<dark_gray>...</dark_gray>"
ShowHints: true
IconMap:
L: '⬅'
R: '➡'
Spell-Side Configuration
A spell can declare its own click combo(s) using ClickCombo: (single) or ClickCombos: (list) in the spell config. These are used in SPELLS mode, or in SLOTS mode when AllowSpellCombosWithBindings is enabled.
fireball:
Spell: true
Trigger: ~onUse
ClickCombos:
- LRL
- RRL
Skills:
- projectile{...}
Global Cooldown
By default each spell only has its own cooldown, so a player with several off-cooldown spells can fire all of them in the same tick. GlobalCooldown sets a minimum delay between any two spell casts by the same player.
Configuration:
Casting:
GlobalCooldown: 1s # also accepts ticks and milliseconds: '20t', '500ms'
| Option | Description | Default |
|---|---|---|
GlobalCooldown |
Minimum delay between any two spell casts by the same player. 0 disables it. |
0s |
Details:
- It applies to every casting route:
/cast, the spellbook, the quickcast hotbar, click combos, and thecastSpellmechanic. - The cooldown starts when a cast is initiated, not when it finishes. For a spell with a
CastTime, it starts the moment the cast bar appears, so a player cannot slip an instant spell in while a long cast is running. A cast that is cancelled part-way still spends the global cooldown. - A cast blocked by the global cooldown fails before any targeting, reagent or condition check runs, so nothing is consumed. The player gets the
spell.cast.failed.global-cooldownmessage. - It is a single server-wide value. It is not per-spell, and it is not affected by the
CASTING_SPEEDstat. - Passive (non
~onUse) spells are never gated by it. - Because
castSpellcasts a spell as if the target used it themselves, it is gated too. A skill that chains severalcastSpellmechanics at one target will only land the first while a global cooldown is set. Use the spell'sSkills:list directly if you need several effects to fire together.
Cast Time
A spell with a CastTime: value runs through the cast-time pipeline before its skills execute: a cast bar is shown, the cast can be cancelled or pushed back, reagents can be deferred until completion, and lifecycle triggers (~onSpellCastStart, ~onSpellCastComplete, ~onSpellCastCancel, ~onSpellCastInterrupt, ~onSpellCastPushback) fire at the appropriate moments.
The base cast time is divided by the caster's CASTING_SPEED stat — a CASTING_SPEED of 2.0 makes a 2s cast take 1s.
A CastTime of 0 (the default) makes the spell instant; the cast pipeline is bypassed entirely.
Spell-Level Options
fireball:
Spell: true
Trigger: ~onUse
CastTime: 2s # also accepts ticks: '40t'
Cost:
- mana 40
Casting:
InstantCastThreshold: 4t
UsabilityCheck: START
ReagentTiming: FINISH
RefundReagentsOnCancel: true
CancelOnMove: true
MovementTolerance: 0.0
CancelOnDamage: false
CancelOnInteraction: true
Interruptible: true
DamagePushback:
Enabled: false
Amount: 0.5s
Max: 1s
ReevaluateTargets: false
ConcurrentPolicy: REJECT
StatModifiers:
- MOVEMENT_SPEED -0.9 ADDITIVE_MULTIPLIER
Skills:
- projectile{...}
| Option | Description | Default |
|---|---|---|
CastTime |
Base cast time (e.g. 2s, 40t). 0 casts the spell instantly. |
0 |
Casting.InstantCastThreshold |
If the cast time after CASTING_SPEED is at or below this many ticks, the spell casts instantly. Set to 0 to disable. |
4t |
Casting.UsabilityCheck |
When the spell's usability is checked (cooldown, conditions, etc.). One of START, FINISH, BOTH, NONE. |
START |
Casting.ReagentTiming |
When Cost: reagents are consumed. START consumes immediately; FINISH consumes only if the cast completes. |
FINISH |
Casting.RefundReagentsOnCancel |
If reagents were consumed at START, refund them when the cast is cancelled. |
true |
Casting.CancelOnMove |
Whether the cast cancels when the player moves. | true |
Casting.MovementTolerance |
Distance the player can move from the start location before the cast cancels (in blocks). 0 cancels on any movement. |
0.0 |
Casting.CancelOnDamage |
Whether the cast cancels when the player takes damage. | false |
Casting.CancelOnInteraction |
Whether the cast cancels when the player interacts with a block or entity. | true |
Casting.Interruptible |
Whether the interrupt mechanic can cancel this cast (without force=true). |
true |
Casting.DamagePushback.Enabled |
If true, damage extends the remaining cast time instead of cancelling it (also requires CancelOnDamage: false). Fires ~onSpellCastPushback per pushback. |
false |
Casting.DamagePushback.Amount |
Time added to the remaining cast time per damage event. A Mythic duration; a bare number is read as seconds. | 0.5s |
Casting.DamagePushback.Max |
Maximum total pushback time applied to a single cast. A Mythic duration; a bare number is read as seconds. | 1s |
Casting.ReevaluateTargets |
If true, the spell's targeter is re-evaluated at the moment the cast completes (instead of using targets captured at start). | false |
Casting.ConcurrentPolicy |
Behavior when the player tries to start a cast while another is active. REJECT blocks the new cast; CANCEL_PREVIOUS / REPLACE cancel the old cast. |
REJECT |
Casting.StatModifiers |
List of temporary stat modifiers applied to the caster while the cast is active. | [] |
StatModifiers accepts the standard line form (STAT_NAME VALUE [OPERATION]) or a section form:
Casting:
StatModifiers:
- MOVEMENT_SPEED -0.9 ADDITIVE_MULTIPLIER
# or:
- MOVEMENT_SPEED:
Value: -0.9
Operation: ADDITIVE_MULTIPLIER
Operations match Mythic stat modifier operations: ADDITIVE, ADDITIVE_MULTIPLIER, COMPOUND_MULTIPLIER, SETTER.
Server-Wide Defaults
Every option above can be set globally under Configuration.Casting.CastTime.Defaults in config-spells.yml. Per-spell Casting: blocks override the defaults.
Configuration:
Casting:
CastTime:
Defaults:
CastTime: 0
InstantCastThreshold: 4t
UsabilityCheck: START
ReagentTiming: FINISH
RefundReagentsOnCancel: true
CancelOnMove: true
MovementTolerance: 0.0
CancelOnDamage: false
CancelOnInteraction: true
Interruptible: true
DamagePushback:
Enabled: false
Amount: 0.5s
Max: 1s
ReevaluateTargets: false
ConcurrentPolicy: REJECT
StatModifiers: []
The Cast Bar
While a cast-time spell is being cast, a configurable cast bar is shown to the player. It is configured globally under Configuration.Casting.CastTime.Display:
| Option | Description | Default |
|---|---|---|
Type |
Where the bar renders. One of ACTION_MESSAGE, TITLE, SUBTITLE, MYTHICHUD, or NONE. (ITEM_BAR is not supported here.) |
ACTION_MESSAGE |
UpdateIntervalTicks |
How often the bar re-renders. | 2 |
Length |
Number of characters in the rendered bar. | 20 |
Filled |
Character used for the completed portion. | ▬ |
Empty |
Character used for the remaining portion. | ▬ |
Format |
The full bar string. Supports MiniMessage tags and the placeholders below. | <white>{spell}</white> <gray>[<green>{filled}</green><dark_gray>{empty}</dark_gray><gray>] <yellow>{remaining}s</yellow> |
HUD.Layout |
The MythicHUD layout to enable while a cast is active (used when Type: MYTHICHUD). |
casting_casttime_layout |
Format placeholders:
| Placeholder | Replaced With |
|---|---|
{spell} |
The spell's display name |
{spell_name} |
The spell's internal id |
{cast_id} |
The unique id of this cast |
{bar} |
The full rendered progress bar |
{filled} |
The filled portion of the bar |
{empty} |
The remaining portion of the bar |
{progress} |
Cast progress as a 0.00–1.00 value |
{percent} |
Cast progress as a 0–100 integer percent |
{remaining} |
Remaining time in seconds (e.g. 1.34) |
{total} |
Total cast time in seconds |
{remaining_ticks} |
Remaining time in ticks |
{total_ticks} |
Total cast time in ticks |
CASTING_SPEED Stat
CASTING_SPEED is a Mythic stat added by MythicRPG. It scales how fast a player (or Mythic mob) finishes a cast:
adjusted cast time = base cast time / CASTING_SPEED
| Property | Value |
|---|---|
| Key | CASTING_SPEED |
| Base | 1.0 |
| Min | 0.01 |
| Max | unbounded |
| Applies to | Players and Mythic mobs |
A CASTING_SPEED of 2.0 makes a 2s cast finish in 1s. A CASTING_SPEED of 0.5 makes a 2s cast take 4s. If the adjusted cast time falls at or below Casting.InstantCastThreshold, the spell casts instantly.
Lifecycle Triggers and Mechanics
| Trigger | When it fires |
|---|---|
~onSpellCastStart |
The cast begins (after the START-time usability and reagent checks pass) |
~onSpellCastComplete |
The cast finishes successfully and the spell's skills run |
~onSpellCastCancel |
The cast is cancelled (movement, damage, interaction, profile unload, etc.) |
~onSpellCastInterrupt |
The cast is cancelled by the interrupt mechanic |
~onSpellCastPushback |
The cast had its remaining time extended via DamagePushback |
| Mechanic | What it does |
|---|---|
castSpell |
Casts a learned spell on the target as if they used it themselves |
interrupt |
Cancels the target's active cast (or a Mythic cast aura on a mob) |
modifyCastTime |
Adds, sets, or scales the target's remaining cast time |
cancelCast |
Cancels the target's active cast unconditionally |
| Condition | What it checks |
|---|---|
isCastingSpell |
Whether the target is currently casting (optionally, a specific spell) |
spellCastProgress |
The target's cast progress as a 0–1 value |
isCastInterruptible |
Whether the target's active cast can be interrupted |