pack: v0.32.0 — FTB Quests + XMod Compat + Ranks; restrictive travel design

Mods added (Phase 0a substrate for the bnstoolkit economy work):
  - FTB Quests 2101.1.25 (progression quest UI for Phase 5+)
  - FTB XMod Compat 21.1.8 (KubeJS hooks for FTB Chunks/Quests events)
  - FTB Ranks 2101.1.3 (tier system via permission nodes)

Design revision: restrictive travel.

This is a Create Aeronautics pack — the journey is the point. Removed
all instant-teleport perks from the tier ladder. Players get one
starter Waystone and use it for spawn↔base; further travel means
building airships, trains, vehicles. Pressure on real movement is
intentional.

Removed perks: sethomes, /back after death.
Removed system: the full sethome subsystem (commands, SavedData,
cooldowns) from the bnstoolkit mod scope.

Tier table reduced from 10 columns to 8: cost, wilderness chunks,
plot slots, daily bounties, shop fee, chat colour, join broadcast.

Mod phasing collapsed from 7 phases to 6 (M2 sethome system removed,
later phases shift up).

Future perk dimensions list updated with two waystone-related
candidates (slot cap, XP cost reduction) as the natural travel-
progression hooks for later tier-perk revisions.

Verified live: all 3 mods discovered + loaded, port 25565 binds,
no FATAL/Crashed/Exception lines in startup log. Server resumed
to 0.32.0 cleanly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Matt
2026-06-06 23:22:47 +00:00
parent 367056e2ba
commit 9eb8f540c4
3 changed files with 82 additions and 83 deletions
+22 -64
View File
@@ -27,7 +27,6 @@ side of the design.
- Mixins into FTB Chunks' map UI for spawn-plot cost overlay, hover tooltips, and click-to-purchase popups
- Custom HUD render layer for quest progress (replaces stacked vanilla bossbars)
- Data persistence for plot ownership (server-side, saved with world)
- Sethome system (`/sethome`, `/home`, `/delhome`, `/listhomes`) since the pack has no other sethome mod
- Network packets for client↔server state sync
- Admin commands: `/bnstoolkit reload`, debugging commands
- Config-driven tier perks (`tiers.json`) and plot definitions (`plots.json`)
@@ -39,6 +38,7 @@ side of the design.
- Numismatics direct integration (lives in KubeJS — mod calls KubeJS commands to debit/credit)
- FTB Quests integration (FTB Quests handles its own UI for the progression campaign)
- FTB Ranks admin (FTB Ranks handles permissions directly; mod just reads them)
- **Sethome / `/back` / fast-travel features** — explicitly removed. The pack uses **Waystones** as the only travel mechanic. Restrictive travel is a design feature for a Create Aeronautics pack: airships, trains, and vehicles are the intended way to cover distance.
---
@@ -110,17 +110,12 @@ bnstoolkit/
│ │ └── ChunkButtonMixin.java
│ ├── server/
│ │ ├── command/
│ │ │ ── BnsToolkitCommand.java /bnstoolkit reload, debug
│ │ │ ├── SethomeCommand.java /sethome, /home, etc.
│ │ │ └── BackCommand.java /back
│ │ │ ── BnsToolkitCommand.java /bnstoolkit reload, debug
│ │ ├── data/
│ │ │ ├── PlotRegistry.java loads plots.json
│ │ │ ── PlotOwnership.java SavedData, plot owner UUIDs
│ │ │ ├── SethomeData.java SavedData, per-player homes
│ │ │ └── DeathLocations.java transient, /back support
│ │ │ ── PlotOwnership.java SavedData, plot owner UUIDs
│ │ ├── event/
│ │ │ ├── PlayerJoinHandler.java tier-based join broadcast
│ │ │ ├── PlayerDeathHandler.java remember death location for /back
│ │ │ └── ChatColourHandler.java tier-based chat name colouring
│ │ └── net/
│ │ └── (packet implementations — see §6)
@@ -308,14 +303,12 @@ the `ServerPlayer` in the handler).
| Data | Storage | Lifetime |
|---|---|---|
| Plot ownership | `bnstoolkit:plots` — vanilla NeoForge `SavedData` attached to overworld | Persists with world. Authoritative source. |
| Sethomes | `bnstoolkit:sethomes` — per-player attached data | Persists with world |
| Death locations (for `/back`) | In-memory only, evicted after teleport or on logout | Transient |
| Quest state | KubeJS-managed JSON at `world/data/bns_economy/quests/<uuid>.json` | Not the mod's concern — the mod only reads via packets |
| Tier configuration | `config/bnstoolkit/tiers.json` (hot-reloadable) | Until edited |
| Plot definitions | `config/bnstoolkit/plots.json` (hot-reloadable via `/bnstoolkit reload`) | Until edited |
Plot ownership and sethomes are server-authoritative. Clients only
get views via packets — they never write to these stores directly.
Plot ownership is server-authoritative. Clients only get views via
packets — they never write to these stores directly.
---
@@ -335,12 +328,10 @@ Defines the 13-tier ladder. Hot-reloadable.
"perks": {
"wildernessChunks": 9,
"plotSlots": 0,
"sethomes": 1,
"dailyBountySlots": 3,
"shopFeeDiscount": 0,
"chatColour": "grey",
"joinBroadcast": "none",
"backAfterDeath": false
"joinBroadcast": "none"
}
},
/* ... 12 more tiers ... */
@@ -459,29 +450,7 @@ the Plot Purchase Popup shows the slot count and disables the
button in the plot-detail screen (opens when they click their own
plot in the map). Releases the slot. Refund: 50% of purchase price.
### 11.3 Sethomes
**What it does:** how many `/sethome <name>` locations a player can
save. `/home <name>` teleports there; `/listhomes` lists; `/delhome <name>`
removes.
**Implementation:** the pack currently has no sethome mod. We build
it in bnstoolkit:
- `/sethome <name>` saves current player position + world + name
- `/home <name>` teleports (validates dimension load)
- `/listhomes` shows owned homes
- `/delhome <name>` removes
- Cap enforced from the player's tier (`tiers.json``sethomes`)
- Unlimited = represented as `-1` in the JSON
**Cooldown:** 30-second cooldown between teleports to prevent
combat-evasion. Configurable in `tiers.json` per-tier (low tiers
have longer cooldown).
**Edge case:** moving a sethome out of a now-claimed plot or a
private base is allowed — sethomes are positional, not contextual.
### 11.4 Daily bounty slots
### 11.3 Daily bounty slots
**What it does:** how many bounties a player can have ACTIVE
simultaneously. Once the slot is freed (by completion or cancel),
@@ -495,7 +464,7 @@ and grey out the Accept button when at cap.
active slots until you turn it in. This is intentional — pushes
players to actually visit the NPC to claim.
### 11.5 Shop fee discount
### 11.4 Shop fee discount
**What it does:** reduces the "merchant cut" deducted when you sell
items at the Bazaar's NPC sell shop. The Bazaar charges a base 25%
@@ -515,7 +484,7 @@ and computes effective payout. Rounded down to nearest integer.
apply this fee — those are direct peer transactions, no Bazaar
middleman. The fee only applies to the official Bazaar sell shop.
### 11.6 Chat colour
### 11.5 Chat colour
**What it does:** the player's name in chat appears in this colour,
visible to everyone. Visual rank marker.
@@ -545,7 +514,7 @@ the coloured name, in a distinct colour (probably bright yellow or
white-bold). Sovereign + Founder is visually busy but acceptable —
only one player on the server will have both.
### 11.7 Join broadcast
### 11.6 Join broadcast
**What it does:** when the player logs in, this controls what message
goes to everyone else on the server.
@@ -577,29 +546,19 @@ goes to everyone else on the server.
dispatches the appropriate message. Particle/sound effects are
server-side commands (`/particle`, `/playsound`).
### 11.8 `/back` after death
**What it does:** the `/back` command teleports the player to where
they last died. Tiers without this perk get "You don't have access
to /back yet" if they try.
**Implementation:** mod listens to `LivingDeathEvent` for players,
stores `(world, x, y, z, timestamp)` in `DeathLocations` (in-memory
only, evicted on logout or after `/back` use). `/back` command
verifies tier perm + reads the entry.
**Cooldown:** 60 seconds. Prevents combat reinsertion.
**Edge case:** dying again clears the previous death location.
You only get one `/back` per death. Logging out clears it too —
intentional, to prevent abuse.
### 11.9 Future perk dimensions (not in V1, but easy to add later)
### 11.7 Future perk dimensions (not in V1, but easy to add later)
Architecture supports adding new perk columns in `tiers.json`
without code changes (the schema is open-ended). Candidates for
later expansion:
- **Waystone slot cap** — limit how many waystones a player can place
and/or own. Starter waystone is granted; higher tiers unlock 2nd,
3rd, etc. Cleanest in-theme perk for a Create Aeronautics pack
where restrictive travel is intentional.
- **Waystone XP cost reduction** — vanilla Waystones charges XP per
teleport. Tier-based discount on this cost (or eventual exemption
for Sovereign).
- **Particle trail** — high tiers leave a visible particle wake when
walking
- **Custom join sound** — different sound effect per tier on login
@@ -647,11 +606,10 @@ Aligned with the economy doc's Phase 0c (mod scaffolding):
|---|---|
| **M0** | Gradle project, mod metadata, FTB Library dep wired, network channel registered, empty placeholder for each screen class. Builds + loads cleanly into the running pack. |
| **M1** | Tier system: TierConfig loads from `tiers.json`, `TierUpgradeScreen` works, perks applied via FTB Ranks promotion command. Founder cosmetic prefix. Chat colour. Join broadcast at all tiers. |
| **M2** | Sethome system: `/sethome`, `/home`, `/delhome`, `/listhomes`, `/back`. SavedData persistence. Per-tier cap enforcement. |
| **M3** | Plot system: `PlotRegistry` + `PlotOwnership`, FTB Chunks mixins, `PlotPurchaseScreen`. KubeJS integration for spur debit. |
| **M4** | Quest UI: `QuestLogScreen`, `BountyBoardScreen`, `QuestProgressHud`. Network packets between KubeJS bounty engine and the mod. |
| **M5** | Shop browser: `ShopBrowserScreen`. |
| **M6** | Polish — animations, sound effects, particle effects for high tiers, theming pass on all screens. |
| **M2** | Plot system: `PlotRegistry` + `PlotOwnership`, FTB Chunks mixins, `PlotPurchaseScreen`. KubeJS integration for spur debit. |
| **M3** | Quest UI: `QuestLogScreen`, `BountyBoardScreen`, `QuestProgressHud`. Network packets between KubeJS bounty engine and the mod. |
| **M4** | Shop browser: `ShopBrowserScreen`. |
| **M5** | Polish — animations, sound effects, particle effects for high tiers, theming pass on all screens. |
Each phase is independently shippable as a `1.x.0` release of the
mod jar.
+25 -17
View File
@@ -83,27 +83,35 @@ Every player has a Civic rank. Higher rank unlocks perks. Players spend spurs at
The ladder is intentionally long (13 tiers) so endgame ranks feel rare and aspirational. Top tiers represent months of dedicated play; Sovereign is "you've finished the game."
| # | Title | Cost to reach | Wilderness chunks | Plot slots | Sethomes | Daily bounties | Shop fee | Chat colour | Join broadcast | `/back` |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | **Peasant** | free (starter) | 9 | 0 | 1 | 3 | 0% | grey | — | — |
| 2 | **Farmer** | 200 | 18 | 0 | 1 | 3 | 0% | grey | — | — |
| 3 | **Citizen** | 750 | 35 | 1 | 2 | 3 | 0% | white | — | — |
| 4 | **Merchant** | 2,500 | 60 | 1 | 3 | 4 | -2% | yellow | — | ✓ |
| 5 | **Knight** | 6,500 | 100 | 2 | 4 | 4 | -5% | green | simple | ✓ |
| 6 | **Baron** | 15,000 | 150 | 2 | 5 | 5 | -7% | cyan | simple | ✓ |
| 7 | **Viscount** | 35,000 | 220 | 3 | 6 | 5 | -9% | blue | fancy | ✓ |
| 8 | **Earl** | 75,000 | 300 | 3 | 8 | 6 | -11% | purple | fancy | ✓ |
| 9 | **Marquess** | 150,000 | 400 | 4 | 10 | 6 | -13% | gold | fancy | ✓ |
| 10 | **Duke** | 300,000 | 525 | 5 | 12 | 7 | -15% | orange | epic | ✓ |
| 11 | **Archduke** | 700,000 | 700 | 6 | 16 | 7 | -17% | red | epic | ✓ |
| 12 | **Grand Duke** | 1,500,000 | 900 | 7 | 20 | 8 | -19% | bright red | epic + particles | ✓ |
| 13 | **Sovereign** | 10,000,000 | 1,500 | 10 | unlimited | 10 | -25% | rainbow | epic + spectacular | ✓ |
| # | Title | Cost to reach | Wilderness chunks | Plot slots | Daily bounties | Shop fee | Chat colour | Join broadcast |
|---|---|---|---|---|---|---|---|---|
| 1 | **Peasant** | free (starter) | 9 | 0 | 3 | 0% | grey | — |
| 2 | **Farmer** | 200 | 18 | 0 | 3 | 0% | grey | — |
| 3 | **Citizen** | 750 | 35 | 1 | 3 | 0% | white | — |
| 4 | **Merchant** | 2,500 | 60 | 1 | 4 | -2% | yellow | — |
| 5 | **Knight** | 6,500 | 100 | 2 | 4 | -5% | green | simple |
| 6 | **Baron** | 15,000 | 150 | 2 | 5 | -7% | cyan | simple |
| 7 | **Viscount** | 35,000 | 220 | 3 | 5 | -9% | blue | fancy |
| 8 | **Earl** | 75,000 | 300 | 3 | 6 | -11% | purple | fancy |
| 9 | **Marquess** | 150,000 | 400 | 4 | 6 | -13% | gold | fancy |
| 10 | **Duke** | 300,000 | 525 | 5 | 7 | -15% | orange | epic |
| 11 | **Archduke** | 700,000 | 700 | 6 | 7 | -17% | red | epic |
| 12 | **Grand Duke** | 1,500,000 | 900 | 7 | 8 | -19% | bright red | epic + particles |
| 13 | **Sovereign** | 10,000,000 | 1,500 | 10 | 10 | -25% | rainbow | epic + spectacular |
**Travel philosophy:** this is a Create Aeronautics pack — the journey is the point. We deliberately do **not** give players sethomes, `/back`, or other instant-teleport conveniences. The intended travel system is **Waystones** (mod already in pack):
- Players get **one waystone** at the start of the game. It anchors their base.
- They can teleport between spawn ↔ their own waystone(s).
- Beyond that, real travel means building airships, trains, vehicles — the actual gameplay.
This is restrictive by design. We can layer **waystone-related perks** into the tier ladder in a later revision (e.g. "tier N unlocks 2nd waystone slot", or "tier M reduces waystone XP cost"). For V1 the ladder stays as above and travel pressure remains intentionally high.
**Notable shape choices:**
- **Knight (tier 5)** is the gentry threshold — first colored chat (green), first join broadcast, first `/back` after a meaningful jump in plot slots
- **Knight (tier 5)** is the gentry threshold — first colored chat (green), first join broadcast, meaningful jump in plot slots
- **Duke → Archduke jump** is the late-game wall (300k → 700k, ~2.3×) — Archduke is the start of "I've really committed to this server" territory
- **Sovereign is dramatic** — 6.7× the Grand Duke cost. Real "finished the game" status. -25% shop fee is a step-change leap; unlimited everything; spectacular join effects.
- **Sovereign is dramatic** — 6.7× the Grand Duke cost. Real "finished the game" status. -25% shop fee is a step-change leap; spectacular join effects.
Numbers are first-pass calibration. The full perk table lives in a single JSON (`config/bnstoolkit/tiers.json`) that's hot-reloadable via `/bnstoolkit reload`. Easy to tune any column without code changes.