Add configurable multi-track rail generation and persistent in-game editing - #98
Add configurable multi-track rail generation and persistent in-game editing#98Jasupa wants to merge 2 commits into
Conversation
Qodana for JVMIt seems all right 👌 No new problems were found according to the checks applied 💡 Qodana analysis was run in the pull request mode: only the changed files were checked Contact Qodana teamContact us at qodana-support@jetbrains.com
|
ccc8e63 to
3d6c46b
Compare
Zoriot
left a comment
There was a problem hiding this comment.
Solid Rail Generator v2 overall: clear package split, transactional save/delete, overlap checks before placement, and a usable in-game type editor.
Main concerns: data loss when editing multi-block ballast, missing permission on reload, underestimated pre-check for block count, and missing null-guard after terrain prep.
In game testing is pending - will be done till Sunday night, review partly done by Cursor
Please rebase. Going forward please explain changes which may not be clear in the commit so it's easier to follow and review.
Replace the fixed rail preset with configurable rail types stored in rail-types.yml. Split configuration, generation and menus so persistence, geometry and player interaction can be reviewed independently. Generate one to eight aligned tracks with individual gaps, sleepers, optional overhead poles, supports and wires. Validate overlapping paths, the terrain preparation envelope and the complete placement set before queuing blocks. Keep preparation progress and cancellation tied to the active generation. Provide in-game selection, search, pagination, creation, editing and deletion. Version the configuration and make save/delete transactional so failed writes do not change the active types. Add permissions for rail actions and multiple tracks. The track-switch setting is only a stored option for future generation support. Consolidate the previous implementation commits on the current main branch. Retain the existing dependency and Shadow packaging configuration; the unrelated relocation changes are excluded.
Preserve the complete ordered ballast list, including repeated materials, when editing or copying a type. The single-block picker replaces that list only after an explicit selection, and its description explains this behavior. Persist the complete draft list and cover editing, copying and replacement with regression tests. Replace the rail-specific permission guard with Utils.checkPermission(CommandSender, String), reusing the existing denial-message logic. Require the rail type edit permission before reloading configuration from disk. Abort with a player-facing error when terrain preparation returns null. Remove the incomplete five-block-per-track estimate: prepared-region limits and the exact final placement count remain authoritative, including sleepers and overhead structures. Build the track-spacing minus and plus items directly because the center item opens the individual-gap editor. This avoids constructing an item that is immediately overwritten. Validation: Gradle build, including the test suite and Shadow packaging, passed with the original build configuration. In-game behavior still requires server testing.
Rail Generator v2 replaces the fixed rail preset with saved rail types. Builders can generate one to eight aligned tracks with individual gaps, sleepers, and optional overhead poles, supports and wires, then manage their presets in-game.
Implementation
rail-types.yml, with validation and transactional save/delete behavior so failed writes do not change active types.btt.generator.rail.edit(the rail type edit permission); menu access alone does not allow reload.The track-switch setting stores a preference for future support; it does not generate switches. Dependency and Shadow relocation settings remain unchanged from
main.Commit batches
feat(rail): add persistent multi-track railway generation and editor— consolidates the previous implementation, excluding the unrelated build changes.fix(rail): preserve ballast mixes and enforce generation safeguards— addresses the review findings and adds ballast regression tests.Both batches are based on
mainata60f67293681dda3aed4085634038a3342571942.Validation
buildpassed, including tests and Shadow packaging with the original build configuration.git diff --checkpassed.Requirements
Rail Generator v2 requirements