Spark exports active Bedrock behavior-pack metadata through upstream WorldStatistics.data_packs (field 5).
Endstone does not currently expose the active behavior-pack stack through its public plugin API. Spark therefore uses a filesystem compatibility fallback:
- Resolve the active world from
server.propertieslevel-name, falling back to the Endstone level name when necessary. - Read only
worlds/<level>/world_behavior_packs.jsonto determine the selected behavior-pack UUIDs and versions. - Resolve those references against
manifest.jsonfiles beneath:worlds/<level>/behavior_packs(source = "world")behavior_packs(source = "server")development_behavior_packs(source = "server")
- Export the manifest header name and description, the filesystem source, and
builtin = false.
Only manifests containing a behavior module (data or script) are eligible. Installed but inactive packs are not exported. Missing or malformed manifests are skipped independently so one broken pack does not suppress other valid active packs.
Resource packs are deliberately excluded. Spark does not read world_resource_packs.json, does not scan resource_packs, and rejects resource-only manifests even if they are misplaced beneath a behavior-pack directory. Bedrock resource packs must not be represented as upstream WorldStatistics.DataPack entries.
The filesystem view cannot reliably identify implicit/built-in packs and can only approximate the runtime-selected stack. When Endstone exposes a stable public API for the active behavior-pack stack, EndstoneMetadataProvider should prefer that API and map each selected pack directly to:
namedescriptionsource(builtin,world,server, or another runtime source)builtin
The filesystem reader should then remain only as a compatibility fallback for Endstone versions without the public API. Spark must not bind to Endstone's internal Bedrock ResourcePackStack ABI to obtain this metadata.