Auto-Schedules
- Updated bogey assets - Schedules are now consumed and returned when added/removed from Trains - Added a schedule retrieval option to the Stations' UI - Schedule items now keep track of their 'progress', which can be modified to skip stations - Fixed crash when displaying station summary on a tiny display - Fixed display boards breaking each other when blocks are added after providing rotational force - Added placement assist for Display Boards - Stations can now be given a Schedule via funnels/hoppers, which will apply a copy to its train
|
@ -543,21 +543,21 @@ 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
|
||||||
dde2b8043a318bc88b6d381f9de6bfd557c0f079 assets/create/lang/en_ud.json
|
dde2b8043a318bc88b6d381f9de6bfd557c0f079 assets/create/lang/en_ud.json
|
||||||
0ea900a1d36f0b19568f8183844a64016c539dcf assets/create/lang/en_us.json
|
c4e50a58a6ce948f7441177a0646a866a7af5e06 assets/create/lang/en_us.json
|
||||||
c9977bb0eb8912a4260e414d8868628904d847a0 assets/create/lang/unfinished/de_de.json
|
1cb9472d43897acb2baf3e0cc98155884335c848 assets/create/lang/unfinished/de_de.json
|
||||||
4d30c4754b8494fbbe62340b7c67ba3d2ada6721 assets/create/lang/unfinished/es_cl.json
|
ff2fda28b73ceca2a57e5017e7cdb2e4b81b7d38 assets/create/lang/unfinished/es_cl.json
|
||||||
29c05f8ed2ec05e5bd4c73f6678946041c4e8293 assets/create/lang/unfinished/es_es.json
|
72c764f41c300e0d189fbb3a738a8f0d49fbf545 assets/create/lang/unfinished/es_es.json
|
||||||
027514a78a5f233c2d579694fa3c6a2c57ce3272 assets/create/lang/unfinished/fr_fr.json
|
70cbad61cc90ec1ee4175aa5890bee554475273c assets/create/lang/unfinished/fr_fr.json
|
||||||
f354377f09ebc8ee7863dc24266215fc77003c11 assets/create/lang/unfinished/it_it.json
|
d5fced42d980b3bf62876546a80ede03d77126a3 assets/create/lang/unfinished/it_it.json
|
||||||
8e8d4fe60ca6386e14c31cb4a24274cd21e92212 assets/create/lang/unfinished/ja_jp.json
|
07cc8e1ce1015b2a8698a782053956294ea113b7 assets/create/lang/unfinished/ja_jp.json
|
||||||
39194f6899360e4a13f0d3feac07ab25b5c18256 assets/create/lang/unfinished/ko_kr.json
|
bc66f974d2ac075a2322618dfe5ba56b5b81313c assets/create/lang/unfinished/ko_kr.json
|
||||||
4b067fe0830950e7cc6615c8f466686b5aefee7f assets/create/lang/unfinished/nl_nl.json
|
f2ff899c0949098a60d03785a2c79b84f7c436c3 assets/create/lang/unfinished/nl_nl.json
|
||||||
44fd3bc93eb6f2dce30a7f52a765662fb1093791 assets/create/lang/unfinished/pl_pl.json
|
3fe312603ca0543d03da5a9a6f889b558ce699a6 assets/create/lang/unfinished/pl_pl.json
|
||||||
410f0132633089e26db9d7b70c49fc3c39541cd6 assets/create/lang/unfinished/pt_br.json
|
b43a832423e18aefed0143174530abc7f5269ab3 assets/create/lang/unfinished/pt_br.json
|
||||||
bec4373054c1e0d2cd803572f8491e7597e292c2 assets/create/lang/unfinished/pt_pt.json
|
97efc1b8919b5771ef911860a03aa98dac612978 assets/create/lang/unfinished/pt_pt.json
|
||||||
3ff78cccb260071cf5d55af9ace4f7ed1eadb46b assets/create/lang/unfinished/ru_ru.json
|
9fbe47bd6472b70608c0e0b4381403b9c4798ae4 assets/create/lang/unfinished/ru_ru.json
|
||||||
9ea4b032f852a55d9359fb931f5eb91243d87e36 assets/create/lang/unfinished/zh_cn.json
|
96eaf97775d91daea4fc12e4835ac4ce1a917f1b assets/create/lang/unfinished/zh_cn.json
|
||||||
33a7cf2b3b6014b5714fdb5f63de49474f23d2aa assets/create/lang/unfinished/zh_tw.json
|
e1039c7374dbc6b536bae27f6ff37db5f87506c0 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
|
||||||
|
|
|
@ -1383,9 +1383,15 @@
|
||||||
"create.schedule.loop": "Loop Forever",
|
"create.schedule.loop": "Loop Forever",
|
||||||
"create.schedule.loop1": "Schedule starts over",
|
"create.schedule.loop1": "Schedule starts over",
|
||||||
"create.schedule.loop2": "when completed",
|
"create.schedule.loop2": "when completed",
|
||||||
|
"create.schedule.reset": "Reset Progress",
|
||||||
|
"create.schedule.skip": "Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "Train is now following this Schedule",
|
"create.schedule.applied_to_train": "Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "Selection Cleared",
|
"create.track.selection_cleared": "Selection Cleared",
|
||||||
"create.track.valid_connection": "Can Connect ✔",
|
"create.track.valid_connection": "Can Connect ✔",
|
||||||
|
@ -1402,6 +1408,11 @@
|
||||||
"create.track.leave_slope_descending": "Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "Can only turn up to 90 Degrees",
|
"create.track.turn_90": "Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "Create new Train",
|
||||||
|
"create.station.disassemble_train": "Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "No Bogeys Found",
|
"create.train_assembly.no_bogeys": "No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1503",
|
"_": "Missing Localizations: 1513",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 514",
|
"_": "Missing Localizations: 524",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 185",
|
"_": "Missing Localizations: 195",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1765",
|
"_": "Missing Localizations: 1775",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1454",
|
"_": "Missing Localizations: 1464",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 180",
|
"_": "Missing Localizations: 190",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 180",
|
"_": "Missing Localizations: 190",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 2118",
|
"_": "Missing Localizations: 2128",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 553",
|
"_": "Missing Localizations: 563",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1365",
|
"_": "Missing Localizations: 1375",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1737",
|
"_": "Missing Localizations: 1747",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 558",
|
"_": "Missing Localizations: 568",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 180",
|
"_": "Missing Localizations: 190",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 572",
|
"_": "Missing Localizations: 582",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1384,9 +1384,15 @@
|
||||||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||||
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
"create.schedule.loop2": "UNLOCALIZED: when completed",
|
||||||
|
"create.schedule.reset": "UNLOCALIZED: Reset Progress",
|
||||||
|
"create.schedule.skip": "UNLOCALIZED: Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "UNLOCALIZED: Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
"create.schedule.applied_to_train": "UNLOCALIZED: Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "UNLOCALIZED: Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "UNLOCALIZED: Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "UNLOCALIZED: Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "UNLOCALIZED: Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "UNLOCALIZED: This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
"create.track.selection_cleared": "UNLOCALIZED: Selection Cleared",
|
||||||
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
"create.track.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||||
|
@ -1403,6 +1409,11 @@
|
||||||
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "UNLOCALIZED: Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
"create.track.turn_90": "UNLOCALIZED: Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "UNLOCALIZED: Create new Train",
|
||||||
|
"create.station.disassemble_train": "UNLOCALIZED: Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "UNLOCALIZED: Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "UNLOCALIZED: Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||||
|
|
|
@ -262,6 +262,11 @@ public class AllSoundEvents {
|
||||||
return new SoundEntryProvider(generator);
|
return new SoundEntryProvider(generator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void playItemPickup(Player player) {
|
||||||
|
player.level.playSound(null, player.blockPosition(), SoundEvents.ITEM_PICKUP, SoundSource.PLAYERS, .2f,
|
||||||
|
1f + Create.RANDOM.nextFloat());
|
||||||
|
}
|
||||||
|
|
||||||
// @SubscribeEvent
|
// @SubscribeEvent
|
||||||
// public static void cancelSubtitlesOfCompoundedSounds(PlaySoundEvent event) {
|
// public static void cancelSubtitlesOfCompoundedSounds(PlaySoundEvent event) {
|
||||||
// ResourceLocation soundLocation = event.getSound().getSoundLocation();
|
// ResourceLocation soundLocation = event.getSound().getSoundLocation();
|
||||||
|
|
|
@ -28,10 +28,11 @@ public class BlazeBurnerInteractionBehaviour extends MovingInteractionBehaviour
|
||||||
public boolean handlePlayerInteraction(Player player, InteractionHand activeHand, BlockPos localPos,
|
public boolean handlePlayerInteraction(Player player, InteractionHand activeHand, BlockPos localPos,
|
||||||
AbstractContraptionEntity contraptionEntity) {
|
AbstractContraptionEntity contraptionEntity) {
|
||||||
ItemStack itemInHand = player.getItemInHand(activeHand);
|
ItemStack itemInHand = player.getItemInHand(activeHand);
|
||||||
if (!AllItems.SCHEDULE.isIn(itemInHand))
|
|
||||||
return false;
|
|
||||||
if (!(contraptionEntity instanceof CarriageContraptionEntity carriageEntity))
|
if (!(contraptionEntity instanceof CarriageContraptionEntity carriageEntity))
|
||||||
return false;
|
return false;
|
||||||
|
if (activeHand == InteractionHand.OFF_HAND)
|
||||||
|
return false;
|
||||||
Contraption contraption = carriageEntity.getContraption();
|
Contraption contraption = carriageEntity.getContraption();
|
||||||
if (!(contraption instanceof CarriageContraption carriageContraption))
|
if (!(contraption instanceof CarriageContraption carriageContraption))
|
||||||
return false;
|
return false;
|
||||||
|
@ -44,26 +45,55 @@ public class BlazeBurnerInteractionBehaviour extends MovingInteractionBehaviour
|
||||||
|
|
||||||
Direction assemblyDirection = carriageContraption.getAssemblyDirection();
|
Direction assemblyDirection = carriageContraption.getAssemblyDirection();
|
||||||
for (Direction direction : Iterate.directionsInAxis(assemblyDirection.getAxis())) {
|
for (Direction direction : Iterate.directionsInAxis(assemblyDirection.getAxis())) {
|
||||||
if (carriageContraption.inControl(localPos, direction)) {
|
if (!carriageContraption.inControl(localPos, direction))
|
||||||
|
continue;
|
||||||
|
|
||||||
Schedule schedule = ScheduleItem.getSchedule(itemInHand);
|
Train train = carriageEntity.getCarriage().train;
|
||||||
if (schedule == null)
|
if (train == null)
|
||||||
return false;
|
return false;
|
||||||
Train train = carriageEntity.getCarriage().train;
|
if (player.level.isClientSide)
|
||||||
if (train == null)
|
return true;
|
||||||
return false;
|
|
||||||
if (train.heldForAssembly) {
|
if (train.runtime.getSchedule() != null) {
|
||||||
player.displayClientMessage(Lang.translate("schedule.train_still_assembling"), true);
|
if (!itemInHand.isEmpty()) {
|
||||||
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
|
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
|
||||||
|
player.displayClientMessage(Lang.translate("schedule.remove_with_empty_hand"), true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
train.runtime.setSchedule(schedule, false);
|
AllSoundEvents.playItemPickup(player);
|
||||||
AllSoundEvents.CONFIRM.playOnServer(player.level, player.blockPosition(), 1, 1);
|
player.displayClientMessage(Lang.translate(
|
||||||
player.displayClientMessage(Lang.translate("schedule.applied_to_train")
|
train.runtime.isAutoSchedule ? "schedule.auto_removed_from_train" : "schedule.removed_from_train"),
|
||||||
.withStyle(ChatFormatting.GREEN), true);
|
true);
|
||||||
|
player.setItemInHand(activeHand, train.runtime.returnSchedule());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!AllItems.SCHEDULE.isIn(itemInHand))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
Schedule schedule = ScheduleItem.getSchedule(itemInHand);
|
||||||
|
if (schedule == null)
|
||||||
|
return false;
|
||||||
|
if (train.heldForAssembly) {
|
||||||
|
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
|
||||||
|
player.displayClientMessage(Lang.translate("schedule.train_still_assembling"), true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (schedule.entries.isEmpty()) {
|
||||||
|
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
|
||||||
|
player.displayClientMessage(Lang.translate("schedule.no_stops"), true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
train.runtime.setSchedule(schedule, false);
|
||||||
|
AllSoundEvents.CONFIRM.playOnServer(player.level, player.blockPosition(), 1, 1);
|
||||||
|
player.displayClientMessage(Lang.translate("schedule.applied_to_train")
|
||||||
|
.withStyle(ChatFormatting.GREEN), true);
|
||||||
|
itemInHand.shrink(1);
|
||||||
|
player.setItemInHand(activeHand, itemInHand.isEmpty() ? ItemStack.EMPTY : itemInHand);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.displayClientMessage(Lang.translate("schedule.non_controlling_seat"), true);
|
player.displayClientMessage(Lang.translate("schedule.non_controlling_seat"), true);
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class DataGathererTileEntity extends SmartTileEntity {
|
||||||
BlockPos sourcePosition = getSourcePosition();
|
BlockPos sourcePosition = getSourcePosition();
|
||||||
BlockPos targetPosition = getTargetPosition();
|
BlockPos targetPosition = getTargetPosition();
|
||||||
|
|
||||||
if (!level.isAreaLoaded(targetPosition, 1) || !level.isAreaLoaded(sourcePosition, 1))
|
if (!level.isLoaded(targetPosition) || !level.isLoaded(sourcePosition))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DataGathererTarget target = AllDataGathererBehaviours.targetOf(level, targetPosition);
|
DataGathererTarget target = AllDataGathererBehaviours.targetOf(level, targetPosition);
|
||||||
|
|
|
@ -2,8 +2,11 @@ package com.simibubi.create.content.logistics.trains.management.display;
|
||||||
|
|
||||||
import static net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED;
|
import static net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock;
|
import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock;
|
||||||
|
@ -12,7 +15,11 @@ import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel;
|
||||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
import com.simibubi.create.foundation.utility.placement.IPlacementHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.placement.PlacementHelpers;
|
||||||
|
import com.simibubi.create.foundation.utility.placement.PlacementOffset;
|
||||||
|
|
||||||
|
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.BlockPos.MutableBlockPos;
|
import net.minecraft.core.BlockPos.MutableBlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
|
@ -24,6 +31,7 @@ import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.BlockItem;
|
||||||
import net.minecraft.world.item.DyeColor;
|
import net.minecraft.world.item.DyeColor;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
|
@ -61,7 +69,7 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) {
|
protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) {
|
||||||
return false;
|
return super.areStatesKineticallyEquivalent(oldState, newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -111,6 +119,12 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
||||||
return InteractionResult.PASS;
|
return InteractionResult.PASS;
|
||||||
|
|
||||||
ItemStack heldItem = player.getItemInHand(hand);
|
ItemStack heldItem = player.getItemInHand(hand);
|
||||||
|
|
||||||
|
IPlacementHelper placementHelper = PlacementHelpers.get(placementHelperId);
|
||||||
|
if (placementHelper.matchesItem(heldItem))
|
||||||
|
return placementHelper.getOffset(player, world, state, pos, ray)
|
||||||
|
.placeInWorld(world, (BlockItem) heldItem.getItem(), player, hand, ray);
|
||||||
|
|
||||||
FlapDisplayTileEntity flapTe = getTileEntity(world, pos);
|
FlapDisplayTileEntity flapTe = getTileEntity(world, pos);
|
||||||
|
|
||||||
if (flapTe == null)
|
if (flapTe == null)
|
||||||
|
@ -191,7 +205,7 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
||||||
Move: for (Direction movement : Iterate.directionsInAxis(axis)) {
|
Move: for (Direction movement : Iterate.directionsInAxis(axis)) {
|
||||||
currentPos.set(pos);
|
currentPos.set(pos);
|
||||||
for (int i = 0; i < 1000; i++) {
|
for (int i = 0; i < 1000; i++) {
|
||||||
if (!level.isAreaLoaded(currentPos, 1))
|
if (!level.isLoaded(currentPos))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
BlockState other1 = currentPos.equals(pos) ? state : level.getBlockState(currentPos);
|
BlockState other1 = currentPos.equals(pos) ? state : level.getBlockState(currentPos);
|
||||||
|
@ -216,6 +230,7 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlace(BlockState pState, Level pLevel, BlockPos pPos, BlockState pOldState, boolean pIsMoving) {
|
public void onPlace(BlockState pState, Level pLevel, BlockPos pPos, BlockState pOldState, boolean pIsMoving) {
|
||||||
|
super.onPlace(pState, pLevel, pPos, pOldState, pIsMoving);
|
||||||
if (pOldState.getBlock() == this)
|
if (pOldState.getBlock() == this)
|
||||||
return;
|
return;
|
||||||
LevelTickAccess<Block> blockTicks = pLevel.getBlockTicks();
|
LevelTickAccess<Block> blockTicks = pLevel.getBlockTicks();
|
||||||
|
@ -238,10 +253,7 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
||||||
@Override
|
@Override
|
||||||
public BlockState updateShape(BlockState state, Direction pDirection, BlockState pNeighborState,
|
public BlockState updateShape(BlockState state, Direction pDirection, BlockState pNeighborState,
|
||||||
LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) {
|
LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) {
|
||||||
BlockState newState = updatedShapeInner(state, pDirection, pNeighborState, pLevel, pCurrentPos);
|
return updatedShapeInner(state, pDirection, pNeighborState, pLevel, pCurrentPos);
|
||||||
if (pLevel instanceof Level level)
|
|
||||||
KineticTileEntity.switchToBlockState(level, pCurrentPos, newState);
|
|
||||||
return newState;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private BlockState updatedShapeInner(BlockState state, Direction pDirection, BlockState pNeighborState,
|
private BlockState updatedShapeInner(BlockState state, Direction pDirection, BlockState pNeighborState,
|
||||||
|
@ -297,4 +309,34 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final int placementHelperId = PlacementHelpers.register(new PlacementHelper());
|
||||||
|
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
|
private static class PlacementHelper implements IPlacementHelper {
|
||||||
|
@Override
|
||||||
|
public Predicate<ItemStack> getItemPredicate() {
|
||||||
|
return AllBlocks.FLAP_DISPLAY::isIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Predicate<BlockState> getStatePredicate() {
|
||||||
|
return AllBlocks.FLAP_DISPLAY::has;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PlacementOffset getOffset(Player player, Level world, BlockState state, BlockPos pos,
|
||||||
|
BlockHitResult ray) {
|
||||||
|
List<Direction> directions = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getLocation(),
|
||||||
|
state.getValue(FlapDisplayBlock.HORIZONTAL_FACING)
|
||||||
|
.getAxis(),
|
||||||
|
dir -> world.getBlockState(pos.relative(dir))
|
||||||
|
.getMaterial()
|
||||||
|
.isReplaceable());
|
||||||
|
|
||||||
|
return directions.isEmpty() ? PlacementOffset.fail()
|
||||||
|
: PlacementOffset.success(pos.relative(directions.get(0)),
|
||||||
|
s -> s.setValue(HORIZONTAL_FACING, state.getValue(FlapDisplayBlock.HORIZONTAL_FACING)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class FlapDisplaySection {
|
||||||
this.cycle = cycle;
|
this.cycle = cycle;
|
||||||
this.hasGap = hasGap;
|
this.hasGap = hasGap;
|
||||||
this.singleFlap = singleFlap;
|
this.singleFlap = singleFlap;
|
||||||
this.spinning = new boolean[singleFlap ? 1 : (int) (width / FlapDisplaySection.MONOSPACE)];
|
this.spinning = new boolean[singleFlap ? 1 : Math.max(0, (int) (width / FlapDisplaySection.MONOSPACE))];
|
||||||
this.text = Strings.repeat(" ", spinning.length);
|
this.text = Strings.repeat(" ", spinning.length);
|
||||||
this.component = null;
|
this.component = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,8 @@ package com.simibubi.create.content.logistics.trains.management.edgePoint.statio
|
||||||
|
|
||||||
import com.simibubi.create.AllItems;
|
import com.simibubi.create.AllItems;
|
||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
|
import com.simibubi.create.AllSoundEvents;
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.Create;
|
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.CreativeModeTab;
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||||
import net.minecraft.world.level.BlockGetter;
|
import net.minecraft.world.level.BlockGetter;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
@ -73,10 +72,22 @@ public class StationBlock extends HorizontalDirectionalBlock implements ITE<Stat
|
||||||
ItemStack itemInHand = pPlayer.getItemInHand(pHand);
|
ItemStack itemInHand = pPlayer.getItemInHand(pHand);
|
||||||
if (AllItems.WRENCH.isIn(itemInHand))
|
if (AllItems.WRENCH.isIn(itemInHand))
|
||||||
return InteractionResult.PASS;
|
return InteractionResult.PASS;
|
||||||
if (itemInHand.getItem() == Items.SPONGE)
|
|
||||||
Create.RAILWAYS.trains.clear();
|
InteractionResult result = onTileEntityUse(pLevel, pPos, station -> {
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
|
ItemStack autoSchedule = station.getAutoSchedule();
|
||||||
() -> () -> withTileEntityDo(pLevel, pPos, te -> this.displayScreen(te, pPlayer)));
|
if (autoSchedule.isEmpty())
|
||||||
|
return InteractionResult.PASS;
|
||||||
|
if (pLevel.isClientSide)
|
||||||
|
return InteractionResult.SUCCESS;
|
||||||
|
pPlayer.getInventory()
|
||||||
|
.placeItemBackInInventory(autoSchedule);
|
||||||
|
AllSoundEvents.playItemPickup(pPlayer);
|
||||||
|
return InteractionResult.SUCCESS;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (result == InteractionResult.PASS)
|
||||||
|
DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
|
||||||
|
() -> () -> withTileEntityDo(pLevel, pPos, te -> this.displayScreen(te, pPlayer)));
|
||||||
return InteractionResult.SUCCESS;
|
return InteractionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,19 +4,30 @@ import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.content.logistics.trains.GraphLocation;
|
import com.simibubi.create.content.logistics.trains.GraphLocation;
|
||||||
import com.simibubi.create.content.logistics.trains.entity.Train;
|
import com.simibubi.create.content.logistics.trains.entity.Train;
|
||||||
import com.simibubi.create.foundation.networking.TileEntityConfigurationPacket;
|
import com.simibubi.create.foundation.networking.TileEntityConfigurationPacket;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.entity.item.ItemEntity;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
public class StationEditPacket extends TileEntityConfigurationPacket<StationTileEntity> {
|
public class StationEditPacket extends TileEntityConfigurationPacket<StationTileEntity> {
|
||||||
|
|
||||||
|
boolean dropSchedule;
|
||||||
boolean assemblyMode;
|
boolean assemblyMode;
|
||||||
Boolean tryAssemble;
|
Boolean tryAssemble;
|
||||||
String name;
|
String name;
|
||||||
|
|
||||||
|
public static StationEditPacket dropSchedule(BlockPos pos) {
|
||||||
|
StationEditPacket packet = new StationEditPacket(pos);
|
||||||
|
packet.dropSchedule = true;
|
||||||
|
return packet;
|
||||||
|
}
|
||||||
|
|
||||||
public static StationEditPacket tryAssemble(BlockPos pos) {
|
public static StationEditPacket tryAssemble(BlockPos pos) {
|
||||||
StationEditPacket packet = new StationEditPacket(pos);
|
StationEditPacket packet = new StationEditPacket(pos);
|
||||||
packet.tryAssemble = true;
|
packet.tryAssemble = true;
|
||||||
|
@ -47,6 +58,9 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void writeSettings(FriendlyByteBuf buffer) {
|
protected void writeSettings(FriendlyByteBuf buffer) {
|
||||||
|
buffer.writeBoolean(dropSchedule);
|
||||||
|
if (dropSchedule)
|
||||||
|
return;
|
||||||
buffer.writeBoolean(tryAssemble != null);
|
buffer.writeBoolean(tryAssemble != null);
|
||||||
if (tryAssemble != null) {
|
if (tryAssemble != null) {
|
||||||
buffer.writeBoolean(tryAssemble);
|
buffer.writeBoolean(tryAssemble);
|
||||||
|
@ -58,6 +72,10 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void readSettings(FriendlyByteBuf buffer) {
|
protected void readSettings(FriendlyByteBuf buffer) {
|
||||||
|
if (buffer.readBoolean()) {
|
||||||
|
dropSchedule = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
name = "";
|
name = "";
|
||||||
if (buffer.readBoolean()) {
|
if (buffer.readBoolean()) {
|
||||||
tryAssemble = buffer.readBoolean();
|
tryAssemble = buffer.readBoolean();
|
||||||
|
@ -73,6 +91,11 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
||||||
BlockPos blockPos = te.getBlockPos();
|
BlockPos blockPos = te.getBlockPos();
|
||||||
BlockState blockState = level.getBlockState(blockPos);
|
BlockState blockState = level.getBlockState(blockPos);
|
||||||
|
|
||||||
|
if (dropSchedule) {
|
||||||
|
scheduleDropRequested(player, te);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!name.isBlank()) {
|
if (!name.isBlank()) {
|
||||||
GlobalStation station = te.getStation();
|
GlobalStation station = te.getStation();
|
||||||
GraphLocation graphLocation = te.edgePoint.determineGraphLocation();
|
GraphLocation graphLocation = te.edgePoint.determineGraphLocation();
|
||||||
|
@ -92,7 +115,7 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
||||||
if (tryAssemble)
|
if (tryAssemble)
|
||||||
te.assemble(player.getUUID());
|
te.assemble(player.getUUID());
|
||||||
else {
|
else {
|
||||||
if (disassembleAndEnterMode(te))
|
if (disassembleAndEnterMode(player, te))
|
||||||
te.refreshAssemblyInfo();
|
te.refreshAssemblyInfo();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -103,7 +126,7 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
||||||
BlockState newState = blockState.cycle(StationBlock.ASSEMBLING);
|
BlockState newState = blockState.cycle(StationBlock.ASSEMBLING);
|
||||||
Boolean nowAssembling = newState.getValue(StationBlock.ASSEMBLING);
|
Boolean nowAssembling = newState.getValue(StationBlock.ASSEMBLING);
|
||||||
if (nowAssembling) {
|
if (nowAssembling) {
|
||||||
if (!disassembleAndEnterMode(te))
|
if (!disassembleAndEnterMode(player, te))
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
te.cancelAssembly();
|
te.cancelAssembly();
|
||||||
|
@ -116,17 +139,46 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
||||||
te.refreshAssemblyInfo();
|
te.refreshAssemblyInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean disassembleAndEnterMode(StationTileEntity te) {
|
private void scheduleDropRequested(ServerPlayer sender, StationTileEntity te) {
|
||||||
|
GlobalStation station = te.getStation();
|
||||||
|
if (station == null)
|
||||||
|
return;
|
||||||
|
Train train = station.getPresentTrain();
|
||||||
|
if (train == null)
|
||||||
|
return;
|
||||||
|
ItemStack schedule = train.runtime.returnSchedule();
|
||||||
|
dropSchedule(sender, te, schedule);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean disassembleAndEnterMode(ServerPlayer sender, StationTileEntity te) {
|
||||||
GlobalStation station = te.getStation();
|
GlobalStation station = te.getStation();
|
||||||
if (station != null) {
|
if (station != null) {
|
||||||
Train train = station.getPresentTrain();
|
Train train = station.getPresentTrain();
|
||||||
BlockPos trackPosition = te.edgePoint.getGlobalPosition();
|
BlockPos trackPosition = te.edgePoint.getGlobalPosition();
|
||||||
|
ItemStack schedule = train == null ? ItemStack.EMPTY : train.runtime.returnSchedule();
|
||||||
if (train != null && !train.disassemble(te.getAssemblyDirection(), trackPosition.above()))
|
if (train != null && !train.disassemble(te.getAssemblyDirection(), trackPosition.above()))
|
||||||
return false;
|
return false;
|
||||||
|
dropSchedule(sender, te, schedule);
|
||||||
}
|
}
|
||||||
return te.tryEnterAssemblyMode();
|
return te.tryEnterAssemblyMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void dropSchedule(ServerPlayer sender, StationTileEntity te, ItemStack schedule) {
|
||||||
|
if (schedule.isEmpty())
|
||||||
|
return;
|
||||||
|
if (sender.getMainHandItem()
|
||||||
|
.isEmpty()) {
|
||||||
|
sender.getInventory()
|
||||||
|
.placeItemBackInInventory(schedule);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Vec3 v = VecHelper.getCenterOf(te.getBlockPos());
|
||||||
|
ItemEntity itemEntity = new ItemEntity(te.getLevel(), v.x, v.y, v.z, schedule);
|
||||||
|
itemEntity.setDeltaMovement(Vec3.ZERO);
|
||||||
|
te.getLevel()
|
||||||
|
.addFreshEntity(itemEntity);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void applySettings(StationTileEntity te) {}
|
protected void applySettings(StationTileEntity te) {}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ import com.simibubi.create.foundation.gui.AllIcons;
|
||||||
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
||||||
import com.simibubi.create.foundation.gui.widget.IconButton;
|
import com.simibubi.create.foundation.gui.widget.IconButton;
|
||||||
import com.simibubi.create.foundation.networking.AllPackets;
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
|
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.client.gui.components.EditBox;
|
import net.minecraft.client.gui.components.EditBox;
|
||||||
|
@ -26,7 +27,7 @@ public class StationScreen extends AbstractStationScreen {
|
||||||
private EditBox trainNameBox;
|
private EditBox trainNameBox;
|
||||||
private IconButton newTrainButton;
|
private IconButton newTrainButton;
|
||||||
private IconButton disassembleTrainButton;
|
private IconButton disassembleTrainButton;
|
||||||
private IconButton openScheduleButton;
|
private IconButton dropScheduleButton;
|
||||||
|
|
||||||
private int leavingAnimation;
|
private int leavingAnimation;
|
||||||
private LerpedFloat trainPosition;
|
private LerpedFloat trainPosition;
|
||||||
|
@ -69,20 +70,23 @@ 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(new TextComponent("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);
|
||||||
|
|
||||||
openScheduleButton = new IconButton(x + 73, y + 65, AllIcons.I_VIEW_SCHEDULE);
|
dropScheduleButton = new IconButton(x + 73, y + 65, AllIcons.I_VIEW_SCHEDULE);
|
||||||
openScheduleButton.active = false;
|
dropScheduleButton.active = false;
|
||||||
openScheduleButton.visible = false;
|
dropScheduleButton.visible = false;
|
||||||
addRenderableWidget(openScheduleButton);
|
dropScheduleButton
|
||||||
|
.withCallback(() -> AllPackets.channel.sendToServer(StationEditPacket.dropSchedule(te.getBlockPos())));
|
||||||
|
addRenderableWidget(dropScheduleButton);
|
||||||
|
|
||||||
onTextChanged = s -> trainNameBox.x = nameBoxX(s, trainNameBox);
|
onTextChanged = s -> trainNameBox.x = nameBoxX(s, trainNameBox);
|
||||||
trainNameBox = new EditBox(font, x + 23, y + 47, background.width - 20, 10, new TextComponent(""));
|
trainNameBox = new EditBox(font, x + 23, y + 47, background.width - 20, 10, new TextComponent(""));
|
||||||
|
@ -133,8 +137,8 @@ public class StationScreen extends AbstractStationScreen {
|
||||||
newTrainButton.visible = false;
|
newTrainButton.visible = false;
|
||||||
disassembleTrainButton.active = false;
|
disassembleTrainButton.active = false;
|
||||||
disassembleTrainButton.visible = true;
|
disassembleTrainButton.visible = true;
|
||||||
openScheduleButton.active = false;
|
dropScheduleButton.active = te.trainHasSchedule;
|
||||||
openScheduleButton.visible = true;
|
dropScheduleButton.visible = true;
|
||||||
|
|
||||||
trainNameBox.active = true;
|
trainNameBox.active = true;
|
||||||
trainNameBox.setValue(imminentTrain.name.getString());
|
trainNameBox.setValue(imminentTrain.name.getString());
|
||||||
|
@ -164,8 +168,8 @@ public class StationScreen extends AbstractStationScreen {
|
||||||
|
|
||||||
displayedTrain = new WeakReference<>(null);
|
displayedTrain = new WeakReference<>(null);
|
||||||
disassembleTrainButton.visible = false;
|
disassembleTrainButton.visible = false;
|
||||||
openScheduleButton.active = false;
|
dropScheduleButton.active = false;
|
||||||
openScheduleButton.visible = false;
|
dropScheduleButton.visible = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +180,14 @@ public class StationScreen extends AbstractStationScreen {
|
||||||
|
|
||||||
boolean trainAtStation = trainPresent();
|
boolean trainAtStation = trainPresent();
|
||||||
disassembleTrainButton.active = trainAtStation && te.trainCanDisassemble;
|
disassembleTrainButton.active = trainAtStation && te.trainCanDisassemble;
|
||||||
openScheduleButton.active = train.runtime.getSchedule() != null;
|
dropScheduleButton.active = te.trainHasSchedule;
|
||||||
|
|
||||||
|
if (te.trainHasSchedule)
|
||||||
|
dropScheduleButton.setToolTip(
|
||||||
|
Lang.translate(te.trainHasAutoSchedule ? "station.remove_auto_schedule" : "station.remove_schedule"));
|
||||||
|
else
|
||||||
|
dropScheduleButton.getToolTip()
|
||||||
|
.clear();
|
||||||
|
|
||||||
float f = trainAtStation ? 0 : (float) (train.navigation.distanceToDestination / 30f);
|
float f = trainAtStation ? 0 : (float) (train.navigation.distanceToDestination / 30f);
|
||||||
trainPosition.setValue(targetPos - (targetPos + trainIconWidth) * f);
|
trainPosition.setValue(targetPos - (targetPos + trainIconWidth) * f);
|
||||||
|
|
|
@ -12,6 +12,8 @@ import java.util.UUID;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllItems;
|
||||||
|
import com.simibubi.create.AllSoundEvents;
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException;
|
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException;
|
||||||
import com.simibubi.create.content.logistics.trains.IBogeyBlock;
|
import com.simibubi.create.content.logistics.trains.IBogeyBlock;
|
||||||
|
@ -28,11 +30,14 @@ import com.simibubi.create.content.logistics.trains.entity.TrainPacket;
|
||||||
import com.simibubi.create.content.logistics.trains.entity.TravellingPoint;
|
import com.simibubi.create.content.logistics.trains.entity.TravellingPoint;
|
||||||
import com.simibubi.create.content.logistics.trains.management.edgePoint.EdgePointType;
|
import com.simibubi.create.content.logistics.trains.management.edgePoint.EdgePointType;
|
||||||
import com.simibubi.create.content.logistics.trains.management.edgePoint.TrackTargetingBehaviour;
|
import com.simibubi.create.content.logistics.trains.management.edgePoint.TrackTargetingBehaviour;
|
||||||
|
import com.simibubi.create.content.logistics.trains.management.schedule.Schedule;
|
||||||
|
import com.simibubi.create.content.logistics.trains.management.schedule.ScheduleItem;
|
||||||
import com.simibubi.create.foundation.networking.AllPackets;
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
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.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
import com.simibubi.create.foundation.utility.WorldAttached;
|
import com.simibubi.create.foundation.utility.WorldAttached;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
@ -43,6 +48,7 @@ import net.minecraft.core.Direction.AxisDirection;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.levelgen.structure.BoundingBox;
|
import net.minecraft.world.level.levelgen.structure.BoundingBox;
|
||||||
|
@ -50,6 +56,11 @@ import net.minecraft.world.phys.AABB;
|
||||||
import net.minecraft.world.phys.Vec3;
|
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;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
|
import net.minecraftforge.items.ItemStackHandler;
|
||||||
import net.minecraftforge.network.PacketDistributor;
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
|
|
||||||
public class StationTileEntity extends SmartTileEntity {
|
public class StationTileEntity extends SmartTileEntity {
|
||||||
|
@ -58,18 +69,24 @@ public class StationTileEntity extends SmartTileEntity {
|
||||||
|
|
||||||
protected int failedCarriageIndex;
|
protected int failedCarriageIndex;
|
||||||
protected AssemblyException lastException;
|
protected AssemblyException lastException;
|
||||||
|
protected IItemHandlerModifiable autoSchedule;
|
||||||
|
protected LazyOptional<IItemHandler> capability;
|
||||||
|
|
||||||
// for display
|
// for display
|
||||||
UUID imminentTrain;
|
UUID imminentTrain;
|
||||||
boolean trainPresent;
|
boolean trainPresent;
|
||||||
boolean trainBackwards;
|
boolean trainBackwards;
|
||||||
boolean trainCanDisassemble;
|
boolean trainCanDisassemble;
|
||||||
|
boolean trainHasSchedule;
|
||||||
|
boolean trainHasAutoSchedule;
|
||||||
|
|
||||||
public StationTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
public StationTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||||
super(type, pos, state);
|
super(type, pos, state);
|
||||||
setLazyTickRate(20);
|
setLazyTickRate(20);
|
||||||
lastException = null;
|
lastException = null;
|
||||||
failedCarriageIndex = -1;
|
failedCarriageIndex = -1;
|
||||||
|
autoSchedule = new StationInventory();
|
||||||
|
capability = LazyOptional.of(() -> autoSchedule);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -85,6 +102,8 @@ public class StationTileEntity extends SmartTileEntity {
|
||||||
super.read(tag, clientPacket);
|
super.read(tag, clientPacket);
|
||||||
invalidateRenderBoundingBox();
|
invalidateRenderBoundingBox();
|
||||||
|
|
||||||
|
autoSchedule.setStackInSlot(0, ItemStack.of(tag.getCompound("HeldItem")));
|
||||||
|
|
||||||
if (!clientPacket)
|
if (!clientPacket)
|
||||||
return;
|
return;
|
||||||
if (!tag.contains("ImminentTrain")) {
|
if (!tag.contains("ImminentTrain")) {
|
||||||
|
@ -96,15 +115,19 @@ public class StationTileEntity extends SmartTileEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
imminentTrain = tag.getUUID("ImminentTrain");
|
imminentTrain = tag.getUUID("ImminentTrain");
|
||||||
trainPresent = tag.getBoolean("TrainPresent");
|
trainPresent = tag.contains("TrainPresent");
|
||||||
trainCanDisassemble = tag.getBoolean("TrainCanDisassemble");
|
trainCanDisassemble = tag.contains("TrainCanDisassemble");
|
||||||
trainBackwards = tag.getBoolean("TrainBackwards");
|
trainBackwards = tag.contains("TrainBackwards");
|
||||||
|
trainHasSchedule = tag.contains("TrainHasSchedule");
|
||||||
|
trainHasAutoSchedule = tag.contains("TrainHasAutoSchedule");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void write(CompoundTag tag, boolean clientPacket) {
|
protected void write(CompoundTag tag, boolean clientPacket) {
|
||||||
AssemblyException.write(tag, lastException);
|
AssemblyException.write(tag, lastException);
|
||||||
tag.putInt("FailedCarriageIndex", failedCarriageIndex);
|
tag.putInt("FailedCarriageIndex", failedCarriageIndex);
|
||||||
|
tag.put("HeldItem", autoSchedule.getStackInSlot(0)
|
||||||
|
.serializeNBT());
|
||||||
super.write(tag, clientPacket);
|
super.write(tag, clientPacket);
|
||||||
|
|
||||||
if (!clientPacket)
|
if (!clientPacket)
|
||||||
|
@ -113,9 +136,17 @@ public class StationTileEntity extends SmartTileEntity {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tag.putUUID("ImminentTrain", imminentTrain);
|
tag.putUUID("ImminentTrain", imminentTrain);
|
||||||
tag.putBoolean("TrainPresent", trainPresent);
|
|
||||||
tag.putBoolean("TrainCanDisassemble", trainCanDisassemble);
|
if (trainPresent)
|
||||||
tag.putBoolean("TrainBackwards", trainBackwards);
|
NBTHelper.putMarker(tag, "TrainPresent");
|
||||||
|
if (trainCanDisassemble)
|
||||||
|
NBTHelper.putMarker(tag, "TrainCanDisassemble");
|
||||||
|
if (trainBackwards)
|
||||||
|
NBTHelper.putMarker(tag, "TrainBackwards");
|
||||||
|
if (trainHasSchedule)
|
||||||
|
NBTHelper.putMarker(tag, "TrainHasSchedule");
|
||||||
|
if (trainHasAutoSchedule)
|
||||||
|
NBTHelper.putMarker(tag, "TrainHasAutoSchedule");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -157,13 +188,24 @@ public class StationTileEntity extends SmartTileEntity {
|
||||||
boolean trainPresent = imminentTrain != null && imminentTrain.getCurrentStation() == station;
|
boolean trainPresent = imminentTrain != null && imminentTrain.getCurrentStation() == station;
|
||||||
boolean canDisassemble = trainPresent && imminentTrain.canDisassemble();
|
boolean canDisassemble = trainPresent && imminentTrain.canDisassemble();
|
||||||
UUID imminentID = imminentTrain != null ? imminentTrain.id : null;
|
UUID imminentID = imminentTrain != null ? imminentTrain.id : null;
|
||||||
|
boolean trainHasSchedule = trainPresent && imminentTrain.runtime.getSchedule() != null;
|
||||||
|
boolean trainHasAutoSchedule = trainHasSchedule && imminentTrain.runtime.isAutoSchedule;
|
||||||
|
boolean newlyArrived = this.trainPresent != trainPresent;
|
||||||
|
|
||||||
|
if (newlyArrived)
|
||||||
|
applyAutoSchedule();
|
||||||
|
|
||||||
|
if (newlyArrived || this.trainCanDisassemble != canDisassemble
|
||||||
|
|| !Objects.equals(imminentID, this.imminentTrain) || this.trainHasSchedule != trainHasSchedule
|
||||||
|
|| this.trainHasAutoSchedule != trainHasAutoSchedule) {
|
||||||
|
|
||||||
if (this.trainPresent != trainPresent || this.trainCanDisassemble != canDisassemble
|
|
||||||
|| !Objects.equals(imminentID, this.imminentTrain)) {
|
|
||||||
this.imminentTrain = imminentID;
|
this.imminentTrain = imminentID;
|
||||||
this.trainPresent = trainPresent;
|
this.trainPresent = trainPresent;
|
||||||
this.trainCanDisassemble = canDisassemble;
|
this.trainCanDisassemble = canDisassemble;
|
||||||
this.trainBackwards = imminentTrain != null && imminentTrain.currentlyBackwards;
|
this.trainBackwards = imminentTrain != null && imminentTrain.currentlyBackwards;
|
||||||
|
this.trainHasSchedule = trainHasSchedule;
|
||||||
|
this.trainHasAutoSchedule = trainHasAutoSchedule;
|
||||||
|
|
||||||
notifyUpdate();
|
notifyUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -531,4 +573,51 @@ public class StationTileEntity extends SmartTileEntity {
|
||||||
return new AABB(worldPosition, edgePoint.getGlobalPosition()).inflate(2);
|
return new AABB(worldPosition, edgePoint.getGlobalPosition()).inflate(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemStack getAutoSchedule() {
|
||||||
|
return autoSchedule.getStackInSlot(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
||||||
|
if (isItemHandlerCap(cap))
|
||||||
|
return capability.cast();
|
||||||
|
return super.getCapability(cap, side);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void applyAutoSchedule() {
|
||||||
|
ItemStack stack = getAutoSchedule();
|
||||||
|
if (!AllItems.SCHEDULE.isIn(stack))
|
||||||
|
return;
|
||||||
|
Schedule schedule = ScheduleItem.getSchedule(stack);
|
||||||
|
if (schedule == null || schedule.entries.isEmpty())
|
||||||
|
return;
|
||||||
|
GlobalStation station = getStation();
|
||||||
|
if (station == null)
|
||||||
|
return;
|
||||||
|
Train imminentTrain = station.getImminentTrain();
|
||||||
|
if (imminentTrain == null || imminentTrain.getCurrentStation() != station)
|
||||||
|
return;
|
||||||
|
imminentTrain.runtime.setSchedule(schedule, true);
|
||||||
|
AllSoundEvents.CONFIRM.playOnServer(level, worldPosition, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class StationInventory extends ItemStackHandler {
|
||||||
|
|
||||||
|
public StationInventory() {
|
||||||
|
super(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onContentsChanged(int slot) {
|
||||||
|
applyAutoSchedule();
|
||||||
|
sendData();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isItemValid(int slot, ItemStack stack) {
|
||||||
|
return super.isItemValid(slot, stack) && AllItems.SCHEDULE.isIn(stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,10 +66,12 @@ public class Schedule {
|
||||||
|
|
||||||
public List<ScheduleEntry> entries;
|
public List<ScheduleEntry> entries;
|
||||||
public boolean cyclic;
|
public boolean cyclic;
|
||||||
|
public int savedProgress;
|
||||||
|
|
||||||
public Schedule() {
|
public Schedule() {
|
||||||
entries = new ArrayList<>();
|
entries = new ArrayList<>();
|
||||||
cyclic = true;
|
cyclic = true;
|
||||||
|
savedProgress = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompoundTag write() {
|
public CompoundTag write() {
|
||||||
|
@ -77,6 +79,8 @@ public class Schedule {
|
||||||
ListTag list = NBTHelper.writeCompoundList(entries, ScheduleEntry::write);
|
ListTag list = NBTHelper.writeCompoundList(entries, ScheduleEntry::write);
|
||||||
tag.put("Entries", list);
|
tag.put("Entries", list);
|
||||||
tag.putBoolean("Cyclic", cyclic);
|
tag.putBoolean("Cyclic", cyclic);
|
||||||
|
if (savedProgress > 0)
|
||||||
|
tag.putInt("Progress", savedProgress);
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,6 +88,8 @@ public class Schedule {
|
||||||
Schedule schedule = new Schedule();
|
Schedule schedule = new Schedule();
|
||||||
schedule.entries = NBTHelper.readCompoundList(tag.getList("Entries", Tag.TAG_COMPOUND), ScheduleEntry::fromTag);
|
schedule.entries = NBTHelper.readCompoundList(tag.getList("Entries", Tag.TAG_COMPOUND), ScheduleEntry::fromTag);
|
||||||
schedule.cyclic = tag.getBoolean("Cyclic");
|
schedule.cyclic = tag.getBoolean("Cyclic");
|
||||||
|
if (tag.contains("Progress"))
|
||||||
|
schedule.savedProgress = tag.getInt("Progress");
|
||||||
return schedule;
|
return schedule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -100,11 +100,24 @@ public class ScheduleItem extends Item implements MenuProvider {
|
||||||
return InteractionResult.SUCCESS;
|
return InteractionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (train.runtime.getSchedule() != null) {
|
||||||
|
AllSoundEvents.DENY.playOnServer(pPlayer.level, pPlayer.blockPosition(), 1, 1);
|
||||||
|
pPlayer.displayClientMessage(Lang.translate("schedule.remove_with_empty_hand"), true);
|
||||||
|
return InteractionResult.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (schedule.entries.isEmpty()) {
|
||||||
|
AllSoundEvents.DENY.playOnServer(pPlayer.level, pPlayer.blockPosition(), 1, 1);
|
||||||
|
pPlayer.displayClientMessage(Lang.translate("schedule.no_stops"), true);
|
||||||
|
return InteractionResult.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
train.runtime.setSchedule(schedule, false);
|
train.runtime.setSchedule(schedule, false);
|
||||||
AllSoundEvents.CONFIRM.playOnServer(pPlayer.level, pPlayer.blockPosition(), 1, 1);
|
AllSoundEvents.CONFIRM.playOnServer(pPlayer.level, pPlayer.blockPosition(), 1, 1);
|
||||||
pPlayer.displayClientMessage(Lang.translate("schedule.applied_to_train")
|
pPlayer.displayClientMessage(Lang.translate("schedule.applied_to_train")
|
||||||
.withStyle(ChatFormatting.GREEN), true);
|
.withStyle(ChatFormatting.GREEN), true);
|
||||||
|
pStack.shrink(1);
|
||||||
|
pPlayer.setItemInHand(pUsedHand, pStack.isEmpty() ? ItemStack.EMPTY : pStack);
|
||||||
}
|
}
|
||||||
return InteractionResult.SUCCESS;
|
return InteractionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
package com.simibubi.create.content.logistics.trains.management.schedule;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllSoundEvents;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
|
||||||
|
import com.simibubi.create.content.logistics.trains.entity.CarriageContraption;
|
||||||
|
import com.simibubi.create.content.logistics.trains.entity.CarriageContraptionEntity;
|
||||||
|
import com.simibubi.create.content.logistics.trains.entity.Train;
|
||||||
|
import com.simibubi.create.foundation.utility.Couple;
|
||||||
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteract;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
|
@EventBusSubscriber
|
||||||
|
public class ScheduleItemRetrieval {
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void removeScheduleFromConductor(EntityInteract event) {
|
||||||
|
Entity entity = event.getTarget();
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if (player == null || entity == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Entity rootVehicle = entity.getRootVehicle();
|
||||||
|
if (!(rootVehicle instanceof CarriageContraptionEntity))
|
||||||
|
return;
|
||||||
|
if (player.level.isClientSide)
|
||||||
|
return;
|
||||||
|
if (event.getHand() == InteractionHand.OFF_HAND)
|
||||||
|
return;
|
||||||
|
|
||||||
|
CarriageContraptionEntity cce = (CarriageContraptionEntity) rootVehicle;
|
||||||
|
Contraption contraption = cce.getContraption();
|
||||||
|
if (!(contraption instanceof CarriageContraption cc))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Train train = cce.getCarriage().train;
|
||||||
|
if (train == null)
|
||||||
|
return;
|
||||||
|
if (train.runtime.getSchedule() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Integer seatIndex = contraption.getSeatMapping()
|
||||||
|
.get(entity.getUUID());
|
||||||
|
if (seatIndex == null)
|
||||||
|
return;
|
||||||
|
BlockPos seatPos = contraption.getSeats()
|
||||||
|
.get(seatIndex);
|
||||||
|
Couple<Boolean> directions = cc.conductorSeats.get(seatPos);
|
||||||
|
if (directions == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ItemStack itemInHand = player.getItemInHand(event.getHand());
|
||||||
|
if (!itemInHand.isEmpty()) {
|
||||||
|
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
|
||||||
|
player.displayClientMessage(Lang.translate("schedule.remove_with_empty_hand"), true);
|
||||||
|
event.setCanceled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AllSoundEvents.playItemPickup(player);
|
||||||
|
player.displayClientMessage(
|
||||||
|
Lang.translate(
|
||||||
|
train.runtime.isAutoSchedule ? "schedule.auto_removed_from_train" : "schedule.removed_from_train"),
|
||||||
|
true);
|
||||||
|
|
||||||
|
player.getInventory().placeItemBackInInventory(train.runtime.returnSchedule());
|
||||||
|
// player.setItemInHand(event.getHand(), train.runtime.returnSchedule());
|
||||||
|
event.setCanceled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllItems;
|
||||||
import com.simibubi.create.content.logistics.trains.entity.Train;
|
import com.simibubi.create.content.logistics.trains.entity.Train;
|
||||||
import com.simibubi.create.content.logistics.trains.management.display.GlobalTrainDisplayData.TrainDeparturePrediction;
|
import com.simibubi.create.content.logistics.trains.management.display.GlobalTrainDisplayData.TrainDeparturePrediction;
|
||||||
import com.simibubi.create.content.logistics.trains.management.edgePoint.EdgePointType;
|
import com.simibubi.create.content.logistics.trains.management.edgePoint.EdgePointType;
|
||||||
|
@ -20,6 +21,7 @@ import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
import net.minecraft.network.chat.TextComponent;
|
import net.minecraft.network.chat.TextComponent;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
|
||||||
public class ScheduleRuntime {
|
public class ScheduleRuntime {
|
||||||
|
@ -31,7 +33,7 @@ public class ScheduleRuntime {
|
||||||
Train train;
|
Train train;
|
||||||
Schedule schedule;
|
Schedule schedule;
|
||||||
|
|
||||||
boolean isAutoSchedule;
|
public boolean isAutoSchedule;
|
||||||
public boolean paused;
|
public boolean paused;
|
||||||
public int currentEntry;
|
public int currentEntry;
|
||||||
public State state;
|
public State state;
|
||||||
|
@ -173,7 +175,7 @@ public class ScheduleRuntime {
|
||||||
public void setSchedule(Schedule schedule, boolean auto) {
|
public void setSchedule(Schedule schedule, boolean auto) {
|
||||||
reset();
|
reset();
|
||||||
this.schedule = schedule;
|
this.schedule = schedule;
|
||||||
currentEntry = 0;
|
currentEntry = Mth.clamp(schedule.savedProgress, 0, schedule.entries.size() - 1);
|
||||||
paused = false;
|
paused = false;
|
||||||
isAutoSchedule = auto;
|
isAutoSchedule = auto;
|
||||||
train.status.newSchedule();
|
train.status.newSchedule();
|
||||||
|
@ -186,6 +188,7 @@ public class ScheduleRuntime {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void discardSchedule() {
|
public void discardSchedule() {
|
||||||
|
train.navigation.cancelNavigation();
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,4 +352,20 @@ public class ScheduleRuntime {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemStack returnSchedule() {
|
||||||
|
if (schedule == null)
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
ItemStack stack = AllItems.SCHEDULE.asStack();
|
||||||
|
CompoundTag nbt = stack.getOrCreateTag();
|
||||||
|
schedule.savedProgress = currentEntry;
|
||||||
|
nbt.put("Schedule", schedule.write());
|
||||||
|
stack = isAutoSchedule ? ItemStack.EMPTY : stack;
|
||||||
|
discardSchedule();
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSchedulePresentClientside(boolean present) {
|
||||||
|
schedule = present ? new Schedule() : null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,9 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
||||||
private IconButton cyclicButton;
|
private IconButton cyclicButton;
|
||||||
private Indicator cyclicIndicator;
|
private Indicator cyclicIndicator;
|
||||||
|
|
||||||
|
private IconButton resetProgress;
|
||||||
|
private IconButton skipProgress;
|
||||||
|
|
||||||
private ScheduleDestination editingDestination;
|
private ScheduleDestination editingDestination;
|
||||||
private ScheduleWaitCondition editingCondition;
|
private ScheduleWaitCondition editingCondition;
|
||||||
private SelectionScrollInput scrollInput;
|
private SelectionScrollInput scrollInput;
|
||||||
|
@ -112,6 +115,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
||||||
schedule.cyclic = !schedule.cyclic;
|
schedule.cyclic = !schedule.cyclic;
|
||||||
cyclicIndicator.state = schedule.cyclic ? State.ON : State.OFF;
|
cyclicIndicator.state = schedule.cyclic ? State.ON : State.OFF;
|
||||||
});
|
});
|
||||||
|
|
||||||
List<Component> tip = cyclicButton.getToolTip();
|
List<Component> tip = cyclicButton.getToolTip();
|
||||||
tip.add(Lang.translate("schedule.loop"));
|
tip.add(Lang.translate("schedule.loop"));
|
||||||
tip.add(Lang.translate("schedule.loop1")
|
tip.add(Lang.translate("schedule.loop1")
|
||||||
|
@ -121,6 +125,25 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
||||||
|
|
||||||
addRenderableWidget(cyclicButton);
|
addRenderableWidget(cyclicButton);
|
||||||
|
|
||||||
|
resetProgress = new IconButton(leftPos + 45, topPos + 202, AllIcons.I_PRIORITY_VERY_HIGH);
|
||||||
|
resetProgress.withCallback(() -> {
|
||||||
|
schedule.savedProgress = 0;
|
||||||
|
resetProgress.active = false;
|
||||||
|
});
|
||||||
|
resetProgress.active = schedule.savedProgress > 0 && !schedule.entries.isEmpty();
|
||||||
|
resetProgress.setToolTip(Lang.translate("schedule.reset"));
|
||||||
|
addRenderableWidget(resetProgress);
|
||||||
|
|
||||||
|
skipProgress = new IconButton(leftPos + 63, topPos + 202, AllIcons.I_PRIORITY_LOW);
|
||||||
|
skipProgress.withCallback(() -> {
|
||||||
|
schedule.savedProgress++;
|
||||||
|
schedule.savedProgress %= schedule.entries.size();
|
||||||
|
resetProgress.active = schedule.savedProgress > 0;
|
||||||
|
});
|
||||||
|
skipProgress.active = schedule.entries.size() > 1;
|
||||||
|
skipProgress.setToolTip(Lang.translate("schedule.skip"));
|
||||||
|
addRenderableWidget(skipProgress);
|
||||||
|
|
||||||
stopEditing();
|
stopEditing();
|
||||||
extraAreas = ImmutableList.of(new Rect2i(leftPos + bg.width, topPos + bg.height - 56, 48, 48));
|
extraAreas = ImmutableList.of(new Rect2i(leftPos + bg.width, topPos + bg.height - 56, 48, 48));
|
||||||
horizontalScrolls.clear();
|
horizontalScrolls.clear();
|
||||||
|
@ -134,6 +157,8 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
||||||
confirmButton.visible = false;
|
confirmButton.visible = false;
|
||||||
cyclicButton.visible = false;
|
cyclicButton.visible = false;
|
||||||
cyclicIndicator.visible = false;
|
cyclicIndicator.visible = false;
|
||||||
|
skipProgress.visible = false;
|
||||||
|
resetProgress.visible = false;
|
||||||
scrollInput = new SelectionScrollInput(leftPos + 56, topPos + 65, 143, 16);
|
scrollInput = new SelectionScrollInput(leftPos + 56, topPos + 65, 143, 16);
|
||||||
scrollInputLabel = new Label(leftPos + 59, topPos + 69, new TextComponent("")).withShadow();
|
scrollInputLabel = new Label(leftPos + 59, topPos + 69, new TextComponent("")).withShadow();
|
||||||
editorConfirm = new IconButton(leftPos + 56 + 168, topPos + 65 + 22, AllIcons.I_CONFIRM);
|
editorConfirm = new IconButton(leftPos + 56 + 168, topPos + 65 + 22, AllIcons.I_CONFIRM);
|
||||||
|
@ -203,6 +228,8 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
||||||
confirmButton.visible = true;
|
confirmButton.visible = true;
|
||||||
cyclicButton.visible = true;
|
cyclicButton.visible = true;
|
||||||
cyclicIndicator.visible = true;
|
cyclicIndicator.visible = true;
|
||||||
|
skipProgress.visible = true;
|
||||||
|
resetProgress.visible = true;
|
||||||
if (editingCondition == null && editingDestination == null)
|
if (editingCondition == null && editingDestination == null)
|
||||||
return;
|
return;
|
||||||
removeWidget(scrollInput);
|
removeWidget(scrollInput);
|
||||||
|
@ -248,6 +275,11 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
||||||
scroll.tickChaser();
|
scroll.tickChaser();
|
||||||
for (LerpedFloat lerpedFloat : horizontalScrolls)
|
for (LerpedFloat lerpedFloat : horizontalScrolls)
|
||||||
lerpedFloat.tickChaser();
|
lerpedFloat.tickChaser();
|
||||||
|
|
||||||
|
schedule.savedProgress =
|
||||||
|
schedule.entries.isEmpty() ? 0 : Mth.clamp(schedule.savedProgress, 0, schedule.entries.size() - 1);
|
||||||
|
resetProgress.active = schedule.savedProgress > 0;
|
||||||
|
skipProgress.active = schedule.entries.size() > 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -275,6 +307,17 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
||||||
float scrollOffset = -scroll.getValue(partialTicks);
|
float scrollOffset = -scroll.getValue(partialTicks);
|
||||||
|
|
||||||
for (int i = 0; i <= entries.size(); i++) {
|
for (int i = 0; i <= entries.size(); i++) {
|
||||||
|
|
||||||
|
if (schedule.savedProgress == i && !schedule.entries.isEmpty()) {
|
||||||
|
matrixStack.pushPose();
|
||||||
|
float expectedY = scrollOffset + topPos + yOffset + 4;
|
||||||
|
float actualY = Mth.clamp(expectedY, 49, 197);
|
||||||
|
matrixStack.translate(0, actualY, 0);
|
||||||
|
(expectedY == actualY ? AllGuiTextures.SCHEDULE_POINTER : AllGuiTextures.SCHEDULE_POINTER_OFFSCREEN)
|
||||||
|
.render(matrixStack, leftPos, 0);
|
||||||
|
matrixStack.popPose();
|
||||||
|
}
|
||||||
|
|
||||||
startStencil(matrixStack, leftPos + 16, topPos + 16, 220, 173);
|
startStencil(matrixStack, leftPos + 16, topPos + 16, 220, 173);
|
||||||
matrixStack.pushPose();
|
matrixStack.pushPose();
|
||||||
matrixStack.translate(0, scrollOffset, 0);
|
matrixStack.translate(0, scrollOffset, 0);
|
||||||
|
@ -431,7 +474,8 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
||||||
matrixStack.popPose();
|
matrixStack.popPose();
|
||||||
|
|
||||||
if (xOffset + 16 > cardWidth - 26) {
|
if (xOffset + 16 > cardWidth - 26) {
|
||||||
TransformStack.cast(matrixStack).rotateZ(-90);
|
TransformStack.cast(matrixStack)
|
||||||
|
.rotateZ(-90);
|
||||||
Matrix4f m = matrixStack.last()
|
Matrix4f m = matrixStack.last()
|
||||||
.pose();
|
.pose();
|
||||||
GuiUtils.drawGradientRect(m, 200, -cardHeight + 2, 18, -2 - cardHeader, 28, 0x44000000, 0x00000000);
|
GuiUtils.drawGradientRect(m, 200, -cardHeight + 2, 18, -2 - cardHeader, 28, 0x44000000, 0x00000000);
|
||||||
|
@ -854,7 +898,8 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
||||||
protected void renderForeground(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) {
|
protected void renderForeground(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) {
|
||||||
super.renderForeground(matrixStack, mouseX, mouseY, partialTicks);
|
super.renderForeground(matrixStack, mouseX, mouseY, partialTicks);
|
||||||
GuiGameElement.of(menu.contentHolder).<GuiGameElement
|
GuiGameElement.of(menu.contentHolder).<GuiGameElement
|
||||||
.GuiRenderBuilder>at(leftPos + AllGuiTextures.SCHEDULE.width, topPos + AllGuiTextures.SCHEDULE.height - 56, -200)
|
.GuiRenderBuilder>at(leftPos + AllGuiTextures.SCHEDULE.width, topPos + AllGuiTextures.SCHEDULE.height - 56,
|
||||||
|
-200)
|
||||||
.scale(3)
|
.scale(3)
|
||||||
.render(matrixStack);
|
.render(matrixStack);
|
||||||
action(matrixStack, mouseX, mouseY, -1);
|
action(matrixStack, mouseX, mouseY, -1);
|
||||||
|
|
|
@ -114,6 +114,8 @@ public enum AllGuiTextures implements ScreenElement {
|
||||||
SCHEDULE_EDITOR_INACTIVE_SLOT("schedule_2", 0, 91, 18, 18),
|
SCHEDULE_EDITOR_INACTIVE_SLOT("schedule_2", 0, 91, 18, 18),
|
||||||
SCHEDULE_EDITOR_SECOND_LINE("schedule_2", 20, 91, 124, 18),
|
SCHEDULE_EDITOR_SECOND_LINE("schedule_2", 20, 91, 124, 18),
|
||||||
SCHEDULE_EDITOR_DIVIDER("schedule_2", 145, 91, 4, 18),
|
SCHEDULE_EDITOR_DIVIDER("schedule_2", 145, 91, 4, 18),
|
||||||
|
SCHEDULE_POINTER("schedule", 185, 239, 21, 16),
|
||||||
|
SCHEDULE_POINTER_OFFSCREEN("schedule", 171, 239, 13, 16),
|
||||||
|
|
||||||
STATION("schedule_2", 0, 111, 200, 127),
|
STATION("schedule_2", 0, 111, 200, 127),
|
||||||
STATION_ASSEMBLING("assemble", 200, 178),
|
STATION_ASSEMBLING("assemble", 200, 178),
|
||||||
|
|
|
@ -604,9 +604,15 @@
|
||||||
"create.schedule.loop": "Loop Forever",
|
"create.schedule.loop": "Loop Forever",
|
||||||
"create.schedule.loop1": "Schedule starts over",
|
"create.schedule.loop1": "Schedule starts over",
|
||||||
"create.schedule.loop2": "when completed",
|
"create.schedule.loop2": "when completed",
|
||||||
|
"create.schedule.reset": "Reset Progress",
|
||||||
|
"create.schedule.skip": "Skip current Stop",
|
||||||
"create.schedule.train_still_assembling": "Confirm Train Assembly in the Station UI first",
|
"create.schedule.train_still_assembling": "Confirm Train Assembly in the Station UI first",
|
||||||
"create.schedule.applied_to_train": "Train is now following this Schedule",
|
"create.schedule.applied_to_train": "Train is now following this Schedule",
|
||||||
"create.schedule.non_controlling_seat": "Conductor needs to sit in front of a Controls block",
|
"create.schedule.non_controlling_seat": "Conductor needs to sit in front of a Controls block",
|
||||||
|
"create.schedule.remove_with_empty_hand": "Remove current Schedule with an Empty Hand",
|
||||||
|
"create.schedule.auto_removed_from_train": "Auto-Schedule discarded",
|
||||||
|
"create.schedule.removed_from_train": "Schedule retrieved from Train",
|
||||||
|
"create.schedule.no_stops": "This Schedule does not have any Stops yet",
|
||||||
|
|
||||||
"create.track.selection_cleared": "Selection Cleared",
|
"create.track.selection_cleared": "Selection Cleared",
|
||||||
"create.track.valid_connection": "Can Connect \u2714",
|
"create.track.valid_connection": "Can Connect \u2714",
|
||||||
|
@ -623,6 +629,11 @@
|
||||||
"create.track.leave_slope_descending": "Cannot leave this slope while descending",
|
"create.track.leave_slope_descending": "Cannot leave this slope while descending",
|
||||||
"create.track.turn_90": "Can only turn up to 90 Degrees",
|
"create.track.turn_90": "Can only turn up to 90 Degrees",
|
||||||
|
|
||||||
|
"create.station.create_train": "Create new Train",
|
||||||
|
"create.station.disassemble_train": "Disassemble Train",
|
||||||
|
"create.station.remove_schedule": "Retrieve Schedule",
|
||||||
|
"create.station.remove_auto_schedule": "Discard Auto-Schedule",
|
||||||
|
|
||||||
"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",
|
||||||
"create.train_assembly.no_bogeys": "No Bogeys Found",
|
"create.train_assembly.no_bogeys": "No Bogeys Found",
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
# Made in Blockbench 4.1.1
|
|
||||||
newmtl dark_iron
|
|
||||||
map_Kd #dark_iron
|
|
||||||
newmtl bogey
|
|
||||||
map_Kd #bogey
|
|
||||||
newmtl wheels
|
|
||||||
map_Kd #wheels
|
|
||||||
newmtl shaft
|
|
||||||
map_Kd #shaft
|
|
||||||
newmtl shaft_end
|
|
||||||
map_Kd #shaft_end
|
|
||||||
newmtl none
|
|
|
@ -1,120 +0,0 @@
|
||||||
# Blender MTL File: 'Bogey.blend'
|
|
||||||
# Material Count: 11
|
|
||||||
|
|
||||||
newmtl 00_Shaft
|
|
||||||
Ns 225.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 2
|
|
||||||
map_Kd F:\\Create\\00 Bogey\\axis.png
|
|
||||||
|
|
||||||
newmtl 00_Shaft_end
|
|
||||||
Ns 225.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 2
|
|
||||||
map_Kd F:\\Create\\00 Bogey\\axis_top.png
|
|
||||||
|
|
||||||
newmtl Belts
|
|
||||||
Ns 0.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.000000 0.000000 0.000000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 1
|
|
||||||
map_Kd F:\\Create\\00 Bogey\\Textures\\belt.png
|
|
||||||
|
|
||||||
newmtl Bogey_Body
|
|
||||||
Ns 225.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 2
|
|
||||||
map_Kd F:\\Create\\00 Bogey\\Textures\\bogey.png
|
|
||||||
|
|
||||||
newmtl Bogey_Body_2
|
|
||||||
Ns 225.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 2
|
|
||||||
map_Kd F:\\Create\\00 Bogey\\Textures\\Bogey2.png
|
|
||||||
|
|
||||||
newmtl Bogey_Piston
|
|
||||||
Ns 225.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 2
|
|
||||||
map_Kd F:\\Create\\00 Bogey\\bogey_piston.png
|
|
||||||
|
|
||||||
newmtl Checker_Black
|
|
||||||
Ns 225.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 2
|
|
||||||
map_Kd F:\\Create\\New Rails\\tuff_cut.png
|
|
||||||
|
|
||||||
newmtl Checker_White
|
|
||||||
Ns 225.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.500000 0.500000 0.500000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 2
|
|
||||||
map_Kd F:\\Create\\New Rails\\limestone_cut.png
|
|
||||||
|
|
||||||
newmtl None
|
|
||||||
Ns 500
|
|
||||||
Ka 0.8 0.8 0.8
|
|
||||||
Kd 0.8 0.8 0.8
|
|
||||||
Ks 0.8 0.8 0.8
|
|
||||||
d 1
|
|
||||||
illum 2
|
|
||||||
|
|
||||||
newmtl m_0.001
|
|
||||||
Ns 0.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.000000 0.000000 0.000000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 1
|
|
||||||
map_Kd F:\\Create\\00 Bogey\\track.png
|
|
||||||
|
|
||||||
newmtl wheel_Large
|
|
||||||
Ns 0.000000
|
|
||||||
Ka 1.000000 1.000000 1.000000
|
|
||||||
Kd 0.800000 0.800000 0.800000
|
|
||||||
Ks 0.000000 0.000000 0.000000
|
|
||||||
Ke 0.000000 0.000000 0.000000
|
|
||||||
Ni 1.450000
|
|
||||||
d 1.000000
|
|
||||||
illum 1
|
|
||||||
map_Kd F:\\Create\\00 Bogey\\Wheel_Large.png
|
|
|
@ -1,149 +0,0 @@
|
||||||
{
|
|
||||||
"credit": "Made with Blockbench",
|
|
||||||
"parent": "block/block",
|
|
||||||
"textures": {
|
|
||||||
"particle": "create:block/axis",
|
|
||||||
"1_1": "create:block/axis_top"
|
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"name": "bottom",
|
|
||||||
"from": [-2, 6, 0],
|
|
||||||
"to": [18, 13, 16],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, -8, -144]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"east": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"south": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"west": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"up": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"down": {"uv": [6, 8, 7, 9], "texture": "#1_1"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bottom",
|
|
||||||
"from": [-1, -10, 16],
|
|
||||||
"to": [6, 3, 26],
|
|
||||||
"rotation": {"angle": -45, "axis": "x", "origin": [8, -2, 8]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"east": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"south": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"west": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"up": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"down": {"uv": [6, 9, 7, 10], "texture": "#1_1"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bottom",
|
|
||||||
"from": [10, -10, 16],
|
|
||||||
"to": [17, 3, 26],
|
|
||||||
"rotation": {"angle": -45, "axis": "x", "origin": [8, -2, 8]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"east": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"south": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"west": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"up": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"down": {"uv": [6, 9, 7, 10], "texture": "#1_1"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bottom",
|
|
||||||
"from": [-1, 6, 0],
|
|
||||||
"to": [6, 16, 13],
|
|
||||||
"rotation": {"angle": -45, "axis": "x", "origin": [8, -2, 8]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"east": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"south": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"west": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"up": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"down": {"uv": [6, 9, 7, 10], "texture": "#1_1"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bottom",
|
|
||||||
"from": [10, 6, 0],
|
|
||||||
"to": [17, 16, 13],
|
|
||||||
"rotation": {"angle": -45, "axis": "x", "origin": [8, -2, 8]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"east": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"south": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"west": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"up": {"uv": [6, 9, 7, 10], "texture": "#1_1"},
|
|
||||||
"down": {"uv": [6, 9, 7, 10], "texture": "#1_1"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "left",
|
|
||||||
"from": [-4, 2.1, -7],
|
|
||||||
"to": [0, 7.9, 23],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, -8, -144]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"east": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"south": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"west": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"up": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"down": {"uv": [6, 8, 7, 9], "texture": "#1_1"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "right",
|
|
||||||
"from": [16, 2.1, -7],
|
|
||||||
"to": [20, 7.9, 23],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, -8, -144]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"east": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"south": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"west": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"up": {"uv": [6, 8, 7, 9], "texture": "#1_1"},
|
|
||||||
"down": {"uv": [6, 8, 7, 9], "texture": "#1_1"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"groups": [
|
|
||||||
{
|
|
||||||
"name": "group",
|
|
||||||
"origin": [8, 8, 8],
|
|
||||||
"color": 0,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"name": "boogy",
|
|
||||||
"origin": [0, 0, 0],
|
|
||||||
"color": 0,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"name": "frame",
|
|
||||||
"origin": [0, 0, -144],
|
|
||||||
"color": 0,
|
|
||||||
"children": [0, 1, 2, 3, 4, 5, 6]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wheelpair",
|
|
||||||
"origin": [0, 0, 0],
|
|
||||||
"color": 0,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"name": "left",
|
|
||||||
"origin": [0, 0, 0],
|
|
||||||
"color": 0,
|
|
||||||
"children": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "right",
|
|
||||||
"origin": [0, 0, 0],
|
|
||||||
"color": 0,
|
|
||||||
"children": []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"loader": "forge:obj",
|
|
||||||
"flip-v": true,
|
|
||||||
"model": "create:models/block/track/bogey/kryppers_axle.obj",
|
|
||||||
"textures": {
|
|
||||||
"dark_iron": "create:block/bogey/dark_iron",
|
|
||||||
"wheels": "create:block/bogey/wheels",
|
|
||||||
"bogey": "create:block/bogey/bogey",
|
|
||||||
"shaft": "create:block/axis",
|
|
||||||
"shaft_end": "create:block/axis_top"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"loader": "forge:obj",
|
|
||||||
"flip-v": true,
|
|
||||||
"model": "create:models/block/track/bogey/kryppers_frame.obj",
|
|
||||||
"textures": {
|
|
||||||
"dark_iron": "create:block/bogey/dark_iron",
|
|
||||||
"wheels": "create:block/bogey/wheels",
|
|
||||||
"bogey": "create:block/bogey/bogey",
|
|
||||||
"shaft": "create:block/axis",
|
|
||||||
"shaft_end": "create:block/axis_top"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,457 +0,0 @@
|
||||||
# Blender v3.0.0 Release Candidate OBJ File: 'Bogey.blend'
|
|
||||||
# www.blender.org
|
|
||||||
mtllib bogey.mtl
|
|
||||||
o Cube.012_Cube.004
|
|
||||||
v 0.562500 0.375000 -0.562500
|
|
||||||
v 0.562500 1.187500 -0.562500
|
|
||||||
v 0.562500 0.375000 0.562500
|
|
||||||
v 0.562500 1.187500 0.562500
|
|
||||||
v -0.562500 0.375000 -0.562500
|
|
||||||
v -0.562500 1.187500 -0.562500
|
|
||||||
v -0.562500 0.375000 0.562500
|
|
||||||
v -0.562500 1.187500 0.562500
|
|
||||||
v 0.562500 0.375000 0.125000
|
|
||||||
v 0.562500 1.187500 0.125000
|
|
||||||
v -0.562500 0.375000 0.125000
|
|
||||||
v -0.562500 1.187500 0.125000
|
|
||||||
v 0.562500 0.375000 -0.125000
|
|
||||||
v 0.562500 1.187500 -0.125000
|
|
||||||
v -0.562500 0.375000 -0.125000
|
|
||||||
v -0.562500 1.187500 -0.125000
|
|
||||||
v 0.250000 0.500000 -1.250000
|
|
||||||
v 0.250000 1.000000 -1.250000
|
|
||||||
v 0.250000 0.500000 -0.750000
|
|
||||||
v 0.250000 1.000000 -0.750000
|
|
||||||
v -0.250000 0.500000 -1.250000
|
|
||||||
v -0.250000 1.000000 -1.250000
|
|
||||||
v -0.250000 0.500000 -0.750000
|
|
||||||
v -0.250000 1.000000 -0.750000
|
|
||||||
v 0.250000 0.500000 1.250000
|
|
||||||
v 0.250000 1.000000 1.250000
|
|
||||||
v 0.250000 0.500000 0.750000
|
|
||||||
v 0.250000 1.000000 0.750000
|
|
||||||
v -0.250000 0.500000 1.250000
|
|
||||||
v -0.250000 1.000000 1.250000
|
|
||||||
v -0.250000 0.500000 0.750000
|
|
||||||
v -0.250000 1.000000 0.750000
|
|
||||||
v 1.000000 0.750000 -0.500000
|
|
||||||
v 1.000000 1.250000 -0.500000
|
|
||||||
v 1.000000 0.750000 0.500000
|
|
||||||
v 1.000000 1.250000 0.500000
|
|
||||||
v 0.562500 0.750000 -0.500000
|
|
||||||
v 0.562500 1.250000 -0.500000
|
|
||||||
v 0.562500 0.750000 0.500000
|
|
||||||
v 0.562500 1.250000 0.500000
|
|
||||||
v -1.000000 0.750000 -0.500000
|
|
||||||
v -1.000000 1.250000 -0.500000
|
|
||||||
v -1.000000 0.750000 0.500000
|
|
||||||
v -1.000000 1.250000 0.500000
|
|
||||||
v -0.562500 0.750000 -0.500000
|
|
||||||
v -0.562500 1.250000 -0.500000
|
|
||||||
v -0.562500 0.750000 0.500000
|
|
||||||
v -0.562500 1.250000 0.500000
|
|
||||||
v 0.687500 0.750000 -1.353553
|
|
||||||
v 0.687500 1.103553 -1.000000
|
|
||||||
v 0.687500 0.396447 -1.000000
|
|
||||||
v 0.687500 0.750000 -0.646447
|
|
||||||
v 0.312500 0.750000 -1.353553
|
|
||||||
v 0.312500 1.103553 -1.000000
|
|
||||||
v 0.312500 0.396447 -1.000000
|
|
||||||
v 0.312500 0.750000 -0.646447
|
|
||||||
v -0.687500 0.750000 -1.353553
|
|
||||||
v -0.687500 1.103553 -1.000000
|
|
||||||
v -0.687500 0.396447 -1.000000
|
|
||||||
v -0.687500 0.750000 -0.646447
|
|
||||||
v -0.312500 0.750000 -1.353553
|
|
||||||
v -0.312500 1.103553 -1.000000
|
|
||||||
v -0.312500 0.396447 -1.000000
|
|
||||||
v -0.312500 0.750000 -0.646447
|
|
||||||
v 0.687500 0.750000 1.353553
|
|
||||||
v 0.687500 1.103553 1.000000
|
|
||||||
v 0.687500 0.396447 1.000000
|
|
||||||
v 0.687500 0.750000 0.646446
|
|
||||||
v 0.312500 0.750000 1.353553
|
|
||||||
v 0.312500 1.103553 1.000000
|
|
||||||
v 0.312500 0.396447 1.000000
|
|
||||||
v 0.312500 0.750000 0.646446
|
|
||||||
v -0.687500 0.750000 1.353553
|
|
||||||
v -0.687500 1.103553 1.000000
|
|
||||||
v -0.687500 0.396447 1.000000
|
|
||||||
v -0.687500 0.750000 0.646446
|
|
||||||
v -0.312500 0.750000 1.353553
|
|
||||||
v -0.312500 1.103553 1.000000
|
|
||||||
v -0.312500 0.396447 1.000000
|
|
||||||
v -0.312500 0.750000 0.646446
|
|
||||||
v 0.375000 0.811872 -0.761351
|
|
||||||
v 0.375000 0.988649 -0.938128
|
|
||||||
v 0.625000 0.811872 -0.761351
|
|
||||||
v 0.625000 0.988649 -0.938128
|
|
||||||
v 0.375000 0.900260 -1.026516
|
|
||||||
v 0.375000 0.723484 -0.849740
|
|
||||||
v 0.625000 0.723484 -0.849740
|
|
||||||
v 0.625000 0.900260 -1.026516
|
|
||||||
v 0.375000 1.121231 -0.451992
|
|
||||||
v 0.375000 1.298008 -0.628769
|
|
||||||
v 0.625000 1.121231 -0.451992
|
|
||||||
v 0.625000 1.298008 -0.628769
|
|
||||||
v -0.375000 0.811872 -0.761351
|
|
||||||
v -0.375000 0.988649 -0.938128
|
|
||||||
v -0.625000 0.811872 -0.761351
|
|
||||||
v -0.625000 0.988649 -0.938128
|
|
||||||
v -0.375000 0.900260 -1.026516
|
|
||||||
v -0.375000 0.723484 -0.849740
|
|
||||||
v -0.625000 0.723484 -0.849740
|
|
||||||
v -0.625000 0.900260 -1.026516
|
|
||||||
v -0.375000 1.121231 -0.451992
|
|
||||||
v -0.375000 1.298008 -0.628769
|
|
||||||
v -0.625000 1.121231 -0.451992
|
|
||||||
v -0.625000 1.298008 -0.628769
|
|
||||||
v 0.375000 0.811872 0.761351
|
|
||||||
v 0.375000 0.988649 0.938128
|
|
||||||
v 0.625000 0.811872 0.761351
|
|
||||||
v 0.625000 0.988649 0.938128
|
|
||||||
v 0.375000 0.900260 1.026516
|
|
||||||
v 0.375000 0.723484 0.849740
|
|
||||||
v 0.625000 0.723484 0.849740
|
|
||||||
v 0.625000 0.900260 1.026516
|
|
||||||
v 0.375000 1.121231 0.451992
|
|
||||||
v 0.375000 1.298008 0.628769
|
|
||||||
v 0.625000 1.121231 0.451992
|
|
||||||
v 0.625000 1.298008 0.628769
|
|
||||||
v -0.375000 0.811872 0.761351
|
|
||||||
v -0.375000 0.988649 0.938128
|
|
||||||
v -0.625000 0.811872 0.761351
|
|
||||||
v -0.625000 0.988649 0.938128
|
|
||||||
v -0.375000 0.900260 1.026516
|
|
||||||
v -0.375000 0.723484 0.849740
|
|
||||||
v -0.625000 0.723484 0.849740
|
|
||||||
v -0.625000 0.900260 1.026516
|
|
||||||
v -0.375000 1.121231 0.451992
|
|
||||||
v -0.375000 1.298008 0.628769
|
|
||||||
v -0.625000 1.121231 0.451992
|
|
||||||
v -0.625000 1.298008 0.628769
|
|
||||||
vt 0.281250 0.234375
|
|
||||||
vt 0.281250 0.437500
|
|
||||||
vt 0.000000 0.437500
|
|
||||||
vt -0.000000 0.234375
|
|
||||||
vt 0.281250 0.031250
|
|
||||||
vt 0.281250 0.234375
|
|
||||||
vt 0.000000 0.234375
|
|
||||||
vt -0.000000 0.031250
|
|
||||||
vt 0.281250 0.234375
|
|
||||||
vt 0.281250 0.437500
|
|
||||||
vt 0.000000 0.437500
|
|
||||||
vt -0.000000 0.234375
|
|
||||||
vt 0.281250 0.031250
|
|
||||||
vt 0.281250 0.234375
|
|
||||||
vt 0.000000 0.234375
|
|
||||||
vt 0.000000 0.031250
|
|
||||||
vt 0.000000 0.718750
|
|
||||||
vt 0.000000 0.437500
|
|
||||||
vt 0.281250 0.437500
|
|
||||||
vt 0.281250 0.718750
|
|
||||||
vt 0.000000 0.718750
|
|
||||||
vt 0.281250 0.718750
|
|
||||||
vt 0.281250 1.000000
|
|
||||||
vt 0.000000 1.000000
|
|
||||||
vt 0.281250 0.031250
|
|
||||||
vt 0.000000 0.031250
|
|
||||||
vt 0.000000 0.234375
|
|
||||||
vt 0.281250 0.234375
|
|
||||||
vt 0.281250 0.031250
|
|
||||||
vt -0.000000 0.031250
|
|
||||||
vt 0.000000 0.234375
|
|
||||||
vt 0.281250 0.234375
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.625000 0.250000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.625000 0.500000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.625000 0.750000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.875000 0.500000
|
|
||||||
vt 0.875000 0.750000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.625000 0.250000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.625000 0.500000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.625000 0.750000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.875000 0.750000
|
|
||||||
vt 0.875000 0.500000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.625000 0.250000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.625000 0.500000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.625000 0.750000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.875000 0.500000
|
|
||||||
vt 0.875000 0.750000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.625000 0.250000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.625000 0.500000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.625000 0.750000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.875000 0.750000
|
|
||||||
vt 0.875000 0.500000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.625000 0.250000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.625000 0.500000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.625000 0.750000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.875000 0.500000
|
|
||||||
vt 0.875000 0.750000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.625000 0.250000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.625000 0.500000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.625000 0.750000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.875000 0.750000
|
|
||||||
vt 0.875000 0.500000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.625000 0.250000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.625000 0.500000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.625000 0.750000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.875000 0.750000
|
|
||||||
vt 0.875000 0.500000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.625000 0.250000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.625000 0.500000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.625000 0.750000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.875000 0.500000
|
|
||||||
vt 0.875000 0.750000
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vt 0.375000 0.612500
|
|
||||||
vt 0.125000 0.612500
|
|
||||||
vt 0.625000 0.612500
|
|
||||||
vt 0.875000 0.612500
|
|
||||||
vt 0.375000 0.137500
|
|
||||||
vt 0.625000 0.137500
|
|
||||||
vn 1.0000 0.0000 -0.0000
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn -1.0000 0.0000 0.0000
|
|
||||||
vn -0.0000 0.0000 -1.0000
|
|
||||||
vn 0.0000 -1.0000 0.0000
|
|
||||||
vn 0.0000 1.0000 0.0000
|
|
||||||
vn 0.0000 -0.7071 0.7071
|
|
||||||
vn 0.0000 0.7071 -0.7071
|
|
||||||
vn 0.0000 -0.7071 -0.7071
|
|
||||||
vn 0.0000 0.7071 0.7071
|
|
||||||
usemtl bogey
|
|
||||||
s off
|
|
||||||
f 1/1/1 2/2/1 4/3/1 3/4/1
|
|
||||||
f 3/5/2 4/6/2 8/7/2 7/8/2
|
|
||||||
f 7/9/3 8/10/3 6/11/3 5/12/3
|
|
||||||
f 5/13/4 6/14/4 2/15/4 1/16/4
|
|
||||||
f 3/17/5 7/18/5 5/19/5 1/20/5
|
|
||||||
f 8/21/6 4/22/6 2/23/6 6/24/6
|
|
||||||
f 11/25/2 9/26/2 10/27/2 12/28/2
|
|
||||||
f 13/29/4 15/30/4 16/31/4 14/32/4
|
|
||||||
usemtl dark_iron
|
|
||||||
f 17/33/1 18/34/1 20/35/1 19/36/1
|
|
||||||
f 19/36/2 20/35/2 24/37/2 23/38/2
|
|
||||||
f 23/38/3 24/37/3 22/39/3 21/40/3
|
|
||||||
f 21/40/4 22/39/4 18/41/4 17/42/4
|
|
||||||
f 19/43/5 23/38/5 21/40/5 17/44/5
|
|
||||||
f 24/37/6 20/45/6 18/46/6 22/39/6
|
|
||||||
f 25/47/1 27/48/1 28/49/1 26/50/1
|
|
||||||
f 27/48/4 31/51/4 32/52/4 28/49/4
|
|
||||||
f 31/51/3 29/53/3 30/54/3 32/52/3
|
|
||||||
f 29/53/2 25/55/2 26/56/2 30/54/2
|
|
||||||
f 27/57/5 25/58/5 29/53/5 31/51/5
|
|
||||||
f 32/52/6 30/54/6 26/59/6 28/60/6
|
|
||||||
f 33/61/1 34/62/1 36/63/1 35/64/1
|
|
||||||
f 35/64/2 36/63/2 40/65/2 39/66/2
|
|
||||||
f 39/66/3 40/65/3 38/67/3 37/68/3
|
|
||||||
f 37/68/4 38/67/4 34/69/4 33/70/4
|
|
||||||
f 35/71/5 39/66/5 37/68/5 33/72/5
|
|
||||||
f 40/65/6 36/73/6 34/74/6 38/67/6
|
|
||||||
f 41/75/3 43/76/3 44/77/3 42/78/3
|
|
||||||
f 43/76/2 47/79/2 48/80/2 44/77/2
|
|
||||||
f 47/79/1 45/81/1 46/82/1 48/80/1
|
|
||||||
f 45/81/4 41/83/4 42/84/4 46/82/4
|
|
||||||
f 43/85/5 41/86/5 45/81/5 47/79/5
|
|
||||||
f 48/80/6 46/82/6 42/87/6 44/88/6
|
|
||||||
f 49/89/1 50/90/1 52/91/1 51/92/1
|
|
||||||
f 51/92/7 52/91/7 56/93/7 55/94/7
|
|
||||||
f 55/94/3 56/93/3 54/95/3 53/96/3
|
|
||||||
f 53/96/8 54/95/8 50/97/8 49/98/8
|
|
||||||
f 51/99/9 55/94/9 53/96/9 49/100/9
|
|
||||||
f 56/93/10 52/101/10 50/102/10 54/95/10
|
|
||||||
f 57/103/3 59/104/3 60/105/3 58/106/3
|
|
||||||
f 59/104/7 63/107/7 64/108/7 60/105/7
|
|
||||||
f 63/107/1 61/109/1 62/110/1 64/108/1
|
|
||||||
f 61/109/8 57/111/8 58/112/8 62/110/8
|
|
||||||
f 59/113/9 57/114/9 61/109/9 63/107/9
|
|
||||||
f 64/108/10 62/110/10 58/115/10 60/116/10
|
|
||||||
f 65/117/1 67/118/1 68/119/1 66/120/1
|
|
||||||
f 67/118/9 71/121/9 72/122/9 68/119/9
|
|
||||||
f 71/121/3 69/123/3 70/124/3 72/122/3
|
|
||||||
f 69/123/10 65/125/10 66/126/10 70/124/10
|
|
||||||
f 67/127/7 65/128/7 69/123/7 71/121/7
|
|
||||||
f 72/122/8 70/124/8 66/129/8 68/130/8
|
|
||||||
f 73/131/3 74/132/3 76/133/3 75/134/3
|
|
||||||
f 75/134/9 76/133/9 80/135/9 79/136/9
|
|
||||||
f 79/136/1 80/135/1 78/137/1 77/138/1
|
|
||||||
f 77/138/10 78/137/10 74/139/10 73/140/10
|
|
||||||
f 75/141/7 79/136/7 77/138/7 73/142/7
|
|
||||||
f 80/135/8 76/143/8 74/144/8 78/137/8
|
|
||||||
f 84/145/1 83/146/1 87/147/1 88/148/1
|
|
||||||
f 86/149/9 85/150/9 88/148/9 87/147/9
|
|
||||||
f 83/146/7 81/151/7 86/152/7 87/147/7
|
|
||||||
f 82/153/8 84/145/8 88/148/8 85/154/8
|
|
||||||
f 81/155/3 82/156/3 85/150/3 86/149/3
|
|
||||||
f 81/151/7 83/146/7 91/157/7 89/158/7
|
|
||||||
f 89/158/10 91/157/10 92/159/10 90/160/10
|
|
||||||
f 84/145/8 82/153/8 90/160/8 92/159/8
|
|
||||||
f 82/156/3 81/155/3 89/161/3 90/162/3
|
|
||||||
f 83/146/1 84/145/1 92/159/1 91/157/1
|
|
||||||
f 96/163/3 100/164/3 99/165/3 95/166/3
|
|
||||||
f 98/167/9 99/165/9 100/164/9 97/168/9
|
|
||||||
f 95/166/7 99/165/7 98/169/7 93/170/7
|
|
||||||
f 94/171/8 97/172/8 100/164/8 96/163/8
|
|
||||||
f 93/173/1 98/167/1 97/168/1 94/174/1
|
|
||||||
f 93/170/7 101/175/7 103/176/7 95/166/7
|
|
||||||
f 101/175/10 102/177/10 104/178/10 103/176/10
|
|
||||||
f 96/163/8 104/178/8 102/177/8 94/171/8
|
|
||||||
f 94/174/1 102/179/1 101/180/1 93/173/1
|
|
||||||
f 95/166/3 103/176/3 104/178/3 96/163/3
|
|
||||||
f 108/181/1 112/182/1 111/183/1 107/184/1
|
|
||||||
f 110/185/7 111/183/7 112/182/7 109/186/7
|
|
||||||
f 107/184/9 111/183/9 110/187/9 105/188/9
|
|
||||||
f 106/189/10 109/190/10 112/182/10 108/181/10
|
|
||||||
f 105/191/3 110/185/3 109/186/3 106/192/3
|
|
||||||
f 105/188/9 113/193/9 115/194/9 107/184/9
|
|
||||||
f 113/193/8 114/195/8 116/196/8 115/194/8
|
|
||||||
f 108/181/10 116/196/10 114/195/10 106/189/10
|
|
||||||
f 106/192/3 114/197/3 113/198/3 105/191/3
|
|
||||||
f 107/184/1 115/194/1 116/196/1 108/181/1
|
|
||||||
f 120/199/3 119/200/3 123/201/3 124/202/3
|
|
||||||
f 122/203/7 121/204/7 124/202/7 123/201/7
|
|
||||||
f 119/200/9 117/205/9 122/206/9 123/201/9
|
|
||||||
f 118/207/10 120/199/10 124/202/10 121/208/10
|
|
||||||
f 117/209/1 118/210/1 121/204/1 122/203/1
|
|
||||||
f 117/205/9 119/200/9 127/211/9 125/212/9
|
|
||||||
f 125/212/8 127/211/8 128/213/8 126/214/8
|
|
||||||
f 120/199/10 118/207/10 126/214/10 128/213/10
|
|
||||||
f 118/210/1 117/209/1 125/215/1 126/216/1
|
|
||||||
f 119/200/3 120/199/3 128/213/3 127/211/3
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"loader": "forge:obj",
|
|
||||||
"flip-v": true,
|
|
||||||
"model": "create:models/block/track/bogey/kryppers_wheels.obj",
|
|
||||||
"textures": {
|
|
||||||
"dark_iron": "create:block/bogey/dark_iron",
|
|
||||||
"wheels": "create:block/bogey/wheels",
|
|
||||||
"bogey": "create:block/bogey/bogey",
|
|
||||||
"shaft": "create:block/axis",
|
|
||||||
"shaft_end": "create:block/axis_top"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,306 +0,0 @@
|
||||||
# Blender v3.0.0 Release Candidate OBJ File: 'Bogey.blend'
|
|
||||||
# www.blender.org
|
|
||||||
mtllib bogey.mtl
|
|
||||||
o Cube.011_Cube.002
|
|
||||||
v 1.187500 -0.125000 -0.125000
|
|
||||||
v 1.187500 0.125000 -0.125000
|
|
||||||
v 1.187500 -0.125000 0.125000
|
|
||||||
v 1.187500 0.125000 0.125000
|
|
||||||
v 0.187500 -0.125000 0.125000
|
|
||||||
v 0.187500 0.125000 0.125000
|
|
||||||
v 0.187500 -0.125000 -0.125000
|
|
||||||
v 0.187500 0.125000 -0.125000
|
|
||||||
v -1.187499 -0.125000 -0.125000
|
|
||||||
v -1.187499 0.125000 -0.125000
|
|
||||||
v -1.187500 -0.125000 0.125000
|
|
||||||
v -1.187500 0.125000 0.125000
|
|
||||||
v -0.187499 -0.125000 0.125000
|
|
||||||
v -0.187499 0.125000 0.125000
|
|
||||||
v -0.187499 -0.125000 -0.125000
|
|
||||||
v -0.187499 0.125000 -0.125000
|
|
||||||
v 0.875000 0.402831 0.167846
|
|
||||||
v 0.875000 -0.402831 0.167846
|
|
||||||
v 0.875000 -0.402831 -0.167846
|
|
||||||
v 0.875000 -0.167846 -0.402831
|
|
||||||
v 1.062500 0.402831 -0.167846
|
|
||||||
v 1.062500 0.402831 0.167846
|
|
||||||
v 1.062500 0.167846 0.402831
|
|
||||||
v 1.062500 -0.167846 0.402831
|
|
||||||
v 1.062500 -0.402831 0.167846
|
|
||||||
v 1.062500 -0.402831 -0.167846
|
|
||||||
v 1.062500 -0.167846 -0.402831
|
|
||||||
v 1.062500 0.167846 -0.402831
|
|
||||||
v 0.875000 0.167846 -0.402831
|
|
||||||
v 0.875000 -0.167846 0.402831
|
|
||||||
v 0.875000 0.167846 0.402831
|
|
||||||
v 0.875000 0.402831 -0.167846
|
|
||||||
v 1.062500 -0.000000 0.000000
|
|
||||||
v 0.750000 0.201415 -0.483397
|
|
||||||
v 0.750000 -0.201415 -0.483397
|
|
||||||
v 0.750000 -0.483397 -0.201415
|
|
||||||
v 0.750000 -0.483397 0.201415
|
|
||||||
v 0.875000 0.483397 -0.201415
|
|
||||||
v 0.875000 0.483397 0.201415
|
|
||||||
v 0.875000 0.201415 0.483397
|
|
||||||
v 0.875000 -0.201415 0.483397
|
|
||||||
v 0.875000 -0.483397 0.201415
|
|
||||||
v 0.875000 -0.483397 -0.201415
|
|
||||||
v 0.875000 -0.201415 -0.483397
|
|
||||||
v 0.875000 0.201415 -0.483397
|
|
||||||
v 0.750000 -0.201415 0.483397
|
|
||||||
v 0.750000 0.201415 0.483397
|
|
||||||
v 0.750000 0.483397 0.201415
|
|
||||||
v 0.750000 0.483397 -0.201415
|
|
||||||
v 0.875000 0.000000 0.000000
|
|
||||||
v 0.750000 0.000000 0.000000
|
|
||||||
v -0.875000 0.402831 0.167846
|
|
||||||
v -0.875000 -0.402831 0.167846
|
|
||||||
v -0.875000 -0.402831 -0.167846
|
|
||||||
v -0.875000 -0.167846 -0.402831
|
|
||||||
v -1.062500 0.402831 -0.167846
|
|
||||||
v -1.062500 0.402831 0.167846
|
|
||||||
v -1.062500 0.167846 0.402831
|
|
||||||
v -1.062500 -0.167846 0.402831
|
|
||||||
v -1.062500 -0.402831 0.167846
|
|
||||||
v -1.062500 -0.402831 -0.167846
|
|
||||||
v -1.062500 -0.167846 -0.402831
|
|
||||||
v -1.062500 0.167846 -0.402831
|
|
||||||
v -0.875000 0.167846 -0.402831
|
|
||||||
v -0.875000 -0.167846 0.402831
|
|
||||||
v -0.875000 0.167846 0.402831
|
|
||||||
v -0.875000 0.402831 -0.167846
|
|
||||||
v -1.062500 -0.000000 0.000000
|
|
||||||
v -0.750000 0.201415 -0.483397
|
|
||||||
v -0.750000 -0.201415 -0.483397
|
|
||||||
v -0.750000 -0.483397 -0.201415
|
|
||||||
v -0.750000 -0.483397 0.201415
|
|
||||||
v -0.875000 0.483397 -0.201415
|
|
||||||
v -0.875000 0.483397 0.201415
|
|
||||||
v -0.875000 0.201415 0.483397
|
|
||||||
v -0.875000 -0.201415 0.483397
|
|
||||||
v -0.875000 -0.483397 0.201415
|
|
||||||
v -0.875000 -0.483397 -0.201415
|
|
||||||
v -0.875000 -0.201415 -0.483397
|
|
||||||
v -0.875000 0.201415 -0.483397
|
|
||||||
v -0.750000 -0.201415 0.483397
|
|
||||||
v -0.750000 0.201415 0.483397
|
|
||||||
v -0.750000 0.483397 0.201415
|
|
||||||
v -0.750000 0.483397 -0.201415
|
|
||||||
v -0.875000 0.000000 0.000000
|
|
||||||
v -0.750000 0.000000 0.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.625000 1.000000
|
|
||||||
vt 0.625000 0.000000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.375000 0.375000
|
|
||||||
vt 0.625000 0.375000
|
|
||||||
vt 0.625000 0.625000
|
|
||||||
vt 0.375000 0.625000
|
|
||||||
vt 0.375000 0.375000
|
|
||||||
vt 0.375000 0.625000
|
|
||||||
vt 0.625000 0.625000
|
|
||||||
vt 0.625000 0.375000
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.146447 0.146447
|
|
||||||
vt 0.146447 0.146447
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.853553 0.146447
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.146447 0.853553
|
|
||||||
vt 0.146447 0.853553
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.853554 0.853553
|
|
||||||
vt 0.853554 0.853553
|
|
||||||
vt 0.853553 0.146447
|
|
||||||
vt 1.000000 0.500000
|
|
||||||
vt 1.000000 0.500000
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.146447 0.146447
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.853553 0.146447
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.146447 0.146447
|
|
||||||
vt 0.853554 0.853553
|
|
||||||
vt 0.853554 0.853553
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.146447 0.853553
|
|
||||||
vt 0.146447 0.853553
|
|
||||||
vt 0.853553 0.146447
|
|
||||||
vt 1.000000 0.500000
|
|
||||||
vt 1.000000 0.500000
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.146447 0.146447
|
|
||||||
vt 0.146447 0.146447
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.853553 0.146447
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.146447 0.853553
|
|
||||||
vt 0.146447 0.853553
|
|
||||||
vt 0.853554 0.853553
|
|
||||||
vt 0.853554 0.853553
|
|
||||||
vt 0.853553 0.146447
|
|
||||||
vt 1.000000 0.500000
|
|
||||||
vt 1.000000 0.500000
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.146447 0.146447
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.853553 0.146447
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.146447 0.146447
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.853554 0.853553
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.853554 0.853553
|
|
||||||
vt 0.146447 0.853553
|
|
||||||
vt 0.146447 0.853553
|
|
||||||
vt 1.000000 0.500000
|
|
||||||
vt 1.000000 0.500000
|
|
||||||
vt 0.853553 0.146447
|
|
||||||
vn -0.0000 0.0000 -1.0000
|
|
||||||
vn 0.0000 1.0000 -0.0000
|
|
||||||
vn 0.0000 -1.0000 -0.0000
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 1.0000 0.0000 -0.0000
|
|
||||||
vn -1.0000 0.0000 -0.0000
|
|
||||||
vn 0.0000 0.7071 -0.7071
|
|
||||||
vn 0.0000 -0.7071 -0.7071
|
|
||||||
vn 0.0000 -0.7071 0.7071
|
|
||||||
vn 0.0000 0.7071 0.7071
|
|
||||||
usemtl shaft
|
|
||||||
s off
|
|
||||||
f 7/1/1 8/2/1 2/3/1 1/4/1
|
|
||||||
f 6/5/2 4/6/2 2/7/2 8/8/2
|
|
||||||
f 3/9/3 5/10/3 7/11/3 1/12/3
|
|
||||||
f 3/13/4 4/14/4 6/15/4 5/16/4
|
|
||||||
f 15/17/1 9/18/1 10/19/1 16/20/1
|
|
||||||
f 14/21/2 16/22/2 10/23/2 12/24/2
|
|
||||||
f 11/25/3 9/26/3 15/27/3 13/28/3
|
|
||||||
f 11/29/4 13/30/4 14/31/4 12/32/4
|
|
||||||
usemtl shaft_end
|
|
||||||
f 1/33/5 2/34/5 4/35/5 3/36/5
|
|
||||||
f 9/37/6 11/38/6 12/39/6 10/40/6
|
|
||||||
usemtl wheels
|
|
||||||
f 31/41/4 30/42/4 24/43/4 23/44/4
|
|
||||||
f 33/45/5 25/46/5 26/47/5
|
|
||||||
f 32/48/2 17/49/2 22/50/2 21/51/2
|
|
||||||
f 29/52/7 32/48/7 21/51/7 28/53/7
|
|
||||||
f 19/54/8 20/55/8 27/56/8 26/47/8
|
|
||||||
f 30/42/9 18/57/9 25/46/9 24/43/9
|
|
||||||
f 17/49/10 31/41/10 23/44/10 22/50/10
|
|
||||||
f 20/55/1 29/52/1 28/53/1 27/56/1
|
|
||||||
f 18/57/3 19/54/3 26/47/3 25/46/3
|
|
||||||
f 19/54/6 18/57/6 30/42/6 31/41/6 17/49/6 32/48/6 29/52/6 20/55/6
|
|
||||||
f 21/51/5 22/50/5 33/45/5
|
|
||||||
f 33/45/5 24/43/5 25/46/5
|
|
||||||
f 28/53/5 21/51/5 33/45/5
|
|
||||||
f 27/56/5 28/53/5 33/45/5
|
|
||||||
f 23/44/5 24/43/5 33/45/5
|
|
||||||
f 26/47/5 27/56/5 33/45/5
|
|
||||||
f 22/50/5 23/44/5 33/45/5
|
|
||||||
f 51/58/6 37/59/6 46/60/6
|
|
||||||
f 50/61/5 42/62/5 43/63/5
|
|
||||||
f 40/64/4 47/65/4 46/60/4 41/66/4
|
|
||||||
f 45/67/7 34/68/7 49/69/7 38/70/7
|
|
||||||
f 41/66/9 46/60/9 37/59/9 42/62/9
|
|
||||||
f 39/71/10 48/72/10 47/65/10 40/64/10
|
|
||||||
f 38/70/2 49/69/2 48/72/2 39/71/2
|
|
||||||
f 43/63/8 36/73/8 35/74/8 44/75/8
|
|
||||||
f 44/75/1 35/74/1 34/68/1 45/67/1
|
|
||||||
f 42/62/3 37/59/3 36/73/3 43/63/3
|
|
||||||
f 44/75/5 50/61/5 43/63/5
|
|
||||||
f 50/61/5 41/66/5 42/62/5
|
|
||||||
f 39/71/5 50/61/5 38/70/5
|
|
||||||
f 38/70/5 50/61/5 45/67/5
|
|
||||||
f 50/61/5 40/64/5 41/66/5
|
|
||||||
f 45/67/5 50/61/5 44/75/5
|
|
||||||
f 39/71/5 40/64/5 50/61/5
|
|
||||||
f 47/65/6 51/58/6 46/60/6
|
|
||||||
f 34/68/6 51/58/6 49/69/6
|
|
||||||
f 51/58/6 36/73/6 37/59/6
|
|
||||||
f 49/69/6 51/58/6 48/72/6
|
|
||||||
f 51/58/6 35/74/6 36/73/6
|
|
||||||
f 48/72/6 51/58/6 47/65/6
|
|
||||||
f 34/68/6 35/74/6 51/58/6
|
|
||||||
f 66/76/4 58/77/4 59/78/4 65/79/4
|
|
||||||
f 68/80/6 61/81/6 60/82/6
|
|
||||||
f 67/83/2 56/84/2 57/85/2 52/86/2
|
|
||||||
f 64/87/7 63/88/7 56/84/7 67/83/7
|
|
||||||
f 54/89/8 61/81/8 62/90/8 55/91/8
|
|
||||||
f 65/79/9 59/78/9 60/82/9 53/92/9
|
|
||||||
f 52/86/10 57/85/10 58/77/10 66/76/10
|
|
||||||
f 55/91/1 62/90/1 63/88/1 64/87/1
|
|
||||||
f 53/92/3 60/82/3 61/81/3 54/89/3
|
|
||||||
f 54/89/5 55/91/5 64/87/5 67/83/5 52/86/5 66/76/5 65/79/5 53/92/5
|
|
||||||
f 56/84/6 68/80/6 57/85/6
|
|
||||||
f 68/80/6 60/82/6 59/78/6
|
|
||||||
f 63/88/6 68/80/6 56/84/6
|
|
||||||
f 62/90/6 68/80/6 63/88/6
|
|
||||||
f 58/77/6 68/80/6 59/78/6
|
|
||||||
f 61/81/6 68/80/6 62/90/6
|
|
||||||
f 57/85/6 68/80/6 58/77/6
|
|
||||||
f 86/93/5 81/94/5 72/95/5
|
|
||||||
f 85/96/6 78/97/6 77/98/6
|
|
||||||
f 75/99/4 76/100/4 81/94/4 82/101/4
|
|
||||||
f 80/102/7 73/103/7 84/104/7 69/105/7
|
|
||||||
f 76/100/9 77/98/9 72/95/9 81/94/9
|
|
||||||
f 74/106/10 75/99/10 82/101/10 83/107/10
|
|
||||||
f 73/103/2 74/106/2 83/107/2 84/104/2
|
|
||||||
f 78/97/8 79/108/8 70/109/8 71/110/8
|
|
||||||
f 79/108/1 80/102/1 69/105/1 70/109/1
|
|
||||||
f 77/98/3 78/97/3 71/110/3 72/95/3
|
|
||||||
f 79/108/6 78/97/6 85/96/6
|
|
||||||
f 85/96/6 77/98/6 76/100/6
|
|
||||||
f 74/106/6 73/103/6 85/96/6
|
|
||||||
f 73/103/6 80/102/6 85/96/6
|
|
||||||
f 85/96/6 76/100/6 75/99/6
|
|
||||||
f 80/102/6 79/108/6 85/96/6
|
|
||||||
f 74/106/6 85/96/6 75/99/6
|
|
||||||
f 82/101/5 81/94/5 86/93/5
|
|
||||||
f 69/105/5 84/104/5 86/93/5
|
|
||||||
f 86/93/5 72/95/5 71/110/5
|
|
||||||
f 84/104/5 83/107/5 86/93/5
|
|
||||||
f 86/93/5 71/110/5 70/109/5
|
|
||||||
f 83/107/5 82/101/5 86/93/5
|
|
||||||
f 69/105/5 86/93/5 70/109/5
|
|
|
@ -1,210 +0,0 @@
|
||||||
{
|
|
||||||
"credit": "Made with Blockbench",
|
|
||||||
"parent": "block/block",
|
|
||||||
"textures": {
|
|
||||||
"0": "create:block/track",
|
|
||||||
"particle": "create:block/axis",
|
|
||||||
"1_0": "create:block/axis",
|
|
||||||
"1_1": "create:block/axis_top"
|
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"name": "smallcircle",
|
|
||||||
"from": [-7, -8, -8],
|
|
||||||
"to": [23, 8, 8],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [3, -12, -18]},
|
|
||||||
"faces": {
|
|
||||||
"east": {"uv": [11.375, 11.625, 13.875, 14.125], "texture": "#0"},
|
|
||||||
"west": {"uv": [11.375, 11.625, 13.875, 14.125], "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Axis",
|
|
||||||
"from": [-12, -2, -2],
|
|
||||||
"to": [28, 2, 2],
|
|
||||||
"shade": false,
|
|
||||||
"rotation": {"angle": -45, "axis": "x", "origin": [9, 0, 0]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#1_0"},
|
|
||||||
"east": {"uv": [6, 6, 10, 10], "rotation": 180, "texture": "#1_1"},
|
|
||||||
"south": {"uv": [6, 0, 10, 16], "rotation": 270, "texture": "#1_0"},
|
|
||||||
"west": {"uv": [6, 6, 10, 10], "texture": "#1_1"},
|
|
||||||
"up": {"uv": [6, 0, 10, 16], "rotation": 270, "texture": "#1_0"},
|
|
||||||
"down": {"uv": [6, 0, 10, 16], "rotation": 270, "texture": "#1_0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bigcircleout",
|
|
||||||
"from": [-8, -10, -10],
|
|
||||||
"to": [-7.9, 10, 10],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, -12, -18]},
|
|
||||||
"faces": {
|
|
||||||
"east": {"uv": [11.375, 11.625, 13.875, 14.125], "texture": "#0"},
|
|
||||||
"west": {"uv": [11.375, 11.625, 13.875, 14.125], "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bigcirclein",
|
|
||||||
"from": [-4.1, -10, -10],
|
|
||||||
"to": [-4, 10, 10],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, -12, -18]},
|
|
||||||
"faces": {
|
|
||||||
"east": {"uv": [11.375, 11.625, 13.875, 14.125], "texture": "#0"},
|
|
||||||
"west": {"uv": [11.375, 11.625, 13.875, 14.125], "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wheel3d",
|
|
||||||
"from": [-7.9, -9, -3],
|
|
||||||
"to": [-4, 9, 3],
|
|
||||||
"rotation": {"angle": -45, "axis": "x", "origin": [-6, 0, 0]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [10.75, 13.125, 10.75, 13.125], "rotation": 180, "texture": "#0"},
|
|
||||||
"south": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"up": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"down": {"uv": [10.75, 13.125, 10.75, 13.125], "rotation": 180, "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wheel3d",
|
|
||||||
"from": [-7.9, -9, -3],
|
|
||||||
"to": [-4, 9, 3],
|
|
||||||
"rotation": {"angle": 45, "axis": "x", "origin": [-6, 0, 0]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [10.75, 13.125, 10.75, 13.125], "rotation": 180, "texture": "#0"},
|
|
||||||
"south": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"up": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"down": {"uv": [10.75, 13.125, 10.75, 13.125], "rotation": 180, "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wheel3d",
|
|
||||||
"from": [-7.9, -3, -9],
|
|
||||||
"to": [-4, 3, 9],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, -12, -162]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"south": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"up": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"down": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wheel3d",
|
|
||||||
"from": [-7.9, -9, -3],
|
|
||||||
"to": [-4, 9, 3],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, -12, -162]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"south": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"up": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"down": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bigcircleout",
|
|
||||||
"from": [23.9, -10, -10],
|
|
||||||
"to": [24, 10, 10],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [10, -12, -18]},
|
|
||||||
"faces": {
|
|
||||||
"east": {"uv": [13.875, 11.625, 11.375, 14.125], "texture": "#0"},
|
|
||||||
"west": {"uv": [13.875, 11.625, 11.375, 14.125], "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "bigcirclein",
|
|
||||||
"from": [20, -10, -10],
|
|
||||||
"to": [20.1, 10, 10],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [10, -12, -18]},
|
|
||||||
"faces": {
|
|
||||||
"east": {"uv": [13.875, 11.625, 11.375, 14.125], "texture": "#0"},
|
|
||||||
"west": {"uv": [13.875, 11.625, 11.375, 14.125], "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wheel3d",
|
|
||||||
"from": [20, -9, -3],
|
|
||||||
"to": [23.9, 9, 3],
|
|
||||||
"rotation": {"angle": -45, "axis": "x", "origin": [10, 0, 0]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [10.75, 13.125, 10.75, 13.125], "rotation": 180, "texture": "#0"},
|
|
||||||
"south": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"up": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"down": {"uv": [10.75, 13.125, 10.75, 13.125], "rotation": 180, "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wheel3d",
|
|
||||||
"from": [20, -9, -3],
|
|
||||||
"to": [23.9, 9, 3],
|
|
||||||
"rotation": {"angle": 45, "axis": "x", "origin": [10, 0, 0]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [10.75, 13.125, 10.75, 13.125], "rotation": 180, "texture": "#0"},
|
|
||||||
"south": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"up": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"down": {"uv": [10.75, 13.125, 10.75, 13.125], "rotation": 180, "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wheel3d",
|
|
||||||
"from": [20, -3, -9],
|
|
||||||
"to": [23.9, 3, 9],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [10, -12, -162]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"south": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"up": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"down": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "wheel3d",
|
|
||||||
"from": [20, -9, -3],
|
|
||||||
"to": [23.9, 9, 3],
|
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [10, -12, -162]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"south": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"up": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"},
|
|
||||||
"down": {"uv": [10.75, 13.125, 10.75, 13.125], "texture": "#0"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"groups": [
|
|
||||||
{
|
|
||||||
"name": "group",
|
|
||||||
"origin": [8, 8, 8],
|
|
||||||
"color": 0,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"name": "boogy",
|
|
||||||
"origin": [0, 0, 0],
|
|
||||||
"color": 0,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"name": "wheelpair",
|
|
||||||
"origin": [0, 0, 0],
|
|
||||||
"color": 0,
|
|
||||||
"children": [
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
{
|
|
||||||
"name": "left",
|
|
||||||
"origin": [0, 0, 0],
|
|
||||||
"color": 0,
|
|
||||||
"children": [2, 3, 4, 5, 6, 7]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "right",
|
|
||||||
"origin": [0, 0, 0],
|
|
||||||
"color": 0,
|
|
||||||
"children": [8, 9, 10, 11, 12, 13]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -2,8 +2,8 @@
|
||||||
"credit": "Made with Blockbench",
|
"credit": "Made with Blockbench",
|
||||||
"parent": "block/block",
|
"parent": "block/block",
|
||||||
"textures": {
|
"textures": {
|
||||||
"0": "create:block/track",
|
|
||||||
"3": "create:block/brass_block",
|
"3": "create:block/brass_block",
|
||||||
|
"4": "create:block/bogey/top",
|
||||||
"particle": "create:block/bogey/particle"
|
"particle": "create:block/bogey/particle"
|
||||||
},
|
},
|
||||||
"elements": [
|
"elements": [
|
||||||
|
@ -13,12 +13,12 @@
|
||||||
"to": [16, 16, 16],
|
"to": [16, 16, 16],
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, -2, 8]},
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, -2, 8]},
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": {"uv": [2.25, 13.875, 4.25, 15], "texture": "#0"},
|
"north": {"uv": [8, 8, 16, 12.5], "texture": "#4"},
|
||||||
"east": {"uv": [4.375, 13.875, 6.375, 15], "texture": "#0"},
|
"east": {"uv": [0, 8, 8, 12.5], "texture": "#4"},
|
||||||
"south": {"uv": [2.25, 13.875, 4.25, 15], "texture": "#0"},
|
"south": {"uv": [8, 8, 16, 12.5], "texture": "#4"},
|
||||||
"west": {"uv": [4.375, 13.875, 6.375, 15], "texture": "#0"},
|
"west": {"uv": [0, 8, 8, 12.5], "texture": "#4"},
|
||||||
"up": {"uv": [0.125, 13.875, 2.125, 15.875], "texture": "#0"},
|
"up": {"uv": [0, 0, 8, 8], "rotation": 90, "texture": "#4"},
|
||||||
"down": {"uv": [0.125, 13.875, 2.125, 15.875], "texture": "#0"}
|
"down": {"uv": [0, 0, 16, 16], "texture": "#3"}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -27,12 +27,11 @@
|
||||||
"to": [14, 7, 14],
|
"to": [14, 7, 14],
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, -16, -144]},
|
"rotation": {"angle": 0, "axis": "y", "origin": [0, -16, -144]},
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": {"uv": [2, 14, 14, 16], "texture": "#3"},
|
"north": {"uv": [2, 2, 14, 4], "texture": "#particle"},
|
||||||
"east": {"uv": [2, 14, 14, 16], "texture": "#3"},
|
"east": {"uv": [2, 2, 14, 4], "texture": "#particle"},
|
||||||
"south": {"uv": [2, 14, 14, 16], "texture": "#3"},
|
"south": {"uv": [2, 2, 14, 4], "texture": "#particle"},
|
||||||
"west": {"uv": [2, 14, 14, 16], "texture": "#3"},
|
"west": {"uv": [2, 2, 14, 4], "texture": "#particle"},
|
||||||
"up": {"uv": [6, 8, 7, 10], "texture": "#missing"},
|
"down": {"uv": [4, 4, 12, 12], "texture": "#particle"}
|
||||||
"down": {"uv": [2, 2, 14, 14], "texture": "#3"}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
BIN
src/main/resources/assets/create/textures/block/bogey/top.png
Normal file
After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.2 KiB |