CustomJukebox-BedrockExtension-2.2.0.jar
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.0with 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 inbedrock-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: trueand 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 onall 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 skipand stop handling. Delivery is now cancelled per sound instead, so they stay ordinary listeners. soundPrefixandautoDeliverPackdid nothing. Both were documented and neither was read.soundPrefixnow names the Bedrock sounds in the pack and in playback alike;autoDeliverPackhands the generated.mcpackstraight 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.
ignoreCancelledwas set on a non-cancellable event, the manifest javadoc claimed a format version the code doesn't write, and stack traces went toprintStackTraceinstead of the plugin logger.
Added
- Automatic pack delivery — with
autoDeliverPack(default on) the generated pack is registered with Geyser at startup; copying it intopacks/by hand is no longer needed./cjb-bedrock statusshows 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.
This mod has no additional files

