promotional bannermobile promotional banner

BS-CustomJukebox Bedrock Extension

Bedrock Edition support for BS-CustomJukebox via Geyser/Floodgate. Bridges custom disc sounds and items to Bedrock players.
Back to Files

CustomJukebox-BedrockExtension-2.2.0.jar

File nameCustomJukebox-BedrockExtension-2.2.0.jar
Uploaded
Aug 25, 2026
Downloads
6
Size
348.2 KB
File ID
8735050
Type
R
Release
Supported game versions
  • 26.2
  • 26.1.2
  • 26.1.1
  • 26.1
  • 1.21.11
  • 1.21.10
  • 1.21.9
  • 1.21.8
  • 1.21.7
  • 1.21.6
  • 1.21.5
  • 1.21.4

What's new

v2.2.0

Requires CustomJukebox 3.5.0+.

Fixed

  • Geyser accepted the listeners but never called them — no custom items were registered and the pack was never handed over, silently. Registration went through eventBus().register(owner, listener), which scans for @Subscribe; Geyser and Floodgate both ship that annotation class unrelocated and in different versions, so the copy this plugin resolves need not be the one Geyser's scanner compares against. Subscriptions now name the event class explicitly (eventBus().subscribe(owner, Event.class, handler)), which takes annotation identity out of the picture. Measured on a server with both plugins installed: the annotation path subscribed nothing, the explicit one registers every disc and the pack. Verified live on Paper 26.1.2 with Geyser 2.11.2 and Floodgate — Geyser's custom item count rose by the number of discs, the pack was accepted without a warning, and Bedrock players connected through the pack download. The startup log reports how many subscriptions Geyser actually holds, and warns with a fallback instruction if the answer is zero.
  • A regenerated pack never reached anyone. The manifest always claimed version 1.0.0 with the same UUIDs, so Bedrock kept serving every client the copy it had cached the first time. The pack version now tracks a fingerprint of its content (discs, sound keys, sound and texture files) and counts up whenever that changes, recorded in bedrock-pack/pack-revision.json. Unchanged content keeps its version, so nobody re-downloads for nothing.
  • Bedrock playback volume followed the debug flag. Sounds played at full volume with debug: true and at the configured volume otherwise. The player's effective volume — personal volume included — is now used in both cases.
  • Custom items were registered in a way that could never match. The definition was keyed to a model identifier no disc item carries, and had no predicate to tell discs sharing a base item apart. Definitions are now keyed to the base item's own model and matched by an exact predicate on the disc id in custom_model_data.
  • Only the start of a jukebox playback was bridged. Ambient zones, radio, players walking into range and /cjb music on all delivered the Java sound key to Bedrock clients — silence. The bridge now hooks CustomJukebox's per-player delivery events, which cover every path.
  • Bedrock players were cut out of their own playback. They were removed from the listener set to suppress the Java sound, which also cost them progress bar, /cjb skip and stop handling. Delivery is now cancelled per sound instead, so they stay ordinary listeners.
  • soundPrefix and autoDeliverPack did nothing. Both were documented and neither was read. soundPrefix now names the Bedrock sounds in the pack and in playback alike; autoDeliverPack hands the generated .mcpack straight to Geyser.
  • Textures were counted by re-scanning the source folder instead of counting what was actually copied, so unreadable files still showed up in the summary.
  • ignoreCancelled was set on a non-cancellable event, the manifest javadoc claimed a format version the code doesn't write, and stack traces went to printStackTrace instead of the plugin logger.

Added

  • Automatic pack delivery — with autoDeliverPack (default on) the generated pack is registered with Geyser at startup; copying it into packs/ by hand is no longer needed. /cjb-bedrock status shows whether Geyser took it.
  • Folia support (folia-supported: true). All scheduling goes through CustomJukebox's scheduler abstraction, so the extension now loads on the same servers the main plugin does.