pack: KubeJS tidying + admin commands, bump to 0.20.0
Tidying pass on the KubeJS suite before plot system V1 lands. Sets up
the file structure + conventions + diagnostics so the larger plot
system has a clean foundation.
Changes:
1. NEW kubejs/README.md
File layout doc + conventions: logging prefix [bns/<module>],
persistent-data key naming (bns* prefix), one concern per file,
performance discipline (O(1) lookups, no polling).
2. Split economy_policy.js -> recipes_waystones.js + recipes_numismatics.js
Single-concern files. recipes_waystones removes ALL waystones
crafting (welcome.js distributes the only allowed waystone instead).
recipes_numismatics removes the 5 coin-denomination crafts.
3. NEW kubejs/server_scripts/bns_admin.js
/bns admin subcommands for OP diagnostics:
- info calling player's flags+counts
- waystone-count <player> read stored count
- waystone-set <player> <n> override stored count
- reset-welcome <player> clear bnsWelcomeGranted -- replays
the welcome grant on next login
Registered via ServerEvents.commandRegistry with Brigadier tree,
permission level 2 (OP). No performance cost (operator-triggered only).
4. Logging added to waystones_policy.js + welcome.js
Every action prints `[bns/<module>] ...` so server logs can be
filtered with `journalctl ... | grep '\[bns/'`.
Performance discipline applied:
- All event-handler lookups use Set.has (O(1)), not Array.includes
- No periodic tick polling anywhere
- No network calls in event handlers
- console.info is cheap (no string format unless logged)
Bumps to 0.20.0. Plot system V1 follows in v0.21.x as a separate
multi-file submodule under server_scripts/plots/.
This commit is contained in:
@@ -62,6 +62,7 @@ BlockEvents.placed(event => {
|
||||
'That block is disabled. Use a regular Waystone (1 per player) ' +
|
||||
'and build transport between distant bases.'
|
||||
));
|
||||
console.info(`[bns/waystones_policy] denied ${blockId} placement by ${player.username} (banned)`);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -74,9 +75,11 @@ BlockEvents.placed(event => {
|
||||
`You already have ${WAYSTONE_CAP} waystone. Break your existing one ` +
|
||||
`to relocate, or build infrastructure to reach distant bases.`
|
||||
));
|
||||
console.info(`[bns/waystones_policy] denied ${blockId} placement by ${player.username} (already at cap ${current})`);
|
||||
return;
|
||||
}
|
||||
data.putInt('bnsWaystoneCount', current + 1);
|
||||
console.info(`[bns/waystones_policy] +1 waystone for ${player.username} (now ${current + 1})`);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -89,5 +92,6 @@ BlockEvents.broken(event => {
|
||||
const current = data.getInt('bnsWaystoneCount');
|
||||
if (current > 0) {
|
||||
data.putInt('bnsWaystoneCount', current - 1);
|
||||
console.info(`[bns/waystones_policy] -1 waystone for ${player.username} (now ${current - 1})`);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user