Simple Voice Chat Music Addon

Add music function for Simple Voice Chat mod

473

Quick challenge

How far can you run before the mobs catch you?

Simple Voice Chat Music Addon

Music

Music is a server-side Fabric mod that streams URL music through Simple Voice Chat. It is built for shared server music with queues, saved playlists, YouTube playlist import, player targeting, personal opt-out, and YouTube OAuth support through Lavaplayer/youtube-source.

Features

- Streams music through Simple Voice Chat static audio channels. - Supports YouTube, YouTube Music, YouTube playlist links, and other Lavaplayer-supported remote sources. - Expands pasted YouTube playlist links into individual songs. - Shows title, creator, requester, duration, queue position, and playback diagnostics. - Cleans YouTube topic-channel creator names, so `Artist - Topic` displays as `Artist`. - One shared server-wide music stream. - Global queue with skip, repeat, and shuffle. - Persistent saved playlists. - Forward/backward seeking by seconds. - Player targeting and exclusion controls. - Player self-service `/music leave` and `/music join`. - Simple Voice Chat "Music" volume category for personal client volume. - Global server volume control.

Requirements

- Fabric Loader. - Simple Voice Chat installed on the server. - Simple Voice Chat installed on clients that want to hear the stream. - A Minecraft version supported by the mod file you install.

This mod controls music on the server, but players only hear it through their Simple Voice Chat connection.

Installation

1. Install Fabric Loader on the server. 2. Install Simple Voice Chat on the server. 3. Install this mod in the server `mods` folder. 4. Players who want to hear the stream must install Simple Voice Chat on their clients. 5. Start the server and run `/music help`.

Quick Start

```text /music now /music play https://www.youtube.com/watch?v=VIDEO_ID 10 /music queue add https://music.youtube.com/watch?v=NEXT_VIDEO_ID /music queue add https://www.youtube.com/playlist?list=PLAYLIST_ID /music queue list ```

If YouTube asks for login or blocks playback, complete the OAuth device login shown in the server log.

How It Works

1. A player runs `/music play`, queues a URL, or starts a saved playlist. 2. Lavaplayer loads the URL. 3. YouTube links are handled by `youtube-source`. 4. The mod sends encoded audio frames into a Simple Voice Chat static audio channel. 5. Selected listeners hear the same stream.

There is one active global stream per server. Starting a new track with `/music play` replaces current playback and clears the runtime queue.

YouTube OAuth

YouTube may block automated playback clients. This mod supports YouTube OAuth through `youtube-source`.

Config file:

```text config/music.json ```

Important fields:

```json { "youtubeOAuthEnabled": true, "youtubeOAuthRefreshToken": "", "youtubeOAuthSkipInitialization": false } ```

First login flow:

1. Start the server. 2. Run `/music play <youtube-url>`. 3. Check the server log for the Google device login code. 4. Complete the login in a browser. 5. The refresh token is saved to `config/music.json`.

The YouTube login is global for the server, not per player. Keep `music.json` private because it can contain an OAuth refresh token. Using a secondary YouTube account is recommended.

Commands

Run:

```text /music help /music help queue /music help playlist /music help target /music help volume ```

Everyone

```text /music help /music now /music queue list /music leave /music join ```

- `/music leave` opts the player out of the music stream. - `/music join` removes the personal opt-out. - Personal volume is controlled with the Simple Voice Chat client "Music" slider.

Playback

All players:

```text /music play <url> /music play <url> <volume> /music stop /music pause /music resume /music skip /music forward <seconds> /music backward <seconds> /music volume <1-100> /music repeat off /music repeat one /music repeat queue /music shuffle on /music shuffle off ```

Behavior:

- `/music play <url>` starts immediately and clears the runtime queue. - `/music play <youtube-playlist-url>` starts the first playlist track and queues the rest. - `/music play <url> <volume>` starts playback and sets global volume from `1` to `100`. - `/music forward <seconds>` seeks ahead in the current track. - `/music backward <seconds>` seeks back in the current track. - `/music repeat one` repeats the current track. - `/music repeat queue` loops through the queue. - `/music shuffle on` chooses queued tracks randomly.

Queue

All players:

```text /music queue add <url> /music queue remove <index> /music queue clear /music skip ```

Everyone can view:

```text /music queue list ```

Queue behavior:

- The runtime queue is not saved after server restart. - `/music queue add <url>` appends a track. - `/music queue add <youtube-playlist-url>` expands the playlist and appends each song. - Queue metadata loads in the background, so a new item can briefly show as `title loading`. - YouTube creator names ending in ` - Topic` are displayed without that suffix. - If metadata fails, the URL remains queued and playback can still try it.

Example output:

```text [Music] Queue: 1. Song Title - Creator Name | 3:22 | requested by PlayerName | added 16:21:05 2. title loading: https://www.youtube.com/watch?v=... | requested by PlayerName ```

Saved Playlists

All players:

```text /music playlist list /music playlist create <name> /music playlist delete <name> /music playlist show <name> /music playlist add <name> <url> /music playlist remove <name> <index> /music playlist play <name> /music playlist queue <name> ```

Playlist behavior:

- Playlists are saved in `config/music-playlists.json`. - Playlist names are single words. - `/music playlist add <name> <url>` adds one track. - `/music playlist add <name> <youtube-playlist-url>` imports every song from the YouTube playlist. - `/music playlist play <name>` replaces current playback and starts the playlist. - `/music playlist queue <name>` appends the saved playlist after the current queue.

Example:

```text /music playlist create lobby /music playlist add lobby https://www.youtube.com/watch?v=SONG_1 /music playlist add lobby https://www.youtube.com/playlist?list=PLAYLIST_ID /music playlist play lobby ```

Targeting

All players:

```text /music target all /music target only <players> /music target add <players> /music target remove <players> /music target show /music exclude add <players> /music exclude remove <players> /music exclude clear ```

Targeting order:

1. Connected Simple Voice Chat clients. 2. Include filter if set. 3. Exclude filter. 4. Player personal opt-out from `/music leave`.

Personal opt-out always wins. `/music target all` does not force opted-out players to listen.

Examples:

```text /music target all /music target only Steve /music target add Alex /music exclude add Steve /music exclude clear ```

Config Files

Main config:

```text config/music.json ```

Stores YouTube OAuth settings, repeat/shuffle settings, target filters, exclusions, and player opt-outs.

Playlist config:

```text config/music-playlists.json ```

Stores saved playlist names and track entries.

Example playlist shape:

```json { "playlists": { "lobby": [ { "url": "https://www.youtube.com/watch?v=SONG_1", "title": "Song Title", "creator": "Creator Name", "requestedByName": "server", "durationMillis": 202000 } ] } } ```

Use commands instead of editing playlist files while the server is running.

URL Support

Good candidates:

- Normal YouTube watch links. - YouTube Music watch links. - YouTube and YouTube Music playlist links. - Direct audio file URLs supported by Lavaplayer. - Some direct video URLs with extractable audio.

Less reliable:

- Spotify page links. - Private or age-restricted videos. - Region-blocked videos. - YouTube links blocked by bot detection.

Unsupported URLs should fail with a chat error instead of crashing the server.

Command Access

All players can use every `/music` command, including commands that change server playback state:

- Play, stop, pause, resume, skip, forward, backward. - Queue add/remove/clear. - Playlist create/delete/add/remove/play/queue. - Target and exclude filters. - Repeat, shuffle, global volume.

Self-service and view commands:

- `/music help` - `/music now` - `/music queue list` - `/music leave` - `/music join`

Troubleshooting

Music Says Playing, But Nobody Hears It

Run:

```text /music now /music target show ```

Check:

- Simple Voice Chat is connected. - The voice target/listener count is not `0`. - The player did not run `/music leave`. - The player is not excluded by `/music exclude`. - The client Simple Voice Chat "Music" slider is not at `0%`. - The global volume is not too low.

YouTube Says Sign In Or Bot Check

Enable OAuth in `config/music.json`, restart, then run:

```text /music play <youtube-url> ```

Complete the device login shown in the server log. After that, `youtubeOAuthRefreshToken` should be saved.

Queue Names Show As Loading Or Unknown

Metadata is loaded asynchronously. Wait a few seconds and run:

```text /music queue list ```

If metadata still shows unknown, Lavaplayer could not resolve metadata for that URL. The mod will still try to play the URL when its turn starts.

A Player Does Not Hear Music After Target All

Check if the player opted out:

```text /music target show ```

The player can rejoin with:

```text /music join ```

Personal opt-out has priority over target filters.

Notes

- This mod does not download songs to disk. - YouTube playback can still fail if YouTube blocks a client or changes player behavior. - YouTube topic-channel authors are cleaned for display; for example, `Artist - Topic` becomes `Artist`. - OAuth improves YouTube reliability but should use a secondary YouTube account. - Server-side per-player volume is not implemented; use the Simple Voice Chat client "Music" slider for personal volume.

ADS