- Use tabs for indentation in JSON and TypeScript files (match existing Clusterio style).
- Target TypeScript
module: nodenextand Node >= 18. - Prefer async/await; avoid new dependencies unless justified.
- Gridworld only configures the Universal Edges plugin; it does not implement transfers.
- Tile creation is driven by controller-side logic and player joins.
- All tiles use the same map exchange string with per-tile coordinate offsets.
- Tile metadata is stored in
database/gridworld_tiles.jsonviacontroller.database_directory. - Do not change this file format without a migration note in the plugin code.
- Make sure to think carefully about edge coordinates and directions. The receiving edge needs a different set of coordinates than the sending edge to match up
- Use
this.loggerand keep log lines action-oriented and concise.