音乐活动

音乐活动

一个基于事件的动态音乐引擎,配备直观易用的游戏内图形界面,可让您控制游戏、模组及自定义音乐。

音乐事件(Music Events)是一个高度可配置的模组,可对原版游戏音乐和自定义音乐提供广泛的控制。它允许创建复杂、情境化的音轨,例如环境音乐、战斗主题或特定情境下的配乐。该模组具有直观且用户友好的游戏内GUI,极大地方便了模组的配置,也是设置该模组的首要方式。

作为开发者,您的反馈对我帮助巨大! 请随时发表评论或报告任何问题。如果您有任何疑问、需要帮助或想了解关于我的模组的更多信息,欢迎加入我的Discord,我会尽快给您详细解答:

Discord

观看关于如何设置恐怖主题配乐的指南:

  https://www.youtube.com/watch?v=L5ew7yguK2Q

恐怖主题配乐使用的语法:

查看代码
# ==========================================
# 通用设置
# ==========================================
[universal]
server_nbt_sync = ["warden_spawn_tracker"]

# ==========================================
# 事件 (触发器)
# ==========================================
[[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:3}}"]

[[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)。
    • 注意:将鼠标悬停在下拉列表中的文件上即可预览音频。
  5. 点击“保存”(Save),然后点击“重新加载”(Reload) 以应用配置。

使用自定义音频文件:

  1. 使用 GUI 打开“音频”(Audios) 文件夹。
  2. 将自定义的 .ogg 文件(如果您想保持更有条理,也可以创建子文件夹)放入指定目录。
  3. 使用标准的“注册音频”(Register Audio) 流程将音轨链接到事件。

GUI 面板概览:

  • 通用 (Universal): 管理全局适用于所有新创建事件的默认参数值。事件特定参数将覆盖通用设置。
  • 事件 (Events): 处理自定义事件的创建及其各自参数的配置。
  • 音频 (Audios): 管理单个音轨的配置设置。
  • 同步组 (Sync Groups): 提供使用 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 内的顺序事件将继承先前活动音轨的精确播放时间戳。适用于共享相同节奏/布局的分层或多阶段音频文件。

音频轨参数:

点击展开
  • 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"]:允许绕过中断标志并暂停该音轨的专属事件名称列表,无论优先级如何。

特定事件类型和约束:

  • 生物 (Mobs): 基于实体距离激活。

    点击展开
    • resource_name = ["minecraft:zombie", "category:monster", "regex:.*zombie.*", "player:Name"]:要监视的目标实体 ID、标签或通配符。
    • nbt_match = "{IsBaby:1b}":评估实体必须拥有的字符串匹配 NBT 属性。
    • 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":将激活限制为当前处于玩家视线范围内的实体。
  • 击杀 (Kill): 基于实体死亡激活。

    点击展开
    • resource_name = ["minecraft:ender_dragon"]:被击杀的特定实体类型。
    • attacker_name = ["minecraft:player"]:需要给予最后一击的实体类型。
    • nbt_match = "{...}", detection_range = 128.0, require_fov = "Spotted":与生物事件类似地应用约束。
  • 物品栏 (Inventory): 当物品存在于特定物品栏位置时激活。

    点击展开
    • 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,则强制要求同时拥有所有顺序列出的物品,而不是任意单个物品。
  • 玩家 (Player): 评估玩家的确切内部状态。

    点击展开
    • 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 条件。
  • 区域 (Zones): 基于固定坐标的体积触发。

    点击展开
    • min_x = -50 / max_x = 50 / min_y = 64 / max_y = 120 / min_z = -50 / max_z = 50:建立一个永久性的 3D 地理边界框,严格要求基于坐标的激活。
  • 袭击 (Raid): 评估掠夺者袭击变量。

    点击展开
    • min_wave = 1 / max_wave = 5:对活跃的掠夺者袭击波次级别强制设置上下限。
    • status = "active"/"victory"/"loss"/"stopped"/"any":验证特定的袭击进度状态。
  • 统计 (Statistic): 评估内部玩家统计追踪。

    点击展开
    • 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 参数进行评估,提供标准字符串匹配数组。

    点击展开
    • 维度默认值:["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 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 键切换内置的调试屏幕。调试屏幕作为一个活动覆盖层,可帮助您配置参数,了解模组如何计算优先级、哪条音轨正在播放,以及哪些参数在运行时强制影响音轨行为。