CustomJukebox
Real music on your Minecraft server. CustomJukebox turns jukeboxes into a full music system: custom discs with your own .ogg tracks, playlists, and ambient zones that play background music automatically as players walk into an area β all without replacing a single vanilla disc.
Built for Paper and Folia, configured in JSON, and translated into four languages.
π§ Bedrock players?
CustomJukebox streams audio from a Java resource pack, which Bedrock clients handle differently. If you run Geyser/Floodgate, install the companion plugin:
It hooks into the public API events this plugin fires, so no extra configuration is needed on the CustomJukebox side β install both and they work together.
β¨ Features
π΅ Custom Music Discs
- Add your own music discs without overriding vanilla ones
- Real audio via resource pack (
.ogg) β full quality, not note blocks
- Customisable title, author, lore and CustomModelData
- Automatic stop at the configured track length
- Managed in
disc.json, or entirely in-game through the admin GUI
π» Ambient Zones & Server Radio
Background music that starts on its own for everyone who enters an area β no disc, no command, no redstone.
- Four area types: radius, cuboid, WorldGuard region, or global (a server-wide radio station reaching every player in every world)
- Priority decides which zone wins where several overlap β a lobby zone can override the radio
- Two playback modes:
synced (everyone hears the same track together β ideal for events) or individual (each player hears complete tracks from the moment they arrive β ideal for lobbies)
- Height range: cover the full column (default) or bound the zone in Y as a true 3D sphere/box
- Loop and shuffle, reshuffled on every lap
- Per-zone volume and playlist
πΆ Playlists & Categories
- Group discs into playlists and play them in sequence
- Shuffle and repeat modes (
loop, repeat-one)
- Playback range per playlist: normal, whole world, server-wide, or a custom radius in blocks
- Categories to keep large disc collections organised
π€ Player Controls
Every player gets these by default β no permission setup required.
/cjb music on|off β opt out of plugin music entirely, saved across sessions
/cjb music volume β a personal volume, independent of the server setting
/cjb skip β skip the track you are currently hearing
/cjb favorite β keep a personal favourites list and play it as a playlist; discs can also be favourited by shift-clicking them in the disc menu
- Progress bar β an optional boss bar showing the current track and how far into it you are
π§© Fragment System
- Collect disc fragments and craft them into complete discs (shapeless, count configurable)
- Creeper drops: guaranteed when a skeleton kills a creeper, configurable chance for player kills
- Loot integration: fragments appear in dungeons, bastions, end cities, trail ruins and more
π₯οΈ In-Game Administration
- Jukebox GUI β right-click an empty jukebox to pick a disc
- Admin panel (
/cjb gui) β create, edit and delete discs, playlists and categories without touching a file
- Step-by-step creation wizards with input validation
- Zone editor GUI that tells you exactly why a zone is not playing yet
- Every list paginates, so large collections stay fully reachable
- Delete confirmations on destructive actions
π Integrations & Compatibility
- Paper 1.21.4 β 26.x and Folia (region-threaded scheduling, auto-detected)
- WorldGuard β respects the
USE flag, and can bind ambient zones to regions
- GriefPrevention β respects container trust
- PlaceholderAPI β 16 placeholders (disc in hand, volume, mute state, totals, and more)
- Multi-language: English, German, Spanish, Italian β fully translated, editable
- Developer API with four Bukkit events (
DiscPlaybackStart/Stop, DiscRegistered/Removed)
- bStats metrics (opt-out)
π¦ Parrot Dancing
Parrots react to custom music within a configurable radius.
π Commands
For everyone
| Command |
Description |
/cjb music <on|off|toggle|volume <0-4|reset>|status> |
Your personal music settings |
/cjb skip |
Skip the track you are hearing |
/cjb favorite <add|remove|toggle|list|play|clear> |
Manage and play your favourites |
/cjb gui |
Open the disc menu |
/cjb list [page] Β· /cjb info <disc> |
Browse discs |
For admins
| Command |
Description |
/cjb zone <...> |
Create and manage ambient zones and radio stations |
/cjb playlist <...> |
Create and play playlists |
/cjb play <disc> [loop] [global|world|<radius>] |
Play a disc at your position |
/cjb give Β· /cjb fragment |
Hand out discs and fragments |
/cjb volume Β· /cjb mute Β· /cjb unmute |
Server-wide volume |
/cjb stop Β· /cjb reload |
Stop playback / reload configuration |
Aliases: /customjukebox, /jukebox, /jb
π Permissions
| Permission |
Default |
Grants |
customjukebox.use |
everyone |
Use jukeboxes |
customjukebox.gui Β· .list Β· .info |
everyone |
Browse discs |
customjukebox.music Β· .favorite Β· .skip |
everyone |
Personal settings, favourites, skip |
customjukebox.admin |
op |
All admin commands (parent) |
customjukebox.zone Β· .playlist Β· .play Β· .stop Β· .volume |
op |
Individual admin permissions |
customjukebox.give Β· .fragment Β· .reload |
op |
Item handout and reload |
customjukebox.bypass.protection |
op |
Ignore WorldGuard/GriefPrevention checks |
π¦ Requirements
- Server: Paper 1.21.4+ or Folia (also runs on 26.x)
- Java: 21 or newer
- A resource pack containing your
.ogg files β required for custom sounds to be audible
- Optional: WorldGuard, GriefPrevention, PlaceholderAPI, Geyser/Floodgate (with the Bedrock Extension)
π Quick Start
- Drop the JAR into
plugins/ and start the server. It creates config.json, disc.json, zones.json and the languages/ folder.
- Put your
.ogg files into a resource pack and register them in sounds.json.
- Host the pack and set
resource-pack plus resource-pack-sha1 in server.properties.
- Create a disc β easiest through
/cjb gui β Admin Panel β Disc Management, or by editing disc.json.
/cjb reload
Lobby music in four commands
/cjb playlist create lobby-mix
/cjb playlist add lobby-mix my_track
/cjb zone create lobby # centred on where you stand
/cjb zone radius lobby 60
/cjb zone playlist lobby lobby-mix
The zone is enabled and looping by default. For a station covering the entire server, use /cjb zone global <id> instead of a radius.
βοΈ Configuration
config.json β every value shown is the default:
{
"settings": {
"enabled": true,
"language": "en",
"enable-gui": true,
"debug": false,
"max-backups": 5,
"backup-min-interval-minutes": 5
},
"discs": {
"creeper-drops": true,
"creeper-drop-chance": 0.05,
"dungeon-loot": true,
"trail-ruins-loot": true,
"max-loot-discs": 2,
"loot-chance": 0.15,
"enable-crafting": true,
"fragments-per-disc": 9
},
"playback": {
"volume": 4.0,
"default-loop": false,
"jukebox-hearing-radius": 64,
"show-title": true,
"show-actionbar": true,
"show-progress-bar": true,
"progress-update-ticks": 20
},
"parrots": {
"enable-dancing": true,
"dance-radius": 3
},
"ambient-zones": {
"enabled": true,
"sound-category": "RECORDS"
},
"integrations": {
"worldguard": true,
"griefprevention": true
}
}
Ambient zones live in zones.json, discs and playlists in disc.json, per-player settings in players.json. All files are written asynchronously and replaced atomically, so saving never stalls the server tick and an interrupted write cannot corrupt a config.
π Links