Audit pass 2: correct hooks, utilities, localization and module pages
- isNegaBetter makes NEGATIVE values win (the unlimited sentinel), not
lower ones; highest still wins among non-negatives. Also documents the
lowercase-key requirement, the -1-on-no-match return, and the int cast
that breaks getGroupValueDouble for fractions.
- Vault helpers are null-safe and return empty values rather than
failing. Conversely the engine's hook getters CAN be null even with the
plugin installed, since WorldGuard/Citizens/MythicMobs are hooked only
from the PluginEnableEvent path.
- PlayerUT.setExp adds to the current total rather than setting it;
setTotalExperience is the absolute form.
- LocUT.getFirstGroundBlock is not what /unstuck uses.
- MsgUT.isJSON checks for Codex's inline {json:} markup, not chat
components. sendTitles is deprecated.
- Debugger gates warn and err as well as log, and writes to System.out.
- Corrected EffectUT, RangeUtil, Zipper, NamespaceResolver and the
SoundUT/EnumUT rationale (registry-backed Keyed, not renamed constants).
- StringUT.replace returns a copy; the previous examples were no-ops.
- Localization: documents the two independent message systems sharing one
file, that language selection keys off general.lang rather than the
documented core.lang, and that the general.* set is never localised.
- Chat module does not persist data at all; documents the name-truncation
and reset bugs.
- Scoreboard module registers no boards of its own; /board list is
per-player; /board show requires lowercase and always reports failure.
- Join/interact: delays are cumulative, PlaceholderAPI is not expanded,
material and as are matched case-sensitively and fail silently, and
there is no click-type filter.
- Configuration: bungee_id is a server label not a channel, debug is
inert, removeBoatOnExit returns the boat to the player,
locale.world-names has no consumers, command-cooldown-message is
mccore-only, unstuck keys have no defaults.
Audit pass 1: correct permission prefix, data folder, and reload behaviour
Findings from a source audit of the wiki's factual claims.
- Permission prefix is codexcore., not codex. The plugin's declared name
is CodexCore (plugin.yml name: ${project.name}, module <name>), so
getNameRaw() yields codexcore. codex.stuck is unaffected: it is a
hardcoded literal.
- The onInteract bypass node is general.oninteract.bypass. The shipped
config.yml comment naming core.oninteract.bypass is itself wrong.
- Data folder is plugins/CodexCore/, not plugins/Codex/. Corrected on
every page.
- /stuck has no executor bound; only /unstuck works, and on Paper the
label does not exist at all. Documented as a known defect.
- /codex reload does not re-read config.yml from disk on the engine; it
re-applies the in-memory document. Restart is required for any change.
- core.lang is injected but never consumed; general.lang is the key that
selects the language file.
- Derived permission nodes are undeclared and fall back to Bukkit's
op-only default rather than declaring one.
- Wildcard grants depend on the permission plugin; Codex registers no
parent permissions.
Mark mccore-derived features as deprecated
Everything under studio.magemonkey.codex.mccore is legacy ProMCCore code
and should not be used in new setups or new plugin code.
- Chat Module and Scoreboard Module pages get deprecation banners and are
grouped separately in the sidebar and on Home
- Features.chat-enabled / scoreboards-enabled documented as deprecated,
with the sample config now showing them disabled
- file-timings noted as read only by the legacy config layer, so it has
no effect on JYML-based configs
- Developer Getting Started now documents JYML as the config API and
flags getConfigFile/registerConfig as returning the deprecated mccore
Config type
- Added a legacy-package table mapping each mccore subpackage to its
current replacement, including the mccore.commands vs codex.commands
naming overlap
Expand wiki from single page to full documentation set
The wiki previously consisted of one Home page covering a stale command
list and a config.yml dump. This replaces it with 20 pages covering the
plugin as it actually exists.
Corrections to previously documented content:
- /corereload no longer exists; the command is /codex reload
- command-aliases default is codex,codexengine,codexcore
- bungee_id default is codexcore
- documented previously missing keys: file-timings, action-bar-legacy
New server-owner pages: Installation, Configuration, Commands,
Permissions, Join and Interact Commands, Chat Module, Scoreboard Module,
Localization, Version Support.
New developer pages: Developer Getting Started, Actions Engine, Item
Providers, Menus and GUIs, Compat and NMS, Hooks, Events, Utilities.
Adds _Sidebar.md and _Footer.md for persistent navigation.