Under Construction

- Train Navigation can no longer approach or pass through stations currently in assembly mode
- Station screen now displays whether trains can be (dis-)assembled
This commit is contained in:
simibubi 2022-04-14 16:02:56 +02:00
parent b970c0029f
commit 3e744db3dd
26 changed files with 247 additions and 52 deletions

View file

@ -543,22 +543,22 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
7fbb25c577025ff61388c54c43401d8bb80723dd assets/create/lang/en_ud.json 7fbb25c577025ff61388c54c43401d8bb80723dd assets/create/lang/en_ud.json
7cd7e879350cbb56393165c24062fda5676466b9 assets/create/lang/en_us.json 21a0ec20b110e23e7a44e31117dc5861a5c44b3e assets/create/lang/en_us.json
10e938a41280ab88265f59b293cf1a19ea012f18 assets/create/lang/unfinished/de_de.json 16f34e19d584fcaa1182f9fdf2cfc98f44547727 assets/create/lang/unfinished/de_de.json
8b17b8042e844f53bf2ae605c0a7d5b6f9e470ee assets/create/lang/unfinished/es_cl.json 74ab4c2c55ddcb691701e2cefb4602f6d4c3f605 assets/create/lang/unfinished/es_cl.json
4bc7d56deb76a73fa7af16e21b7a95d00d1c1b3c assets/create/lang/unfinished/es_es.json 077b360ede4375444a4233fc1f466d7fe4f1c3bc assets/create/lang/unfinished/es_es.json
200deeabcf50a3d91387f90528154f3d0ebea8a4 assets/create/lang/unfinished/fr_fr.json b56fd9dcde4d86625ee7bac054a1930d261abbfe assets/create/lang/unfinished/fr_fr.json
d806ae2e13f9415b79ce7c7928c8e93ec93dd9bb assets/create/lang/unfinished/it_it.json 588c9afc4ef58d978ed0de8ea96cf63bb936b776 assets/create/lang/unfinished/it_it.json
5a0afa8b1ccc8b9dcbd0b0353aed8a3d14398059 assets/create/lang/unfinished/ja_jp.json b7bcc397c94d218a543c4c9ce92f76a248f53cdf assets/create/lang/unfinished/ja_jp.json
b851295ec91158c2f6e4b8433ff13057367c5694 assets/create/lang/unfinished/ko_kr.json 8fdfe59e7b0b03e8eb630e9a11daaa074c332d2c assets/create/lang/unfinished/ko_kr.json
fe7e927998605dfa186b0bed7c179b0a92e5da5b assets/create/lang/unfinished/nl_nl.json 798baf454ac567a2e45b94455c7deee98c68ae77 assets/create/lang/unfinished/nl_nl.json
352ef01578bc2fedd31ad95c8f48069ee2714240 assets/create/lang/unfinished/pl_pl.json 8a942df61c06c81ca7cb065acb9209ff67a645ff assets/create/lang/unfinished/pl_pl.json
bc5bddb12f2b01c034e7bf8619ebc8ea3136a526 assets/create/lang/unfinished/pt_br.json ddbda3b983cd89129b260ea831e5f84c05521156 assets/create/lang/unfinished/pt_br.json
67a9b9769fe289213f95c9f9680b4fa2922930de assets/create/lang/unfinished/pt_pt.json 05dc11303c62b5ed0e86297a32c96e3a9f1c3cae assets/create/lang/unfinished/pt_pt.json
38ec533de9f914ca5c8209e31cba9b3e06c734b7 assets/create/lang/unfinished/ro_ro.json 55e83bbfa05e4d524a570fa3da522fb6f094242c assets/create/lang/unfinished/ro_ro.json
556d68b3d26152f1a3a25a568cd1b98b844c66a6 assets/create/lang/unfinished/ru_ru.json a12be55cac22714da6c30770b7f966ad04505c15 assets/create/lang/unfinished/ru_ru.json
4239813d57b74da7eb654a66342769e111679729 assets/create/lang/unfinished/zh_cn.json 99846a9c58ba657a3f7b13a35927a05932125e73 assets/create/lang/unfinished/zh_cn.json
78ef5f771b4d1bb62dc2d4eca06124d28696e8b2 assets/create/lang/unfinished/zh_tw.json 7462a0b282e5233f651aaa618d776201d6260968 assets/create/lang/unfinished/zh_tw.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json

View file

@ -1419,6 +1419,12 @@
"create.station.disassemble_train": "Disassemble Train", "create.station.disassemble_train": "Disassemble Train",
"create.station.remove_schedule": "Retrieve Schedule", "create.station.remove_schedule": "Retrieve Schedule",
"create.station.remove_auto_schedule": "Discard Auto-Schedule", "create.station.remove_auto_schedule": "Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "Cannot build trains",
"create.station.no_assembly_diagonal_1": "on diagonal tracks",
"create.station.no_assembly_curve": "Cannot build trains",
"create.station.no_assembly_curve_1": "on curved tracks",
"create.station.train_not_aligned": "Cannot disassemble,",
"create.station.train_not_aligned_1": "not all carriages aligned",
"create.train_assembly.too_many_bogeys": "Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1520", "_": "Missing Localizations: 1526",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 531", "_": "Missing Localizations: 537",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 202", "_": "Missing Localizations: 208",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1782", "_": "Missing Localizations: 1788",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1471", "_": "Missing Localizations: 1477",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 197", "_": "Missing Localizations: 203",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 197", "_": "Missing Localizations: 203",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 2135", "_": "Missing Localizations: 2141",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 570", "_": "Missing Localizations: 576",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1382", "_": "Missing Localizations: 1388",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1754", "_": "Missing Localizations: 1760",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 198", "_": "Missing Localizations: 204",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 575", "_": "Missing Localizations: 581",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 197", "_": "Missing Localizations: 203",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 589", "_": "Missing Localizations: 595",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1420,6 +1420,12 @@
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train", "create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule", "create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule", "create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_diagonal_1": "UNLOCALIZED: on diagonal tracks",
"create.station.no_assembly_curve": "UNLOCALIZED: Cannot build trains",
"create.station.no_assembly_curve_1": "UNLOCALIZED: on curved tracks",
"create.station.train_not_aligned": "UNLOCALIZED: Cannot disassemble,",
"create.station.train_not_aligned_1": "UNLOCALIZED: not all carriages aligned",
"create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "UNLOCALIZED: Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",

View file

@ -374,7 +374,7 @@ public class Navigation {
if (this.destination == null && !simulate) if (this.destination == null && !simulate)
distanceStartedAt = distance; distanceStartedAt = distance;
if (this.destination == destination) if (this.destination == destination)
return 0; return 0;
@ -701,10 +701,13 @@ public class Navigation {
} }
public void read(CompoundTag tag, TrackGraph graph) { public void read(CompoundTag tag, TrackGraph graph) {
destination = destination = graph != null && tag.contains("Destination")
tag.contains("Destination") ? graph.getPoint(EdgePointType.STATION, tag.getUUID("Destination")) : null; ? graph.getPoint(EdgePointType.STATION, tag.getUUID("Destination"))
: null;
if (destination == null) if (destination == null)
return; return;
distanceToDestination = tag.getDouble("DistanceToDestination"); distanceToDestination = tag.getDouble("DistanceToDestination");
distanceStartedAt = tag.getDouble("DistanceStartedAt"); distanceStartedAt = tag.getDouble("DistanceStartedAt");
destinationBehindTrain = tag.getBoolean("BehindTrain"); destinationBehindTrain = tag.getBoolean("BehindTrain");

View file

@ -4,6 +4,7 @@ import java.util.UUID;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.jozufozu.flywheel.core.PartialModel;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.Create; import com.simibubi.create.Create;
import com.simibubi.create.content.logistics.trains.BezierConnection; import com.simibubi.create.content.logistics.trains.BezierConnection;
@ -20,16 +21,17 @@ import com.simibubi.create.content.logistics.trains.management.edgePoint.signal.
import com.simibubi.create.content.logistics.trains.track.BezierTrackPointLocation; import com.simibubi.create.content.logistics.trains.track.BezierTrackPointLocation;
import com.simibubi.create.content.logistics.trains.track.TrackTileEntity; import com.simibubi.create.content.logistics.trains.track.TrackTileEntity;
import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.CachedBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection; import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.NbtUtils;
@ -37,6 +39,7 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -52,6 +55,7 @@ public class TrackTargetingBehaviour<T extends TrackEdgePoint> extends TileEntit
private CompoundTag migrationData; private CompoundTag migrationData;
private EdgePointType<T> edgePointType; private EdgePointType<T> edgePointType;
private T edgePoint; private T edgePoint;
private boolean orthogonal;
public TrackTargetingBehaviour(SmartTileEntity te, EdgePointType<T> edgePointType) { public TrackTargetingBehaviour(SmartTileEntity te, EdgePointType<T> edgePointType) {
super(te); super(te);
@ -60,12 +64,14 @@ public class TrackTargetingBehaviour<T extends TrackEdgePoint> extends TileEntit
targetTrack = BlockPos.ZERO; targetTrack = BlockPos.ZERO;
id = UUID.randomUUID(); id = UUID.randomUUID();
migrationData = null; migrationData = null;
orthogonal = false;
} }
@Override @Override
public void write(CompoundTag nbt, boolean clientPacket) { public void write(CompoundTag nbt, boolean clientPacket) {
nbt.putUUID("Id", id); nbt.putUUID("Id", id);
nbt.put("TargetTrack", NbtUtils.writeBlockPos(targetTrack)); nbt.put("TargetTrack", NbtUtils.writeBlockPos(targetTrack));
nbt.putBoolean("Ortho", orthogonal);
nbt.putBoolean("TargetDirection", targetDirection == AxisDirection.POSITIVE); nbt.putBoolean("TargetDirection", targetDirection == AxisDirection.POSITIVE);
if (migrationData != null && !clientPacket) if (migrationData != null && !clientPacket)
nbt.put("Migrate", migrationData); nbt.put("Migrate", migrationData);
@ -84,6 +90,7 @@ public class TrackTargetingBehaviour<T extends TrackEdgePoint> extends TileEntit
id = nbt.getUUID("Id"); id = nbt.getUUID("Id");
targetTrack = NbtUtils.readBlockPos(nbt.getCompound("TargetTrack")); targetTrack = NbtUtils.readBlockPos(nbt.getCompound("TargetTrack"));
targetDirection = nbt.getBoolean("TargetDirection") ? AxisDirection.POSITIVE : AxisDirection.NEGATIVE; targetDirection = nbt.getBoolean("TargetDirection") ? AxisDirection.POSITIVE : AxisDirection.NEGATIVE;
orthogonal = nbt.getBoolean("Ortho");
if (nbt.contains("Migrate")) if (nbt.contains("Migrate"))
migrationData = nbt.getCompound("Migrate"); migrationData = nbt.getCompound("Migrate");
if (clientPacket) if (clientPacket)
@ -150,6 +157,15 @@ public class TrackTargetingBehaviour<T extends TrackEdgePoint> extends TileEntit
CompoundTag data = migrationData; CompoundTag data = migrationData;
migrationData = null; migrationData = null;
{
orthogonal = targetBezier == null;
Vec3 direction = edge.getDirection(node1, node2, true);
int nonZeroComponents = 0;
for (Axis axis : Iterate.axes)
nonZeroComponents += direction.get(axis) != 0 ? 1 : 0;
orthogonal &= nonZeroComponents <= 1;
}
EdgeData signalData = edge.getEdgeData(); EdgeData signalData = edge.getEdgeData();
if (signalData.hasPoints()) { if (signalData.hasPoints()) {
for (EdgePointType<?> otherType : EdgePointType.TYPES.values()) { for (EdgePointType<?> otherType : EdgePointType.TYPES.values()) {
@ -165,7 +181,7 @@ public class TrackTargetingBehaviour<T extends TrackEdgePoint> extends TileEntit
return null; return null;
otherPoint.tileAdded(tileEntity, front); otherPoint.tileAdded(tileEntity, front);
id = otherPoint.getId(); id = otherPoint.getId();
tileEntity.setChanged(); tileEntity.notifyUpdate();
return (T) otherPoint; return (T) otherPoint;
} }
} }
@ -180,6 +196,7 @@ public class TrackTargetingBehaviour<T extends TrackEdgePoint> extends TileEntit
point.setLocation(reverseEdge ? loc.edge : loc.edge.swap(), reverseEdge ? loc.position : length - loc.position); point.setLocation(reverseEdge ? loc.edge : loc.edge.swap(), reverseEdge ? loc.position : length - loc.position);
point.tileAdded(tileEntity, front); point.tileAdded(tileEntity, front);
loc.graph.addPoint(edgePointType, point); loc.graph.addPoint(edgePointType, point);
tileEntity.sendData();
return point; return point;
} }
@ -195,6 +212,14 @@ public class TrackTargetingBehaviour<T extends TrackEdgePoint> extends TileEntit
return TYPE; return TYPE;
} }
public boolean isOnCurve() {
return targetBezier != null;
}
public boolean isOrthogonal() {
return orthogonal;
}
public boolean hasValidTrack() { public boolean hasValidTrack() {
return getTrackBlockState().getBlock() instanceof ITrackBlock; return getTrackBlockState().getBlock() instanceof ITrackBlock;
} }
@ -290,10 +315,11 @@ public class TrackTargetingBehaviour<T extends TrackEdgePoint> extends TileEntit
ms.translate(pos.getX(), pos.getY(), pos.getZ()); ms.translate(pos.getX(), pos.getY(), pos.getZ());
ITrackBlock track = (ITrackBlock) block; ITrackBlock track = (ITrackBlock) block;
SuperByteBuffer sbb = CachedBufferer PartialModel partial = track.prepareTrackOverlay(level, pos, trackState, bezier, direction, ms, type);
.partial(track.prepareTrackOverlay(level, pos, trackState, bezier, direction, ms, type), trackState); if (partial != null)
sbb.light(LevelRenderer.getLightColor(level, pos)); CachedBufferer.partial(partial, trackState)
sbb.renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); .light(LevelRenderer.getLightColor(level, pos))
.renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped()));
ms.popPose(); ms.popPose();
} }

View file

@ -68,6 +68,7 @@ public class TrackTargetingBlockItem extends BlockItem {
.getSecond() == AxisDirection.POSITIVE; .getSecond() == AxisDirection.POSITIVE;
stackTag.put("SelectedPos", NbtUtils.writeBlockPos(pos)); stackTag.put("SelectedPos", NbtUtils.writeBlockPos(pos));
stackTag.putBoolean("SelectedDirection", front); stackTag.putBoolean("SelectedDirection", front);
stackTag.remove("Bezier");
player.displayClientMessage(Lang.translate("track_target.set"), true); player.displayClientMessage(Lang.translate("track_target.set"), true);
stack.setTag(stackTag); stack.setTag(stackTag);
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;

View file

@ -10,44 +10,64 @@ import com.simibubi.create.content.logistics.trains.management.edgePoint.signal.
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
public class GlobalStation extends SingleTileEdgePoint { public class GlobalStation extends SingleTileEdgePoint {
public String name; public String name;
public WeakReference<Train> nearestTrain; public WeakReference<Train> nearestTrain;
public boolean assembling;
public GlobalStation() { public GlobalStation() {
name = "Track Station"; name = "Track Station";
nearestTrain = new WeakReference<Train>(null); nearestTrain = new WeakReference<Train>(null);
} }
@Override
public void tileAdded(BlockEntity tile, boolean front) {
super.tileAdded(tile, front);
BlockState state = tile.getBlockState();
assembling =
state != null && state.hasProperty(StationBlock.ASSEMBLING) && state.getValue(StationBlock.ASSEMBLING);
}
@Override @Override
public void read(CompoundTag nbt, boolean migration) { public void read(CompoundTag nbt, boolean migration) {
super.read(nbt, migration); super.read(nbt, migration);
name = nbt.getString("Name"); name = nbt.getString("Name");
assembling = nbt.getBoolean("Assembling");
nearestTrain = new WeakReference<Train>(null); nearestTrain = new WeakReference<Train>(null);
} }
@Override @Override
public void read(FriendlyByteBuf buffer) { public void read(FriendlyByteBuf buffer) {
super.read(buffer); super.read(buffer);
name = buffer.readUtf(); name = buffer.readUtf();
assembling = buffer.readBoolean();
} }
@Override @Override
public void write(CompoundTag nbt) { public void write(CompoundTag nbt) {
super.write(nbt); super.write(nbt);
nbt.putString("Name", name); nbt.putString("Name", name);
nbt.putBoolean("Assembling", assembling);
} }
@Override @Override
public void write(FriendlyByteBuf buffer) { public void write(FriendlyByteBuf buffer) {
super.write(buffer); super.write(buffer);
buffer.writeUtf(name); buffer.writeUtf(name);
buffer.writeBoolean(assembling);
} }
public boolean canApproachFrom(TrackNode side) { public boolean canApproachFrom(TrackNode side) {
return isPrimary(side); return isPrimary(side) && !assembling;
}
@Override
public boolean canNavigateVia(TrackNode side) {
return super.canNavigateVia(side) && !assembling;
} }
public void reserveFor(Train train) { public void reserveFor(Train train) {

View file

@ -102,12 +102,13 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
if (station != null && graphLocation != null) { if (station != null && graphLocation != null) {
station.name = name; station.name = name;
Create.RAILWAYS.sync.pointAdded(graphLocation.graph, station); Create.RAILWAYS.sync.pointAdded(graphLocation.graph, station);
Create.RAILWAYS.markTracksDirty();
} }
Create.RAILWAYS.markTracksDirty();
} }
if (!(blockState.getBlock() instanceof StationBlock)) if (!(blockState.getBlock() instanceof StationBlock))
return; return;
Boolean isAssemblyMode = blockState.getValue(StationBlock.ASSEMBLING); Boolean isAssemblyMode = blockState.getValue(StationBlock.ASSEMBLING);
if (tryAssemble != null) { if (tryAssemble != null) {
if (!isAssemblyMode) if (!isAssemblyMode)
@ -137,6 +138,25 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
if (nowAssembling) if (nowAssembling)
te.refreshAssemblyInfo(); te.refreshAssemblyInfo();
GlobalStation station = te.getStation();
GraphLocation graphLocation = te.edgePoint.determineGraphLocation();
if (station != null && graphLocation != null) {
station.assembling = nowAssembling;
Create.RAILWAYS.sync.pointAdded(graphLocation.graph, station);
Create.RAILWAYS.markTracksDirty();
if (nowAssembling)
for (Train train : Create.RAILWAYS.sided(level).trains.values()) {
if (train.navigation.destination != station)
continue;
GlobalStation preferredDestination = train.runtime.startCurrentInstruction();
if (preferredDestination != null)
train.navigation.startNavigation(preferredDestination, Double.MAX_VALUE, false);
else
train.navigation.startNavigation(station, Double.MAX_VALUE, false);
}
}
} }
private void scheduleDropRequested(ServerPlayer sender, StationTileEntity te) { private void scheduleDropRequested(ServerPlayer sender, StationTileEntity te) {

View file

@ -19,7 +19,9 @@ import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.components.EditBox;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TextComponent;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
@ -72,14 +74,12 @@ public class StationScreen extends AbstractStationScreen {
}; };
newTrainButton = new WideIconButton(x + 84, y + 65, AllGuiTextures.I_NEW_TRAIN); newTrainButton = new WideIconButton(x + 84, y + 65, AllGuiTextures.I_NEW_TRAIN);
newTrainButton.setToolTip(Lang.translate("station.create_train"));
newTrainButton.withCallback(assemblyCallback); newTrainButton.withCallback(assemblyCallback);
addRenderableWidget(newTrainButton); addRenderableWidget(newTrainButton);
disassembleTrainButton = new WideIconButton(x + 94, y + 65, AllGuiTextures.I_DISASSEMBLE_TRAIN); disassembleTrainButton = new WideIconButton(x + 94, y + 65, AllGuiTextures.I_DISASSEMBLE_TRAIN);
disassembleTrainButton.active = false; disassembleTrainButton.active = false;
disassembleTrainButton.visible = false; disassembleTrainButton.visible = false;
disassembleTrainButton.setToolTip(Lang.translate("station.disassemble_train"));
disassembleTrainButton.withCallback(assemblyCallback); disassembleTrainButton.withCallback(assemblyCallback);
addRenderableWidget(disassembleTrainButton); addRenderableWidget(disassembleTrainButton);
@ -116,7 +116,12 @@ public class StationScreen extends AbstractStationScreen {
.length()); .length());
trainNameBox.setHighlightPos(trainNameBox.getCursorPosition()); trainNameBox.setHighlightPos(trainNameBox.getCursorPosition());
} }
super.tick(); super.tick();
updateAssemblyTooltip(te.edgePoint.isOnCurve() ? "no_assembly_curve"
: !te.edgePoint.isOrthogonal() ? "no_assembly_diagonal"
: trainPresent() && !te.trainCanDisassemble ? "train_not_aligned" : null);
} }
private void tickTrainDisplay() { private void tickTrainDisplay() {
@ -129,7 +134,7 @@ public class StationScreen extends AbstractStationScreen {
} }
leavingAnimation = 0; leavingAnimation = 0;
newTrainButton.active = true; newTrainButton.active = te.edgePoint.isOrthogonal();
newTrainButton.visible = true; newTrainButton.visible = true;
Train imminentTrain = getImminent(); Train imminentTrain = getImminent();
@ -181,7 +186,7 @@ public class StationScreen extends AbstractStationScreen {
} }
boolean trainAtStation = trainPresent(); boolean trainAtStation = trainPresent();
disassembleTrainButton.active = trainAtStation && te.trainCanDisassemble; disassembleTrainButton.active = trainAtStation && te.trainCanDisassemble && te.edgePoint.isOrthogonal();
dropScheduleButton.active = te.trainHasSchedule; dropScheduleButton.active = te.trainHasSchedule;
if (te.trainHasSchedule) if (te.trainHasSchedule)
@ -199,6 +204,22 @@ public class StationScreen extends AbstractStationScreen {
return guiLeft + background.width / 2 - (Math.min(font.width(s), nameBox.getWidth()) + 10) / 2; return guiLeft + background.width / 2 - (Math.min(font.width(s), nameBox.getWidth()) + 10) / 2;
} }
private void updateAssemblyTooltip(String key) {
if (key == null) {
disassembleTrainButton.setToolTip(Lang.translate("station.disassemble_train"));
newTrainButton.setToolTip(Lang.translate("station.create_train"));
return;
}
for (IconButton ib : new IconButton[] { disassembleTrainButton, newTrainButton }) {
List<Component> toolTip = ib.getToolTip();
toolTip.clear();
toolTip.add(Lang.translate("station." + key)
.withStyle(ChatFormatting.GRAY));
toolTip.add(Lang.translate("station." + key + "_1")
.withStyle(ChatFormatting.GRAY));
}
}
@Override @Override
protected void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks) {
super.renderWindow(ms, mouseX, mouseY, partialTicks); super.renderWindow(ms, mouseX, mouseY, partialTicks);

View file

@ -138,6 +138,7 @@ public class StationTileEntity extends SmartTileEntity {
tag.putInt("FailedCarriageIndex", failedCarriageIndex); tag.putInt("FailedCarriageIndex", failedCarriageIndex);
tag.put("HeldItem", autoSchedule.getStackInSlot(0) tag.put("HeldItem", autoSchedule.getStackInSlot(0)
.serializeNBT()); .serializeNBT());
super.write(tag, clientPacket); super.write(tag, clientPacket);
if (!clientPacket) if (!clientPacket)
@ -315,7 +316,7 @@ public class StationTileEntity extends SmartTileEntity {
} }
BlockState potentialBogeyState = level.getBlockState(bogeyOffset.offset(currentPos)); BlockState potentialBogeyState = level.getBlockState(bogeyOffset.offset(currentPos));
if (potentialBogeyState.getBlock()instanceof IBogeyBlock bogey && bogeyIndex < bogeyLocations.length) { if (potentialBogeyState.getBlock() instanceof IBogeyBlock bogey && bogeyIndex < bogeyLocations.length) {
bogeyTypes[bogeyIndex] = bogey; bogeyTypes[bogeyIndex] = bogey;
bogeyLocations[bogeyIndex] = i; bogeyLocations[bogeyIndex] = i;
bogeyIndex++; bogeyIndex++;
@ -637,7 +638,7 @@ public class StationTileEntity extends SmartTileEntity {
return true; return true;
BlockState target = edgePoint.getTrackBlockState(); BlockState target = edgePoint.getTrackBlockState();
if (!(target.getBlock()instanceof ITrackBlock def)) if (!(target.getBlock() instanceof ITrackBlock def))
return false; return false;
Vec3 axis = null; Vec3 axis = null;

View file

@ -460,7 +460,8 @@ public class TrackBlock extends Block implements EntityBlock, IWrenchable, ITrac
msr.translate(offset.subtract(Vec3.atBottomCenterOf(pos))); msr.translate(offset.subtract(Vec3.atBottomCenterOf(pos)));
msr.translate(0, -4 / 16f, 0); msr.translate(0, -4 / 16f, 0);
} } else
return null;
} }
if (normal == null) { if (normal == null) {

View file

@ -643,6 +643,12 @@
"create.station.disassemble_train": "Disassemble Train", "create.station.disassemble_train": "Disassemble Train",
"create.station.remove_schedule": "Retrieve Schedule", "create.station.remove_schedule": "Retrieve Schedule",
"create.station.remove_auto_schedule": "Discard Auto-Schedule", "create.station.remove_auto_schedule": "Discard Auto-Schedule",
"create.station.no_assembly_diagonal": "Cannot build trains",
"create.station.no_assembly_diagonal_1": "on diagonal tracks",
"create.station.no_assembly_curve": "Cannot build trains",
"create.station.no_assembly_curve_1": "on curved tracks",
"create.station.train_not_aligned": "Cannot disassemble,",
"create.station.train_not_aligned_1": "not all carriages aligned",
"create.train_assembly.too_many_bogeys": "Too many Bogeys attached: %1$s", "create.train_assembly.too_many_bogeys": "Too many Bogeys attached: %1$s",
"create.train_assembly.frontmost_bogey_at_station": "Frontmost Bogey must be at Station Marker", "create.train_assembly.frontmost_bogey_at_station": "Frontmost Bogey must be at Station Marker",