跳到正文

Music Events

作者:xelotex

基于事件的动态音乐引擎,配有直观易用的游戏内 GUI,可自由控制游戏音乐、模组音乐和自定义音乐。

收藏

截图

介绍

介绍由机器翻译自 Modrinth 原页面,仅供参考。

Music Events 是一款高度可配置的模组,可全面控制原版游戏音乐和自定义音乐。它支持创建复杂且适应不同情境的音轨,例如环境音乐、战斗主题曲或特定情境的配乐。模组内置直观易用的游戏内 GUI,大大简化了配置过程,也是设置模组的主要方式。

作为开发者,你们的反馈对我帮助很大!如果你有任何疑问、需要帮助,或想进一步了解这款模组,欢迎加入我的 Discord;我有空时会尽快为你详细解答:

Discord

V1.2.0 新内容:亡灵军团事件展示:

剧透

观看恐怖主题配乐设置指南:

恐怖主题配乐所用语法
# ==========================================
# UNIVERSAL SETTINGS
# ==========================================
[universal]
server_nbt_sync = ["warden_spawn_tracker"]

# ==========================================
# EVENTS (TRIGGERS)
# ==========================================
[[events.mobs]]
event_name = "warden_undetected_4"
priority = 204
detection_range = 25.0
sync_group = "warden_proximity"
resource_name = ["minecraft:warden"]


[[events.player]]
event_name = "shrieker"
priority = 300
event_delay = 6.0
nbt_match = ["{warden_spawn_tracker:{warning_level:1}}"]


[[events.mobs]]
event_name = "warden_undetected_3"
priority = 203
detection_range = 50.0
sync_group = "warden_proximity"
resource_name = ["minecraft:warden"]


[[events.mobs]]
event_name = "warden_undetected_2"
priority = 202
detection_range = 75.0
sync_group = "warden_proximity"
resource_name = ["minecraft:warden"]


[[events.mobs]]
event_name = "warden_detected_4"
priority = 214
detection_range = 25.0
mob_targeting = true
sync_group = "warden_proximity_detected"
resource_name = ["minecraft:warden"]


[[events.mobs]]
event_name = "warden_detected_3"
priority = 213
detection_range = 50.0
mob_targeting = true
sync_group = "warden_proximity_detected"
resource_name = ["minecraft:warden"]


[[events.mobs]]
event_name = "warden_detected_2"
priority = 212
detection_range = 75.0
mob_targeting = true
sync_group = "warden_proximity_detected"
resource_name = ["minecraft:warden"]


[[events.mobs]]
event_name = "warden_detected_1"
priority = 211
detection_range = 100.0
mob_targeting = true
sync_group = "warden_proximity_detected"
resource_name = ["minecraft:warden"]


[[events.mobs]]
event_name = "angel"
priority = 100
detection_range = 50.0
mob_targeting = true
require_fov = 2
resource_name = ["weeping_angels:weeping_angel"]


[[events.mobs]]
event_name = "warden_undetected_1"
priority = 201
detection_range = 100.0
sync_group = "warden_proximity"
resource_name = ["minecraft:warden"]


[[events.mobs]]
event_name = "dweller"
priority = 101
mob_targeting = true
require_fov = 1
resource_name = ["cave_dweller:cave_dweller"]

该模组仅支持 .ogg 格式的音频文件。

配置主要通过专用的游戏内 GUI 完成。

打开 GUI:
按下 F6 键打开界面。
修改原版音乐:

  1. 前往 Events 选项卡。
  2. 创建一个新事件(例如,维度事件),并为其设置优先级。
  3. 定义所需参数(例如,添加 resource_name 并将其设为 minecraft:overworld)。
  4. 选择 Register Audio,然后搜索所需的音频文件。
  • 注意:搜索使用文件的内部名称(例如,Haggstrom 在文件中存储为 hal3)。
  • 注意:将鼠标悬停在下拉列表中的文件上,可试听音频。
  1. 点击 Save,然后点击 Reload,即可应用配置。

使用自定义音频文件:

  1. 通过 GUI 打开 Audios 文件夹。
  2. 将自定义 .ogg 文件放入指定目录(也可以创建子文件夹,让文件更有条理)。
  3. 使用标准的“注册音频”流程,将曲目关联到事件。

GUI 面板概览:

  • 通用:管理默认参数值,这些值将应用于所有新建事件。事件专属参数会覆盖通用设置。
  • 事件:用于创建自定义事件并配置相应参数。
  • 音频:用于管理各个音轨的配置。
  • 同步组:概览并管理通过 sync_group 参数绑定在一起的事件。

事件类型、修饰符与示例:

每个事件都会在触发音频播放前检查当前情境是否符合条件。

通用参数(事件默认配置池):

展开内容
  • play_when_paused = true/false:决定游戏菜单暂停时是否允许播放音轨。
  • muffling_when_paused = 1.0:游戏暂停时应用的音频闷声效果倍率。(推荐:1.0)。
  • underwater_muffling = 1.0:玩家潜入水下时应用的音频闷声效果倍率。(推荐:1.0)。
  • gui_muffling = 1.0:GUI 界面打开时应用的音频闷声效果倍率。(推荐:1.0)。
  • gui_muffling_delay = 20:应用 GUI 闷声效果前的延迟时间(秒)。
  • gui_muffling_blacklist = [“InventoryScreen”]:不受闷声效果影响的 GUI 类列表。使用该模组的调试界面查看当前所在的 GUI。
  • pause_volume_multiplier = 0.5:游戏暂停时应用的音量控制倍率。
  • remember_track = true/false:启用后,事件会记住停用前播放的最后一首曲目;再次激活时会重新播放该曲目,而不是随机选择新曲目。
  • resume_from_timestamp = true/false:启用后,事件重新激活时会从暂停时的准确时间点继续播放。
  • seamless_handoff = true/false:启用平滑的曲目切换。如果事件 A 切换到事件 B,且两者的播放列表中都包含当前正在播放的曲目,该曲目将无缝继续播放,不会重新开始或淡出。
  • fade_in = 2.0 / fade_out = 2.0:指定事件激活或停用时的音量渐变时长(秒)。
  • persistence = 10.0:事件在激活条件不再满足后,仍强制保持激活并继续播放音乐的时长(秒)(例如,怪物被消灭后仍继续处于战斗状态 10 秒)。
  • time_between_audio = 60.0:一首曲目播放完毕后,事件再次触发曲目播放前的冷却时长(秒)。
  • jukebox_behavior = “ignore”/”pause”/”muffle”:决定曲目如何响应附近正在播放音乐唱片的原版唱片机。
  • cooldown_group_time = 120.0 / cooldown_group_events = [“eventA”, “eventB”]:将多个不同事件的曲目冷却时间关联起来。如果某个事件播放完一首曲目,cooldown_group_events中列出的所有事件都将共享指定的 cooldown_group_time,冷却结束后才能再次播放。
  • mob_blacklist = [“minecraft:slime”, “minecraft:vex”]: 实体 ID 列表;其中的实体无法在全局范围内触发生物事件。
  • priority = 50: 用于确定多个事件同时激活时播放顺序的整数值。数值越高,优先级越高。
  • hard_interrupt = true/false: 强制立即终止当前音轨,忽略并跳过常规的持续时间和淡出参数。
  • locked = true / unlocks_event = “phase_2” / relock_when_inactive = true: 用于管理状态的参数,可实现事件依次激活。事件默认可以处于 locked 状态,只有在另一个事件调用其 unlocks_event 时才会激活。
  • sync_group = “battlefield_crescendo”: 将事件分配到同步组。同一 sync_group 中依次触发的事件会继承上一个活动音轨的精确播放时间戳。适用于节奏和布局相同的分层或多阶段音频文件。
  • server_nbt_sync = [“warden_spawn_tracker”]: 以逗号分隔的根 NBT 键列表;服务器会主动同步这些键,以供 nbt_match 参数使用。

音轨参数:

展开内容
  • volume = 1.0: 音轨音量的倍率。
  • weight = 50: 当一个事件注册了多条音轨时,用于决定音轨的播放概率。权重越高,被选中的概率就越大。
  • require_all_events = true/false: 若设为 true,只有 target_events 数组中明确列出的所有事件同时处于活动状态,音轨才会播放。
  • target_events = [“overworld_day”, “overworld_night”]: 指定音轨所属事件的列表,并检查这些事件是否已激活。
  • upgrade_delay = 5.0 / upgrade_fade_in = 3.0 / upgrade_fade_out = 3.0: 用于动态音轨升级的平滑过渡设置。满足事件条件时,当前播放的音轨可以无缝“升级”为此音轨;此过程使用单独的交叉淡化时长,不受常规事件淡化设置影响。
  • start_time = 15.5: 指定音轨开始播放的时间戳(秒)。设为 15.5 后,音轨每次都会从第 15.5 秒开始播放,跳过开头部分。
  • start_x = 2: 配置重复播放次数。音轨会准确重复 2 次后结束。
  • loop_start = 10.0 / loop_end = 60.0: 创建独立的内部播放循环。音轨正常开始播放;播放到 loop_end(例如 60.0 秒)时,会无缝跳回 loop_start(例如 10.0 秒),并根据 start_x 值无限重复该片段。
  • play_once = 1/2/3/4/5: 决定音轨可以重播的频率。可使用以下数值:
  • 1(轮流播放):在当前事件的其他可用音轨全部播放过之前,不会再次播放此音轨。
  • 2(事件持续期间):只要事件持续处于活动状态,此音轨就只播放一次。
  • 3(会话):每次加入世界后,此音轨只播放一次。退出并重新登录后重置。
  • 4(JVM 会话):每次启动游戏后,此音轨只播放一次。完全重启 Minecraft 后重置。
  • 5(持久世界):此音轨在某个世界中永远只播放一次。播放状态会持久保存。
  • interruptible = true/false: 指定更高优先级的事件能否强制中断此音轨。标记为 false 的音轨会充当屏障,拒绝暂停,并始终从头播放到尾。
  • breakthrough_priority = 500:覆盖轨道的不可中断状态。即使轨道充当护盾,任何优先级等于或高于 500 的事件都可以强行突破并中断轨道。
  • interrupt_whitelist = [“boss_phase_2”]:仅允许列表中的事件名称绕过可中断标记并暂停轨道,不受优先级影响。

特定事件类型及限制条件:

  • 生物:根据实体距离触发。
展开详情
  • resource_name = [“minecraft:zombie”, “category:monster”, “regex:.zombie.“, “player:Name”]:要监测的目标实体 ID、标签或通配符。
  • nbt_match = “{IsBaby:1b}”:检查实体/玩家是否具有与字符串匹配的 NBT 属性。对于服务端 NBT 属性,必须在 Universal 部分的 server_nbt_sync 中添加根键。
  • detection_range = 16.0:以玩家为中心、用于检测实体是否存在的半径。
  • activation_mobs = 5 / deactivation_mobs = 2:严格的数量阈值。仅当匹配的实体数量达到或超过 5 时,事件才会触发;数量降至 2 或以下时,事件停止。
  • max_health = 10.0:只有目标匹配实体的生命值低于指定阈值时,事件才会触发。
  • health_override_threshold = 100.0:如果哪怕只有一个匹配实体的生命值大幅超过此最大生命值,事件即可立即绕过activation_mobs数值阈值(适用于 Boss 的变体)。
  • mob_targeting = true/false:仅当实体处于主动攻击状态且以玩家为目标时才触发。
  • require_fov = “Spotted”/”Constant”:仅对当前处于玩家视线范围内的实体触发。
  • 击杀:实体死亡时触发。
展开详情
  • resource_name = [“minecraft:ender_dragon”]:被击杀实体的具体类型。
  • attacker_name = [“minecraft:player”]:必须造成最后一击的实体类型。
  • nbt_match = “{…}”, detection_range = 128.0, require_fov = “Spotted”:应用与生物事件类似的限制条件。
  • 物品栏:物品位于指定的物品栏位置时触发。
展开详情
  • resource_name = [“minecraft:diamond”, “slot:head|regex:.*_helmet”]:目标物品 ID 或正则表达式模式。可添加前缀slot:xxx|,以仅在特定栏位中检测该物品。
  • target_slots = [“mainhand”, “offhand”, “head”, “chest”, “legs”, “feet”, “any”]:指定要检查的有效栏位数组,作为全局回退设置。如果resource_name中的物品没有slot:前缀,则会在此处定义的所有栏位中进行检测。
  • require_all_resources = true/false:若为 true,则要求同时持有按顺序列出的所有物品,而非任意一种物品。
  • 玩家:检查玩家的精确内部状态。
展开详情
  • is_dead = true/false:严格要求玩家处于死亡状态。
  • max_health = 6.0:玩家生命值严格降至此数值或以下时触发事件。
  • min_y = -64.0 / max_y = 0.0:限制事件触发位置的垂直高度范围。
  • min_light = 0 / max_light = 7 / light_type = “sky”/”block”/”total”:根据所选光源类型,检查环境光照强度是否处于设定范围内。
  • require_underwater = true/false:强制检查玩家是否直接浸没在液体中。
  • nbt_match = “{…}”:玩家数据的 NBT 条件。
  • 区域:基于固定坐标的立体触发区域。
展开详情
  • min_x = -50 / max_x = 50 / min_y = 64 / max_y = 120 / min_z = -50 / max_z = 50:建立永久的 3D 地理边界框,严格按坐标控制激活范围。
  • 突袭:检查掠夺者突袭变量。
剧透
  • min_wave = 1 / max_wave = 5:限制当前掠夺者突袭波次等级的上限和下限。
  • status = “active”/”victory”/”loss”/”stopped”/”any”:验证特定的突袭进度状态。
  • 统计:检查内部玩家统计数据。
剧透
  • resource_name = [“minecraft:mined:minecraft:diamond_ore=100”]:定义要追踪的目标指标。格式明确要求包含核心类别、模组 ID、对象和数值限制(例如 minecraft:used:minecraft:elytra=50 或 minecraft:custom:minecraft:play_time=12000)。
  • require_all_resources = true/false:要求同时满足所有数值统计追踪条件。
  • 维度 / 生物群系 / 时间 / 天气 / 游戏模式 / 难度 / 结构 / 进度 / PvP / 骑乘 / GUI / 效果:

通过统一的 resource_name 参数进行评估,该参数提供标准的字符串匹配数组。

剧透
  • resource_name:
  • 维度默认值:["minecraft:overworld", "minecraft:the_nether", "minecraft:the_end"]
  • 生物群系默认值:["minecraft:plains", "minecraft:desert", "minecraft:badlands"]
  • 时间默认值:["day", "night", "sunrise", "sunset"]
  • 天气默认值:["clear", "rain", "thunder"]
  • 游戏模式默认值:["survival", "creative", "adventure", "spectator"]
  • 难度默认值:["peaceful", "easy", "normal", "hard"]
  • 结构默认值:["minecraft:bastion_remnant", "minecraft:village", "minecraft:stronghold"]
  • 进度默认值:["minecraft:story/enter_the_nether", "minecraft:end/kill_dragon"]
  • PvP 默认值:["player:Name", "any"]
  • 骑乘默认值:["minecraft:horse", "minecraft:minecart"]
  • GUI 默认值:["InventoryScreen", "ChatScreen", "TitleScreen"] 使用该模组的调试屏幕查看当前界面对应的 GUI。
  • 效果默认值:["minecraft:poison", "minecraft:regeneration"]

命令与调试:

该模组提供了若干以基础 /musicevents 命令开头的命令,可直接在聊天栏中管理状态机并追踪音频:

剧透
  • /musicevents reload:指示模组对音频引擎执行硬重置,并从文件系统重新加载所有配置和音频内存缓存。
  • /musicevents skip:立即跳过当前播放的音轨,并评估优先级最高的下一首音轨或事件。
  • /musicevents unlock <event_name>:解锁一个已锁定的状态机事件,将其标记为激活/可评估状态。
  • /musicevents relock <event_name>:重新锁定指定的状态机事件,除非再次满足其解锁条件,否则阻止其激活。你也可以使用 /musicevents relock all 重置整个状态进程。
  • /musicevents zone pos1 / /musicevents zone pos2:根据你的精确玩家坐标,设置维度边界框的第一和第二个角点。
  • /musicevents zone save <event_name>:将内部 pos1 和 pos2 边界坐标永久写入指定的区域事件!

此外,默认情况下可按 F4 键切换内置调试屏幕。调试屏幕会以实时覆盖层的形式显示,帮助你配置参数、了解模组如何计算优先级、查看当前播放的音轨,以及运行期间哪些参数正在强制影响音轨行为。

常见问题

Music Events 支持哪些 Minecraft 版本?

Music Events 支持 Minecraft Java 版 1.16.5–1.21.1,共 3 个版本,可用的加载器:Fabric / Forge / NeoForge。下载时注意选择和你游戏版本一致的文件。

Music Events 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric / Forge / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:客户端和服务端都要装。

评论

登录后评论和评分

xelotex 的其他作品

查看全部 →