This foundational PR completely reorganizes the project to follow a modern "Package by Feature" convention. The new structure improves modularity, clarity, and aligns with best practices for large open-source Java projects.
Key Principles of the New Structure:
- Package by Feature: All distinct features are now located under a single feature package, consolidating the old base, game, and feature directories. Each feature is a self-contained module.
- Clear Top-Level Modules: Introduced a clear separation of concerns at the highest level:
- bootstrap: Plugin lifecycle and service loading.
- core: Essential infrastructure (database, config, profiles).
- common: Shared utilities, replacing the old tool and util packages.
- library: Internal frameworks for commands and menus.
- visual: Player-facing rendering (scoreboard, nametags, etc.).
- adapter: Integrations with external plugins.
- API vs. Internal Separation: Within each module, public APIs (interfaces, data objects) are kept at the root, while implementation details are encapsulated within an internal sub-package.