Audit pass 3: rewrite remaining pages from audit findings
Rewrites rather than spot-fixes, since the affected pages had errors
throughout.
Actions Engine: documents that flag names must be lowercase (camelCase
flags are silently ignored), that targets are mandatory and not inherited
across GOTO or actions-on-fail, comparison operators and the EQUALS
default, ~filter semantics, PERMISSION negation, and that VAULT_BALANCE
fails open without Vault. Corrects HOOK (a velocity action, not a plugin
hook), the ~location/~speed/~message/~amount/~name usage columns, and
SELF's parameters. All examples reworked to actually run.
Version Support: replaces the range with the exact version-to-module
table, lists the explicitly rejected versions, and states that an
unsupported version disables the plugin.
Installation: ProMCCore data folder IS migrated automatically; splits
declared soft-dependencies from runtime-only detection; notes the
paper-plugin.yml load-before block is likely inert; corrects the Citizens
and WorldGuard descriptions.
Developer Getting Started: depend is CodexCore, not Codex; the
CodexPlugin example now implements all six abstract methods; hasEditor is
not an override; JYML lives in codex-plugin and loadOrExtract throws a
checked exception; getConfigFile appends .yml itself and its documented
auto-save does not exist; mccore.gui has no replacement.
Menus: documents the getPages off-by-one and the negative-modulo blank
page, that nav buttons need placing per page, that onClose must call
super, and that YAMLMenu is not a Menu subclass.
Compat and NMS: ArmorUtil is an armor-trim shim and a no-op before
1.19.4, unrelated to ArmorEquipEvent. Adds the missing NMS methods, the
NBTAttribute parameter type, and the codex-core dependency step.
Events: adds DROP and CONSUME, marks DEATH as never fired, notes BROKE
cannot be cancelled, that only outbound packets are intercepted and
EngineServerPacketEvent is never fired, and that IEvent/ICancellableEvent
are abstract classes which ArmorEquipEvent does not use.
Item Providers: isCustomItem and isCustomItemOfId are currently unusable;
getMainItemType is effectively never null; Nexo's exception behaviour
differs; documents both stripPrefix methods.
Also cross-references the casing trap between the two ~flag: value;
parsers, which disagree.
ff6d501
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.
1eb01e0
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.
b6a0383
Correct Item Providers ID format and availability guidance
Three errors in the original page:
- ItemsAdder keys are not NAMESPACE_id. ItemsAdderItemType.getID()
returns ItemsAdder's own namespaced ID, so a full key stacks two
namespaces: ITEMSADDER_<ia_namespace>:<item>. Oraxen and Nexo ids are
flat. Documented with a diagram and a note that the bare form does not
resolve.
- Namespace matching was described as case-insensitive. Manager lookup
uses providers.containsKey against uppercased keys, so a lowercase
prefix silently falls through to the vanilla provider. Prefix
stripping inside providers IS case-insensitive, which masks this, so
the inconsistency is called out explicitly.
- hasProvider was presented as an availability check. VANILLA, ORAXEN
and ITEMSADDER are registered eagerly in init() regardless of whether
those plugins exist, so it returns true without Oraxen installed. Only
NEXO is conditional, registered by NexoHK. Replaced with catching
MissingProviderException from assertEnabled().
Also documents that vanilla lookups accept a redundant VANILLA_ prefix
and normalise spaces and hyphens to underscores.
43f0778
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
70a568b
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.
df68f10