Данные могли устареть: источник временно недоступен, показан кэш.

BS CustomJukebox
Fully-featured Paper 1.21+ jukebox plugin with custom music discs, disc fragments, GUI support, and WorldGuard/GriefPrevention integration.
- Загрузки
- 730
- Подписчики
- 4
- Обновлён
- 4 июля 2026 г.
- Лицензия
- MIT
Опубликован 8 декабря 2025 г.
CustomJukebox
CustomJukebox is a fully-featured Minecraft Paper plugin for 1.21+ that adds advanced jukebox functionality, fully implemented in Java. It lets you create and manage custom music discs, fragments, and a jukebox GUI without replacing any vanilla discs.
✨ Features
🎵 Custom Music Discs
- Create custom music discs without overriding vanilla discs
- Use custom sounds via resource packs (
.oggformat) - Fully customizable metadata: title, author, lore, CustomModelData
- Duration tracking: discs automatically stop after their configured play time
- JSON-based configuration via
disc.jsonfor easy management
🧩 Fragment System
- Disc fragments: collect fragments to craft complete discs
- Creeper drops:
- Skeleton kills Creeper → fragment drop
- Player kills Creeper → configurable chance (e.g. 5%)
- Loot integration:
- Fragments can appear in dungeons, bastions, end cities, and more
- Shapeless crafting:
- 9 fragments = 1 complete disc (fully configurable)
🎨 GUI & Interaction
- Jukebox GUI:
- Right-click an empty jukebox to open a disc selection GUI (if enabled)
- Admin GUI:
/cjb guifor admin access to all discs
- Simple interaction:
- Hold a disc in your hand and right-click a jukebox to start playback
🦜 Parrot Dance System
- Parrots dance in sync with custom music
- Configurable radius (default: 3 blocks)
🌍 Plugin Integrations
- WorldGuard:
- Region-based jukebox usage depending on
USEflag
- Region-based jukebox usage depending on
- GriefPrevention:
- Claim-based jukebox permissions (requires container trust)
- Full, working integrations – not just placeholders
📦 Requirements
- Server: Paper 1.21+ (or compatible Paper/Spigot fork)
- Java: 21+
- Optional Plugins:
- [WorldGuard] – region-based jukebox permissions
- [GriefPrevention] – claim-based jukebox permissions
🚀 Installation
- Download the latest
CustomJukebox-x.x.x.jar. - Place the JAR into your server’s
plugins/folder. - Start the server. The plugin will generate:
config.jsondisc.jsonlanguages/folder
- Configure
config.jsonanddisc.jsonto fit your needs. - Set up and host your resource pack (see below).
- Run
/cjb reloador restart the server to apply changes.
⚙️ Configuration
All main settings are handled in config.json. Example:
{
"settings": {
"enabled": true,
"language": "en",
"enable-gui": true,
"debug": false
},
"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
},
"parrots": {
"enable-dancing": true,
"dance-radius": 3
},
"integrations": {
"worldguard": true,
"griefprevention": true
}
}
Ченджлог
3.1.0Релиз26.1.1, 26.1.2, 26.2 · 4 июля 2026 г.
[3.1.0] - 2026-07-04
Changed
- Unified release: The 2.x (Minecraft 1.21.x) and 3.0.0 (Minecraft 26.x) lines are merged into a single version. One jar now supports Paper/Folia 1.21.4 through 26.x.
- Built against Paper API 1.21.4 with
api-version: '1.21'and Java 21 bytecode — loads on 1.21.4+ servers (Java 21) and 26.x servers (Java 25) alike. - Contains all fixes from the 2.x line (2.1.5–2.2.1) plus the 3.0.0 modernizations (component-based CustomModelData, metadata API replacement).
- Built against Paper API 1.21.4 with
- Example resource pack:
max_formatraised to[84, 0]so the pack is accepted by Minecraft 26.x clients (format 84) while staying compatible with 1.21.9+. - Debug logging: Volume debug output now includes distance, sound/player coordinates, world check, and estimated max range to help diagnose audibility issues.
Fixed
- Debug logging: Cross-world distance calculation no longer throws an exception when a
GLOBALplayback reaches players in other worlds (previously triggered a misleading "FAILED TO PLAY SOUND" error with debug mode enabled). Distance is now logged asN/A (different world)instead. - Debug logging: Numbers are formatted locale-independently (always
12.5instead of12,5on e.g. German systems).
3.0.0Релиз26.1, 26.1.1, 26.1.2 · 6 мая 2026 г.
[3.0.0] - 2026-05-02
Added
- Public API Events: New event system for companion plugins
DiscPlaybackStartEvent— Cancellable event fired when a disc starts playing. Exposes disc, location, and mutable listener set.DiscPlaybackStopEvent— Fired when playback stops, withStopReasonenum (MANUAL, DURATION_END, BLOCK_BREAK, PLUGIN).DiscRegisteredEvent— Fired when a new disc is created via GUI or config.DiscRemovedEvent— Fired when a disc is removed, includes a snapshot of the deleted disc.
- API method:
CustomJukeboxAPI.getPluginDataFolder()— Allows companion plugins to locate disc sound files.
Changed
- PlaybackManager: Now fires
DiscPlaybackStartEventbefore playing sounds (allows cancellation and listener modification) andDiscPlaybackStopEventon stop. - DiscManager: Now fires
DiscRegisteredEventon disc creation andDiscRemovedEventon disc deletion.
Technical
- New package:
de.boondocksulfur.customjukebox.api.eventswith 4 event classes - All events follow standard Bukkit event patterns (HandlerList, static getHandlerList)
- Zero behavior change for existing users — events are no-ops without listeners
- Foundation for the new BS-CustomJukebox Bedrock Extension
2.2.1Релиз1.21.9, 1.21.10, 1.21.11 · 4 мая 2026 г.
[2.2.1] - 2026-05-03
Fixed
- UpdateChecker: Now filters by game version via Modrinth API so users only see updates compatible with their Minecraft version. Prevents cross-version update notifications (e.g., 26.1 updates shown to 1.21.x servers).
2.2.0Релиз1.21.9, 1.21.10, 1.21.11 · 2 мая 2026 г.
[2.2.0] - 2026-05-02
Added
- Public API Events: New event system for companion plugins
DiscPlaybackStartEvent— Cancellable event fired when a disc starts playing. Exposes disc, location, and mutable listener set.DiscPlaybackStopEvent— Fired when playback stops, withStopReasonenum (MANUAL, DURATION_END, BLOCK_BREAK, PLUGIN).DiscRegisteredEvent— Fired when a new disc is created via GUI or config.DiscRemovedEvent— Fired when a disc is removed, includes a snapshot of the deleted disc.
- API method:
CustomJukeboxAPI.getPluginDataFolder()— Allows companion plugins to locate disc sound files.
Changed
- PlaybackManager: Now fires
DiscPlaybackStartEventbefore playing sounds (allows cancellation and listener modification) andDiscPlaybackStopEventon stop. - DiscManager: Now fires
DiscRegisteredEventon disc creation andDiscRemovedEventon disc deletion.
Technical
- New package:
de.boondocksulfur.customjukebox.api.eventswith 4 event classes - All events follow standard Bukkit event patterns (HandlerList, static getHandlerList)
- Zero behavior change for existing users — events are no-ops without listeners
- Foundation for the new BS-CustomJukebox Bedrock Extension
2.1.6Релиз1.21.9, 1.21.10, 1.21.11 · 1 мая 2026 г.
[2.1.6] - 2026-05-01
Fixed
Critical: sound/soundKey field mismatch — Discs created or edited via GUI wrote
"soundKey"to disc.json, but the loader only read"sound". After a reload, the custom sound was silently lost.saveDiscToConfig()andupdateDiscField()now consistently write"sound"(the official field name)parseDiscFromJson()now reads"sound"with"soundKey"as backward-compatible fallback- DiscEditorGUIv2 now passes
"sound"instead of"soundKey"toupdateDiscField() - Existing disc.json files with
"soundKey"entries will be read correctly (no manual migration needed)
ParrotDanceListener NPE: Added null-check for
getWorld()before callinggetNearbyEntities(). Prevents crash when jukebox is in an unloaded world.JukeboxPlayback thread-safety: Changed internal
listenersset fromHashSettoConcurrentHashMap.newKeySet(). Prevents potentialConcurrentModificationExceptionwhen players join/leave during playback.Config values without bounds validation: All numeric config getters now clamp to valid ranges:
volume: 0.0–4.0creeper-drop-chance/loot-chance: 0.0–1.0max-loot-discs/fragments-per-disc: 1–64jukebox-hearing-radius: 1–512dance-radius: 1–32
Removed
- ColorUtil class deleted: Deprecated since v2.1.0, internally fully replaced by
AdventureUtil. No remaining usages in plugin code. Removed unused import fromDiscEditorGUIv2.
Changed
- README overhauled: Resource Pack documentation
- Replaced misleading
pack_format: 34for "Minecraft 1.21.x" with accurate per-version format table - Added modern
min_format/max_formatexamples for Minecraft 1.21.9, 1.21.10, and 1.21.11 - Added GitHub URL warning (don't use
/blob/URLs for server resource packs) - Added ZIP structure documentation (correct vs incorrect root layout)
- Added troubleshooting checklist for "Resource Pack hash is outdated" error
- Replaced misleading
- Example resource pack updated:
pack.mcmetanow usesmin_format: [69, 0]/max_format: [75, 0](compatible with MC 1.21.9–1.21.11) - Example resource pack README fixed:
- Added note that template does not include real
.oggfiles - Replaced outdated
supported_formatsreference withmin_format/max_formatexplanation - Unified sound key examples to consistently use
music_disc.prefix - Fixed incorrect
config.ymlreference →server.propertiesasresource-pack-sha1
- Added note that template does not include real
2.1.5Релиз1.21.9, 1.21.10, 1.21.11 · 18 апреля 2026 г.
[2.1.5] - 2026-04-18
Fixed
Permission system completely overhauled: Players were incorrectly blocked in areas without explicit WorldGuard flags
customjukebox.useis now actually checked (previously only defined but never used)- WorldGuard now only checks for explicit
use deny- Areas without the flag allow jukeboxes - Specific error messages instead of generic “no-permission” (Region/Claim/Permission separated)
- New permission
customjukebox.bypass.protectionto bypass WorldGuard/GriefPrevention (default: OP)
Various bug fixes: Fixed several potential crashes and race conditions
- Thread safety for the playlist queue (synchronized methods)
- Safer file saving with
Files.move()instead of delete+rename (prevents data loss on Windows) - Null checks for metadata access, WorldGuard locations, and Adventure API colors
- ArrayIndexOutOfBounds protection in the Disc Editor for corrupt states
- UpdateChecker: JSON null safety and resource leak fix
Minor improvements:
- Mute state is now persisted in config.json (survives server restart)
- Location-based HashMap key replaced with string key (more reliable cooldown)
- Tab completion now shows subcommands even with empty input
- Category validation in the Creation Wizard (warning for non-existent categories)
- More efficient item distribution (a stack instead of a loop)
- Plugin tasks are now properly terminated on onDisable
Changed
- Paper API 1.21.11: Plugin now compiles and runs against Paper 1.21.11
- Resource Pack updated:
pack_formatset to 75 (1.21.11), sound namespace corrected - Default Configs:
versionfield added to config.json and disc.json - README: Detailed permissions documentation with tables and descriptions
Added
- Permission
customjukebox.bypass.protection(default: OP, included incustomjukebox.admin) - New error messages in all 4 languages:
no-permission-jukebox,no-permission-region,no-permission-claim
2.1.4Релиз1.21.9, 1.21.10, 1.21.11 · 14 апреля 2026 г.
[2.1.4] - 2026-04-14
Fixed
- False update notification: Fixed plugin incorrectly showing "Update to 2.1.3 available" despite already running 2.1.3
- Gradle's
processResourcesdid not track the project version as an explicit task input - Added
inputs.property("version", project.version)to ensure version changes always trigger resource re-processing
- Gradle's
2.1.3Релиз1.21.9, 1.21.10, 1.21.11 · 11 апреля 2026 г.
[2.1.3] - 2026-04-11
Fixed
Message formatting: All chat messages now use MessageUtil with Adventure API
- Replaced all raw
sender.sendMessage(String)/player.sendMessage(String)calls - Replaced hardcoded section sign color codes with ampersand codes
- Affects all commands, listeners, and GUI components
- Replaced all raw
Error handling: Replaced all
printStackTrace()calls with properLogger.log()usage- CJBCommand, ConfigManager, DiscManager, IntegrationManager
Give/Fragment command bug: Fixed commands giving items even with invalid amount input
- Added missing
returnafter NumberFormatException in GiveSubcommand and FragmentSubcommand
- Added missing
Vanilla sound overlap: Fixed volume fluctuations during custom disc playback
- Added
jukebox.stopPlaying()to stop server-side vanilla playback - Prevents Jukebox block entity from periodically re-triggering vanilla sound
- Applied to both manual disc insertion and GUI-based insertion
- Added
Комментарии
Загружаем…