Commit Graph

115 Commits

Author SHA1 Message Date
Matt 28a02d0ced Merge pull request 'jei_hides: Rhino-compatible (no array spread)' (#26) from fix/jei-hides-rhino-spread into main 2026-05-23 16:18:51 +00:00
Matt d5fd2c97e9 jei_hides: use .concat instead of array-spread (Rhino compat). 0.21.0 -> 0.21.1.
KubeJS uses Rhino as its JS engine, which doesn't support array-spread
syntax (`[...a, ...b]`). The line `[...WAYSTONE_ITEMS, ...COIN_ITEMS]
.forEach(...)` threw EvaluatorException: syntax error at jei_hides.js:46
on client launch, surfacing the KubeJS client script errors dialog.

Fix: use Array.prototype.concat() which is universal JS. Also extracted
the hide-quietly helper into a named function for readability.
2026-05-23 16:18:50 +00:00
Matt ae061a5035 Merge pull request 'v0.21.0: Plot system V1' (#25) from feature/plots-v1 into main 2026-05-23 16:02:05 +00:00
Matt 6264785f2c plots: v1 spawn-commercial-plots system, bump to 0.21.0
/bns plot list|info|buy|release|reload. Single ~316-line file with
clear sections. Hardcoded PLOT_DEFS Map (3 example plots), ownership
state in server.persistentData.bnsPlots, best-effort Numismatics +
FTB Chunks integration (will be verified in playtest). See file
header for full design notes.
2026-05-23 16:01:47 +00:00
Matt 998ec21bb5 Merge pull request 'Fix bns_admin command registration' (#24) from fix/bns-admin-int-range into main 2026-05-23 15:41:34 +00:00
Matt aa881bfc65 bns_admin: drop INTEGER range args (KubeJS wrapper doesn't expose them), validate in handler instead. 0.20.0 -> 0.20.1. 2026-05-23 15:41:34 +00:00
Matt 3cec2cb69b Merge pull request 'v0.20.0: KubeJS tidying + admin commands' (#23) from feature/v0.20.0-tidying into main 2026-05-23 15:40:00 +00:00
Matt c699dcc77b 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/.
2026-05-23 15:39:59 +00:00
Matt f39205404a Merge pull request 'RPO: default-enable CC Recreated pack' (#22) from feature/rpo-default-config into main 2026-05-23 15:32:49 +00:00
Matt b3d46931b2 rpo: ship default-enable config for ComputerCraft Recreated, bump 0.19.5
Resource Pack Overrides config field names extracted directly from the
mod's class files (default_packs + default_overrides confirmed via grep
on the .class strings). Config ships through defaultconfigs/ so it
seeds the player's local config on first run and respects later edits.

The 'default_position: TOP' override puts the ReCreated pack at the top
of the enabled-packs list so it takes precedence over the vanilla
ComputerCraft textures.

If the filename or schema turns out to be off when tested, it's a
one-line follow-up to fix.
2026-05-23 15:32:49 +00:00
Matt 5d0011d4e2 Merge pull request 'Add Resource Pack Overrides + revert server-push' (#21) from feature/resource-pack-overrides into main 2026-05-23 15:27:11 +00:00
Matt c6fb859db8 pack: add Resource Pack Overrides, revert server-push enforcement
Two changes per user direction:
- server.properties is reverted (resource-pack lines cleared, require=
  false). No more server-pushed pack -- no prompt on join, no kick if
  declined, no redundant re-download of a file the launcher already
  shipped.
- Adds resource-pack-overrides (Modrinth's gold-standard "auto-enable
  bundled resource packs" mod, 8.2M dl, client-only). The Computer
  Craft Recreated v1.2.zip already ships in the modpack manifest
  (side=client) so it's already in players' resourcepacks/ folder via
  the launcher -- RPO will be configured to default-enable it.

The RPO config (`pack/overrides/config/resourcepackoverrides-client.toml`
or similar) lands in a follow-up once we've seen the generated format.
For now this commit just gets the mod into the pack. Bumps to 0.19.4.
2026-05-23 15:27:10 +00:00
Matt 86d8f3e80d Merge pull request 'CC recipes: plastic-everywhere + advanced-contains-basic' (#20) from feature/cc-recipes-progression into main 2026-05-23 15:20:21 +00:00
Matt 3e1f5c01ed cc: plastic-everywhere + advanced-contains-basic upgrade chains
Two design changes:

1) Every electronic CC item now requires tfmg:plastic_sheet. Plastic is
   the electrical insulator and gates ALL CC tech behind TFMG's full
   oil chain (crude oil -> naphtha -> distillation -> molten plastic
   -> sheet). Even cable -- you can't lay wires without insulation.

2) Advanced items now embed their Basic counterpart in the recipe:
   - computer_advanced  contains  computer_normal
   - monitor_advanced   contains  monitor_normal
   - wireless_modem_advanced  contains  wireless_modem_normal
   - pocket_computer_advanced contains pocket_computer_normal
   - turtle_advanced    contains  computer_advanced  (which contains
                                  computer_normal -- chained upgrade)

   This makes the progression literal -- you can't skip Basic to make
   Advanced. You upgrade through, paying both costs.

Other tweaks:
- Replaced create:railway_casing with create:industrial_iron_block in
  the Advanced Computer recipe. Railway casing is thematically tied to
  trains, not computing -- creates a weird "build trains to make a
  computer" dependency. industrial_iron_block fits the server-rack
  aesthetic and is a more general Create tier-3 material.
- Added plastic to disk_drive, wired_modem, printer, redstone_relay,
  speaker (recipes that previously skipped it).

Bumps to 0.19.3.
2026-05-23 15:20:20 +00:00
Matt 34e24df0b3 Merge pull request 'Drop orphan pocket_computer_colour recipe' (#19) from fix/cc-pocket-colour into main 2026-05-23 15:12:13 +00:00
Matt ce8304d6cb cc: drop orphan pocket_computer_colour recipe (not a real item, just a state variant of _advanced). Removes startup warning. 0.19.1 -> 0.19.2. 2026-05-23 15:12:12 +00:00
Matt 7eb70bfa78 Merge pull request 'Full CC recipe overhaul (19 items, 5 tiers)' (#18) from feature/cc-recipes-full into main 2026-05-23 15:11:11 +00:00
Matt add5803191 pack: full CC recipe overhaul — 19 items across 5 progression tiers
Expands the v0.19.0 recipe set from 10 to 19 items and builds a deliberate
5-tier progression using richer Create + TFMG materials.

Newly overhauled items:
  T1 - cable (8-output, copper_wire-heavy so bulk-laying is viable)
  T3 - redstone_relay
  T3 - turtle_normal
  T4 - turtle_advanced
  T5 - pocket_computer_normal, _advanced, _colour
  Misc - wired_modem_full (block form, derived from wired_modem)

Existing items reworked with better thematic materials:
  computer_normal/advanced  -> now uses create:brass_casing / railway_casing
                                as the chassis instead of bare plastic
  monitor_normal/advanced   -> nixie_tube for the retro CRT, display_link
                                for the advanced data-binding monitor
  wireless_modem_normal     -> tfmg:electromagnetic_coil is the antenna,
                                copper_wire + aluminum_wire signal lines
  wireless_modem_advanced   -> constantan_spool + large_coil for high-Q
                                tuning -- properly end-game wireless
  disk_drive                -> create:cogwheel for the spinning read head
  speaker / printer         -> copper_sheet / cogwheel for thematic flair

Wire usage is the through-line: copper_wire in T1-T2 (cheap, used in
quantity), aluminum_wire in T3 mid-tier signal lines, constantan_wire
+ constantan_spool in T4 for high-frequency wireless. TFMG's electrical
production now genuinely gates CC progression.

Bumps pack to 0.19.1 (point release — same mod set, expanded scripts).
2026-05-23 15:11:11 +00:00
Matt e74f123896 Merge pull request 'v0.19.0: Easy NPC + CC: Tweaked + recipe overhaul' (#17) from feature/v0.19.0-npc-cc-plots into main 2026-05-23 14:59:55 +00:00
Matt fe5b7ce1ea pack: add Easy NPC + CC: Tweaked + recipe overhaul, bump to 0.19.0
Mods (5 additions):
- Easy NPC 6.16.1 (3 jars: bundle + core + config_ui). Lightweight,
  config-UI-driven NPC mod -- 817k downloads, NOT the heavyweight
  Custom NPCs by Noppes which has no 1.21.1 NeoForge port. Players
  will interact with NPCs at spawn (Plot Office land clerk + future
  shop NPCs) via right-click -> dialogue.
- CC: Tweaked 1.119.0. ComputerCraft tier added for technical displays,
  server stats, and player-built automation. Future plot-system V2
  could use CC monitors as the central kiosk with touch buttons; V1
  uses NPC + signs.
- Computer Craft: ReCreated v1.2 (resource pack, client-only). Styles
  CC's computers + monitors with a brass/wooden Create aesthetic so
  they don't look out of place in the pack.

KubeJS scripts:
- cc_recipes.js: Overhauls 10 CC crafting recipes to require Create
  (electron_tube, precision_mechanism, rose_quartz) + TFMG (plastic
  sheet, steel ingot, silicon ingot). Gates the tech tier behind
  Create+industrial progression. Recipes for cables, peripheral
  blocks, turtles, etc. left at default -- can iterate later.

Plot system V1 deferred to v0.20.0 -- needs its own focused effort
because of the FTB Chunks claim-transfer integration + Numismatics
inventory coin handling. Memory plan already covers the design.
2026-05-23 14:59:55 +00:00
Matt d3a9d4e12a Merge pull request 'Fix Numismatics coin IDs (5 denominations)' (#16) from fix/numismatics-coin-ids into main 2026-05-23 14:18:12 +00:00
Matt 01e1e4a502 pack: correct Numismatics coin IDs (5 denominations, not 4)
The 0.18.0 economy_policy.js named 'numismatics:sundial' which doesn't
exist -- the real registry IDs are spur, bevel, cog, crown, sun. The
KubeJS warning surfaced this at startup:

  Failed to read ingredient from numismatics:sundial:
  Item with ID numismatics:sundial does not exist!

Updates both economy_policy.js (recipe removal) and jei_hides.js (JEI
hide) to use the correct 5-denomination list. Bumps to 0.18.1.
2026-05-23 14:18:11 +00:00
Matt e53b4cc868 Merge pull request 'Economy MVP: Numismatics+Patchouli+welcome flow' (#15) from feature/economy-mvp into main 2026-05-23 14:16:45 +00:00
Matt 2ac4b2f2cd pack: economy MVP -- Numismatics + Patchouli + welcome flow, bump to 0.18.0
Adds the currency layer and the first-join experience.

Mods:
- Create: Numismatics 1.0.20  (currency, vendor blocks, piggy banks)
- Patchouli 1.21.1-93         (kept in pack for future rich manual book)

KubeJS scripts (server_scripts/):
- economy_policy.js  remove ALL Waystones recipes; remove coin recipes
                     only (piggy banks etc. stay craftable for now)
- welcome.js         first-login grant: 1 waystone + vanilla written-book
                     "Brass & Sigil Manual v1" (5 pages: welcome,
                     waystones, money, spawn plots, rules). Per-player
                     flag bnsWelcomeGranted in persistentData gates it.

KubeJS scripts (client_scripts/):
- jei_hides.js       hide all Waystones items + 4 coin denominations from
                     the JEI ingredient list. Combined with the recipe
                     removal players never encounter these items via
                     normal play -- only via the welcome grant or the
                     bank exchange.

The written-book manual is the MVP placeholder. When more content lands
(plot system, dynamic exchange, etc.) it'll be replaced by a proper
Patchouli book authored as a tweak jar -- Patchouli's already in the
lockfile so no mod-add will be needed at that point.
2026-05-23 14:16:45 +00:00
Matt d60c0176dd Merge pull request 'Waystones policy KubeJS (1/player + ban share/portstones)' (#14) from feature/waystones-policy-kubejs into main 2026-05-23 13:40:30 +00:00
Matt b064a9f515 pack: KubeJS Waystones policy (1-per-player + ban share/portstones)
Adds pack/overrides/kubejs/server_scripts/waystones_policy.js which:

- Caps regular waystones at 1 per player. Per-player count is stored in
  player.persistentData and decremented on break (works correctly because
  restrictedWaystones = ["PLAYER"] means only owners can break).
- Bans all 16 sharestone variants. They defeat the "build transport"
  intent (solo pair-teleport) and can be placed just outside a claim
  for stealth proximity access.
- Bans all 16 portstone variants pending separate design review.
- Leaves warp plates and warp scrolls untouched.

Bumps to 0.17.0 so launcher re-syncs.
2026-05-23 13:40:29 +00:00
Matt c29dd2d690 Merge pull request 'Fix gitignore + track Waystones override' (#13) from fix/gitignore-overrides into main 2026-05-23 12:57:42 +00:00
Matt 0bdc48c86f gitignore: scope overrides ignore to mods/, track defaultconfigs/
The previous rule 'pack/overrides/' ignored the whole directory, which
made it impossible to re-include subpaths via ! exception (git's rule).

Narrow the ignore to 'pack/overrides/mods/' -- the only path that
Build-Tweaks.ps1 actually writes -- and drop the broken whitelist
block. Other subdirs under pack/overrides/ (defaultconfigs/, etc.) now
live in git like normal source.

Adds the Waystones override that 0.16.1 attempted (spawnInVillages =
DISABLED). Bumps to 0.16.3 so launcher caches re-sync.
2026-05-23 12:57:41 +00:00
Matt 02e50f2fe5 Merge pull request 'Track pack/overrides/defaultconfigs/ + Waystones override' (#12) from feature/track-defaultconfigs into main 2026-05-23 12:56:13 +00:00
Matt 50007e1109 pack: track pack/overrides/defaultconfigs/ + ship Waystones override
.gitignore previously ignored all of pack/overrides/ because that dir is
the build output of Build-Tweaks.ps1. But defaultconfigs/ inside it holds
hand-written source-of-truth configs that should be in git (otherwise
they don't survive cross-machine deploys). Whitelisting that subdir.

Adds pack/overrides/defaultconfigs/waystones-common.toml -- the same
file the empty 0.16.1 commit was supposed to ship but couldn't because
of the .gitignore rule. Bumps to 0.16.2.

The override changes just one key:
- spawnInVillages: REGULAR -> DISABLED

All other Waystones settings stay at mod default (ACTIVATION visibility,
PLAYER restriction, empty allowedVisibilities) which already provides
the base-intrusion protections we discussed.
2026-05-23 12:56:13 +00:00
Matt d4dfcb1e11 Merge pull request 'Tune Waystones config + ship via defaultconfigs' (#11) from feature/waystones-config into main 2026-05-23 12:55:19 +00:00
Matt 3dc0767a24 pack: tune Waystones config + bump to 0.16.1
Ships an override of waystones-common.toml under pack/overrides/
defaultconfigs/ so first-run installs (clients + fresh servers) get the
intended defaults. NeoForge auto-copies defaultconfigs/<file> into
config/<file> on first run only -- player-tweaked configs after that
are preserved across pack updates.

The only override vs mod-default in this commit:
- spawnInVillages: REGULAR -> DISABLED

Everything else stays at mod default, which already gives the security
posture we want:
- defaultVisibility = ACTIVATION  -> each player must physically visit
  a waystone before they can teleport TO it. Solves the "player B
  teleports into player A's base" concern without a hard per-player
  placement cap (which v21.x dropped).
- restrictedWaystones = [PLAYER]  -> only owners can edit their own
  waystones.
- allowedVisibilities = []        -> no player UI can create global
  waystones; OPs use the /waystone command for server-public ones.

Wild waystones (in the open world, not villages) stay on -- they're
public-good fast travel, not tied to bases.
2026-05-23 12:55:18 +00:00
Matt c996d4edff Merge pull request 'Add Waystones + Balm' (#10) from feature/add-waystones into main 2026-05-23 12:53:27 +00:00
Matt b080dfe325 pack: add Waystones + Balm, bump to 0.16.0
Waystones 21.1.33: fast-travel teleport network.
Balm 21.0.58: required common lib for Waystones (and other BlayTheNinth mods).

Config will be tweaked in a follow-up after the server generates its
default config files. Intended config:
- worldgen village waystones DISABLED
- maxWaystonesPerPlayer = 1
- defaultPrivacy = Private (player-placed)
- OP-placed global waystones via /waystone command
2026-05-23 12:53:26 +00:00
Matt ce28a44e89 Merge pull request 'Add Check-Deps pre-flight (mods.toml ground truth)' (#9) from feature/check-deps-preflight into main 2026-05-23 11:55:38 +00:00
Matt 40dd06b8cf scripts: add Check-Deps pre-flight (mods.toml ground truth)
Adds scripts/Check-Deps.ps1 and wires it into Deploy-Brass.ps1 as a
pre-flight gate when Stage includes Pack. The script parses each lockfile
jar's META-INF/neoforge.mods.toml directly -- the same source the loader
reads at startup -- and refuses to deploy if any [[dependencies]] block
with type=required (default) names a modId that nobody in the pack
provides.

Handles three real edge cases discovered during initial run:

1. Jar-in-jar bundled deps: Create ships Ponder, Registrate, Flywheel
   embedded under META-INF/jarjar/. The script recurses into those and
   counts their modIds as present, since the loader auto-loads them.

2. Language-provider jars (Kotlin for Forge) have no standard mods.toml
   -- they declare via a different mechanism. Tiny slugToImplicitModId
   override map (currently 1 entry) covers them.

3. Non-mod lockfile entries (shaderpacks under shaderpacks/, configs
   under config/, etc.) are skipped explicitly by path prefix check.

Vanilla deps (minecraft, neoforge, forge, fabric, java, javafml, etc.)
are pre-seeded as present.

Jars cached at /tmp/bns-check-deps-cache/<sha1>.jar; second-run cost is
~1.5s. First run downloads ~150MB.

The script would have caught the v0.15.0 -> v0.15.1 incident: Slice &
Dice's jar declares kotlinforforge required in mods.toml even though
Modrinth's dep field only lists Create. The Modrinth-only check (earlier
draft) wouldn't have helped; the mods.toml-based check does.
2026-05-23 11:55:38 +00:00
Matt 06d6a5ef45 Merge pull request 'Hotfix: add Kotlin for Forge (Slice & Dice dep)' (#8) from fix/kotlin-for-forge-dep into main 2026-05-22 21:00:38 +00:00
Matt 4ea919432e pack: add Kotlin for Forge 5.11.0, bump to 0.15.1
Hotfix for 0.15.0: Slice & Dice declares 'kotlinforforge >= 5.8' as a
hard dependency and the server crashed on load without it. Adding KFF
satisfies the dep. 6.9 MB, both sides.
2026-05-22 21:00:37 +00:00
Matt 6ccd83da5f Merge pull request 'Add Farmer's Delight + Slice & Dice' (#7) from feature/add-farmers-delight into main 2026-05-22 20:58:38 +00:00
Matt 89c41dfe4d pack: add Farmer's Delight + Slice & Dice, bump to 0.15.0
- Farmer's Delight 1.3.2 (3.2 MB): cooking expansion -- new crops
  (tomato, onion, rice, cabbage), cooking pot, stove, cutting board,
  knife, ~50+ food recipes. Both sides required.
- Create Slice & Dice 4.2.4 (407 KB): FD<->Create automation bridge.
  Adds a Slicer machine (Mechanical Press/Mixer-style) that automates
  the knife/cutting-board step so Create kinetic networks can feed FD
  prep. Loader-shared jar (forge+neoforge from one file).

Both tagged "both". Brings live mod count to 41.
2026-05-22 20:58:37 +00:00
Matt 8b599a7da7 Merge pull request 'Add AppleSkin + Mouse Tweaks' (#6) from feature/add-appleskin-mousetweaks into main 2026-05-22 20:49:14 +00:00
Matt 6143ddc111 pack: add AppleSkin + Mouse Tweaks, bump to 0.14.0
Two client-leaning QoL mods.

- AppleSkin 3.0.9: food + saturation tooltips. Modrinth side=optional both;
  tagged "both" so server still installs (harmless, ~75KB).
- Mouse Tweaks 2.26.1: shift-drag, scroll-transfer, auto-refill, click-and-
  drag stacking in inventory UI. Modrinth lists server=unsupported, so
  explicitly tagged side=client -- this is the first new mod that exercises
  the server-side filter from the 0.10.0 schema migration: server's sync
  should skip downloading it.
2026-05-22 20:49:14 +00:00
Matt a29c0e3cab Merge pull request 'Add Spark profiler 1.10.124' (#5) from feature/add-spark into main 2026-05-22 20:46:13 +00:00
Matt 3bcf8bc4f8 pack: add Spark profiler 1.10.124 + bump to 0.13.0
Best-in-class MC profiler. Server side: /spark sampler start, /spark
heap, /spark tps. Optional client side too. ~3.5MB, both sides optional
per Modrinth -- tagged "both" so launcher syncs it too.
2026-05-22 20:46:12 +00:00
Matt 2e40732e69 Merge pull request 'Add Almost Unified 1.4.2' (#4) from feature/add-almost-unified into main 2026-05-22 20:34:32 +00:00
Matt 987fedd7e4 pack: add Almost Unified 1.4.2 + bump to 0.12.0
Preemptive insurance against duplicate-item proliferation when more
metals-producing mods are added (e.g. when Power Grid lands, or any
future Mekanism/Thermal/etc. addition). Today's pack only has TFMG as
the metals provider so AU is largely a no-op now, but ships with sane
default tag preferences that activate automatically as duplicates appear.

Tiny mod (~290 KB jar), client-optional/server-required per Modrinth.
2026-05-22 20:34:32 +00:00
Matt 8d0c05bd8a Merge pull request 'Add Simple Voice Chat 2.6.17' (#3) from feature/add-simple-voice-chat into main 2026-05-22 20:23:14 +00:00
Matt 95966d2d14 pack: add Simple Voice Chat 2.6.17 + bump to 0.11.0
Adds proximity voice chat to the modpack. Server uses UDP/24454 by default
(firewall rule added separately).

Modrinth lists both sides as "optional" -- players without it can still
join, just no voice. Tagged "both" in the lockfile so server + launcher
both install it.
2026-05-22 20:23:07 +00:00
Matt 839d93f242 Add explicit client/server side field to manifest (#2) 2026-05-22 15:15:03 +00:00
Matt db4534e427 Add local deploy mode to Deploy-Brass.ps1 (#1) 2026-05-22 15:14:44 +00:00