歌曲播放器

歌曲播放器

一个适用于Minecraft的Fabric模组,可用音符盒播放歌曲。支持midi格式。

工具

SongPlayer

一个 Fabric 模组,用于在 Minecraft 中使用音符盒播放歌曲。

如果您有任何疑问、想分享歌曲,或只是想聊聊这个模组,欢迎加入 Discord 服务器。

如何安装

您可以从 releases 部分获取模组 jar 文件。 该模组需要 Fabric API。

添加歌曲

您可以将 midi 或 NoteBlockStudio 文件放入 .minecraft/songs 文件夹中。 SongPlayer 支持任何有效的 midi 文件以及所有版本的 NBS 文件。

使用客户端

首先,将一些 midi 或 nbs 文件添加到您的歌曲文件夹中,然后在空旷区域使用 $play <文件名>。 文件名或文件路径中不支持空格。 如果您提供了有效的 midi 或 nbs 文件,它将尝试将您的游戏模式设置为创造模式,摆放歌曲所需的音符盒,尝试切换您到生存模式,然后开始播放。

您还可以将歌曲组织到歌曲文件夹中的子目录中。Tab 补全功能可让导航变得轻松。也支持符号链接目录。

命令

所有命令均不区分大小写。

$help

$help <命令>

如果没有提供参数,则列出所有 SongPlayer 命令。 否则,解释指定命令并显示其语法。

$setPrefix <前缀>

别名:$prefix

设置所有 SongPlayer 命令使用的前缀(默认:$)

$play <文件名或 URL>

播放 .minecraft/songs 文件夹中的特定 midi,或者如果指定了 URL,则下载该 URL 处的歌曲并尝试播放。

如果已有歌曲正在播放,新歌曲将添加到队列中。

$stop

停止播放/建造并清空队列。

$skip

跳过当前歌曲并播放下一首。

$goto <分:秒>

跳到歌曲中的指定时间。

$loop

切换歌曲循环播放。

$status

别名:$current

获取当前正在播放歌曲的状态。

$queue

别名:$showqueue

显示队列中的所有歌曲。

$songs

$songs <子目录>

别名:$list

如果没有提供参数,则列出 songs 文件夹中的歌曲。否则,列出指定子目录中的歌曲。

$playlist play <播放列表>

$playlist create <播放列表>

$playlist list [<播放列表>]

$playlist delete <播放列表> <歌曲>

$playlist addSong <播放列表> <歌曲>

$playlist removeSong <播放列表> <歌曲>

$playlist renameSong <播放列表> <旧名称> <新名称>

$playlist loop

$playlist shuffle

创建、编辑、删除或播放播放列表。您也可以切换循环播放或随机播放。

$setCreativeCommand <命令>

别名:$sc

默认情况下,客户端使用 /gamemode creative 进入创造模式。 但是,/gamemode creative 并非在所有服务器上都有效。 如果创造模式命令不同,请使用此命令设置。 例如,如果服务器使用原版命令,请执行 $setCreativeCommand /gamemode creative。

$setSurvivalCommand <命令>

别名:$ss

默认情况下,客户端使用 /gamemode survival 进入生存模式。 但是,/gamemode survival 并非在所有服务器上都有效。 如果生存模式命令不同,请使用此命令设置。 例如,如果服务器使用原版命令,请执行 $setSurvivalCommand /gamemode survival。

$useEssentialsCommands

别名:$essentials、$useEssentials、$essentialsCommands

切换到使用 Essentials 游戏模式命令。

等同于 $setCreativeCommand /gmc 和 $setSurvivalCommand /gms

$useVanillaCommands

别名:$vanilla、$useVanilla、$vanillaCommands

切换到使用原版游戏模式命令。

等同于 $setCreativeCommand /gamemode creative 和 $setSurvivalCommand /gamemode survival

$toggleFakePlayer

别名:$fakePlayer、$fp

切换是否显示一个虚拟玩家来表示您在播放歌曲时的真实位置。播放歌曲时,由于它会自动启用自由视角,您的真实位置将与您视觉上的位置不同。虚拟玩家将显示您实际所在位置。默认情况下,此功能是禁用的。

$setStageType <DEFAULT | WIDE | SPHERICAL>

别名:$setStage、$stageType

设置要建造的音符盒舞台类型。感谢 Sk8kman 和 Lizard16 设计了球形舞台!

  • 默认(Default):方形舞台,最多 300 个音符盒
  • 宽型(Wide):圆柱形舞台,最多 360 个音符盒
  • 球形(Spherical):密集排列的球形舞台,可容纳全部 400 种可能的音符盒

$breakSpeed set <速度>

$breakSpeed reset

设置方块破坏速度(方块/秒)。

$placeSpeed set <速度>

$placeSpeed reset

设置方块放置速度(方块/秒)。

$toggleMovement <swing | rotate>

别名:$movement

切换击打音符盒时是否会挥动手臂并转头看向击打的音符盒。

$setVelocityThreshold <阈值>

别名:$velocityThreshold $threshold

设置低于该阈值的最小力度不播放音符(适用于 midi 和 nbs)。该值必须是 0 到 100 之间的数字。对于歌曲物品,阈值在物品创建时已固化。

$toggleAutoCleanup

别名:$autoCleanup

切换是否在播放结束后自动清理您的舞台并恢复原始方块。

$cleanupLastStage

清理您最近创建的舞台,并尽力将方块恢复到其原始状态。

如果您停止播放然后重新开始播放,记录的修改将被重置。

不会替换流体或门等双格方块,也不会替换方块实体数据。 也可能无法正确处理像火把这样依赖其他方块的方块。

$announcement <enable | disable | getMessage>

$announcement setMessage

设置一个在您开始播放歌曲时发送的公告消息。 使用 setMessage 时,请在歌曲名称所在位置写入 [name]。

示例:$announcement setMessage &6正在播放:&3[name]

$toggleSurvivalOnly

别名:$survivalOnly

启用或禁用仅生存模式,该模式下自动放置音符盒被禁用,自动调音通过右键点击完成。

在此模式下,您必须自己放置所需的乐器。

如果您尝试播放歌曲但条件未满足,它会告诉您每种乐器需要多少个。

$toggleFlightNoclip

别名:$flightNoclip

切换飞行穿墙。启用后,您的本地玩家在播放歌曲时可以穿墙,但仅限于飞行时。

$songItem create <歌曲或 URL>

$songItem setSongName <名称>

别名:$item

将歌曲数据编码为物品。当您右键点击此类物品时,SongPlayer 将自动检测到它是歌曲物品,并询问您是否要播放它。这些物品一旦创建,任何使用所需版本 SongPlayer 的人都可以使用。

它会自动生成自定义物品名称和描述,但这些可以被修改或删除而不影响歌曲数据,因此您可以随意编辑物品。SongPlayer 只查看 SongItemData 标签。

$testSong

一个我在开发期间用于测试的命令。 它按顺序播放所有 400 种可能的音符盒声音。

机制

SongPlayer 放置的音符盒已包含 nbt 和乐器数据,因此无需单独调音每个音符盒。

客户端会在每首歌曲播放前自动检测所需音符盒并自动放置,这使得播放歌曲非常容易。唯一的缺点是您需要能够在创造和生存模式之间切换,我的客户端会尝试自动完成。

播放歌曲时,会启用自由视角。您可以自由移动,但实际上只是移动了镜头,而您的玩家保持在音符盒中心。这是因为只有处于音符盒的触及距离内才能演奏它们,所以您必须站在音符盒中心来演奏,但能在歌曲播放时自由移动仍然很好。

致谢

Ayunami2000:提出了直接放置带有 nbt 数据的音符盒而不是手动调音的概念。

Sk8kman:Songplayer 3.0 的一些改动灵感来自他们对 SongPlayer 的 fork。最值得注意的是他们另类的舞台设计,但也促使我实现了播放列表和可切换动作。

Lizard16:被 Sk8kman 提及为球形舞台设计者。