Skip to content

Releases: Hoggormino/incantation

v0.9.5 — cast errors now name the mod responsible

Choose a tag to compare

@Hoggormino Hoggormino released this 04 Aug 21:28

Iron's Spells: Incantation 0.9.5

A small release that closes out the three open issues. Thanks to @Shadower007 and @Tubeess
for the reports, and to Kogyuu on CurseForge for diagnosing the mod conflict below.

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 explanation in the log.

The known case is Iron's Restrictions (#3). Its AbstractSpellMixin injects into
AbstractSpell.canBeCastedBy(...) and reads a data attachment plus your Curios slots; when
that chain fails, the cast fails. It's 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.

Already fixed in 0.9.4, and worth repeating

If you're coming from 0.9.3 or earlier, 0.9.4 fixed the crash that mattered most:

  • Dedicated servers no longer crash on startup (#1, #2). 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 — 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 reason the server crash shipped twice is that the project had no dedicated-server run
configuration — every release was tested on a client, where that code path is fine by
definition. ./gradlew runServer now exists and every release is checked against it.

Upgrading

Drop incantation-0.9.5.jar over your existing jar. No config migration.

Requires Minecraft 1.21.1, NeoForge 21.1.x, Simple Voice Chat and Iron's Spells 'n
Spellbooks.

v0.9.4 — dedicated-server crash fix, and repeat casting

Choose a tag to compare

@Hoggormino Hoggormino released this 03 Aug 17:29

Iron's Spells: Incantation 0.9.4

Bug-fix release built from the issues players reported on 0.9.3. Thanks to
@Shadower007, @Tubeess, eli_zeele, bayratbill, xxshadow007, PhsycoPhink and Kogyuu
for the reports and the diagnosis work.

Fixed

  • Dedicated servers no longer crash on startup. The server died during mod
    construction with Attempted to load class net/minecraft/client/gui/screens/Screen for invalid dist DEDICATED_SERVER. The cause was the Mods-screen config extension
    point being registered in the mod constructor: it compiles to a method that names
    the client-only Screen class, and NeoForge resolves the types a method references
    before the Dist.CLIENT check inside it can run — so a runtime guard could never
    have stopped it. Registration moved to a class the server never touches. This is the
    crash from #1 and #2, which the 0.9.1 fix covered elsewhere but not here.

  • Spell indexing now works on dedicated servers. A second, quieter server bug:
    indexing read client-only config values, which don't exist on a server, so every
    boot logged Cannot get config value before config is loaded and left the index
    empty. Servers now index normally.

  • You can cast the same spell twice in a row. The duplicate-suppression window was
    pushed forward every time it blocked a repeat, so it kept re-arming itself: with an
    always-on or voice-activated mic, background noise gets matched to the nearest spell
    name in the grammar, which meant the window never expired and the only way to recast
    was to say a different spell first. The window is now measured from the actual cast.

  • Failed casts say what actually went wrong. Casting goes through reflection, so an
    error thrown by Iron's Spells — or by another mod hooking it — arrived wrapped, and
    the message you got was the useless Cast Error: InvocationTargetException. The real
    cause is now shown and logged, with a note identifying the mod responsible. If you hit
    this on 0.9.3, one known trigger is a conflict with Iron's Restrictions (#3).

  • Iron's Spells compatibility. Current Iron's builds hand back a different shape from
    getAllSpells() than older ones. Both are now handled; previously equipped-spell
    detection could fail silently.

Changed

  • Owned-spell restriction now matches Iron's Spells' own rule — only your Curios
    spellbook slot, main hand and off hand count. Previously a spellbook anywhere in your
    inventory counted, the server then rejected the cast, and it still showed up as a
    phantom cast in your HUD streak and history.
  • sculk tentacles is now recognised — its alias could never match.
  • The voice macro recorder and its J / K keybinds have been removed.
  • Slightly tighter noise gate (600 ms → 450 ms hold).

Note for anyone who themed their HUD

Eight individual HUD colour options (text, dotReady, dotListen, dotLoad,
dotError, dotOff, meterBg, meterFill) have been removed in favour of the palette
and accent presets. Nothing breaks, but if you had set those by hand they will quietly
revert to preset colours.

Upgrading

Drop incantation-0.9.4.jar over your existing jar. No config migration.

Server owners: this is the release you want — 0.9.0 and 0.9.3 both crash on dedicated
servers. If your modpack still ships 0.9.0, please update.

v0.9.3 — responsive panels for large GUI Scale

Choose a tag to compare

@Hoggormino Hoggormino released this 31 May 09:15

Iron's Spells: Incantation 0.9.3

UI fix for players running with Minecraft GUI Scale = Large (or on small windows).

Fixed

  • Panels now shrink to fit the screen. 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, so at a large GUI Scale the panel got cut off at the right edge and bottom — the Done button could disappear before you could press it. The 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. The clamping only kicks in when the preferred panel would be larger than the screen.

Drop-in upgrade

Drop incantation-0.9.3.jar over your existing 0.9.2 jar. No config migration.

v0.9.2 — phrasebook robustness

Choose a tag to compare

@Hoggormino Hoggormino released this 31 May 08:32

Iron's Spells: Incantation 0.9.2

Small hardening pass on the 0.9.1 phrasebook so it can't eat your translations.

Fixed

  • Phrasebook won't overwrite a file it couldn't read. If you save phrasebook.json half-finished and the game tries to reload mid-edit, the parse fails — previously we'd then rewrite the file with an empty-override version and silently destroy your work. Now we leave the file untouched until you save a valid version. Your in-memory overrides from the last successful load stay active so the grammar doesn't degrade either.
  • Stale entries keep their default field. Spells from temporarily-uninstalled addons used to round-trip back to "default": "". Now we remember the last-seen default per spell and write it back, so the file stays self-documenting across addon swaps.
  • Atomic writes. The file is written to phrasebook.json.tmp then atomically renamed onto the real path, so a text editor watching the file (or a backup tool, or a second game instance) never observes a half-written JSON.

No code changes for end users

Drop incantation-0.9.2.jar over your existing 0.9.1 jar. No config migration. If you don't use the phrasebook, this release is a no-op for you.

v0.9.1 — server crash fix + localisation phrasebook

Choose a tag to compare

@Hoggormino Hoggormino released this 30 May 09:57

Iron's Spells: Incantation 0.9.1

Two community-reported issues addressed.

Fixed

  • Dedicated server crash on mod load. The Simple Voice Chat plugin loader instantiates @ForgeVoicechatPlugin classes on both client and server. Incantation's SVC plugin (and a couple of common-side helpers) statically referenced client-only classes, so the JVM verifier pulled the Minecraft GUI chain in on the server side → NoClassDefFoundError → crash. Plugin, SpellIndex, and the config's theme cache now route those references through Consumer / Supplier / Runnable sinks wired from ClientEvents.bootstrap(), so common code never link-references the GUI chain.
    • Thanks to xxshadow007 for the report.

Added

  • config/voicespells/phrasebook.json for bulk-translation. Auto-generated on first launch with one entry per installed spell:

    {
      "spells": {
        "irons_spellbooks:fireball": { "default": "fireball", "override": "" }
      }
    }

    Set the override value to whatever you want to say for that spell; leave it empty to use the English default. New spells installed later are appended automatically, and your existing overrides survive reindexes and addon uninstalls.

    Vosk only recognises words from the loaded model's lexicon, so non-English overrides need a same-language Vosk model — install one from https://alphacephei.com/vosk/models and point modelPath at it in voicespells-client.toml.

    • Thanks to NeoTargetStudios for the request.

Installation

Drop incantation-0.9.1.jar into your mods/ folder alongside Simple Voice Chat 2.5.x+ and Iron's Spells 'n Spellbooks 3.x+. No config migration needed — voicespells-client.toml is unchanged from 0.9.0.

Iron's Spells: Incantation v0.9.0

Choose a tag to compare

@Hoggormino Hoggormino released this 21 May 16:47

First public release.

Voice-cast Iron's Spells 'n Spellbooks through Simple Voice Chat. Offline speech recognition via Vosk with the grammar dynamically restricted to spells you actually have equipped.

Requirements:

  • Minecraft 1.21.1
  • NeoForge 21.1.x
  • Simple Voice Chat 2.5.x+
  • Iron's Spells 'n Spellbooks 3.x+
  • A small Vosk English model (see README)

See README.md for setup instructions.