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.4.1 (Forge 1.20.1)

  • R
  • Apr 20, 2026
  • 454.68 KB
  • 390
  • 1.20.1
  • Forge

File Name

ironsbotany-1.4.1.jar

Supported Versions

  • 1.20.1

Curse Maven Snippet

Forge

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

Learn more about Curse Maven

[1.4.1] - 2026-04-17

Visual Overhaul — Phase 1

  • Block Entity Renderers — Spell Reservoir and Mana Conduit now render a floating, fill-scaled glow orb above the block. Orb intensity, scale, and alpha track the block's stored ISS mana in real time. - SpellReservoirBER: cyan-green halo + spinning core, subtle bob. - ManaConduitBER: violet-cyan halo + core + three orbital sparks (reuses the color-cycling / orbital trig pattern from SparkSwarmRenderer). - Both use LightTexture.FULL_BRIGHT + RenderType.entityTranslucent to stay bright in dark biomes without a custom shader pipeline. - Gated on ClientConfig.enableManaParticles.
  • Client-synced block entity stateSpellReservoirBlockEntity and ManaConduitBlockEntity now implement getUpdatePacket / getUpdateTag and broadcast sendBlockUpdated on every mana mutation, so BERs (and any future client listeners) see live stored-mana values instead of stale NBT snapshots.
  • Spell particle signature — Five spells gained Iron's Botany-flavored particles layered onto their existing vanilla VFX for visual cohesion: - ManaBloomSpell — petal bursts at each flower spawn. - LivingRootGraspSpell — botanical burst ring at target feet. - RunicInfusionSpell — mana transfer swirl on caster (scales with rune count). - GaiaWrathSpell — botanical burst on each target + petal storm column rising from caster. - ManaRebirthSpell — petal rebirth burst + rising mana transfer pillar.
  • Ambient block particles — active SpellReservoirBlockEntity and ManaConduitBlockEntity now emit low-rate ambient wisps from their serverTick (~25–30% per second) while they hold mana, giving the blocks atmospheric presence beyond the BER orb. Uses existing particle types — no new assets.
  • Config gatesCommonConfig.enableSpellParticles and CommonConfig.enableBlockAmbientParticles now actually govern server-side particle emission. ClientConfig.enableSpellParticles was dead code (client flag, server broadcast) and has been removed — existing configs with the key will log a warning once and be ignored.
  • HUD proximity pulseClientEventHandler now scans a 6-block radius around the player every 20 ticks for active Spell Reservoirs / Mana Conduits and wraps the Botania mana bar in a cyan pulsing border while any are in range.
  • Block geometrySpellReservoir and ManaConduit replaced their cube_all models with hand-written multi-element geometry (pedestal + bowl rim, and pedestal + column + top cap, respectively). Reuses the existing block textures; collision stays a full cube.

[1.3.3] - 2026-04-15

Critical Fixes

  • Dedicated server crash fixed (second leak)SpellCastSyncPacket (a common-side packet class) held a private static handleClient method that directly referenced net.minecraft.client.Minecraft. When PacketHandler.register() ran inside FMLCommonSetupEvent, the JVM loaded SpellCastSyncPacket via the consumerMainThread(SpellCastSyncPacket::handle) method reference, and Forge's transforming classloader refused the client type on DEDICATED_SERVER with BootstrapMethodError: Attempted to load class net/minecraft/client/multiplayer/ClientLevel for invalid dist DEDICATED_SERVER. The existing DistExecutor.unsafeRunWhenOn guard did not prevent class loading because the client reference lived on the same common-side class. - Moved the client-only handler into a new @OnlyIn(Dist.CLIENT) class com.ironsbotany.client.network.SpellCastClientHandler. - Added public getPos() / getSpellId() accessors on SpellCastSyncPacket so the new client class can read packet state without exposing fields. - SpellCastSyncPacket.handle() now dispatches via the canonical Forge () -> () -> SpellCastClientHandler.handleClient(packet) double-lambda pattern, using a fully qualified class name so the client reference never appears in the common class's import table. - Verified: ./gradlew compileJava clean; grep over com.ironsbotany.common returns zero net.minecraft.client / net.minecraftforge.client references.