All Mods Resource Packs Data Packs Shaders Modpacks Plugins
Iron's Spells: Incantation

Iron's Spells: Incantation

by hoggormino • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

Iron's Spells: Incantation

Say a spell's name. Cast it.

Incantation captures your microphone directly, runs the audio through an offline speech recognizer (Vosk), and casts whichever Iron's Spells 'n Spellbooks spell you just said. No voice training, and the speech model installs itself on first launch.


How it works

Incantation opens your microphone itself — no voice-chat mod involved — and feeds the audio straight to a Vosk recognizer whose grammar is built from the spell names your installed mods actually register. A closed grammar's only way to say no is its [unk] token, and it will often prefer the least-bad spell name over it - so 0.10.6 adds the defences that make that safe: a match has to have been spoken long enough to plausibly be that phrase, and any spell you list in perSpellMinConfidence waits for the complete utterance and its own confidence bar before it will fire.

Casting is then gated on what you actually have equipped: a spellbook in your Curios slot, an imbued weapon you're holding, or imbued armor you're wearing. Saying the name of a spell you don't have does nothing. Servers that would rather let you cast from a spellbook held in hand can set castMode = ANY_SPELLBOOK.

Recognition runs entirely on your machine. No accounts, no telemetry, and your microphone audio is never transmitted, never recorded, never written to disk. The one time Incantation touches the network is the speech-model download on first launch; set autoDownloadModel = false and install the model yourself if you would rather it didn't.

When it listens

By default the microphone is only open while you have a spellbook, staff, imbued weapon or imbued armor — in either hand, worn, or in your Curios slot. Stow or remove it and the mic closes. No keybind involved.

That means conversation with your spellbook stowed can never cast anything, which matters because a lot of people run a voice-chat mod on the same microphone. But if you keep a spellbook in your Curios slot permanently, this is close to ALWAYS_ON in practice — so if you talk to friends mid-fight, use HOLD_KEY_AND_ITEM. Carrying a spellbook isn't on its own evidence you meant to cast; that mode requires a held key too, so speech never reaches the recognizer unless you asked.

Set gatingMode to taste:

Mode Microphone is open
HOLD_ITEM while a spell focus is in your hands, worn, or in your Curios slot (default)
HOLD_KEY_AND_ITEM while holding the cast key and a spell focus
HOLD_KEY while holding the cast key
ALWAYS_ON whenever you are in a world — fully hands-free

These gate capture, not recognition: in every mode but ALWAYS_ON the recognizer never receives the audio, and the device is closed rather than merely ignored. The mic is also released whenever the game is unfocused or paused.

The HUD's mic chip tells you which state you're in at a glance — the dot is dim when the mic is closed, lit when it's open, and pulses while it's actually hearing you, with a live level meter beside it.

Features

  • Speak any indexed spell — works with Iron's Spells, all its addons, and any mod that registers spells through Iron's API.

  • Equipped-only casting (default ON) — a spell only fires if you actually have it on you. Anything else is rejected before it leaves your client.

  • Imbued weapons and armor supported — hold an imbued sword or staff, or wear an imbued chestplate, say the spell it carries, it casts via the same mechanism as right-clicking.

  • HUD chip — corner-anchored chips showing a live mic indicator and level meter, plus last cast, recent cast history, queued spells, miss toast, the last phrase heard, and "did you mean…?" alias suggestions.

  • Vanilla advancements — voice-cast milestones (1, 10, 50, 200, 1000) and combo casts surface as standard advancement toasts.

  • Spell List screen — browse every spell the registry exposed with the exact phrase Vosk listens for, plus per-spell cast counts and school filtering.

  • Voice Codex — personal stats (top-cast spell, daily streak, median latency).

  • Test Arena — safe practice mode that records what would have cast without firing anything. Useful for tuning aliases or learning a tricky spell's pronunciation.

  • Welcome wizard on first launch — walks you through mic + model + first cast.

  • Aliases & custom phrases — bind words the model can pronounce to any spell id.

  • Play in your own language — Spanish, Russian and French speech models are one config line away (modelId), and config/voicespells/phrasebook.json is generated with every installed spell and an editable override field, so you can translate the whole spell list in one file instead of adding aliases one at a time. Your overrides survive updates, and newly installed spells are appended automatically.

    The model is only half of it. The recogniser only listens for words its model knows, so the spell phrases have to be translated too — a Russian model against English spell names hears nothing at all. The repository's contrib/ folder has a Spanish phrasebook contributed by the community, translated and ready to use. The Russian one is a blank template: 294 entries with every override empty, because the machine-translated version that used to fill it had never been spoken into a microphone, and a wrong phrase gets trusted where a blank one asks to be filled. Russian recognition therefore needs that file filled in first. /voicespells vocab tells you which of your phrases the loaded model can actually pronounce.

    German does not work yet, and not for want of a model: Iron's Spells ships no German translation, so there are no German spell names to start from. It needs a hand-written phrase pack. If you speak German and fancy writing one, please get in touch.

  • Loadout shortcuts — say one word, cast the first castable spell from a list (cooldown + mana aware).

  • Voice commands — say no to clear spells waiting in the cast queue, or yes to accept a "did you mean…?" alias suggestion (enable handsFreeConfirm first).

  • Reward speaking (server, off by default) — voice casts can come back faster, hit harder, or both: voiceCooldownPercent scales the cooldown, voiceLevelBonus adds spell levels, and the extra levels are charged at the spell's ordinary mana cost rather than the higher one. Set them per player if you want, with playerAdvantages:

    playerAdvantages = [
        "Steve=cooldown:50,level:2",   # Steve casts faster and harder
        "!Alex",                       # Alex plays by ordinary Iron's Spells rules
    ]

    Out of the box nothing is changed — the defaults are plain Iron's Spells. Turn on voiceVolumeScaling and the bonus has to be earned: the level your item itself would cast at — the spellbook, the imbued item, or the scroll, affinity bonus included (level 1 under FREE) — is always the floor, and how much of voiceLevelBonus a cast adds on top depends on how loudly you said it: a whisper earns none, your normal speaking voice about half, a raised voice all of it — rounded to a whole level, judged against your own calibrated speaking voice.

  • Incantation-only mode (server, off by default) — require spells to be spoken. FIRST_CAST makes a player voice-cast a spell once before they can click it, so learning the incantation unlocks it; ALWAYS means spells can only ever be spoken.

  • Server-side controls — per-player whitelist, blocklist, rate limit, broadcast-nearby, cast logging.

Requirements

  • Minecraft 1.21.1 (NeoForge 21.1.x) or 1.20.1 (Forge 47.x)
  • Iron's Spells 'n Spellbooks by iron431
  • Curios API — recommended, and an Iron's Spells dependency anyway
  • A microphone
  • No voice-chat mod required. Incantation captures the microphone itself, and coexists with Simple Voice Chat if you use one to talk to friends.

Setup

  1. Drop the Incantation jar in your mods/ folder alongside Iron's Spells.
  2. Launch the game. On first run Incantation downloads vosk-model-small-en-us-0.15 (~40 MB) into config/voicespells/ for you.
  3. Join a world, equip a spellbook (hand or Curios slot), and say a spell it carries.

Prefer to install the model yourself? Set autoDownloadModel = false, grab one from alphacephei.com/vosk/models, and unzip its contents into config/voicespells/model/ so you end up with config/voicespells/model/am/, config/voicespells/model/conf/, etc.

For tricky spell names (Traveloptics, Cataclysm, anything with unusual phonetics), map an alias in config/voicespells-client.toml:

customPhrases = [ "dark beam=traveloptics:abyssal_blast" ]

then use More… → Reload grammar now — no restart needed.

Configuration

Most settings are accessible in-game from Mods → Iron's Spells: Incantation → Config.

  • Recognition tab — gating mode, equipped-only restriction, fuzzy tolerance, substring match, dedup window, debug monitor.
  • HUD tab — corner, offset, opacity.
  • More menu — welcome wizard, Voice Codex, Diagnostics, Test Arena, reload grammar, profile export/import, calibrate mic.

Client commands: /voicespells devices lists every capture device the game can see and which one is selected — start there if the microphone looks dead.

Server settings (config/voicespells-server.toml): cast mode (CURIO_SPELLBOOK / ANY_SPELLBOOK / FREE), per-player whitelist, blocklist, rate limit, broadcast-nearby radius.

Troubleshooting

  • Nothing happens when you speak — check the gating mode first. By default the mic is only open while a spellbook, staff, imbued weapon or imbued armor is in your hands, worn, or in your Curios slot. The HUD mic dot tells you: dim means closed.
  • Chat says "Vosk model not found" (or Diagnostics shows Vosk model: FAIL) — no model under config/voicespells/model/. Recheck the layout: am/, conf/, graph/ should sit directly under that path.
  • Microphone looks dead — run /voicespells devices to see what the game can find, and set captureDevice if the default isn't the one you want.
  • Recognition feels slow — open More → Calibrate mic and say a few spell names. Or use the Diagnostics screen to verify each prerequisite.
  • Test Arena doesn't cast — by design. It records would-be casts so you can practice safely.

License

MIT.

Credits

  • Vosk — Alpha Cephei (Apache 2.0)
  • Iron's Spells 'n Spellbooks — iron431
  • Spanish phrasebook — NeoTargetStudios (Spidercat0926), who translated close to 300 spell names across nine spell mods and helped with the mod itself

How to Install Iron's Spells: Incantation (Mod)

Iron's Spells: Incantation by hoggormino is verified for Forge, Neoforge across Minecraft versions 1.20.1, 1.21.1 (latest release: 0.10.6, file size: 24.9 MB). Follow the steps below to install it safely from ModCraft.tv:

  1. Click the Download button above and select your Minecraft version (1.20.1, 1.21.1) and platform (Forge, Neoforge).
  2. Make sure you have the compatible loader or environment installed for Forge, Neoforge.
  3. Move the downloaded Iron's Spells: Incantation file into your Minecraft .minecraft/mods folder and launch the game.

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
1.20.1
Forge
2mo ago 1
1.21.1
Neoforge
2mo ago 1
1.20.1
Forge
2mo ago 1
1.21.1
Neoforge
2mo ago 1
1.21.1
Neoforge
3mo ago 1
1.20.1
Forge
3mo ago 1
1.21.1
Neoforge
3mo ago 1
1.21.1
Neoforge
3mo ago 1
1.20.1
Forge
3mo ago 1
1.21.1
Neoforge
3mo ago 1
1.20.1
Forge
3mo ago 1
1.21.1
Neoforge
3mo ago 1
1.20.1
Forge
3mo ago 1
1.21.1
Neoforge
3mo ago 1
1.21.1
Neoforge
5mo ago 1
1.21.1
Neoforge
5mo ago 1
1.21.1
Neoforge
5mo ago 1
1.21.1
Neoforge
6mo ago 1
# 0.10.6

Everything since 0.10.5.

Two bugs from the CurseForge comments and one found on the way to the second. The first two are
the same unpleasant kind: the mod heard you and then quietly did the wrong thing about it — once
by refusing a repeat, once by casting on a guess it had not finished checking.


## Fixed

  • Some spells could only be cast once.** Say a spell, and saying it again did nothing — no cast,
and nothing in the Live Monitor either, as though the microphone had stopped working. Saying a
  • different* spell first brought it back, and everything looked fine in the Test Arena. Three
symptoms, one cause.

The mod counts utterances so it can tell "the recogniser is still chewing on the word I just said"
apart from "the player said it again", and it only counted a new one when the recogniser produced a
running guess before its final answer. It does not always produce one. With a short spell name the
speech engine often keeps its running guess empty and commits everything at the end, so the mod saw
a single answer with nothing before it. Two of those in a row left the counter frozen, and from then
on every repeat of that spell was treated as an echo of the first — for as long as you kept saying
it. Saying a different spell reset the comparison, which is the workaround the reporter found on
their own.

An utterance is finished when the recogniser gives its final answer, so anything after that is the
next one. That is now what the mod counts, and a spell can be cast as many times in a row as you
can say it.

The silence was a second bug on top of the first. A suppressed repeat wrote nothing anywhere, so
there was no way to tell it apart from a dead microphone — which is exactly how it was reported.
The Live Monitor now shows (repeat too soon) for a repeat that lands inside the echo window, one
line per utterance. The Test Arena looked healthy throughout because it stops at "a menu is open"
before it ever reaches the echo check. Thanks to **tomasek1a** for a report that described all
three symptoms precisely enough to find the cause from.

  • Invisibility could be cast from words that sound nothing like it.** The recogniser is only ever
allowed to hear spell names, so when it hears something else it picks the closest name it knows —
and a long name is the natural magnet, because it can absorb the most audio. The mod then cast on
the recogniser's *running guess*, before the final answer, and that path had no check on it at
all: the confidence setting only ever applied to the final result.

Two things changed. Every match now has to have been *spoken* for long enough to plausibly be
that phrase — 25 ms per letter by default (minMsPerLetter; "heal" 100 ms, "invisibility"
300 ms), measured from the recogniser's own word timings. Real spell names measure roughly
50-120 ms per letter; short one-syllable names like "shield" are the tightest, around 40, which is
why the default sits well under that rather than close to it. A running guess
...
# 0.10.6

Everything since 0.10.5.

Two bugs from the CurseForge comments and one found on the way to the second. The first two are
the same unpleasant kind: the mod heard you and then quietly did the wrong thing about it — once
by refusing a repeat, once by casting on a guess it had not finished checking.


## Fixed

  • Some spells could only be cast once.** Say a spell, and saying it again did nothing — no cast,
and nothing in the Live Monitor either, as though the microphone had stopped working. Saying a
  • different* spell first brought it back, and everything looked fine in the Test Arena. Three
symptoms, one cause.

The mod counts utterances so it can tell "the recogniser is still chewing on the word I just said"
apart from "the player said it again", and it only counted a new one when the recogniser produced a
running guess before its final answer. It does not always produce one. With a short spell name the
speech engine often keeps its running guess empty and commits everything at the end, so the mod saw
a single answer with nothing before it. Two of those in a row left the counter frozen, and from then
on every repeat of that spell was treated as an echo of the first — for as long as you kept saying
it. Saying a different spell reset the comparison, which is the workaround the reporter found on
their own.

An utterance is finished when the recogniser gives its final answer, so anything after that is the
next one. That is now what the mod counts, and a spell can be cast as many times in a row as you
can say it.

The silence was a second bug on top of the first. A suppressed repeat wrote nothing anywhere, so
there was no way to tell it apart from a dead microphone — which is exactly how it was reported.
The Live Monitor now shows (repeat too soon) for a repeat that lands inside the echo window, one
line per utterance. The Test Arena looked healthy throughout because it stops at "a menu is open"
before it ever reaches the echo check. Thanks to **tomasek1a** for a report that described all
three symptoms precisely enough to find the cause from.

  • Invisibility could be cast from words that sound nothing like it.** The recogniser is only ever
allowed to hear spell names, so when it hears something else it picks the closest name it knows —
and a long name is the natural magnet, because it can absorb the most audio. The mod then cast on
the recogniser's *running guess*, before the final answer, and that path had no check on it at
all: the confidence setting only ever applied to the final result.

Two things changed. Every match now has to have been *spoken* for long enough to plausibly be
that phrase — 25 ms per letter by default (minMsPerLetter; "heal" 100 ms, "invisibility"
300 ms), measured from the recogniser's own word timings. Real spell names measure roughly
50-120 ms per letter; short one-syllable names like "shield" are the tightest, around 40, which is
why the default sits well under that rather than close to it. A running guess
...
# 0.10.5

Everything since 0.10.4.

Two fixes people reported, and then the big one: the mod speaks Russian now, and every other
language becomes a file somebody can hand back rather than a fork of the source.


## Fixed

  • 0.10.4 crashed on startup on Forge 1.20.1.** If you are on Forge, 0.10.4 crashed the moment the
game tried to load the mod, and going back to 0.10.3 made it stop — so it looked like something
0.10.4 changed. Nothing in the code did. The Forge build produces two jars with the same name, one
that only runs inside a development environment and one that runs everywhere, and the release
tooling uploaded the wrong one. 0.10.3 had been uploaded by hand, which is why it was fine. The
tooling now picks the right jar, and the jar is checked before it goes out. Thanks to the person
who reported it with full logs — the "i9-13900KF" theory in that report is not it; your CPU is
fine. NeoForge was never affected.

  • Imbued armor never cast.** Iron's Spells lets you imbue a chestplate with a spell, and saying that
spell did nothing — and if a worn chestplate was your only spell source, the microphone did not even
open under the default "Hold item" setting. The mod checked your hands and your Curios slot for
spell-carrying items and never looked at what you were wearing. It does now, for all four armor
slots, and casts from armor the same way Iron's Spells itself does. One deliberate detail: wearing an
ordinary mage chestplate with nothing imbued in it does not count as holding a spell focus. Every
Iron's Spells chestplate carries an empty spell slot internally, and treating that as "holding a
spellbook" would have left the microphone open for as long as the armor was on. Reported on
CurseForge — thank you.

  • The recognizer no longer reaches into the game from its own thread.** Speech recognition runs on
a thread of its own, and a handful of the checks it made right after hearing a phrase — is a
hostile nearby, is a menu open, is that spell on cooldown, can you afford it — read the game world
and Iron's Spells' cooldown tables directly from that thread. Minecraft and Iron's Spells both
assume only the game thread does that. Most of the time it worked; when it didn't, the result could
be anything from a cast that silently never happened to an error on the game thread. Every one of
those checks now reads a snapshot the game thread refreshes each tick, and everything that changes
game state after a recognized phrase happens on the game thread. Two smaller things fell out of the
same pass: leaving a world now resets the voice state properly, so the last-cast display and the
recognition history no longer carry into the next world, and the per-player cast streak the server
tracks is dropped at logout instead of growing for the life of the server. The model downloader
also refuses an archive that claims, or expands to, more than 4 GB rather than filling the disk.


## The interface can be translated

Until this release the mod had 47 transla
...
# 0.10.5

Everything since 0.10.4.

Two fixes people reported, and then the big one: the mod speaks Russian now, and every other
language becomes a file somebody can hand back rather than a fork of the source.


## Fixed

  • 0.10.4 crashed on startup on Forge 1.20.1.** If you are on Forge, 0.10.4 crashed the moment the
game tried to load the mod, and going back to 0.10.3 made it stop — so it looked like something
0.10.4 changed. Nothing in the code did. The Forge build produces two jars with the same name, one
that only runs inside a development environment and one that runs everywhere, and the release
tooling uploaded the wrong one. 0.10.3 had been uploaded by hand, which is why it was fine. The
tooling now picks the right jar, and the jar is checked before it goes out. Thanks to the person
who reported it with full logs — the "i9-13900KF" theory in that report is not it; your CPU is
fine. NeoForge was never affected.

  • Imbued armor never cast.** Iron's Spells lets you imbue a chestplate with a spell, and saying that
spell did nothing — and if a worn chestplate was your only spell source, the microphone did not even
open under the default "Hold item" setting. The mod checked your hands and your Curios slot for
spell-carrying items and never looked at what you were wearing. It does now, for all four armor
slots, and casts from armor the same way Iron's Spells itself does. One deliberate detail: wearing an
ordinary mage chestplate with nothing imbued in it does not count as holding a spell focus. Every
Iron's Spells chestplate carries an empty spell slot internally, and treating that as "holding a
spellbook" would have left the microphone open for as long as the armor was on. Reported on
CurseForge — thank you.

  • The recognizer no longer reaches into the game from its own thread.** Speech recognition runs on
a thread of its own, and a handful of the checks it made right after hearing a phrase — is a
hostile nearby, is a menu open, is that spell on cooldown, can you afford it — read the game world
and Iron's Spells' cooldown tables directly from that thread. Minecraft and Iron's Spells both
assume only the game thread does that. Most of the time it worked; when it didn't, the result could
be anything from a cast that silently never happened to an error on the game thread. Every one of
those checks now reads a snapshot the game thread refreshes each tick, and everything that changes
game state after a recognized phrase happens on the game thread. Two smaller things fell out of the
same pass: leaving a world now resets the voice state properly, so the last-cast display and the
recognition history no longer carry into the next world, and the per-player cast streak the server
tracks is dropped at logout instead of growing for the life of the server. The model downloader
also refuses an archive that claims, or expands to, more than 4 GB rather than filling the disk.


## The interface can be translated

Until this release the mod had 47 transla
...
# 0.10.4

Everything since 0.10.3.

This release is mostly repair. Several settings did nothing, one of them blocked casting entirely
whenever it was switched on, and the HUD had been drawing text with no chip behind it for anyone
who had not hand-edited their config. Those are fixed. There is also the beginning of proper
support for playing in a language other than English.


## Fixed

  • Combat only blocked every cast.** Turning it on stopped voice casting completely — even while
something was hitting you — and it said nothing when it did, so it looked like a dead microphone.
It was reading a value the client is never given. It now works from damage you have actually taken
and from hostiles actually near you, so opening a fight with a spell works.

  • Blocked casts are no longer silent.** Combat-only, AFK and sneak-to-cast all used to reject
without a word. If a gate stops a cast, the HUD now says which one.

  • The cast queue could not hold more than one spell.** A queued spell's short life was counted from
the moment you said it rather than from when the spell in front of it finished, so naming a second
spell during a long cast always lost it. Queue sizes above 1 do something now.

  • Pause when AFK did not pause anything** — the microphone stayed open and kept listening. It now
releases the device. It also treated standing still as being away, so mining, fishing or holding a
position in a farm counted as AFK; looking around, swinging and using items now count as activity.

  • Hands-free confirm's "yes" did nothing.** It now accepts the "did you mean…?" alias suggestion,
which is what its description always claimed.

  • The config screen crashed the game on Forge 1.20.1.** Opening it was fatal. It has been unopenable
on that loader for as long as the current UI has existed.

  • Selecting a different speech model did nothing** for anyone who had installed the mod before the
model list existed — you were kept on English no matter what you chose. Relatedly, pointing
modelPath at an empty folder downloaded the *English* model into it rather than the one you
wanted.

  • Voice-cast advancements could not be earned**, because cast totals were never saved. Streak
milestones were also taken on trust from the client; the server counts them itself now.

  • Assorted:** text that ran off the edge of panels in a dozen places, the device picker eating the
words "System default", the Voice Codex drawing its last row outside its own frame, and a leaked
network connection on every failed model download.


## Playing in another language

If you load a non-English speech model today, nothing happens at all — no error, no warning. That is
not a broken model: spell phrases are English words, and the recogniser silently discards any phrase
containing a word its model does not know. Against a Russian model, that is every phrase.

The mod now **tells you** instead of failing in silence. It counts the phrases the loaded model
cannot pronounce, warns in the log, and p
...
# Incantation 0.10.3 — the things that were quietly not working

A long bug-hunting pass over the whole mod. Most of what follows was **silently** broken: no crash,
no error, nothing in the log — features that simply did nothing while looking like they worked.

If you are on 1.21.1, the first item alone is worth updating for.

## Your settings actually save now (1.21.1)

On NeoForge, **nothing the config screen wrote ever reached the disk.** Not the HUD corner, the
offsets, the opacity, the theme, the recognition tuning — and not aliases you added, profiles you
imported, or noise-gate calibration either.

It behaved perfectly all session, which is why it went unnoticed for so long. Everything came back
to defaults on the next launch.

Forge 1.20.1 was never affected.

## Trigger words no longer switch casting off

If you set a **trigger word** — say, cast, so only "cast fireball" fires — voice casting stopped
working entirely. Not for that word: for everything.

The recogniser can only hear words it has been given, and the trigger word was never added to its
vocabulary, so the check for it could never pass. No log line, no "miss" on the HUD. It just went
quiet, and the only way back was clearing the setting.

Trigger words that are *also* part of a spell's name now work too, which matters because the
config file's own example suggests summon — and that used to break every Summon spell.

## Your stats are no longer at risk

A single unreadable read of stats.dat — an antivirus lock, a cloud-sync hiccup — used to be
enough to wipe your lifetime totals, unlocked themes and codex history. The failure was logged and
then the next save wrote zeros over the real file.

Stats are now written to a temporary file and moved into place, so an interrupted save cannot leave
a half-written file behind, and a file that cannot be read is preserved rather than overwritten.

## Scrolls are consumed when you voice-cast them

  • A balance fix, and it is a nerf.** Voice-casting from a scroll was not using it up, so a
single-use item could be cast from indefinitely. Right-clicking always consumed it correctly; only
voice casting was wrong.

## Casting now respects what you are holding

Spells could be voice-cast from a spellbook, imbued weapon or scroll sitting **anywhere in your
hotbar**, including in the strictest cast mode. It now requires the item in your main hand or off
hand, which is what the settings describe and what right-clicking has always required.

## Things that had never worked once

  • The cooldown indicator** under the crosshair. It had never drawn, on any version.
  • The Test Arena, the Live Monitor, the first-run mic check and auto-calibrate** all opened your
microphone and then threw away every frame. Auto-calibrate would tell you it heard nothing after
five seconds of talking — and then overwrite your noise-gate setting with a worse one.
  • The HUD in the top-right or bottom-right corner.** The whole thing rendered off the edge of the

...
# Incantation 0.10.3 — the things that were quietly not working

A long bug-hunting pass over the whole mod. Most of what follows was **silently** broken: no crash,
no error, nothing in the log — features that simply did nothing while looking like they worked.

If you are on 1.21.1, the first item alone is worth updating for.

## Your settings actually save now (1.21.1)

On NeoForge, **nothing the config screen wrote ever reached the disk.** Not the HUD corner, the
offsets, the opacity, the theme, the recognition tuning — and not aliases you added, profiles you
imported, or noise-gate calibration either.

It behaved perfectly all session, which is why it went unnoticed for so long. Everything came back
to defaults on the next launch.

Forge 1.20.1 was never affected.

## Trigger words no longer switch casting off

If you set a **trigger word** — say, cast, so only "cast fireball" fires — voice casting stopped
working entirely. Not for that word: for everything.

The recogniser can only hear words it has been given, and the trigger word was never added to its
vocabulary, so the check for it could never pass. No log line, no "miss" on the HUD. It just went
quiet, and the only way back was clearing the setting.

Trigger words that are *also* part of a spell's name now work too, which matters because the
config file's own example suggests summon — and that used to break every Summon spell.

## Your stats are no longer at risk

A single unreadable read of stats.dat — an antivirus lock, a cloud-sync hiccup — used to be
enough to wipe your lifetime totals, unlocked themes and codex history. The failure was logged and
then the next save wrote zeros over the real file.

Stats are now written to a temporary file and moved into place, so an interrupted save cannot leave
a half-written file behind, and a file that cannot be read is preserved rather than overwritten.

## Scrolls are consumed when you voice-cast them

  • A balance fix, and it is a nerf.** Voice-casting from a scroll was not using it up, so a
single-use item could be cast from indefinitely. Right-clicking always consumed it correctly; only
voice casting was wrong.

## Casting now respects what you are holding

Spells could be voice-cast from a spellbook, imbued weapon or scroll sitting **anywhere in your
hotbar**, including in the strictest cast mode. It now requires the item in your main hand or off
hand, which is what the settings describe and what right-clicking has always required.

## Things that had never worked once

  • The cooldown indicator** under the crosshair. It had never drawn, on any version.
  • The Test Arena, the Live Monitor, the first-run mic check and auto-calibrate** all opened your
microphone and then threw away every frame. Auto-calibrate would tell you it heard nothing after
five seconds of talking — and then overwrite your noise-gate setting with a worse one.
  • The HUD in the top-right or bottom-right corner.** The whole thing rendered off the edge of the

...
## Servers stop turning players away

Mostly server-side fixes, and two of them matter whether or not you noticed anything was wrong.

### Your server no longer requires the mod on clients

A server running Incantation was rejecting **every player who did not also have it installed** — an "Incompatible" screen on NeoForge, a bare "Connection closed - mismatched mod channel list" on Forge. It also advertised itself as incompatible in the multiplayer list, so people saw a red X before they even tried.

Nothing this mod sends is client-bound, so that requirement bought a server nothing.

Players **with** Incantation voice-cast exactly as before. Players **without** it now join and play normally — they simply cannot voice-cast.

### Server config controls were being ignored on NeoForge

serverBlockedSpells, the allowlist, maxCastsPerSecond and castMode had no effect on voice casts on NeoForge. An operator could ban a spell, see it listed as banned in the config, and have it voice-cast anyway. Voice-cast advancements, the admin log and /voicespells follow were skipped on the same path.

Voice casts took Iron's Spells' own packet, so this mod's server side never saw them. Forge was unaffected. **If you run a NeoForge server and set any of those options, they start working in this release.**

### Fixed

  • The first-run mic check could never see your microphone.** The wizard runs at the title screen, and a 0.10.0 fix that stopped the mic opening there also stopped it opening for the check itself.
  • A modified client could disconnect itself** with an "Internal Exception" and a stack trace in the server log, by sending a malformed spell id. NeoForge only.
  • Cooldown and "is casting" hints never worked** — they resolved against an Iron's Spells class that does not exist.
  • Server-side state was never released.** In single-player, one world's cast history and leaderboard leaked into the next.
  • pack_format on 1.21.1 was a version that does not exist.

### Changed

  • The casting screen edges are off by default.** Those accent bars never actually rendered in any released version — the reflection behind them was broken from the start. Fixing that switched them on for the first time, so they are now castVignette in the client config, default off.

### Requirements

Unchanged: Minecraft 1.21.1 (NeoForge 21.1.x) or 1.20.1 (Forge 47.x), Iron's Spells 'n Spellbooks, Curios API, and a microphone. **No voice-chat mod.**
## Servers stop turning players away

Mostly server-side fixes, and two of them matter whether or not you noticed anything was wrong.

### Your server no longer requires the mod on clients

A server running Incantation was rejecting **every player who did not also have it installed** — an "Incompatible" screen on NeoForge, a bare "Connection closed - mismatched mod channel list" on Forge. It also advertised itself as incompatible in the multiplayer list, so people saw a red X before they even tried.

Nothing this mod sends is client-bound, so that requirement bought a server nothing.

Players **with** Incantation voice-cast exactly as before. Players **without** it now join and play normally — they simply cannot voice-cast.

### Server config controls were being ignored on NeoForge

serverBlockedSpells, the allowlist, maxCastsPerSecond and castMode had no effect on voice casts on NeoForge. An operator could ban a spell, see it listed as banned in the config, and have it voice-cast anyway. Voice-cast advancements, the admin log and /voicespells follow were skipped on the same path.

Voice casts took Iron's Spells' own packet, so this mod's server side never saw them. Forge was unaffected. **If you run a NeoForge server and set any of those options, they start working in this release.**

### Fixed

  • The first-run mic check could never see your microphone.** The wizard runs at the title screen, and a 0.10.0 fix that stopped the mic opening there also stopped it opening for the check itself.
  • A modified client could disconnect itself** with an "Internal Exception" and a stack trace in the server log, by sending a malformed spell id. NeoForge only.
  • Cooldown and "is casting" hints never worked** — they resolved against an Iron's Spells class that does not exist.
  • Server-side state was never released.** In single-player, one world's cast history and leaderboard leaked into the next.
  • pack_format on 1.21.1 was a version that does not exist.

### Changed

  • The casting screen edges are off by default.** Those accent bars never actually rendered in any released version — the reflection behind them was broken from the start. Fixing that switched them on for the first time, so they are now castVignette in the client config, default off.

### Requirements

Unchanged: Minecraft 1.21.1 (NeoForge 21.1.x) or 1.20.1 (Forge 47.x), Iron's Spells 'n Spellbooks, Curios API, and a microphone. **No voice-chat mod.**
## Forge names the conflicting mod

A small release with one fix, and it only affects **Forge 1.20.1** players. **On NeoForge 1.21.1 this is behaviourally identical to 0.10.0 — there is no reason to update.**

### Fixed

  • Forge now tells you which mod broke a cast.**

When another mod hooks Iron's Spells' cast path and throws, Incantation performs its casts through reflection, so the exception arrives wrapped. The player saw only:

Cast error: InvocationTargetException

which names nothing useful and looks like an Incantation bug. It isn't — it's a conflict in the other mod — but there was no way to tell that from the message. One reported case took weeks to trace.

NeoForge started naming the responsible mod in 0.9.5. The Forge build was left out of that change, so 1.20.1 players kept getting the useless message. They now get the same thing NeoForge players already had:

Cast blocked by Iron's Restrictions (irons_restrictions) - mod conflict, see the log

with the full stack trace and an explanation in the log. This doesn't fix the underlying conflict — that isn't Incantation's to fix — but it turns a week of guesswork into a one-line answer.

### Requirements

Unchanged from 0.10.0: Iron's Spells 'n Spellbooks, Curios API, and a microphone. **No voice-chat mod.**
## Forge names the conflicting mod

A small release with one fix, and it only affects **Forge 1.20.1** players. **On NeoForge 1.21.1 this is behaviourally identical to 0.10.0 — no reason to update.**

### Fixed

  • Forge now tells you which mod broke a cast.**

When another mod hooks Iron's Spells' cast path and throws, Incantation performs its casts through reflection, so the exception arrives wrapped. The player saw only:

Cast error: InvocationTargetException

which names nothing useful and looks like an Incantation bug. It isn't — it's a conflict in the other mod — but there was no way to tell that from the message. One reported case took weeks to trace.

NeoForge started naming the responsible mod in 0.9.5. The Forge build was left out of that change, so 1.20.1 players kept getting the useless message. They now get the same thing NeoForge players already had:

Cast blocked by Iron's Restrictions (irons_restrictions) - mod conflict, see the log

with the full stack trace and an explanation in the log. This doesn't fix the underlying conflict — that isn't Incantation's to fix — but it turns a week of guesswork into a one-line answer.

### Requirements

Unchanged from 0.10.0: Iron's Spells 'n Spellbooks, Curios API, and a microphone. **No voice-chat mod.**
## No voice-chat mod required

  • Incantation now captures your microphone itself.** Simple Voice Chat is no longer a dependency — the mod opens the mic through OpenAL, which Minecraft already ships. Voice casting works on its own, and still works alongside SVC if you use one to talk to friends.

  • This changes your setup.** Read the next section before updating.

## The microphone is gated now

By default the mic is only open **while you're holding a spellbook, staff or imbued weapon** — in either hand, or in your Curios slot. Stow it and the mic closes. No keybind involved.

Set gatingMode in config/voicespells-client.toml if you want something else:

| Mode | Microphone is open |
|---|---|
| HOLD_ITEM | while a spell focus is in your hands or Curios slot *(default)* |
| HOLD_KEY_AND_ITEM | while holding the cast key **and** a spell focus |
| HOLD_KEY | while holding the cast key |
| ALWAYS_ON | whenever you're in a world — fully hands-free |

If you talk to friends over voice chat **while armed**, use HOLD_KEY_AND_ITEM. Carrying a spellbook isn't on its own evidence you meant to cast, and with a book parked in Curios, HOLD_ITEM is close to always-on in practice.

The HUD mic dot shows which state you're in: dim means closed, lit means open, and it pulses while it's hearing you.

## Now on Minecraft 1.20.1

Alongside 1.21.1. Forge 47.x for 1.20.1, NeoForge 21.1.x for 1.21.1 — one codebase.

## Also new

  • The speech model installs itself** on first launch (~40 MB). Spanish, Russian, French and German models are one modelId line away.
  • Spell names the model can't pronounce are respelled automatically.** Vosk only hears words in its lexicon, so a spell whose name is missing was silently uncastable. Names that can't be rescued are now named in the log instead of failing quietly.
  • Custom phrases no longer need a restart** — use **More… → Reload grammar now**.
  • /voicespells devices** lists every capture device and which one is selected.

## Fixed

  • Clients without Simple Voice Chat crashed on startup.** SVC was declared optional, but the mod touched a class that couldn't load without it, so mod loading died with NoClassDefFoundError instead of idling. This affected 0.9.5 and earlier — it's why 0.9.5 should not be used.
  • The microphone opened briefly on the title screen**, contradicting the setting that says it doesn't.
  • Documentation that described features the code doesn't have: there is no macro recorder, combat-only never counted damage you dealt, ANY_SPELLBOOK also accepts hotbar slots, and there is no "Light" palette.
## No voice-chat mod required

  • Incantation now captures your microphone itself.** Simple Voice Chat is no longer a dependency — the mod opens the mic through OpenAL, which Minecraft already ships. Voice casting works on its own, and still works alongside SVC if you use one to talk to friends.

  • This changes your setup.** Read the next section before updating.

## The microphone is gated now

By default the mic is only open **while you're holding a spellbook, staff or imbued weapon** — in either hand, or in your Curios slot. Stow it and the mic closes. No keybind involved.

Set gatingMode in config/voicespells-client.toml if you want something else:

| Mode | Microphone is open |
|---|---|
| HOLD_ITEM | while a spell focus is in your hands or Curios slot *(default)* |
| HOLD_KEY_AND_ITEM | while holding the cast key **and** a spell focus |
| HOLD_KEY | while holding the cast key |
| ALWAYS_ON | whenever you're in a world — fully hands-free |

If you talk to friends over voice chat **while armed**, use HOLD_KEY_AND_ITEM. Carrying a spellbook isn't on its own evidence you meant to cast, and with a book parked in Curios, HOLD_ITEM is close to always-on in practice.

The HUD mic dot shows which state you're in: dim means closed, lit means open, and it pulses while it's hearing you.

## Now on Minecraft 1.20.1

Alongside 1.21.1. Forge 47.x for 1.20.1, NeoForge 21.1.x for 1.21.1 — one codebase.

## Also new

  • The speech model installs itself** on first launch (~40 MB). Spanish, Russian, French and German models are one modelId line away.
  • Spell names the model can't pronounce are respelled automatically.** Vosk only hears words in its lexicon, so a spell whose name is missing was silently uncastable. Names that can't be rescued are now named in the log instead of failing quietly.
  • Custom phrases no longer need a restart** — use **More… → Reload grammar now**.
  • /voicespells devices** lists every capture device and which one is selected.

## Fixed

  • Clients without Simple Voice Chat crashed on startup.** SVC was declared optional, but the mod touched a class that couldn't load without it, so mod loading died with NoClassDefFoundError instead of idling. This affected 0.9.5 and earlier — it's why 0.9.5 should not be used.
  • The microphone opened briefly on the title screen**, contradicting the setting that says it doesn't.
  • Documentation that described features the code doesn't have: there is no macro recorder, combat-only never counted damage you dealt, ANY_SPELLBOOK also accepts hotbar slots, and there is no "Light" palette.
### Cast errors now name the mod responsible

If another mod hooks Iron's Spells' cast path and throws, you used to get Cast Error: InvocationTargetException — an error from Incantation, naming nothing useful. Every cast goes through reflection, so the real exception arrived wrapped.

Incantation now works out which mod the failure actually came from and says so: **Cast blocked by (mod) — mod conflict**, with the full detail in the log.

The known case is **Iron's Restrictions**. Its mixin on AbstractSpell.canBeCastedBy(...) reads a data attachment and your Curios slots; when that chain fails, the cast fails. It is a conflict between that mod and Iron's Spells rather than anything Incantation does, and it affects any cast that reaches the hook. Removing or reconfiguring Iron's Restrictions resolves it.

### Also fixed in 0.9.4, if you are coming from 0.9.3 or earlier

  • Dedicated servers no longer crash on startup.** The config-screen registration sat in the mod constructor, where its reference to a client-only class was resolved before the Dist.CLIENT check guarding it could run. **0.9.0 and 0.9.3 both crash dedicated servers, so if your pack ships either, please update.**

  • Spell indexing works on dedicated servers.** It read client-only config and silently indexed nothing.

  • You can cast the same spell twice in a row.** The duplicate-suppression window re-armed itself on every blocked repeat, so with an open mic it never lapsed and the only way to recast was to say a different spell first.

The server crash shipped twice because the project had no dedicated-server run configuration, so every release was tested on a client where that code path is fine by definition. That test now exists and every release is checked against it.

Thanks to Shadower007, Tubeess, eli_zeele, bayratbill, xxshadow007, PhsycoPhink and Kogyuu for the reports and diagnosis.
### Fixed
  • Panels now shrink to fit the screen at large Minecraft GUI Scales.** Every Incantation screen (Config, Welcome wizard, Spell list, Diagnostics, Test Arena, Voice Codex, Add Alias, Help, More menu) used to be a fixed pixel size. At a large GUI Scale the panel got cut off at the right and bottom — the **Done** button could disappear before you could press it. Panels now clamp to whatever screen space is available with an 8 px margin, so everything stays visible at every GUI Scale.

### No behaviour change at default scale
At the default GUI Scale the layout is visually identical to 0.9.2.

### Drop-in upgrade
Drop incantation-0.9.3.jar over your existing 0.9.2 jar. No config migration.
Iron's Spells: Incantation Icon
Download Iron's Spells: Incantation
Select game version
Select platform