- Add three-tier legacy material lookup in PatchBukkitLegacy: data-value
map, rename map, and direct name match covering all 462 LEGACY_*
materials
- Fix null player sender by creating PatchBukkitPlayer on-the-fly with
op when Java-side getPlayer returns null
- Add DynamicTestProvider interface and LEGACY_MATERIALS test category
that validates every legacy material converts to non-AIR
- Fix protobuf codegen naming collision with java_outer_classname
- Clean up command_manager: extract get_or_init_command_map helper,
remove debug logging and dead code
- new patchbukkit-test-plugin gradle subproject with 69 tests across
10 categories (server, plugin_manager, command_system, event_system,
permissions, registry, entity, console_sender, unsafe_values, stubs)
- test framework with reflection-based discovery, ansi-colored output,
and ci-parseable [PBTEST_SUMMARY] line
- /pbtest [category|all] command for manual test execution
- fix .unwrap() panic in command_manager.rs register_permission that
crashed the jvm worker thread when plugins declared commands