promotional bannermobile promotional banner

Iron's Botany

Iron’s Botany is a compatibility mod that tightly merges Botania and Iron’s Spells ’n Spellbooks, letting Botania mana power spells while spells can also interact with Botania systems. New school, new spells, new armor.

File Details

Iron's Botany 1.7.2 (Forge 1.20.1)

  • R
  • May 15, 2026
  • 501.02 KB
  • 1.2K
  • 1.20.1
  • Forge

File Name

ironsbotany-1.7.2.jar

Supported Versions

  • 1.20.1

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:irons-botany-1494871:8091052")
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

[1.7.2] - 2026-05-15

  • Removed duplicate "Chronicle of the Green Mage 1st Edition" book. 1.7.1 left Patchouli's auto-generated patchouli:guide_book instance alongside the IB-registered ironsbotany:botanical_grimoire item, so the player saw two near-identical books. Added Botania-style dont_generate_book: true + custom_book_item: "ironsbotany:botanical_grimoire" to book.json, suppressing the auto-spawn and binding the pre-existing IB item as the canonical book item.

[1.7.1] - 2026-05-15

Post-1.7.0 bug patch driven by launch-log analysis on the user's CurseForge instance plus two reported gameplay defects. Every issue resolved here was either blocking a feature shipped by 1.7.0 or visible in the log.

Critical fixes

  • Patchouli book ("Chronicle of the Green Mage") now loads. 1.7.0 left use_resource_pack implicitly false and kept all book content under data/, but Patchouli 1.20+ removed that mode and now requires content under assets/. Set use_resource_pack: true in book.json; moved all 27 content files (5 categories + 22 entries) from data/ironsbotany/patchouli_books/botanical_grimoire/en_us/ to assets/ironsbotany/patchouli_books/botanical_grimoire/en_us/. BotanicalGrimoireItem.use() already called the right API; once the book loads, right-clicking the Chronicle now opens the book.
  • Spell scroll recipes (9 files) now craft. The earlier recipes used irons_spellbooks:scroll_forge as a recipe TYPE, but ISS 3.15.2's scroll_forge is only a BLOCK with hardcoded Java logic — there has never been a JSON recipe type by that name. Added a new IBSpellScrollRecipe (custom CustomRecipe) registered as ironsbotany:ib_spell_scroll, taking an ink + focus ingredient pair and producing an irons_spellbooks:scroll carrying an ISpellContainer bound to the configured IB spell at level 1. Rewrote all 9 scroll recipe JSONs against the new schema.
  • Petal Apothecary recipes (3 files) now load. spell_petal, botanical_focus, and botanical_ring all omitted Botania's required reagent field, so deserialization threw "Item cannot be null". Added "reagent": { "tag": "botania:seed_apothecary_reagent" } to each.
  • Runic Altar botanical_grimoire and Elven Trade orb_of_terran_might now load. They referenced irons_spellbooks:wisdom_orb and irons_spellbooks:upgrade_orb_legendary, neither of which exists in ISS 3.15.2. Swapped to minecraft:enchanted_book and irons_spellbooks:nature_upgrade_orb respectively.
  • Botanical Focus Siphon Mode is now actually toggleable. Curios was intercepting every right-click in hand to auto-equip, so Item.use() (the siphon toggle) never fired. Overrode canEquipFromUse() to return true only when the player is sneaking; regular right-click passes through to use() and toggles siphon mode. Tooltip updated: "Right-click in hand to toggle Siphon Mode" + new line "Sneak + right-click to equip to Curios slot".

Polish

  • Sounds.json now loads. All four IB sound events (mana_conversion, botanical_cast, flower_bloom, spark_summon) used vanilla path-style references (e.g. minecraft:block/beacon/power_select) that Minecraft tried to resolve as a file path. Switched to "type": "event" references with dotted event names.
  • Pool Attunement Charm now has a texture. 1.7.0 shipped the model JSON but no PNG. Placeholder texture copied from botanical_focus.png; a bespoke art pass is deferred to 1.7.2.
  • mods.toml Forge update-check no longer fails. Removed the updateJSONURL line; the old URL pointed at a GitHub releases page which returns HTML, not the JSON Forge expects.
  • Particle atlas added. assets/ironsbotany/atlases/particles.json registers a directory source for the existing 12 particle PNGs. May or may not silence the "Missing particle sprites" warning depending on atlas-build ordering; particle rendering itself was unaffected.

Not in scope (other-mod issues seen in the log)

  • ISS shipping minecraft:set_written_book_pages (a 1.21 loot function) in a 1.20.1 loot table — surfaces as a parse error for irons_spellbooks:chests/citadel/citadel_tomes.
  • ISS's template_open_spell_book_model missing reference.
  • The global_config.json "outside namespaced directory" warning fires from ISS scanning, with no IB file involved (confirmed).

[1.7.0] - 2026-05-14

A full stabilization, architecture, and integration release built end-to-end against the 1.7.0 audit. Five phases, each shipped as a discrete commit.

Phase 1 — Stabilization (P0)

  • Aggregated Botania mana drain fixedManaHelper.requestManaFromAllSources was returning true only when a single stack could satisfy the full request, so spells failed under split-mana setups. Replaced with a two-pass aggregated transaction that sums across all mana items, accessories, and (if enabled) nearby pools, then drains in the same order. Public API (hasBotaniaMana, drainBotaniaMana) is unchanged.
  • Casting channels registeredCastingChannelRegistry had three implementations and a lookup site in AbstractBotanicalSpell, but no call to registerItemChannel anywhere. Added CastingChannelRegistration (mirroring CatalystRegistration) wired from common setup, binding Livingwood/Dreamwood/TerraRod profiles to the corresponding IB items and Botania's Terra Truncator if present.
  • Progression flags wired to real gameplayUnifiedAdvancementSystem was writing TIER4_UNLOCKED, DUAL_SCHOOL_UNLOCKED, and OVERCHARGE_UNLOCKED to player NBT but nothing read them. Added ProgressionGates reader-side helpers and wired:
    • TIER4_UNLOCKED → filters LEGENDARY-tier catalysts from SpellCatalystRegistry.getActiveCatalysts.
    • DUAL_SCHOOL_UNLOCKED → required by AlfheimScrollCrafting.markAlfheimScroll; falls back to single-school when locked.
    • OVERCHARGE_UNLOCKED → +5% Nature spell damage at cast time, and required for binding the new Pool Attunement Charm.
  • IBRegistryHealthCheck logs catalyst/aura/channel counts after common setup. In dev environments, throws when any registry is empty; in production it warns.

Phase 2 — Architecture Cleanup

  • Datagen pipeline scaffoldedrunData run config in build.gradle enabled; new data/IBDataGenerator subscribes to GatherDataEvent. runData requires deobfuscated dependencies that the project ships as obfuscated compileOnly jars, so the four GLM JSONs are hand-authored from the same Java provider source for 1.7.0. The provider class is retained for future regeneration once deobf coordinates are available.
  • Global Loot Modifiers replace LootTableInjector — Custom AddPoolModifier codec registered via IBLootModifiers; six modifier JSONs under data/ironsbotany/loot_modifiers/ target the four vanilla chests (village houses ×3, mineshaft, stronghold library, end city). Pack authors can disable any specific injection by overriding the JSON; ENABLE_VANILLA_LOOT_INJECTION remains the runtime master toggle.
  • NBT keys centralizedArmorSetBonusHandler.LAST_SHIELD_TIME_KEY moved to DataKeys.MANA_SHIELD_COOLDOWN. All player-persistent NBT keys now flow through DataKeys.
  • Custom attribute retiredIBAttributes.MANA_EFFICIENCY had zero consumers. Class deleted; corresponding lang key removed from all 23 locale files.
  • Cross-mod IDs moved to config — Three Botania advancement IDs hardcoded in UnifiedAdvancementSystem migrated to ProgressionConfig (server config). Pack authors can retarget gates when upstream renames an advancement; missing IDs warn at startup but never throw.

Phase 3 — Core Integration Enhancements

  • Botania-native recipe paths — 17 new recipe JSONs across four Botania recipe types replace 17 vanilla shaped/shapeless crafting JSONs:
    • Petal Apothecaryspell_petal, botanical_focus, botanical_ring.
    • Mana Infusionmana_infused_essence.
    • Runic Altarbotanical_crystal, botanical_grimoire, mana_conduit, spell_reservoir, livingwood_staff, all four manasteel_wizard_* pieces.
    • Elven Tradedreamwood_scepter, gaia_spirit_wand, orb_of_terran_might. Entry-tier consumables (orb_of_flora/pool/bursting, all spell scrolls, bulk variants, rune_scroll_fusion) keep their vanilla crafting paths.
  • NearbyManaPoolCache + NearbyIBBlockCache — Per-player cube-scan caches with 40-tick TTL and 4-block movement invalidation. ManaHelper. simulatePools and the client HUD proximity pulse both swapped from per-call BlockPos.betweenClosed walks to cached lookups.
  • BotanicalManaPayment service — Single static entry point centralises the five ManaUnificationMode branches that previously lived inline in AbstractBotanicalSpell.onCast. Mana payment now flows through one authoritative path.

Phase 4 — Content Expansion

Audit-prescribed defaults: Runic Catalysis ON, Pool Attunement ON, Corporea Reagent Recall OFF, Elven Bloom Scrolls OFF.

  • Runic Catalysis (tag-driven catalysts) — New TemplatedCatalystEffect handles modifier-only catalysts as a generic data class. CatalystDataLoader (SimpleJsonResourceReloadListener) loads from data/ironsbotany/catalysts/*.json on reload. Schema supports per-school filtering, four tiers, and five modifier multipliers. Existing Java catalyst classes remain for complex behaviours (mob effects, custom data, conditional damage); the JSON system is additive.
  • Pool Attunement Charm — New curio ironsbotany:pool_attunement_charm. Right-click on a Mana Pool binds it (requires OVERCHARGE_UNLOCKED). Worn charms supply Botania mana to Nature-school spells only, gated by POOL_ATTUNEMENT_RANGE (default 64 blocks) and POOL_ATTUNEMENT_BANDWIDTH (default 50,000 mana/cast). Wired into BotanicalManaPayment via new ManaHelper.{has,drain}BotaniaMana-with-bound-pool entry points; the Nature-only filter is implicit because no other caller reaches that path.
  • Corporea Reagent Recall (default OFF)ENABLE_CORPOREA_LOGISTICS flipped to false. Scope tightened in SpellCircleReagentSystem: now requires AbstractBotanicalSpell.isRitualGrade() to return true. Only GaiaWrathSpell and ManaRebirthSpell currently qualify.
  • Elven Bloom Scrolls (default OFF) — New ENABLE_ELVEN_BLOOM_SCROLLS config plus DataKeys.ELVEN_BLOOM. ElvenBloomScrollHandler listens to PlayerEvent.ItemCraftedEvent: if a rune-enhanced scroll is crafted within 8 blocks of an Alfheim Portal block, the scroll's NBT is flagged. AbstractBotanicalSpell.onCast checks main/offhand for the flag and applies +15% damage and -10% cooldown — a sidegrade endgame reward gated entirely behind real Botania late-game.

Phase 5 — Polish

  • New Patchouli entries: Pool Attunement Charm, Runic Catalysis, Elven Bloom Scrolls, Datapack Overview (advanced_systems).
  • README and CurseForge description updated to mark each feature as default-on / default-off / experimental.
  • ENABLE_CORPOREA_LOGISTICS default flipped (see Phase 4.3).

Known limitations

  • ./gradlew runData currently fails because libs/ ships obfuscated production jars (compileOnly). The hand-authored JSONs match the Java provider source bit-for-bit and are the source of truth until deobf coordinates land.
  • SpellManaNetworkIntegration remains mostly stubbed (only water-fill is functional) — audit-acknowledged, deferred to a future release.
  • ISS 3.15.2 upgrade-orb registry schema not independently verified against developer docs.
  • JEI plugin not added — Rune-Scroll Fusion uses Forge's CustomRecipe which JEI auto-handles via the default crafting category; Elven Bloom Scrolls modify an existing recipe's output NBT rather than creating a separate recipe type, so no dedicated category is required.