econ: sell shop + bounty engine + player commands + FTB Ranks 13-tier #67

Merged
Matt merged 2 commits from feature/v0.33.0-economy-foundation into main 2026-06-06 23:55:43 +00:00
Owner

Foundation economy stack — fully command-driven, layered later by the custom UI mod.

What ships tonight:

  • 13-tier civic ladder via FTB Ranks (Peasant to Sovereign) with per-tier chunk allowance, plot slot count, daily bounty slots, shop fee discount, chat colour
  • /bns tier upgrade — player pays spurs, gets promoted automatically (KubeJS calls ftbranks add)
  • /bns sell — Bazaar sell shop with diminishing returns + tier fee discount, 9 commodities
  • /bns bounty — daily-rotating bounty engine, 20 bounties, kill-tracking via EntityEvents.death, 24h cooldown
  • /bns plot — updated existing plot system to support multi-plot ownership based on tier slot count
  • /bns me, /bns help — discoverability + status
  • FTB Ranks ranks.snbt — 13 ranks with ftbchunks permissions

Villager trade rebalance: blocked tonight. KubeJS 2101.7.2 ships no villagerTrades event. Either rolled into the custom mod or solved via a third-party mod (deferred).

Custom mod UI: deferred to a session where user can iterate visually. The KubeJS substrate built tonight is exactly the backend the mod will sit on top of.

Verified: all scripts load with 0 errors, server boots clean.

Foundation economy stack — fully command-driven, layered later by the custom UI mod. What ships tonight: - **13-tier civic ladder** via FTB Ranks (Peasant to Sovereign) with per-tier chunk allowance, plot slot count, daily bounty slots, shop fee discount, chat colour - **/bns tier upgrade** — player pays spurs, gets promoted automatically (KubeJS calls `ftbranks add`) - **/bns sell** — Bazaar sell shop with diminishing returns + tier fee discount, 9 commodities - **/bns bounty** — daily-rotating bounty engine, 20 bounties, kill-tracking via EntityEvents.death, 24h cooldown - **/bns plot** — updated existing plot system to support multi-plot ownership based on tier slot count - **/bns me, /bns help** — discoverability + status - **FTB Ranks ranks.snbt** — 13 ranks with ftbchunks permissions Villager trade rebalance: blocked tonight. KubeJS 2101.7.2 ships no villagerTrades event. Either rolled into the custom mod or solved via a third-party mod (deferred). Custom mod UI: deferred to a session where user can iterate visually. The KubeJS substrate built tonight is exactly the backend the mod will sit on top of. Verified: all scripts load with 0 errors, server boots clean.
Matt added 2 commits 2026-06-06 23:55:43 +00:00
KubeJS module that owns the 13-tier civic ladder per economy doc §4a.
Authoritative source for TIER_CONFIG (per-tier perks: cost, wilderness
chunks, plot slots, daily bounty slots, shop fee discount, chat
colour, join broadcast).

Player tier stored as int in player.persistentData.bnsTier; default
1 (Peasant), set on first login.

Admin commands (op level 2):
  /bns admin tier get <player>
  /bns admin tier set <player> <1-13>
  /bns admin tier list

Module-local pattern (KubeJS Rhino runs scripts in strict mode -- no
globalThis, no bare-assignment globals). Other economy scripts will
duplicate TIER_CONFIG and use player.persistentData.bnsTier directly
to read tier rather than trying to import. See feedback-kubejs-rhino-
gotchas memory.

FTB Ranks will mirror this once the bnstoolkit mod ships -- ranks
will carry the FTB Chunks permission nodes. For now the NBT is the
single source of truth and admin promotes manually with /bns admin
tier set.

Verified: server boots clean, KubeJS loads with 0 errors. First-join
hook initialises new players to tier 1.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Foundation economy stack — fully command-driven, ready for the custom
UI mod to layer on top later. Built tonight as a single feature batch.

KubeJS scripts:
  pack/overrides/kubejs/server_scripts/economy/
    00_tier_system.js       — 13-tier ladder + admin commands
    02_sell_shop.js         — /bns sell, 9 items, DR + tier-fee
    03_bounty_engine.js     — /bns bounty, 20 bounties, state machine
    04_player_commands.js   — /bns help, /bns me, /bns tier upgrade

plots.js: updated to support multi-plot ownership based on tier slots
  - plotsOwnedBy() returns list, slot cap from TIER_PLOT_SLOTS table
  - /bns plot release now requires plot id (multiple plots possible)
  - /bns plot mine added

FTB Ranks server config:
  pack/overrides/world/serverconfig/ftbranks/ranks.snbt
  13 ranks with ftbchunks.max_claimed_chunks scaling per tier:
    Peasant 9 -> Sovereign 1500 (chunks)
    Peasant 1 -> Sovereign 200 (force-loaded)
  Name format colour codes match the design doc.

Player command surface (everything callable from chat or Telegram bridge):
  /bns help                          full command listing
  /bns me                            tier, balance, plots, bounties
  /bns tier upgrade                  pay spurs, advance to next tier
  /bns plot list|info|buy|release|mine
  /bns sell list|<item> [count]
  /bns bounty list|active|accept|cancel|turnin|completed
  /bns admin tier get|set|list       (op level 2)
  /bns admin info|waystone-*|reset-welcome  (pre-existing)

Tier upgrade flow:
  1. Player runs /bns tier upgrade
  2. KubeJS takes spurs from inventory
  3. KubeJS sets player.persistentData.bnsTier += 1
  4. KubeJS runs `ftbranks add <player> <rank>` so FTB Ranks applies
     the permission nodes (chunk allowance auto-flips)

Cross-file scope: KubeJS 2101 runs all server_scripts in shared Rhino
global scope. Constants (TIER_CONFIG, COIN_VALUES, bnsTier object,
shared functions like giveCoins/countCoins/takeCoins) are declared
once in their owning file and referenced from siblings. Don't redeclare.

Blocked tonight (deferred):
  - Villager trade rebalance: KubeJS 2101.7.2 doesn't ship a
    villagerTrades event. ServerEvents only exposes command/loaded/
    recipes/registry/tags/tick/unloaded. Verified by grepping the
    KubeJS jar's ServerEvents class. No KubeJS-villager-trade addon
    on Modrinth for NeoForge 1.21.1. Either build into the custom
    mod or add a third-party trade-overrides mod (research pending).
  - Custom mod UI screens: no Java toolchain on host, and these
    need visual iteration with the user anyway.

Verified live: server boots clean, all 4 economy scripts log loaded,
port 25565 binds, no EcmaError or EvaluatorException in KubeJS log.
FTB Ranks reload via rcon confirms "Ranks reloaded from disk!"

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Matt merged commit 572671f1d4 into main 2026-06-06 23:55:43 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: minecraft/brass-and-sigil#67