Ars 'n' Spells bridges Ars Nouveau and Iron's Spells 'n Spellbooks for Minecraft 1.20.1 (Forge). It rests on three pillars: mana unification (five configurable modes for how the two pools interact), cross-mod scaling and progression (Iron's spell-power attributes scale Ars spells; both mods feed shared school progression and affinity), and cross-casting (inscribe spells from either mod onto arbitrary items, or export Ars spells onto real Iron's scrolls and spellbooks and cast them from Iron's native spell wheel). Optional integration with Covenant of the Seven (Sanctified Legacy) adds LP and aura-based casting through the Ring of Seven Curses and Ring of Seven Virtues.
The 3.3.0 release review covers Forge 1.20.1 and the separate NeoForge 1.21.1 build. See the audit closure ledger for implemented changes, verification evidence, intentional loader differences, and remaining release gates. A passing build is not a certification of every supported mod combination.
| Mod | Version | Required |
|---|---|---|
| Minecraft (Forge) | 1.20.1 / 47.4.0+ | Yes |
| Ars Nouveau | 4.12.7 – 4.12.x ([4.12.7,4.13)) |
Yes |
| Iron's Spells 'n Spellbooks | 3.15.0 – 3.x ([3.15.0,4.0.0)) |
No³ |
| Ars Elemental | 0.6.8.0+ ([0.6.8.0,)) |
No |
| Ars Zero | 2.0.2+ ([2.0.2,)) requires Forge 47.4.10+ |
No |
| Covenant of the Seven (Sanctified Legacy) | 2.2.6+ ([2.2.6,))¹ |
No |
| Blood Magic | Any | No |
| Apotheosis / Apothic Curios | Any | No² |
| Curios API | Any | Included via Ars |
| Ars Affinity | -- | Not available for Forge 1.20.1⁴ |
If Iron's Spellbooks is not installed, Ars 'n' Spells falls back to native Ars behavior; all Iron's-dependent handlers, mixins, items, and recipes are gated on Iron's presence.
Scenarios with or without Iron's Spellbooks:
- Fresh configuration — starting a new world or creative session with Iron's never installed works correctly, as the mod runs as a pure Ars Nouveau addon.
- Dormant ANS payloads — ANS cross-cast data already written to items in a saved world remains inert and does not break the world.
- Missing registry items — items belonging to Iron's that the save references only affect those individual items, not the world itself.
- Whole-world dimension compatibility — if the world references
irons_spellbooks:pocket_dimension_type, an upstream Iron's Spellbooks resource that Iron's writes into level data, the world may fail to decode entirely. This is not an ANS defect, and ANS cannot repair it.
Always keep backups when removing Iron's from an established world. ANS does not automatically delete dimensions or cross-cast payloads that refer to the mod.
¹ Covenant 2.2.6 has a bytecode-surface check; its complete dependency graph and graphical HUD have not been runtime-certified by this release review. Other admitted versions are unverified.
² No hard dependency — mana stats on curios are read generically through the Curios API (see Gear perks and enchantments).
³ The pinned Forge runtime is Iron's 1.20.1-3.15.0 (CurseForge file 7402504). 3.4.0 passed the loaded GameTest suite against both 1.20.1-3.15.0 and 1.20.1-3.16.3 (file 8680180, with irons_lib 1.20.1-2.1.0, -PwithIrons316RuntimeGameTests); see docs/3.4.0/testing.md. The imported-glyph catalog covers the spells of those two builds. The rest of the admitted 3.x range is not a runtime verification claim; test another version with the loaded profile before deployment.
⁴ Every published Ars Affinity file targets NeoForge 1.21.1. The NeoForge build of Ars 'n' Spells is tested with Ars Affinity 1.1.1; this Forge build makes no Ars Affinity claim.
Five modes are available via the mana_unification_mode config:
| Mode | Behavior |
|---|---|
iss_primary (default) |
Iron's mana is the single source of truth. Ars reads and drains Iron's pool. |
ars_primary |
Ars mana is authoritative. Iron's spells drain Ars mana. |
hybrid |
Shared bidirectional pool. A config option (hybrid_mana_bar) controls which HUD bar is displayed. |
separate |
Independent pools. Cross-mod casts split costs between both pools. |
disabled |
No mana integration; each mod uses its own pool. |
Changing the mode: in singleplayer, open Mods → Ars 'n' Spells → Config and click the Mana Mode row to cycle it (applies on Done). Server operators can run /ans mode set <mode>. Either path — or editing the config file directly — takes effect without a restart as of 2.0.1. Confirm the active mode with /ans mode.
Conversion rates (conversion_rate_ars_to_iron, conversion_rate_iron_to_ars) and dual-cost percentages are configurable.
Iron's MANA_REGEN is a percentage-of-pool multiplier; Ars regen is absolute mana/sec. All cross-system regen translations route through a conversion bridge so cross-mod Mana Regen enchantments and gear don't compound into absurd values. The strategy is configurable via cross_system_regen_conversion (EQUAL_EFFECT default, REFERENCE_POOL, or DISABLED), with cross_system_regen_multiplier and cross_system_regen_reference_pool as tuning knobs.
Ars and Iron's gear bonuses are routed to the active mana source:
- iss_primary / hybrid -- Ars gear perks apply to Iron's attributes.
- ars_primary -- Iron's gear perks apply to Ars calculations.
- separate -- Each mod's gear affects its own pool only.
Bonuses come from attribute modifiers, IManaEquipment implementations, mana-related enchantments, and Curios items.
Worn curios (rings, amulets, belts) have their attribute modifiers read the same way armor and weapons do, so mana stats applied by Apotheosis / Apothic Curios affixes and sockets — and by other curio mana gear like Magical Jewelry and Jewelcraft — feed the unified pool too. No hard dependency on Apotheosis is required; the read is generic and gated by the read_curio_attribute_modifiers config (default on). Apothic Attributes' combat stats (crit, armor pierce, fire/cold damage) are not mana or spell-power and are not bridged.
In iss_primary, Iron's pool is the only pool, so Iron's MAX_MANA is sized to hold what either mod grants: the larger of Ars's own maximum (base pool, glyph bonus, book tier, perks and gear) and Iron's own maximum plus the Ars gear bonus (the max-mana contribution of worn equipment and, with read_curio_attribute_modifiers on, curios), each Ars amount times conversion_rate_ars_to_iron. The larger, not the sum, so Ars gear is never counted twice. The Ars gear regen, times the same rate, is added to Iron's MANA_REGEN. In hybrid and ars_primary, Iron's MAX_MANA is instead raised to cover Ars's real maximum (the shared-pool ceiling), because Iron's clamps every mana write to that attribute; hybrid also mirrors the Ars gear regen. With respect_armor_bonuses off the iss_primary additions and the gear bonuses are dropped, but the hybrid ceiling stays. The enchantment and curio toggles decide what is transferred: in iss_primary they keep what they cover out of the Ars maximum as well as the gear bonus, and they never lower the shared-pool ceiling of the other modes. Both loaders apply exactly these rules.
When Iron's is the primary pool (iss_primary), Ars mana potions feed the unified pool instead of the now-unread Ars pool: each level of ars_nouveau:mana_regen adds 0.5 mana/sec (times conversion_rate_ars_to_iron, converted through the regen bridge) to Iron's MANA_REGEN, refreshed every tick. The potion's own modifier on Ars's regen attribute is not gear, so it is mirrored once. Leaving iss_primary removes the mirrored modifier. Requires Iron's; no-op in the other modes (Ars handles its own pool natively there).
Cross-mod spell damage scales bidirectionally when Iron's Spellbooks is installed:
Iron's → Ars: Ars spell damage multiplies by globalSpellPower + (schoolSpellPower - 1.0), where globalSpellPower is Iron's generic SPELL_POWER and schoolSpellPower is the matching elemental attribute for the spell's resolved school(s). When a spell resolves to multiple schools (dual-element addon glyphs, compound-school recipes), the configured multi_school_power_policy (primary [default], max, or average) decides how those schools combine. The result is then multiplied by affinity (per-school) and resonance (mana fullness) bonuses. The final scalar is clamped to spell_power_cap (default 3.0).
Ars → Iron's: Iron's spell damage adds the caster's Ars SPELL_DAMAGE_BONUS perk value as a flat addition. This value is picked up automatically from any source — Ars armor threads, curios with Spell Damage modifiers, potions, or other mods. Plain Ars armor with no offensive perk grants no Iron's damage bonus. The perk addition is not subject to the spell_power_cap.
Multi-school policy split: damage scaling uses all schools the policy resolves; affinity and progression credit the primary (first-resolved) school only. This means a dual-element spell scales with the caster's better element and trains exactly one affinity track.
enable_cross_mod_combat_stats switches both directions; enable_irons_power_for_ars_damage and enable_ars_damage_for_irons_damage switch one each. /ans debug combat reports the settings, both mods' spell-damage attributes and the last hit each direction scaled (recorded while debug_mode is on).
Since 3.1.0 the school comes from Ars Nouveau's own glyph metadata (AbstractSpellPart.spellSchools) rather than from guessing at the glyph's registry name, so addon glyphs classify correctly without ANS shipping a hardcoded list — see Spell schools.
Implementation: both directions subscribe directly to spell-damage events (SpellDamageEvent.Pre from Ars Nouveau and SpellDamageEvent from Iron's) with no time window or damage-string guessing. A delayed projectile is scaled by the spell that fired it, not by whatever the player cast most recently. Iron's must be installed for cross-mod scaling to fire — without Iron's, Ars spells use their native damage values, and Iron's applies no Ars perk bonus. Cross-mod combat scaling is independent of the mana-unification mode and remains active even when mana unification is DISABLED.
Optional resonance tracks mana percentage and boosts spell damage when mana is above a configurable threshold (default 95%). Both directions can be toggled independently (enable_ars_resonance, enable_irons_resonance), with configurable strength, lingering duration after dropping below the threshold, and a damage-multiplier cap.
Standing near Ars Nouveau Source Jars passively boosts mana regeneration, multiplied by source_jar_synergy_multiplier (default 5.0). The scan never loads or waits on chunks, is position-cached (source_jar_cache_move_threshold), and as of 3.0.1 has a supported kill switch (enable_source_jar_synergy) plus scan tuning (source_jar_scan_interval_ticks, source_jar_scan_radius).
A unified cooldown system groups spells into four categories (OFFENSIVE, DEFENSIVE, UTILITY, MOVEMENT) and locks out all spells in that category — across both mods — while a cooldown is active. Cooldowns are global per category, by design: an Ars OFFENSIVE cast and an Iron's OFFENSIVE cast intentionally collide on the same slot. Earlier versions exposed a modNamespace parameter that suggested per-mod isolation; it never actually affected the storage and was removed in 1.9.0. Disabled by default.
Inscribed Ars spell cooldown (3.3.5). An Ars spell bound into an Iron's spellbook can put its wheel slot on an Iron's cooldown after each successful cast. Set the length with inscribed_ars_default_cooldown_ticks (20 ticks = 1 s); new configs default to 40 ticks, and configs from 3.3.4 or earlier migrate to 0, which is no cooldown as before. The cooldown uses Iron's own system, so Iron's cooldown reduction, the wheel's cooldown display and saving across relogs work as for any Iron's spell. A cast that fails, is refused or cannot be paid starts no cooldown. Each wheel slot is a shared proxy spell (ars_n_spells:ars_cross_N), so two books that bind different Ars spells to the same slot number share that slot's cooldown. Ordinary Ars casts, ordinary Iron's spells and Iron's spells inscribed into Ars items are unaffected. If category cooldowns are on, both checks apply to these casts.
Casting builds per-school progression (cast counts persist) and per-school affinity (0–100 levels, recently used schools level up). Both systems work in both directions as of 1.9.0: Ars and Iron's casts each contribute to the same shared school maps, and progression-derived bonuses feed back into both Ars (via spell scaling) and Iron's (via the <school>_spell_power attribute) damage.
Affinity decay is opt-in via enable_affinity_decay (default false in fresh configs; pre-existing configs keep their previous value). When enabled, each player ticks every affinity_decay_interval_ticks (default 1200 = 60 s) and loses a fraction of every non-zero affinity level prorated from affinity_decay_rate (default 0.01 per Minecraft day).
Cross-casting lets any item store a spell from the other mod and cast it on right-click. Inscription is a two-tablet ritual flow inscribe/uninscribe pair backed by datapack recipes, so pack authors can retune ingredients without touching code.
1. Craft the Spell Transcription tablet.
Combine a novice Ars spellbook (reagent) with a tiered Iron's spellbook (any tier — the ars_n_spells:irons_spell_books item tag, pack-overridable), an archwood log, and a source gem block on the Enchanting Apparatus. Costs 2000 source. Recipe lives at data/ars_n_spells/recipes/apparatus/spell_transcription.json.
2. Run the Spell Transcription ritual. Place the tablet on a Ritual Brazier, then drop two items within three blocks:
- exactly one source -- a filled Ars Nouveau spell parchment, focus, or spellbook, or an Iron's Spellbooks scroll
- exactly one blank target item
Strict disambiguation: more than one of either category fails the ritual with a chat message naming what it saw. Items already carrying an Ars Nouveau spell at NBT root are rejected as targets (they would let Ars's own right-click handler shadow the cross-cast). Items already carrying a cross-cast inscription are rejected too -- uninscribe first.
Light the brazier by right-clicking it with an empty main hand (right-clicking while holding something tries to feed that item to the brazier instead). The ritual burns for about three seconds; on completion the source is consumed and the target gains the arsnspells:cross_spells NBT list. Enchantment-glyph particles and the enchantment-table sound mark the inscribe.
3. Cast the inscribed spell.
Right-click the target. Sneak-right-click cycles between multiple inscriptions on the same item. Mana costs flow through BridgeManager and respect the active unification mode; in SEPARATE mode the dual-cost split (dual_cost_ars_percentage / dual_cost_iss_percentage) and conversion rates determine how much each pool pays per cast.
Cross-cast spells pay an overhead set by cross_cast_cost_multiplier (default 1.25, range 0.5-5.0). The multiplier applies to both Iron's spells cast from non-Iron's items and Ars spells cast from non-Ars items, once per cast, before mana deduction.
4. Strip an inscription. Craft the Spell Uninscription tablet on the Enchanting Apparatus from a blank parchment (reagent), a water bucket, a source gem, and an archwood log -- 500 source. Drop one inscribed item within three blocks of the brazier with no other items in range. Ash and smoke particles plus a fire-extinguish sound mark the strip; the result is bit-identical to a fresh blank target so the same item can be re-inscribed cleanly. The uninscribe ritual is Iron's-independent and remains useful for cleanup even if Iron's Spellbooks is later removed.
New in 3.0.0: design an Ars Nouveau spell at the Spell Loom, export it onto a real Iron's scroll, bind it into a real Iron's spellbook, and then select and cast it from Iron's own native spell wheel — while it still runs through Ars 'n' Spells' cross-cast pipeline (mana, multiplier, scaling, cooldown). The Ars spell's data rides as an Ars 'n' Spells sidecar (arsnspells:cross_spells) on the real Iron item — Iron's per-slot format has no room for it — and a registered proxy spell slot is added to the book's native container so the entry shows in the wheel. The book's own Iron's spells are never overwritten. This leg requires Iron's Spellbooks to be installed.
1. Design an Ars Nouveau spell. Build it with Ars Nouveau's normal tools (Scribe's Table / spellbook).
2. Craft or find a Blank Scroll.
As of 3.3.3, ars_n_spells:blank_scroll is a shapeless recipe of an Ars Nouveau blank parchment and a source gem (recipe); it exists because stock Iron's ships no recipe for a bare irons_spellbooks:scroll. It can also drop from chest loot when Iron's is installed — stronghold libraries, ancient city and woodland mansion chests, common dungeon/mineshaft/stronghold chests, and a range of Iron's own structure chests, at rates set in data/ars_n_spells/loot_modifiers/. A blank Iron's scroll works too, if you already have one.
3. Weave the spell onto the scroll at the Spell Loom.
Craft a Spell Loom (G gold / L lapis / B book / O obsidian on a crafting table). Right-click it, drop the Ars source (spell parchment, focus, or Ars spellbook) into the source slot and the Blank Scroll (or blank Iron's scroll) into the scroll slot, type a name, and set the spell's school with the School button — leave it on Automatic to let the glyphs decide, as before, or pick one school (see Choosing a spell school). Choose icon… picks the rudimentary icon and background frame shown in Iron's wheel; both are purely cosmetic and never change the school. Press Inscribe — the inscribed carrier scroll appears in the output slot. (The op-only /ans export_to_irons_scroll [school] still works for a quick export with no name, background or icon; its optional school argument sets the school.)
4. Take the scroll to an Iron's Inscription Table, or bind it another way. As of 3.3.3, dropping the carrier scroll into an Iron's Inscription Table and pressing Inscribe binds the Ars spell directly into the spellbook in the table — no ritual needed. This is now one of three equivalent bind routes:
- Inscription Table — drop the carrier scroll and the target spellbook into the table and press Inscribe.
- Spellbook Binding ritual — hold both and run the ritual described below.
- Command —
/ans bind_scroll_to_irons_book, holding the scroll and the spellbook.
All three go through the same checks and the same append logic, so the result — and the config toggles that gate it — is identical no matter which one you use.
Spellbook Binding ritual, in detail. Its tablet is crafted on the Enchanting Apparatus for 2500 source and only registers when Iron's is loaded; recipe at data/ars_n_spells/recipes/apparatus/spellbook_binding.json. The ritual reads dropped item entities, not inventories. Place the tablet on a Ritual Brazier, throw (Q) the carrier scroll and the spellbook on the ground within three blocks of the brazier, then light it by right-clicking the brazier with an empty main hand — right-clicking while holding something tries to feed that item to the brazier instead of starting the ritual. It burns for about three seconds. Anything else lying inside that three-block radius aborts the run with unexpected item(s) in range rather than risk binding the wrong stack, mirroring the uninscribe ritual's philosophy.
Whichever route you use, on success one scroll is consumed and the Ars entry is appended to the book — including the name, background, icon and school chosen at the Spell Loom. Binding deduplicates by what the spell does: a spell the book already holds with the same glyphs and the same school is refused as a duplicate, even when its name, colour, sound, background or icon differ, while the same glyphs with a different school (or Automatic next to a chosen school) bind as a separate entry with its own wheel slot. Set allow_ars_spells_in_irons_spellbooks=false to disable binding — all three routes refuse — or max_ars_cross_spells_per_irons_spellbook to cap how many Ars spells a book may hold (-1 = no cap, bounded by the native-wheel pool size of 8).
This is not Ars Nouveau's "Binding" ritual. Ars ships
ars_nouveau:ritual_binding, whose display name is exactly Binding; it converts nearby mobs into Bound Scripts for familiars and ignores dropped scrolls entirely. The tablet you want is Spellbook Binding (ars_n_spells:spellbook_binding, shown as Ritual of Spellbook Binding on the brazier). Lighting the wrong one looks identical to the feature being broken, because neither ritual says anything about the other.
5. Cast from the spellbook — through Iron's native spell wheel.
Each bound Ars spell appears as its own entry in Iron's native spell-selection wheel, with the name and icon you chose. Select it like any Iron's spell and right-click the spellbook to cast — it runs the real Ars spell through Ars 'n' Spells' server-authoritative cross-cast pipeline (mana, the cross_cast_cost_multiplier, scaling, cooldown). Your book's native Iron's spells are untouched and cast exactly as before. Under the hood, each entry occupies one of a small pool of registered proxy spells (ars_cross_1..8); the real Ars data lives in the book's arsnspells:cross_spells sidecar, since Iron's own per-slot data has no room for it. Up to 8 Ars spells per book show in the wheel. Selecting a bound Ars entry in the Inscription Table's own spell list does not offer it in the extraction slot; use the Spell Uninscription ritual to remove one. (Generic inscribed items that aren't Iron's spellbooks still cast via right-click / sneak-cycle as before.)
A custom spell's school is the school Ars 'n' Spells uses for that spell's mechanics. It is separate from the background frame picked under Choose icon…: the background (stored as the entry's nature) has always been cosmetic, and still is.
- Automatic (from glyphs) — the default, and what every scroll made before 3.3.7 uses. The glyphs decide the school or schools exactly as described in Spell schools, and a spell with several glyph schools keeps its
multi_school_power_policyscaling. - A chosen school — exactly one school replaces the glyph schools for spell-power scaling (that school's Iron's spell-power attribute), affinity, progression, and the Blasphemy matching-school mana and LP discounts. The glyph schools add nothing on top. The glyphs themselves never change: same effects, same damage types, same cooldown category.
The picker offers every installed Iron's school that has a spell-power attribute — the nine built-in schools plus any addon schools, which the server checks against Iron's school registry. Native Ars Nouveau casts and ordinary Iron's scrolls are unaffected.
Inscribe a scroll with a chosen school
- Open the Spell Loom. Put the Ars source in the source slot and a Blank Scroll (or blank Iron's scroll) in the target slot.
- Press the School button. While it is Automatic it reads
School: Auto (…), listing the glyph schools Automatic would use. - In the Spell school picker, choose a school (Next/Back page through them) or Automatic (from glyphs), then press Done. The button now reads, for example,
School: Ice; hover it, or open Details, to preview what the choice does. - Type a name, optionally use Choose icon…, and press Inscribe. The scroll's tooltip reads
School: Ice (chosen).
Change the school of a finished scroll without rebuilding its spell:
- Put the carrier scroll in the Loom's target slot. The source slot can stay empty.
- Use the School button to pick the new school, or Automatic.
- Press Apply. Only the school changes: the spell, name, background and icon stay, nothing is consumed, and the scroll stays in the target slot.
Operators can do the same to a held item with /ans school set <school> or /ans school set auto, adding an entry number for a spellbook that holds several Ars spells. /ans school list lists the schools the server accepts, and /ans school show lists each Ars entry on the held item with its school.
Where the school goes. The choice is stored on the spell entry (school in the arsnspells:cross_spells sidecar), so it survives saving and reloading, copying, inventory moves and every binding route (Inscription Table, Spellbook Binding ritual, /ans bind_scroll_to_irons_book). It applies to casts from the scroll itself and from Iron's spell wheel. A delayed effect or a projectile still in flight keeps the school of the cast that launched it, whatever its caster casts or holds afterwards.
Server rules. The server checks every request. A school that is unknown, malformed or not installed is refused, and the refused operation moves and consumes nothing. Setting allow_spell_school_override = false limits the Loom and the commands to Automatic; scrolls that already carry a chosen school keep it stored but cast as Automatic until the setting is turned back on. If the addon that supplied a chosen school is removed, the spell casts as Automatic and its tooltip says so; the choice returns if the addon does.
With Iron's Spells 'n Spellbooks installed, every Iron's player spell can become a real Ars Nouveau glyph, one per spell level (Firebolt I to Firebolt X). Glyphs are knowledge: use the glyph item to learn it the normal Ars way, then add it to spells in your spell book beside any other glyph. 111 spells (777 glyphs) are covered in both tested Iron's builds; see the coverage table.
The Glyph Press makes them. Craft it (gold ingot, Source gem, gold ingot / archwood planks, lectern, archwood planks / three obsidian; requires Iron's) and blank glyph plates (smooth stone + gold nugget + amethyst shard, makes two). Put a filled Iron's scroll in the cradle slot, a plate below it and Source gems beside the plate, keep Source jars within a few blocks, and press Inscribe Glyph. Nothing is consumed until the glyph is finished, and Cancel returns everything. The glyph's Ars tier follows Iron's rarity for that level and sets the price: tier I takes 1 gem and 500 Source (5 s), tier II 2 and 1,500 (7 s), tier III 4 and 3,000 (10 s); servers can change these. Spells Iron's makes you learn must be learned there first. Hoppers can supply scrolls from above and plates and gems from the sides, and take glyphs from below; only a player can start a job. Full guide: docs/3.4.0/glyph-press.md, and the worn notebook's Ars 'n' Spells chapter.
Casting. An Iron's glyph casts its Iron's spell inside your Ars spell, at the glyph's level:
- The form decides the target. Self casts on you; Touch on the block or creature you touch; Projectile where it lands; Underfoot below you. Spells that only affect their caster (Heal, buffs) work only with Self, and the spell book says so.
- Amplify and Dampen raise or lower the cast level within the spell's range.
- Mana: the Iron's spell's own cost joins the Ars spell's cost under your server's mana mode, with the cross-cast multiplier applied once, and is paid once. A cast that cannot pay is refused before anything happens.
- Iron's cooldowns apply per spell and are shared by all its levels. Charged and channelled spells charge or channel in Iron's own cast slot, and the rest of the Ars spell waits for them.
- Turret, rune and other non-player casters do not run imported glyphs.
If Iron's is removed or the server disables a spell, its glyphs stay in your books and inventory as dormant glyphs that do nothing and say why; they work again when restored. Both client and server need Ars 'n' Spells 3.4.0.
When Covenant of the Seven (Sanctified Legacy) is installed, two ring systems become available. (The Cursed Ring is also recognized from Enigmatic Legacy: both covenant_of_the_seven:cursed_ring and enigmaticlegacy:cursed_ring are detected.)
Wearing the Cursed Ring converts mana costs to Life Points. LP can be sourced from Blood Magic's Soul Network or player health. The whole system is gated by enable_lp_system (default on) — as of 3.0.1 every LP participant, including scroll casts and the Covenant-bypass path, honors this master toggle.
- LP source modes (
lp_source_mode):BLOOD_MAGIC_PRIORITY(default) -- Try Blood Magic first, fall back to health.BLOOD_MAGIC_ONLY-- Blood Magic only; fails if BM is not installed.HEALTH_ONLY-- Always use health (100 LP = 5 hearts).
- Insufficient LP behavior (
death_on_insufficient_lp):false(default) -- Spell is cancelled with 1 heart of damage.true-- Spell casts but the player dies.
- LP costs scale with configurable base multipliers, per-tier multipliers (Ars glyph tiers), per-level and rarity multipliers (Iron's spells), and a minimum cost floor. Delayed-resolution spells stage costs in a per-player FIFO queue, so rapid back-to-back casts can't overwrite each other's pending cost.
Wearing the Virtue Ring converts Ars mana costs to Covenant aura. The aura pool itself — maximum, regeneration, persistence, and HUD bar — is owned entirely by Covenant of the Seven; Ars 'n' Spells only maps the mana cost onto it. Iron's spells under the Virtue Ring are handled natively by Covenant.
- Gated by
enable_virtue_aura_system(default on). - The aura cost is
Ars mana cost × ars_virtue_aura_multiplier(default 1.0, range 0.1–10). - Insufficient aura cancels the spell with an action bar message.
Ring conflict: wearing both rings at once cancels both effects — costs fall back to normal mana and the player is notified.
Thirteen Blasphemy curios provide a base 15% mana discount (blasphemy_discount), plus an extra 10% when the spell school matches the curio's element (blasphemy_matching_school_bonus). Discounts stack multiplicatively with ring costs. A matching Blasphemy also discounts LP costs via blasphemy_lp_discount (default 0.85 = pay only 15%).
Iron's Spellbooks scrolls respect resource costs. The scroll_cost_mode config controls behavior:
| Mode | Behavior |
|---|---|
full (default) |
Scrolls cost the same as casting the spell normally. |
lp_only |
Scrolls are mana-free but LP is still consumed for Cursed Ring wearers. |
free |
No resource cost for scrolls (LP from Cursed Ring still applies). |
Wearing the Cursed Ring (with enable_lp_system on) makes LP replace mana rather than add to it — exactly as it does for normal casting, where Iron's mana cost is zeroed for ring wearers. A ring wearer is never charged both currencies for one cast.
Root command: /ans. Mutating subcommands require permission level 2; read-only ones are unrestricted.
| Command | Permission | Description |
|---|---|---|
/ans mode |
-- | Show the current mana unification mode |
/ans mode set <mode> |
Op 2 | Switch the mana unification mode live (no restart) |
/ans mana getdefault |
-- | View the current default max mana fallback |
/ans mana setdefault <1–100000> |
Op 2 | Set the default max mana fallback (persisted to config) |
/ans info <player> |
Op 2 | Diagnostics: mana, aura, resonance, ring status, per-school affinity, the registered Iron's school count and raw Iron's mana (the last two when Iron's is loaded) |
/ans debug |
Op 2 | Toggle debug logging at runtime |
/ans debug combat |
Op 2 | Cross-mod combat diagnostics: settings, spell-damage attributes and the last scaled hit in each direction |
/ans aura |
-- | Show your own current Covenant aura |
/ans export_to_irons_scroll [school] |
Op 2 | Export the held Ars spell onto a real Iron's scroll (requires Iron's; the Spell Loom is the survival path). The optional school is checked like a Loom choice; omit it for Automatic |
/ans school list |
-- | List the spell schools this server accepts for custom spells |
/ans school show |
-- | Show the school of each Ars spell on the held item |
/ans school set <school>|auto [entry] |
Op 2 | Change the school of an Ars spell on the held item without rebuilding it; the entry number is needed when the item holds several |
/ans bind_scroll_to_irons_book |
Op 2 | Bind a held exported scroll into a held Iron's spellbook (requires Iron's) |
/ans glyph inspect |
-- | Describe the held imported glyph, the imported glyphs in the held spell, or what the Glyph Press would make of the held scroll |
/ans glyph catalog |
Op 2 | Imported-glyph catalog identity, behaviour generation and availability counts |
/ans glyph coverage [spell] |
Op 2 | Coverage per adapter family, or one spell level by level (tier, Press terms, status) |
/ans glyph mappings |
Op 2 | The winning datapack file and pack for each imported-glyph override, and the errors of the last rejected reload |
/ans glyph press <pos> |
Op 2 | One Glyph Press's state, job and Source |
Config file (per-world, server-authoritative, auto-synced to clients): <world>/serverconfig/ars_n_spells-server.toml — singleplayer: .minecraft/saves/<World>/serverconfig/; dedicated server: <server>/world/serverconfig/. (Changed from config/ars_n_spells-common.toml in 2.0.0 when the config became ModConfig.Type.SERVER; the old global file is ignored.) On multiplayer clients the in-game config screen is read-only ("Read-only: server-managed config").
Migration note: the 3.0.1 audit removed a number of config keys that no code ever read (hybrid sync rate, mana overflow, per-glyph/per-school bonus tables, several resonance/cooldown caps, progression/affinity multipliers, discount stacking, per-cast reagent, mana sync/caching). If your TOML still contains them they are silently ignored. The tables describe the supported settings; the audit ledger records behavior tests and any outstanding validation.
Defaults at a glance — enabled out of the box: mana unification (iss_primary), resonance, progression, affinity, LP system (Cursed Ring), virtue aura (Virtue Ring), curio discounts, Source Jar synergy, cross-cast inscription. Disabled out of the box: unified cooldowns, affinity decay, death_on_insufficient_lp, debug mode.
| Option | Default | Description |
|---|---|---|
mana_unification_mode |
iss_primary |
Which mana pool is authoritative (iss_primary/ars_primary/hybrid/separate/disabled). The disabled value (and enable_mana_unification=false) means "native upstream pools pay; no sharing, no SEPARATE split, no ARS_PRIMARY conversion." Cross-cast still works in disabled mode; the cross_cast_cost_multiplier still applies. Changeable live via /ans mode set or the config screen. |
enable_mana_unification |
true |
Enables all mana bridging logic. As of 2.0.0 this no longer disables cross-cast inscriptions — only the mana sharing between systems. |
enable_resonance_system |
true |
Full-mana resonance bonuses. |
enable_cooldown_system |
false |
Unified cooldown categories. |
enable_progression_system |
true |
Cross-mod progression XP. |
enable_affinity_system |
true |
Spell school affinity tracking. |
debug_mode |
false |
Verbose logging. Enables [CrossCastTrace] end-to-end pipeline tracing — grep latest.log for attempt=<uuid> to get a single cast's full trace. |
| Option | Default | Range | Description |
|---|---|---|---|
conversion_rate_ars_to_iron |
1.0 |
0.01–10 | Multiplier for Ars costs paid from Iron's pool. |
conversion_rate_iron_to_ars |
1.0 |
0.01–10 | Multiplier for Iron's costs paid from Ars pool. |
hybrid_mana_bar |
irons |
ars/irons |
Which HUD bar to show in hybrid mode. |
hide_mana_bar_with_ring |
true |
-- | Hide mana bars while a Cursed or Virtue Ring is equipped. |
dual_cost_ars_percentage |
0.5 |
0–1 | In separate, fraction taken from Ars pool. |
dual_cost_iss_percentage |
0.5 |
0–1 | In separate, fraction taken from Iron's pool. The split is normalized so both halves always sum to the base cost. |
default_max_mana |
100.0 |
1–100000 | Fallback max mana when the native system returns no value. Settable via /ans mana setdefault. |
respect_armor_bonuses |
true |
-- | Route armor mana perks to the active source. |
respect_enchantments |
true |
-- | Include mana enchantment bonuses. |
cross_system_regen_conversion |
EQUAL_EFFECT |
see desc. | Regen unit conversion strategy: EQUAL_EFFECT, REFERENCE_POOL, or DISABLED. |
cross_system_regen_multiplier |
1.0 |
0–100 | Scales converted cross-system regen. |
cross_system_regen_reference_pool |
100.0 |
1–100000 | Reference pool size for the REFERENCE_POOL strategy. |
| Option | Default | Range | Description |
|---|---|---|---|
enable_ars_resonance |
true |
-- | Resonance bonuses for Ars spells. |
enable_irons_resonance |
true |
-- | Resonance bonuses for Iron's spells. |
resonance_strength |
1.0 |
0–10 | Global multiplier for all resonance bonuses. |
resonance_threshold |
0.95 |
0–1 | Mana fraction required to trigger resonance. |
resonance_duration |
100 |
0–1200 | Ticks resonance lingers after dropping below the threshold. |
max_damage_multiplier |
5.0 |
1–100 | Cap on the resonance damage multiplier. |
| Option | Default | Range | Description |
|---|---|---|---|
enable_unified_cooldowns |
false |
-- | Cross-mod cooldown sharing. |
enable_cross_mod_cooldowns |
false |
-- | Cross-mod cooldown interference (false = each mod independent). |
cooldown_category_duration |
100 |
0–10000 | Base category cooldown in ticks (20 = 1 s). |
cross_mod_cooldown_multiplier |
0.5 |
0–10 | Multiplier applied to cross-mod cooldowns. |
| Option | Default | Range | Description |
|---|---|---|---|
enable_cross_mod_progression |
true |
-- | Ars casts grant Iron's school progression and vice versa. |
progression_bonus_per_cast |
0.001 |
0–0.1 | Attribute bonus per cast in a school (+0.1%). Transient, so changes rescale everyone immediately. |
progression_bonus_cap |
0.25 |
0–2 | Cap on the per-school progression bonus (+25%, hit after 250 casts at defaults). |
enable_affinity_decay |
false |
-- | Opt-in affinity decay for unused schools. |
affinity_decay_rate |
0.01 |
0–1 | Fraction of current affinity lost per Minecraft day. Decay accrues fractionally and removes a point only once a whole point accumulates (proportional, fixed in 3.0.2). |
affinity_decay_interval_ticks |
1200 |
20–24000 | How often the decay handler ticks each player. |
| Option | Default | Range | Description |
|---|---|---|---|
enable_curio_discounts |
true |
-- | Enable curio mana discounts: the tagged-curio discount below and, with Covenant installed, Blasphemy discounts. |
virtue_ring_discount |
0.20 |
0–1 | Per-curio discount for each worn item in #ars_n_spells:curio_spell_discount (0.20 = cost × 0.80 per curio), on Ars and Iron's casts. The key name is shared with the NeoForge build. |
max_total_curio_discount |
0.50 |
0–1 | Cap on the combined tagged-curio discount (0.50 = never below half cost). |
blasphemy_discount |
0.15 |
0–1 | Base Blasphemy mana discount (15%). |
blasphemy_matching_school_bonus |
0.10 |
0–1 | Extra discount for a matching school (+10%). |
read_curio_attribute_modifiers |
true |
-- | Read mana attribute modifiers off worn curios (Apotheosis/Apothic Curios affixes & sockets, Magical Jewelry, etc.) and mirror them across the unified pool. |
| Option | Default | Range | Description |
|---|---|---|---|
enable_lp_system |
true |
-- | Master toggle for the Cursed Ring LP system (honored by all LP paths, including scrolls, as of 3.0.1). |
lp_source_mode |
BLOOD_MAGIC_PRIORITY |
see desc. | LP source order: BLOOD_MAGIC_PRIORITY, BLOOD_MAGIC_ONLY, or HEALTH_ONLY. |
death_on_insufficient_lp |
false |
-- | Kill the player instead of cancelling the spell. |
show_lp_cost_messages |
true |
-- | Action bar LP notifications. |
ars_lp_base_multiplier |
1.0 |
0.1–100 | Base LP multiplier for Ars spells (mana × this = base LP). |
ars_lp_tier1_multiplier |
1.5 |
0.1–10 | LP multiplier for Tier 1 glyphs. |
ars_lp_tier2_multiplier |
2.0 |
0.1–10 | LP multiplier for Tier 2 glyphs. |
ars_lp_tier3_multiplier |
2.5 |
0.1–10 | LP multiplier for Tier 3 glyphs. |
ars_lp_minimum_cost |
10 |
1–10000 | Minimum LP per Ars cast (10 LP = 1 health). |
irons_lp_base_multiplier |
0.5 |
0.1–100 | Base LP multiplier for Iron's spells. |
irons_lp_per_level_multiplier |
0.1 |
0–10 | Additional LP per Iron's spell level (+10%/level). |
irons_lp_minimum_cost |
10 |
1–10000 | Minimum LP per Iron's cast. |
irons_lp_common_multiplier |
1.0 |
0.1–100 | LP multiplier for COMMON rarity Iron's spells. |
irons_lp_uncommon_multiplier |
1.5 |
0.1–100 | LP multiplier for UNCOMMON rarity. |
irons_lp_rare_multiplier |
2.0 |
0.1–100 | LP multiplier for RARE rarity. |
irons_lp_epic_multiplier |
3.0 |
0.1–100 | LP multiplier for EPIC rarity. |
irons_lp_legendary_multiplier |
5.0 |
0.1–100 | LP multiplier for LEGENDARY rarity. |
blasphemy_lp_discount |
0.85 |
0–1 | LP discount when the matching Blasphemy curio is equipped (0.85 = pay only 15%). |
The aura pool (max, regen, persistence, HUD) belongs to Covenant of the Seven; these keys only control how Ars mana costs map onto it.
| Option | Default | Range | Description |
|---|---|---|---|
enable_virtue_aura_system |
true |
-- | Master toggle for the Virtue Ring aura-cost path. |
ars_virtue_aura_multiplier |
1.0 |
0.1–10 | Multiplier applied to the Ars mana cost to derive the Covenant-aura cost. |
aura_failure_mode |
open |
open/closed |
What aura checks do when the Covenant/Nature's Aura reflection bridge is degraded (e.g. an untested Covenant update): open allows casts without an aura check (effectively free while degraded); closed blocks Virtue Ring casts until the bridge works. Either way the first degraded decision logs at WARN. |
| Option | Default | Range | Description |
|---|---|---|---|
scroll_cost_mode |
full |
see desc. | Scroll resource cost mode (full/lp_only/free). |
spell_power_cap |
3.0 |
1–10 | Maximum total spell power multiplier from Iron's attributes. Caps multipliers only; does not apply to the Ars flat bonus. |
enable_cross_mod_combat_stats |
true |
-- | Master switch for Iron's → Ars and Ars → Iron's spell damage scaling. Active even when mana unification is disabled. |
enable_irons_power_for_ars_damage |
true |
-- | Iron's spell power scales Ars spell damage. |
enable_ars_damage_for_irons_damage |
true |
-- | Ars Spell Damage Bonus adds to Iron's spell damage. |
multi_school_power_policy |
primary |
primary/max/average |
How multiple matching schools combine; unknown values fall back to max. |
| Option | Default | Range | Description |
|---|---|---|---|
enable_source_jar_synergy |
true |
-- | Master kill switch for the proximity regen synergy. |
source_jar_scan_interval_ticks |
20 |
1–200 | Ticks between proximity checks per player. |
source_jar_scan_radius |
4 |
1–8 | Horizontal scan radius in blocks. |
source_jar_synergy_multiplier |
5.0 |
0.1–100 | Multiplier for the proximity regen bonus. |
source_jar_cache_move_threshold |
4.0 |
1–32 | Distance a player must move before re-scanning. |
| Option | Default | Range | Description |
|---|---|---|---|
cross_cast_cost_multiplier |
1.25 |
0.5–5 | Overhead multiplier on spells cast from inscribed items, applied once per cast in every mode. |
allow_ars_spells_in_irons_spellbooks |
true |
-- | Allow binding exported Ars spells into Iron's spellbooks. |
max_ars_cross_spells_per_irons_spellbook |
-1 |
-1–64 | Cap on Ars spells per Iron's spellbook (-1 = no cap; hard-bounded by the proxy pool size of 8). |
allow_spell_school_override |
true |
-- | Allow a chosen school on custom Ars spells (Spell Loom School button, /ans school set, /ans export_to_irons_scroll <school>). false limits all three to Automatic; spells that already carry a chosen school keep it stored but cast as Automatic. See Choosing a spell school. |
inscribed_ars_default_cooldown_ticks |
40 (new configs), 0 (migrated from ≤3.3.4) |
0–12000 | Iron's cooldown, in ticks, started on an Iron's-wheel slot after its bound Ars spell casts successfully. 0 = none. Applies from the next cast after a config reload, and Iron's cooldown reduction applies. It is the only source of these slots' cooldown: Iron's per-spell config files are not read for the ars_cross_N proxies. Also on the in-game settings screen. |
| Option | Default | Range | Description |
|---|---|---|---|
enable_iron_glyphs |
true |
-- | Imported glyphs can be learned, cast and pressed. false makes them dormant; nothing is lost and turning it back on restores them. |
enable_glyph_press |
true |
-- | The Press may start new jobs. false cancels running jobs with inputs and Source kept. |
iron_glyph_mana_bonus_policy |
per_spell |
per_spell, native_per_variant |
How learned imported glyphs count toward Ars's per-glyph mana bonus: all levels of one spell count once, or every level counts. |
max_imported_effects_per_spell |
4 |
1–8 | Imported glyphs one Ars spell may contain. |
max_foreign_emissions_per_cast |
16 |
1–64 | Iron's executions one Ars cast may produce, counting split and repeated deliveries; each is priced and paid. |
max_active_glyph_sessions_per_player |
8 |
1–32 | Casts with imported glyphs still in flight per player. |
glyph_press_source_capacity |
4000 |
1000–100000 | A Press's Source buffer. |
glyph_press_source_scan_interval_ticks |
20 |
5–200 | Ticks between a working Press's requests to nearby jars; an idle Press never asks. |
glyph_press_source_radius |
4 |
1–8 | How far a working Press looks for Source jars (loaded positions only). |
All apply without a restart. Per-spell behaviour (availability, tiers, Press costs, allow/deny lists) is datapack data, below. Reference: docs/3.4.0/config-reference.md.
These keys configure the Ritual of Mana Infusion and Ritual of the Mana Well. Both are Iron's-gated. As of 3.2.0 both have a craftable tablet and are obtainable in survival — they had been registered as rituals with no tablet item at all, so they could never be placed on a brazier. Both tablets are crafted on the Enchanting Apparatus from a blank parchment (reagent): Mana Infusion adds a source gem block, a source gem, an Iron's arcane essence and an archwood log for 1500 source (recipe); Mana Well swaps the source gem for a water bucket and costs 2000 source (recipe).
Mana Infusion grants its amount once, to the nearest player, on completion. Mana Well regenerates mana for every player in range on every ritual tick, which means one radius-mana_well_range player query per tick for the ritual's duration — in line with what Ars Nouveau's own area rituals do, but worth lowering the range on a busy server. Both pay into whichever pool the active mana unification mode treats as primary.
| Option | Default | Range | Description |
|---|---|---|---|
ritual_mana_infusion_amount |
500.0 |
1–10000 | Mana added by the Ritual of Mana Infusion. |
mana_well_range |
8 |
1–64 | Radius in blocks for the Mana Well effect. |
mana_well_regen_rate |
2.0 |
0.1–100 | Mana per tick granted to players within Mana Well range. |
All cross-mod item/block detection is tag-driven and datapack-extensible. Shipped defaults use "required": false entries, so every tag loads cleanly even when the referenced mod is absent. Extend a tag by shipping your own data/ars_n_spells/tags/... file (merged by default), or set "replace": true to restrict it.
| Tag | Type | Default contents | Controls |
|---|---|---|---|
ars_n_spells:irons_spell_books |
item | all 16 tiered Iron's spellbooks | Which books the ritual pedestals accept, and an additive second source for binding-target detection. Since 3.1.0 the primary test is Iron's own ISpellbook interface, so this tag is only needed to declare a spellbook-like item from a third mod. |
ars_n_spells:cursed_rings |
item | Covenant + Enigmatic Legacy cursed_ring |
Which rings trigger the LP-cost path. |
ars_n_spells:virtue_rings |
item | Covenant virtue_ring |
Which rings trigger the aura-cost path. |
ars_n_spells:blasphemy_curios |
item | Covenant's 13 blasphemies | Which curios grant school discounts. School matching is by item path <school>_blasphemy (any namespace), so name custom entries accordingly (e.g. mypack:fire_blasphemy). |
ars_n_spells:source_jars |
block | Ars source_jar, creative_source_jar |
Which blocks count for Source Jar regen synergy. |
ars_n_spells:curio_spell_discount |
item | #irons_spellbooks:school_focus |
Worn curios that grant the per-curio mana discount (virtue_ring_discount, capped by max_total_curio_discount). |
ars_n_spells:cross_cast_blacklist |
item | Ars Zero's temporal context form and anchor/select/sustain/discard effects | Glyphs that only work in their own caster: refused by the Spell Loom, /ans export_to_irons_scroll, Spell Transcription and every cross-cast. |
ars_n_spells:glyph_press_catalysts |
item | Ars source_gem |
What the Glyph Press accepts as catalyst (the default tier terms name this tag). |
data/<namespace>/ans_iron_glyphs/**.json controls, per spell and level, whether an imported glyph is available, its Ars tier and what the Glyph Press charges; ars_n_spells:press_tiers files set the per-tier Source, catalyst and time, and ars_n_spells:policy files hold spell and school allow and deny lists. Iron's own disables always win and an explicit deny beats any allow. A reload is validated as a whole: an invalid one is rejected and the previous behaviour kept, and running Press jobs whose price or availability changed are cancelled cleanly. Datapacks cannot create glyphs or change a spell's adapter; those belong to the startup catalog. Rules and examples: docs/3.4.0/config-reference.md and docs/3.4.0/adapter-authoring.md.
Ars 'n' Spells classifies every glyph into one canonical school — fire, ice, lightning, nature, holy, ender, blood, evocation, eldritch, or generic — and that single answer drives affinity, progression, scaling, cooldowns, LP cost and the UI alike. Resolution order:
- An explicit glyph override from a datapack (below). Highest authority: a pack author's deliberate correction beats even the addon's own metadata.
- Ars Nouveau's declared schools (
AbstractSpellPart.spellSchools). Vanilla Ars populates these for every glyph and Ars Elemental populates them explicitly, so most addon content classifies correctly with no configuration at all. - A small registry-name keyword fallback, for a glyph that declares nothing.
Ars's own school vocabulary is a different axis from Iron's, so ANS translates: Ars models Freeze as water and Iron's has no water school, so water → ice; abjuration → holy, conjuration → evocation, manipulation → ender, air → lightning, earth → nature, necromancy → eldritch. The parent elemental school is deliberately unmapped, since it does not say which element a glyph is. Glyphs declaring several schools resolve deterministically, never by collection order.
Augments, cast methods (forms), and filters — AbstractAugment, AbstractCastMethod and AbstractFilter instances always resolve as generic, regardless of metadata or registry name, since they do not carry payloads and do not decide a spell's school. This rule applies to glyphs from all sources (vanilla Ars, Ars Elemental, Ars Zero, etc.).
Override any of it from a datapack — no Java, no mod update — with data/<your_pack>/ans_glyph_schools/anything.json:
{
"glyphs": {
"ars_elemental:glyph_watery_grave": "ice",
"toomanyglyphs:glyph_gravity": "nature"
},
"ars_schools": {
"water": "nature"
}
}glyphs keys are full glyph registry ids and override one glyph. ars_schools keys are Ars school ids and re-aim an entire school at once. Files are merged over the shipped defaults, reload with /reload, and a bad entry is skipped with a warning in the log rather than failing the datapack.
A custom spell inscribed at the Spell Loom with a chosen school uses that one school for scaling, affinity, progression and the Blasphemy school discounts instead of this classification; its glyphs still classify as above for everything else. See Choosing a spell school.
JEI shows a Glyph Press category: every available conversion with the real filled scroll as input and the exact level's glyph as output, at the price the Press would charge (it follows the server's datapacks and is empty without Iron's).
The internal ars_cross_1..8 proxy spells that make bound Ars spells appear in Iron's wheel are hidden from JEI, EMI and the creative menu. They remain registered and castable — disabling them would break every already-bound spellbook — they simply do not appear as items or recipes. No configuration needed, and JEI is never required.
Key economy knobs live in ars_n_spells-server.toml: LP multipliers (ars_lp_*, irons_lp_*, rarity ladder), aura_failure_mode (block vs. free casts when the Covenant bridge is degraded), cross_cast_cost_multiplier, and the master toggles listed above.
The mod hides redundant mana bars based on mode:
- iss_primary: Hides Ars mana bar.
- ars_primary: Hides Iron's mana bar.
- hybrid: Shows the bar selected by
hybrid_mana_bar. - separate / disabled: Both bars may show.
While a Cursed or Virtue Ring is equipped, both mana bars are hidden (hide_mana_bar_with_ring, default on); the Covenant aura bar takes over for Virtue Ring wearers.
Full version history lives in CHANGELOG.md. Recent highlights:
-
3.4.0 — Touch casting repaired; Iron's spells become Ars glyphs. Touch spells cast from exported scrolls, inscribed items and bound Iron's books now hit the block or creature you aim at exactly as a spell book does, report success correctly, and a miss no longer trains the school or starts a wheel cooldown. The new Glyph Press turns a filled Iron's scroll into a learnable Ars glyph for that spell at that level, which then casts its Iron's spell inside your Ars spells with Iron's own targeting, mana cost, cooldown and charge or channel. Client and server both need 3.4.0. See CHANGELOG.md and docs/3.4.0.
-
3.3.5 — Channels end cleanly,
ars_primarykeeps its mana, and inscribed Ars spells get a cooldown. Channelled Iron's spells such as BielGG's Crystal Barrage no longer stop with a payment error when mana runs low. Each paid pulse is checked at its final price, and the channel finishes the way Iron's itself would, with cooldown and scroll use. Inars_primary, Iron's regeneration can no longer lower the Ars pool to Iron's rounded-downmax_mana, the most likely cause of mana dipping while scrolling (the report itself was not reproduced). Shortages now say what was needed and what you had. New setting:inscribed_ars_default_cooldown_ticks. See CHANGELOG.md and docs/3.3.5. -
3.2.1 — A mixin conflict that stopped an entire modpack from loading; scrolls have been free this whole time. Installing ANS alongside One Mana Bar made the game fail to start and took twelve mods down with it, Iron's Spellbooks included. The cause was ours: we adjusted Iron's mana check with a
@Redirectaimed at one instruction insideAbstractSpell.canBeCastedBy, and One Mana Bar replaces that whole method, which Mixin treats as fatal rather than skippable —require = 0does not help, because the check runs before the requirement count is consulted. The adjustment now uses onlyHEADandRETURNinjection points, which Mixin permits into a replaced method by design. Separately, mixins targeting the optional Iron's and Covenant integrations moved to a non-required config, so a future conflict skips one mixin instead of aborting startup for every mod in the chain. AndMixinScrollItemnever applied in any released build — it targeteduse, which is renamed tom_7203_in a shipped jar — so Iron's scrolls have been casting with no mana, no LP and no aura cost since the feature shipped. That is fixed, which means scrolls now cost whatscroll_cost_modesays; set it tofreeif you prefer the old behaviour. See CHANGELOG.md. -
3.2.0 — Hybrid mana no longer eats your pool; ritual tablets have art; two rituals finally exist. On
hybrid, one Ars cast could drain the entire pool: Iron's clamps every mana write down to itsmax_manaattribute, and hybrid only ever pushed the gear-derived slice of Ars's max into it, so a spell book tier or glyph bonus raised the pool you were shown without raising the ceiling that governs writes. The shared pool now has one ceiling atmax(Ars max, Iron's own max), re-applied on dimension change and re-checked immediately before any deduction. The three ritual tablets, which have had no item model or texture since 3.0.0 and rendered as the missing-texture checkerboard, now ship artwork — and Mana Infusion and Mana Well are obtainable for the first time, having been registered as rituals with no tablet item at all. Hovering a Spell Loom scroll can no longer crash the client. See CHANGELOG.md for the full mechanism on each. -
3.1.0 — Crash fix, honest addon compatibility, no more recipe-viewer ghosts. Exported scrolls no longer crash Iron's Inscription Table — the reported client NPE turned out to be one of three unguarded dereferences, two of them on the server thread, so this was a remote-crash vector on dedicated servers; legacy carriers are repaired in place. Unbinding now removes the native wheel entry instead of leaving a selectable no-op. The Virtue Ring no longer makes Ars spells free when
enable_virtue_aura_systemis off.ars_cross_*ghosts are gone from JEI, EMI and the creative menu. Spell schools come from Ars Nouveau's own glyph metadata with datapack overrides, filter glyphs no longer decide a spell's school, and removing an addon now fails loudly instead of silently turning a bound spell into a different one. Verified against Ars Elemental 0.6.8.0 and Too Many Glyphs in every profile combination. -
3.0.3 — Cross-cast hotfix (published to CurseForge but never tagged; reconstructed into git in 3.1.0). A bound Ars spell equipped in the Curios spellbook slot cast nothing; binding could half-succeed; Iron's affinity/cooldown/LP/progression double-billed proxy casts; unreadable payloads bound instead of being refused.
-
3.0.2 — Second audit pass: decay fix, pack-maker tags, advancements. Affinity decay now follows its documented proportional curve (it previously drained a flat point per interval, ~20x too fast); ring/Blasphemy/Source Jar detection moved to datapack-extensible tags (
ars_n_spells:cursed_rings,virtue_rings,blasphemy_curios,source_jars); a four-step advancement chain guides the Spell Loom workflow; newaura_failure_modelets servers block (instead of free-allow) Virtue Ring casts when the Covenant bridge is degraded, and untested Covenant versions now announce themselves in chat; the progression bonus curve is config-driven (progression_bonus_per_cast/progression_bonus_cap); spell-school classification uses an explicit glyph map (Firework is no longer "fire school"); the Spell Loom screen got the high-contrast readability treatment with region tooltips;mods.tomlgained issue-tracker/homepage/update-checker metadata. See CHANGELOG.md. -
3.0.1 — Full-codebase audit remediation. The Spell Transcription and Spellbook Binding tablets are craftable again when Iron's is installed (recipes now use the pack-overridable
ars_n_spells:irons_spell_bookstag instead of a nonexistent item id);enable_lp_systemis honored by every LP path (closing a double-penalty and a scrolls-charge-LP-when-disabled inconsistency);mana_unification_mode = "disabled"is respected consistently by equipment bridging, Source Jar synergy, and mana-bar hiding; config screen readability rewrite with a proper multiplayer read-only mode; Source Jar synergy kill switch and scan tuning; fixed a startup crash on installs without Iron's; pruned zero-reader config keys; assorted dead-code cleanup. See AUDIT_FINDINGS.md. -
3.0.0 — Ars → scroll → spellbook export. The Spell Loom workstation, Spellbook Binding ritual, and
/ans export_to_irons_scroll//ans bind_scroll_to_irons_bookcommands carry an Ars spell onto real Iron's items, cast through Iron's native spell wheel via a registered proxy-spell pool. Also fixed the pending-cost race (per-player FIFO queues) and added Iron-loaded GameTests. -
2.6.x — Apotheosis curio mana bridge, mana-bridge correctness fixes, ring/HUD polish, and the Source Jar chunk-load deadlock fix.
-
2.0.x — Audit-driven major release. Server-authoritative cross-casting (dedicated servers work again), cross-cast decoupled from mana unification, end-to-end pipeline tracing, capability resync on login/respawn/dimension change, live mana-mode switching, config moved to
ModConfig.Type.SERVER.
- Ars mana not changing in iss_primary: Ensure Iron's is installed (3.15.x+). Check logs for mixin failures.
- Spell Transcription / Spellbook Binding tablet uncraftable: Fixed in 3.0.1 — update the mod. The recipes accept any tiered Iron's spell book via the
ars_n_spells:irons_spell_booksitem tag, which datapacks can override. - Gear perks not affecting mana: Confirm
respect_armor_bonuses=trueand the correct mode. Inseparate, perks are not cross-applied. - Double mana bars: Verify your mode and check for overlay conflicts from other UI mods.
- "Insufficient LP" despite enough hearts: Ensure
lp_source_modeis notBLOOD_MAGIC_ONLYwithout Blood Magic installed. Default isBLOOD_MAGIC_PRIORITY. - Scrolls casting for free: Verify
scroll_cost_modeis set tofull(default). Note that a Cursed Ring wearer pays LP instead of mana by design — that is not a free cast. - Ars spells casting for free while wearing the Virtue Ring: Fixed in 3.1.0. With
enable_virtue_aura_system=false, older builds cancelled the mana cost without anything taking aura in its place. - Iron's Inscription Table crashes when I insert an exported scroll: Fixed in 3.1.0, which also repairs carriers made by older versions. On 3.0.3 and earlier this crashes the client, and a dedicated server, every time.
- A bound spell shows in the wheel but does nothing: If unbinding left it behind, 3.1.0 removes such orphan entries the next time the book is bound to or reconciled. If it never worked, check the log for
ars_cross_warnings — they name the exact reason. - One spell drains my whole mana pool on
hybrid: Fixed in 3.2.0. Iron's clamps every mana write down to itsmax_manaattribute, and older builds pushed only the gear-derived slice of Ars's max into it, so anything above that ceiling was destroyed by the next cast rather than spent. If it somehow recurs, grep the log forbut the pool fell from— the warning names the ceiling that was wrong, and is worth reporting with your mana mode and gear. - Ritual tablets are a purple-and-black checkerboard: Fixed in 3.2.0. The tablets shipped with no item model or texture from 3.0.0 through 3.1.0. Update the mod; no world or config change is needed.
- Mana Infusion / Mana Well cannot be crafted or placed on a brazier: They had no tablet item at all before 3.2.0, so there was genuinely no way to reach them. Both are now craftable on the Enchanting Apparatus.
- My game crashes when I hover a Spell Loom scroll: Hardened in 3.2.0 — the tooltip now drops a line and logs the item and payload instead of taking the client down. If it still crashes, the crash report is what's needed to pin it; the mod's own tooltip failures show up as
cross-spell tooltip failed forinlatest.log. - Loot chests contain "Ars Spell" scrolls whose tooltip is a raw key like
spell.ars_n_spells.ars_cross_1.guide: Fixed in 3.2.2. Those are ANS's internalars_cross_*proxy spells, which do nothing outside a spellbook carrying the matching Ars entry. ANS never removes or replaces loot entries; since 3.3.3 it appends a Blank Scroll to some chest tables via global loot modifiers, only when Iron's is loaded (data/forge/loot_modifiers/global_loot_modifiers.json) — but the raw-keyars_cross_1scroll itself was never ANS's loot table entry: the proxies simply never declaredallowLooting=false, so Iron's own random-spell rolls could pick them — atCOMMON, the heaviest weight in that table. Update the mod and no new one can generate. A scroll already in your world becomes a blank Iron's scroll the first time you right-click it. Unopened chests were never affected, since loot is rolled when a chest is first opened. - An addon glyph gets the wrong school: Override it from a datapack; see Spell schools. No mod update needed.
- Aura bar looks wrong with a newer Covenant version: The aura-bar HUD mixin is verified against Covenant 2.2.6; the client logs a warning when the overlay has drifted. Gameplay is unaffected.
- A channelled spell (for example BielGG's Crystal Barrage) stops after one or two pulses with "Cast stopped. Check your resources; details are in the server log.": Fixed in 3.3.5. Channels charge every pulse; a channel now finishes normally on the last pulse you can pay for. If you still see a message, it names the resource, the amount needed and the amount available. Crystal Barrage costs 250 mana per pulse, so with less than 500 mana it can only ever run one pulse, with or without ANS.
- The Ars mana bar drops a little while I scroll the hotbar in
ars_primary: 3.3.5 stops Iron's regeneration from lowering the Ars pool to Iron's rounded-downmax_mana. That is the most likely cause, but the reported dip has not been reproduced, so report it if you still see it. Holding an item that really adds maximum mana, then putting it away, lowers your maximum, and the balance is capped to it once; that is expected. To report a remaining dip, turn ondebug_modeand reproduce it:[ManaTrace]lines show both pools, the ceiling and the held item at every change. - An Ars spell in my Iron's spellbook is on cooldown right after casting: That is
inscribed_ars_default_cooldown_ticks(40 ticks on new configs). Set it to0for no cooldown. Books that bind different spells to the same wheel slot share that slot's cooldown.
- Install JDK 17.
- Run:
./gradlew buildDependencies (Ars Nouveau, Iron's Spellbooks) resolve automatically from CurseMaven; no manual jar placement required.
Output jar: build/libs/ars_n_spells-<mod_version>.jar, where <mod_version> comes from gradle.properties.
Tested versions (this release): Ars Nouveau 4.12.7, Iron's Spellbooks 1.20.1-3.15.0 and 1.20.1-3.16.3, Ars Elemental 0.6.8.0, Ars Zero 2.0.2, Too Many Glyphs 2.3.2 (Forge). See docs/3.4.0/testing.md for the 3.4.0 commands and results (267 GameTests in every profile).
./gradlew test runs the JUnit suite (966 tests). GameTests run on a real server via runGameTestServer, with opt-in profiles:
| Command | Covers |
|---|---|
./gradlew runGameTestServer |
Iron's-absent fallback and boot safety |
./gradlew runGameTestServer -PwithIronsRuntimeGameTests |
The cross-cast pipeline against real Iron's 1.20.1-3.15.0 |
./gradlew runGameTestServer -PwithIrons316RuntimeGameTests |
The same suite against Iron's 1.20.1-3.16.3 with irons_lib 1.20.1-2.1.0 (compiles against 3.16.3 too) |
./gradlew runGameTestServer -PwithArsElemental |
Ars Elemental 0.6.8.0 glyph round-trip and school resolution |
./gradlew runGameTestServer -PwithArsZero |
Ars Zero 2.0.2 glyph round-trip and school resolution (local-only: requires jar in libs/) |
| Any combination of the above | Mixed-addon recipes |
(Covenant of the Seven has no dedicated runtime profile; surface compatibility is verified by CovenantJarSurfaceTest, which reads the jar bytecode and skips when absent.)
The runClient task with -PwithWorldUiSmoke -PwithIrons316RuntimeGameTests -PgametestRunDir=<dir> drives a scripted single-player client through the Spell Loom, Iron's wheel and the Glyph Press against a copied disposable save named ANS Icon QA, saving screenshots to <dir>/world-ui-review/.
What is not tested this cycle: No manual survival playthrough, no real multiplayer or dedicated-server session with a remote client, no full Covenant dependency stack, no JEI/EMI client matrix, no cross-Minecraft-version world conversion. The only load measurement is the idle-Press check in GlyphPressGameTests.
Gradle reports BUILD SUCCESSFUL even when a GameTest world fails to load, so assert on the log line instead: All N required tests passed. The profiles share the run/ directory, and an Iron's-loaded run leaves an irons_spellbooks:pocket_dimension reference in run/world that a later Iron's-absent run cannot load — delete run/world between profile switches.
GNU GPLv3