Problem
uSkyBlock still relies on legacy string-based placeholder handling, largely shaped around the old MVdW PlaceholderAPI (be.maximvdw.placeholderapi). This leaves a legacy seam in otherwise modern Adventure/MiniMessage-based message flows.
A recent example is ChatLogic: config chat formats now use MiniMessage, but the message still has to be flattened to legacy text so placeholders can be applied, and only then sent with the legacy send path.
Goals
- Review and modernize placeholder provider support.
- Prefer current PlaceholderAPI integrations over legacy MVdW-oriented assumptions.
- Introduce a component-capable placeholder path in our placeholder abstraction.
- Fully switch chat/message formatting that currently gets stuck on legacy send functions because placeholders are still string-based.
Scope
- Evaluate the current placeholder integrations and decide which provider(s) remain first-class.
- Update
PlaceholderHandler / placeholder adapters so component-based replacement is possible where the upstream API supports it.
- Keep legacy string replacement only where a provider or use case genuinely requires it.
- Revisit
ChatLogic and similar message paths once component placeholders are supported.
- Replace remaining
sendLegacy(...) / legacy-string delivery in the affected paths with component-native send(...) where feasible.
Notes
- This follow-up should explicitly include the chat-format path we just modernized in
config.yml.
- The end goal is that configured MiniMessage strings stay as components throughout delivery, instead of being serialized to legacy text just to pass through placeholder replacement.
Problem
uSkyBlock still relies on legacy string-based placeholder handling, largely shaped around the old MVdW PlaceholderAPI (
be.maximvdw.placeholderapi). This leaves a legacy seam in otherwise modern Adventure/MiniMessage-based message flows.A recent example is
ChatLogic: config chat formats now use MiniMessage, but the message still has to be flattened to legacy text so placeholders can be applied, and only then sent with the legacy send path.Goals
Scope
PlaceholderHandler/ placeholder adapters so component-based replacement is possible where the upstream API supports it.ChatLogicand similar message paths once component placeholders are supported.sendLegacy(...)/ legacy-string delivery in the affected paths with component-nativesend(...)where feasible.Notes
config.yml.