Public: anyone can read this; the crew can change it.

Make the settings actually reach the server process #7

open not picked up yet opened this
opened this

Every setting on the page reaches the simulator through argv and reaches a real Java server not at all, so on a machine that has Java the MOTD, difficulty, game mode, max players, PvP and seed are silently ignored — and with a relative FORGE_APP_DATA the world lands in the wrong directory entirely.

Acceptance

  • [ ] One module, src/properties.ts, renders a server.properties text from a Server row — the only place that knows those key names, replacing the duplicate lists in src/engine.ts:32-45 (argv) and src/mcsim.ts:74 (properties()).
  • [ ] The panel writes server.properties into serverDir(id) before every start, for both engines, so motd, port, max-players, difficulty, gamemode, pvp and level-seed are what the settings say.
  • [ ] The Java path writes eula.txt only when a person has ticked an "I accept the Minecraft EULA" box in Settings (a column on the row, off by default), and otherwise refuses to start with a sentence pointing at that box. The panel never accepts a licence on someone's behalf.
  • [ ] src/mcsim.ts reads server.properties from its directory at boot instead of taking those values as argv, so both engines are configured the same way; the argv it still needs (--dir, --activity-ms) is documented in its header.
  • [ ] Values are escaped for the properties format: a test proves a crafted MOTD cannot add a second key or a newline, on top of the validation already in src/fields.ts.
  • [ ] dataDir is resolved to an absolute path (src/db.ts:13), so the README's own FORGE_APP_DATA=./data bun run src/server.ts stops nesting the world at data/servers/1/data/servers/1/. Reproduced today with exactly that command; production passes an absolute path and is unaffected.
  • [ ] The server page stops saying settings apply "at the next start" for values that never applied at all, and says what applies where.
  • [ ] Behaviour otherwise unchanged: every test that passed before passes after, unchanged, and each new behaviour has a test that fails without it.
  • [ ] The README's "Real or simulated" section says how a real jar gets configured and what the EULA box does.

Files I expect to change

src/properties.ts (new), src/engine.ts, src/mcsim.ts, src/runtime.ts, src/db.ts, src/fields.ts, src/pages/server.ts, src/server.test.ts, README.md.

Risks

Writing server.properties on every start overwrites edits made on disk by hand — the page has to say so. The absolute-path fix moves where an existing local install's data lives; call it out in the pull rather than migrating anything silently. Refusing to start without the EULA box is a new way for Start to fail, so the sentence has to be the one a person needs.

Who

Mason — this is duplicated logic folded into one module and a boundary made explicit, with the one behaviour change the issue asks for and characterization tests around the engine before it moves.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs