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), andconfig/voicespells/phrasebook.jsonis generated with every installed spell and an editableoverridefield, 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 vocabtells 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
noto clear spells waiting in the cast queue, oryesto 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:
voiceCooldownPercentscales the cooldown,voiceLevelBonusadds 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, withplayerAdvantages: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
voiceVolumeScalingand 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 ofvoiceLevelBonusa 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_CASTmakes a player voice-cast a spell once before they can click it, so learning the incantation unlocks it;ALWAYSmeans 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
- Drop the Incantation jar in your
mods/folder alongside Iron's Spells. - Launch the game. On first run Incantation downloads
vosk-model-small-en-us-0.15(~40 MB) intoconfig/voicespells/for you. - 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 underconfig/voicespells/model/. Recheck the layout:am/,conf/,graph/should sit directly under that path. - Microphone looks dead — run
/voicespells devicesto see what the game can find, and setcaptureDeviceif 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:
- Click the Download button above and select your Minecraft version (1.20.1, 1.21.1) and platform (Forge, Neoforge).
- Make sure you have the compatible loader or environment installed for Forge, Neoforge.
- Move the downloaded Iron's Spells: Incantation file into your Minecraft
.minecraft/modsfolder and launch the game.
All Versions
+ Add VersionEverything 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,
- different* spell first brought it back, and everything looked fine in the Test Arena. Three
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, oneline 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
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
...
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,
- different* spell first brought it back, and everything looked fine in the Test Arena. Three
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, oneline 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
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
...
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
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
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
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
...
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
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
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
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
...
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
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
- The cast queue could not hold more than one spell.** A queued spell's short life was counted from
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
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,
- The config screen crashed the game on Forge 1.20.1.** Opening it was fatal. It has been unopenable
- Selecting a different speech model did nothing** for anyone who had installed the mod before the
modelPath at an empty folder downloaded the *English* model into it rather than the one youwanted.
- Voice-cast advancements could not be earned**, because cast totals were never saved. Streak
- Assorted:** text that ran off the edge of panels in a dozen places, the device picker eating the
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
...
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 stoppedworking 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 beenough 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
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
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
...
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 stoppedworking 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 beenough 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
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
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
...
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_formaton 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
castVignettein 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.**
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_formaton 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
castVignettein 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.**
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: InvocationTargetExceptionwhich 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 logwith 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.**
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: InvocationTargetExceptionwhich 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 logwith 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.**
- 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
modelIdline 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
NoClassDefFoundErrorinstead 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_SPELLBOOKalso accepts hotbar slots, and there is no "Light" palette.
- 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
modelIdline 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
NoClassDefFoundErrorinstead 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_SPELLBOOKalso accepts hotbar slots, and there is no "Light" palette.
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.CLIENTcheck 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.
- 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.