promotional bannermobile promotional banner

Music Events

An event-based dynamic music engine with an intuitive and easy to use in-game GUI that grants control over game, mod, and custom music.
Back to Files

music_events-forge-1.20.1-1.2.0.jar

File namemusic_events-forge-1.20.1-1.2.0.jar
Uploader
el0texxxel0texxx
Uploaded
Oct 25, 2026
Downloads
42
Size
559.9 KB
Mod Loaders
Forge
File ID
9320239
Type
R
Release
Supported game versions
  • 1.20.1

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:music-events-1563159:9320239")

Learn more about Curse Maven

What's new

MUSIC EVENTS V1.2.0 HIGHLIGHTS:

Compatibility with Weather2 and Majrusz's Progressive Difficulty CONTINUED.

Event Overlays showing custom images and text when an event starts on the HUD.

Structure events can detect jigsaws (specific rooms within a structure, like a boss room).

Loop, start/end, and volume parameters now give you an Audio Preview when you hover over them in the GUI.

You can Right-click an event tab in the GUI to toggle it off without deleting it.

Memory expiration system for remember_track and resume_from_timestamp parameters.

NEW EVENTS

Undead Army

Plays audio during Undead Army encounters from Majrusz's Progressive Difficulty Continued.

  • status: any, starting, preparing, ongoing, victory, defeat.

  • min_wave / max_wave: limit the event to a range of waves.

  • boss_wave_only: only while a boss of the current wave is still alive.

  • starting_muffle / preparing_muffle: muffle whichever event is playing (not just Undead Army events) during those phases. Also available in [universal].

Needs Music Events on the server in multiplayer (see MULTIPLAYER).

Blocks

Plays audio based on nearby blocks within detection_range (default 32, max 512). Only chunks loaded on your client are checked, so render distance limits the effective range.

  • Works like the mobs event: activation_blocks / deactivation_blocks (one number, or a list with one number per resource), require_all_resources and require_fov.

  • resource_name accepts block IDs, #tags and block states, e.g. minecraft:furnace[lit=true]. nbt_match filters block entities.

  • Performance depends on how many matching blocks are loaded around you. Avoid blocks that are very common in your world.

  • Blocks changed by other players are picked up with a delay of up to about 10 seconds.

Moon

Plays audio based on the current lunar phase: full_moon, waning_gibbous, last_quarter, waning_crescent, new_moon, waxing_crescent, first_quarter, waxing_gibbous.

  • The phase advances once per in-game day and is active for the whole day, including daytime. Combine it with a time event if you only want it at night.

  • Leaving resource_name empty makes the event active on every phase.

  • Compatible with the Blood Moon from Majrusz's Progressive Difficulty Continued: add blood_moon to resource_name. A blood moon does not replace the normal phase.

EVENT CHANGES

Mobs

  • New parameter mob_movement: tracks whether a mob is pathfinding, moving horizontally or vertically, rotating, or facing the player. Use it instead of mob_targeting for mobs that constantly target the player but stay stationary until triggered, such as the Ferrous Wroughtnaut from Mowzie's Mobs.

    • mob_movement_mode: "moved" latches once movement is seen, "moving" requires continuous movement.

    • mob_movement_match: "any" or "all" signals must pass.

    • Each signal has its own threshold and operator (>, <, = or range).

    • In multiplayer, "navigation" is only accurate with Music Events on the server.

  • New parameter require_all_resources for mobs: every resource in resource_name must be present (and meet its own threshold) instead of any one of them being enough.

  • activation_mobs and deactivation_mobs now accept a list for per-resource thresholds, positionally mapped to resource_name. This needs require_all_resources = true. Example: with resource_name = ["minecraft:zombie", "minecraft:skeleton"], activation_mobs = [2, 1] activates when 2 zombies and 1 skeleton are in range at once.

Player

  • New parameters near_spawn and spawn_range (required, in blocks): the event only plays while the player is within that distance of their spawn point. near_spawn accepts "world" (world spawn) and "bed" (bed or respawn anchor, only counted in the dimension it belongs to). "bed" needs Music Events on the server in multiplayer.

Weather (1.20.1 forge and 1.21.1 neo forge only)

Now compatible with Weather2's localized storms. Use w2: entries in resource_name: rain, thunder, highwind, hail, tornado_forming, tornado, tornado_f1 to tornado_f5, sandstorm, snowstorm, firenado, sharknado (e.g. w2:tornado_f3). detection_range and require_fov become available when Weather2 is installed.

Difficulty

Now also detects Majrusz's Progressive Difficulty Continued game stages: majrusz:normal, majrusz:expert and majrusz:master, alongside the vanilla difficulties.

Structure

resource_name now also accepts piece IDs: jigsaw template IDs, or piece types such as dungeoncrawl:room for structures that don't use jigsaw. This lets an event target specific rooms or sections inside a structure.

Time

resource_name now accepts ranges on the in-game clock (6:00 = dawn): 6-18 (6 AM to 6 PM), 22-4 (10 PM to 4 AM) or 9:13-18:56 with minute precision. The end time is exclusive. Multiple entries are OR'd together, and the named phases (sunrise, day, sunset, night) still work.

EVENT PARAMETERS (new and changed)

New: toggle

Set to "off" to skip the event entirely during evaluation, without deleting it. Right-click an event tab in the GUI to switch it.

New: health_muffling

Muffles the music as the player's health drops. Written as a table:

health_muffling = { threshold = 40, muffle = 1.0, full_at = 10 }

  • threshold: % of health at or below which muffling starts (0-100).

  • muffle: the amount reached (0.0-1.0). 0 turns it off, which is the default.

  • full_at: % of health where the full muffle is reached; the muffling ramps up smoothly from threshold down to this value. Leave it out to apply the full muffle as soon as threshold is crossed.

Combined with the other mufflers by taking the strongest, not by adding them. Also available in [universal]; an event's own table replaces all three values. A dead player counts as 0% health, so events that shouldn't muffle then (a death event for example) should set muffle = 0.0.

New: activate_from

The event only activates if it becomes valid right after one of the listed events was valid. Useful for "only when a level rises": list the lower levels. Being true already when you join, or coming down from a higher level, keeps the event silent until its trigger ends and starts again. Supports regex: (matches the whole event name), e.g. regex:shrieker_[0-2].

New: start_window

Seconds after the event activates (after event_delay) during which it may still start playing. If nothing starts it in time, for example because a higher-priority event is playing, it stays silent until its trigger ends and starts again. A track that already started plays on. 0 = no limit.

New: lock_after

Number of times this event starts playing before it locks itself again. Use together with locked. When the limit is reached the event stops, fires its unlocks_event chain and relocks. The counter resets whenever the event is unlocked and is saved per world.

New: unlock_only_while_active

For locked events: an unlock aimed at this event is ignored unless its own trigger is met at that moment, and a saved unlock is dropped on world join if the trigger isn't met. Stops a chain from arming the event outside the situation it belongs to.

New: memory expiry for remember_track and resume_from_timestamp

These two parameters can now limit how long and how far they remember. In the GUI they are under the "Expiry" dropdown; in the config they are:

  • forget_on_death: forgets the remembered track when the player dies.

  • memory_time: maximum time (M:SS) the memory is kept after the event deactivates.

  • memory_gap: the memory is forgotten once this many other events have activated (a new track starting in another event counts too).

  • memory_until: fraction (0.0-1.0) of the track's duration beyond which the memory is not saved. 0.8 means a track that has played past 80% won't be remembered. Mainly useful with resume_from_timestamp, since there's no point resuming a track in its outro, right?. It is the event-wide, percentage-based counterpart of the audio-level resume_until, which wins if both are set.

All four can also be set in [universal] and overridden per event.

Changed: unlocks_event

Now accepts a list of events to unlock, not just one.

Changed: join_delay

Now also offered in the GUI for biomes, weather, zones, time, player, inventory, gamemode, difficulty, advancement, statistic and moon events.

AUDIO PARAMETERS (new and changed)

New: interrupt_add

Events added to the list that can interrupt this track. Applied on top of the track's interrupt_whitelist, or the universal one if it has none. Supports regex: (matches the whole event name).

New: interrupt_remove

Events removed from that list, so you don't have to copy the whole universal list just to exclude one. Applied last, so it wins over interrupt_add. Supports regex:.

Both only matter for non-interruptible tracks.

BEFORE:

[[audios."thunder/crocodile_tears"]]

play_once = 1

interrupt_whitelist = [ …the whole universal list except "rain"… ]

target_events = ["thunder"]

AFTER:

[[audios."thunder/crocodile_tears"]]

play_once = 1

interrupt_remove = ["rain"]

target_events = ["thunder"]

New: resume_until

Timestamp (M:SS) past which a track is not remembered when its event is interrupted. Requires remember_track or resume_from_timestamp on the event, and takes priority over memory_until.

Changed: interrupt_whitelist

Entries can now be regex: (matching the whole event name), and the pinned "none" entry (stored as @none) lets no event interrupt the track. Also works in the universal list.

Changed: volume

Now available in the universal section. It sets the default volume for every audio that doesn't define its own.

Changed: loop points

Loop points are now checked every rendered frame instead of 20 times per second, so loop precision scales with your frame rate. If a check is late, playback lands the same amount past loop_start, so loops stay seamless. The new loopCheckMode setting in the mod's client config switches back to the old per-tick check ("tick").

EVENT OVERLAYS

alt text

Show custom images and text on the HUD when an event starts or ends, configured in the new Overlays panel (with a drag-to-position editor and an Images Folder button).

  • An event can have any number of overlays. Image and text are independent and can each trigger on activation or deactivation.

  • Position and size are fractions of the screen, so overlays scale with the window. Text supports formatting codes and an optional background.

  • Opacity, fade in/out, display time, draw order (z-index).

  • Spam control: delay, cooldown, play-once (per session, per game launch or saved per world) and repeat_gap.

GUI

Overlays panel

New panel for event overlays.

Debug panel

New tab to switch each line of the F4 debug screen on or off, filter them, and set the debug HUD scale. The same options exist in the mod's client config.

Event tabs

Right-click an event tab to toggle it on or off (disabled events show [OFF]). A new [x] button to the left of each tab deletes the event; hold Shift while clicking (this also works on the "Delete Event" button) to also remove all its linked audios. Deleting does not ask for confirmation!

Scrollbars

All scrollbars are now draggable: every panel, the dropdown lists and the bottom button bar.

Add Parameter dropdown

Event parameters are colored and sorted: priority and resource_name first (magenta), parameters exclusive to the event type second (aqua), generic parameters third (white). Majrusz-only parameters are hidden when Majrusz isn't installed.

Multi-select dropdowns

Selected items are listed first, and the item you last toggled stays in a pinned row next to the search box while it is scrolled out of view, so you can undo it with one click.

Parameter drag and drop

Drag a parameter label onto another event tab, audio group or audio track to copy its value there. Ctrl+click to select several parameters and drag them together; Esc cancels.

Audio preview

Hover over the volume, loop_start, loop_end, start_time and end_time rows in the Audios panel to hear a preview. volume plays a random section at the volume you typed; the timestamp parameters start playing at the typed timestamp. The current music pauses while previewing and resumes when you move away.

Other

  • Removing a parameter and adding it back restores its previous value.

  • Block ID autocomplete (including block states) for blocks events.

  • Editable thresholds and operators for mob_movement.

  • New Scale button to override the GUI scale.

  • Option tooltips with moon phase icons, and warnings when something needs a mod that isn't installed.

MULTIPLAYER

Previously, this mod was client-only (clientSideOnly=true) because earlier versions were not yet optimized for multiplayer. While some features mentioned needing server-side implementation, running them on a dedicated server wasn't possible. As of version 1.2.0, the mod should be ready for multiplayer and now loads on servers.

So now it works on servers, with or without the mod installed on the server. Players without the mod can join a server that has it, and players with the mod can join servers that do not.

Most features only need the mod on your own game. These also need it on the server:

  • Undead Army events

  • Majrusz game stages in difficulty events

  • Structure events (including piece IDs)

  • Raid and kill events

  • "bed" in near_spawn

  • Accurate "navigation" in mob_movement

  • Exact block entity NBT in nbt_match, and server_nbt_sync keys

Everything else (including Blocks, Moon and Weather2 storms) works with the mod on the client only. Nothing needs configuring on the server: each player's game tells it what it needs when joining and whenever the config is saved or reloaded, and players without the mod cost the server nothing.

SERVER OWNERS

Optional settings are in config/music_events-common.toml, created on first start:

  • serverFeaturesEnabled: master switch.

  • [features]: switch off structuresAndRaids, majruszData, killSparks, respawnPoint, playerNbtSync, blockNbtSync or mobMovement.

  • [limits] and [intervals]: cap mob detection range, mob_movement events per player, block entities and scan radius, and how often each tracker runs. These apply without a restart (run /musicserver reload if your host doesn’t pick up file changes).

  • blockNbtDeniedKeys: NBT keys that are never sent to players. By default container contents (Items, Inventory, EnderItems…), so a modified client cannot read other players' chests. Add the keys of any modded storage you want protected.

/musicserver reload (operators only): after changing the feature switches, run it so the change reaches every player at once. Features you switched off are cleared on players' games and features you switched on resync immediately.

Requests from players are validated and capped, and regex patterns sent by players are step-limited so they cannot hang the server.

This mod has no additional files