promotional bannermobile promotional banner

Runic Instruments

Runic Instruments turns music into gameplay, letting players project resonance effects that buff allies, debuff enemies, and influence the world. Instruments become active tools, scaling through runes, environment, and progression.

File Details

Runic Instruments 0.9.2 (Forge 1.20.1)

  • R
  • Apr 19, 2026
  • 369.70 KB
  • 188
  • 1.20.1
  • Forge

File Name

runicinstruments-0.9.2.jar

Supported Versions

  • 1.20.1

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:runic-instruments-1516522:7951460")
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

[0.9.2] — 2026-04-19

Closes the 0.9.x → 1.0 punch list: real survival progression, full localization, real MineColonies integration, and a proper config-key rename. No breaking gameplay changes for existing worlds.

Added

  • Custom advancement trigger runicinstruments:played_notes and a per-player, per-instrument-family note counter persisted under PlayerPersisted NBT (survives death and re-login). All 75 gated resonance advancement files now use it instead of minecraft:impossible, with thresholds T2 = 50 notes, T3 = 200 + first-T2-of-family, T4 = 500 + first-T3-of-family. Note-block instrument variants fold into their themed family so playing a bell_note_block_instrument still progresses the Ukulele family. See tools/gen_advancements.py for the generator.
  • Localization for all 90 resonances. writeResonance now emits displayName and description as {"translate": "..."} Components, and assets/runicinstruments/lang/en_us.json carries 180 new entries (resonance.runicinstruments.<id>.name / .description). User-edited literal-string JSONs continue to load unchanged. See tools/gen_lang.py.
  • Explicit icon paths in default JSONs. writeResonance now writes icon and iconSelected fields pointing at the on-disk convention so resonance JSONs are self-describing. The selector still falls back to the same convention when the fields are absent, so old user JSONs keep working.
  • Tests: PlayedNotesTriggerTest round-trips the trigger condition JSON; InstrumentFamilyTest locks in note-block-to-family folding.

Changed

  • MineColonies colony_morale is no longer a placeholder. The handler reflectively pokes ICitizenData.setSaturation (so MineColonies' own daily happiness pass sees well-fed citizens) and applies vanilla Saturation + Regeneration so the buff is observable in the citizen renderer and AI. Falls back to vanilla effects only if the saturation API has shifted in a future MineColonies build.
  • Config key rename auraTickIntervalTicksresonanceTickIntervalTicks. The legacy key is still read for backwards compatibility (a one-time WARN points users at the new key). All callers route through RIServerConfig.getResonanceTickInterval().

Migration notes

  • Existing worlds: nothing required. Resonance JSONs in config/runic_instruments/resonances/ keep their literal display names unless the file is deleted (then the new translatable form regenerates).
  • Server operators: auraTickIntervalTicks keeps working but is deprecated — rename it in your server.toml at your convenience.

Housekeeping

  • Archived stale analysis docs to docs/history/: RUNIC_INSTRUMENTS_REFINEMENT_AUDIT.md (0.9.1-era, items all closed) and RUNIC-INSTRUMENTS.md (0.9.0-era overview, superseded by README).

Test & build

  • ./gradlew build and ./gradlew test both pass on Java 17.

[0.9.1] — 2026-04-18

Refinement release focused on correctness, migration, UI polish, and a test foundation. No gameplay-content expansions beyond loot coverage.

Added

  • Resonance icons. SyncedResonanceData now carries icon and selected-icon ResourceLocations, and the selector widget blits them as 32×32 textures with a fallback to the letter-in-color-box when the resource is absent. Defaults to runicinstruments:gui/resonance/<id> and <id>_selected so existing on-disk icons light up automatically.
  • Keyboard navigation on the selector widget. Arrow keys move focus with row wrap-around; Enter / Space / NumPad-Enter activate the focused button; a yellow focus ring highlights the current pick. Mouse clicks still work and also update the keyboard focus.
  • Initial test harness. Added src/test/ with a smoke test and a target-mode lock-in test for ResonanceEffectEntry so a regression of the TargetMode.ALL bug (fixed in 0.9.0) is visible immediately.
  • Six new Song Scroll loot modifiers. Coverage now extends to Ancient City (0.15), Woodland Mansion (0.2), Bastion Treasure (0.18), Nether Fortress (0.15), Village Weaponsmith (0.05), and Pillager Outpost (0.12). Trial Chambers are post-1.20 and tracked for a later MC release.

Changed

  • Config directory renamed. config/runic_instruments/auras/config/runic_instruments/resonances/. A non-destructive on-load migrator moves user-edited JSON files across on first boot; if the new directory already exists the legacy directory is left untouched.
  • Instrument mapping renamed. instrument_auras.jsoninstrument_resonances.json with the same non-destructive migration.
  • serendipty_songserendipity_song. Typo fixed in the default seed, the instrument mapping default, the advancement file, and the two GUI textures. User-edited serendipty_song.json is auto-renamed on load.
  • Network protocol 56 to reflect the expanded SyncInstrumentScreenS2CPacket wire format. Incompatible with 0.9.0 clients, as expected across a protocol bump.

Fixed

  • Selector grid no longer loses keyboard focus state across resizes.

Known limitations carried into 1.0

  • Advancement criteria are still minecraft:impossible (75 files). Gated resonances remain obtainable via Song Scroll loot and /runicinstruments grant.
  • Placeholder item textures are still placeholders; commissioned art is a 1.0 target.
  • MineColonies colony_morale still uses the Regeneration placeholder.
  • Config TOML key auraTickIntervalTicks retained verbatim for backward compatibility; the rename to resonanceTickIntervalTicks is deferred to 1.0 along with an aliasing layer.
  • Ensemble detection is still O(n²) across active musicians; negligible at expected player counts.

Test & build

  • ./gradlew build and ./gradlew test both pass on Java 17.