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
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
dde2b8043a318bc88b6d381f9de6bfd557c0f079 assets/create/lang/en_ud.json
|
||||
0ea900a1d36f0b19568f8183844a64016c539dcf assets/create/lang/en_us.json
|
||||
c9977bb0eb8912a4260e414d8868628904d847a0 assets/create/lang/unfinished/de_de.json
|
||||
4d30c4754b8494fbbe62340b7c67ba3d2ada6721 assets/create/lang/unfinished/es_cl.json
|
||||
29c05f8ed2ec05e5bd4c73f6678946041c4e8293 assets/create/lang/unfinished/es_es.json
|
||||
027514a78a5f233c2d579694fa3c6a2c57ce3272 assets/create/lang/unfinished/fr_fr.json
|
||||
f354377f09ebc8ee7863dc24266215fc77003c11 assets/create/lang/unfinished/it_it.json
|
||||
8e8d4fe60ca6386e14c31cb4a24274cd21e92212 assets/create/lang/unfinished/ja_jp.json
|
||||
39194f6899360e4a13f0d3feac07ab25b5c18256 assets/create/lang/unfinished/ko_kr.json
|
||||
4b067fe0830950e7cc6615c8f466686b5aefee7f assets/create/lang/unfinished/nl_nl.json
|
||||
44fd3bc93eb6f2dce30a7f52a765662fb1093791 assets/create/lang/unfinished/pl_pl.json
|
||||
410f0132633089e26db9d7b70c49fc3c39541cd6 assets/create/lang/unfinished/pt_br.json
|
||||
bec4373054c1e0d2cd803572f8491e7597e292c2 assets/create/lang/unfinished/pt_pt.json
|
||||
3ff78cccb260071cf5d55af9ace4f7ed1eadb46b assets/create/lang/unfinished/ru_ru.json
|
||||
9ea4b032f852a55d9359fb931f5eb91243d87e36 assets/create/lang/unfinished/zh_cn.json
|
||||
33a7cf2b3b6014b5714fdb5f63de49474f23d2aa assets/create/lang/unfinished/zh_tw.json
|
||||
c4e50a58a6ce948f7441177a0646a866a7af5e06 assets/create/lang/en_us.json
|
||||
1cb9472d43897acb2baf3e0cc98155884335c848 assets/create/lang/unfinished/de_de.json
|
||||
ff2fda28b73ceca2a57e5017e7cdb2e4b81b7d38 assets/create/lang/unfinished/es_cl.json
|
||||
72c764f41c300e0d189fbb3a738a8f0d49fbf545 assets/create/lang/unfinished/es_es.json
|
||||
70cbad61cc90ec1ee4175aa5890bee554475273c assets/create/lang/unfinished/fr_fr.json
|
||||
d5fced42d980b3bf62876546a80ede03d77126a3 assets/create/lang/unfinished/it_it.json
|
||||
07cc8e1ce1015b2a8698a782053956294ea113b7 assets/create/lang/unfinished/ja_jp.json
|
||||
bc66f974d2ac075a2322618dfe5ba56b5b81313c assets/create/lang/unfinished/ko_kr.json
|
||||
f2ff899c0949098a60d03785a2c79b84f7c436c3 assets/create/lang/unfinished/nl_nl.json
|
||||
3fe312603ca0543d03da5a9a6f889b558ce699a6 assets/create/lang/unfinished/pl_pl.json
|
||||
b43a832423e18aefed0143174530abc7f5269ab3 assets/create/lang/unfinished/pt_br.json
|
||||
97efc1b8919b5771ef911860a03aa98dac612978 assets/create/lang/unfinished/pt_pt.json
|
||||
9fbe47bd6472b70608c0e0b4381403b9c4798ae4 assets/create/lang/unfinished/ru_ru.json
|
||||
96eaf97775d91daea4fc12e4835ac4ce1a917f1b assets/create/lang/unfinished/zh_cn.json
|
||||
e1039c7374dbc6b536bae27f6ff37db5f87506c0 assets/create/lang/unfinished/zh_tw.json
|
||||
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
|
||||
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
|
||||
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
|
||||
|
|
|
@ -1383,9 +1383,15 @@
|
|||
"create.schedule.loop": "Loop Forever",
|
||||
"create.schedule.loop1": "Schedule starts over",
|
||||
"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.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.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.valid_connection": "Can Connect ✔",
|
||||
|
@ -1402,6 +1408,11 @@
|
|||
"create.track.leave_slope_descending": "Cannot leave this slope while descending",
|
||||
"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.frontmost_bogey_at_station": "Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1503",
|
||||
"_": "Missing Localizations: 1513",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 514",
|
||||
"_": "Missing Localizations: 524",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 185",
|
||||
"_": "Missing Localizations: 195",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1765",
|
||||
"_": "Missing Localizations: 1775",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1454",
|
||||
"_": "Missing Localizations: 1464",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 180",
|
||||
"_": "Missing Localizations: 190",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 180",
|
||||
"_": "Missing Localizations: 190",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 2118",
|
||||
"_": "Missing Localizations: 2128",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 553",
|
||||
"_": "Missing Localizations: 563",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1365",
|
||||
"_": "Missing Localizations: 1375",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1737",
|
||||
"_": "Missing Localizations: 1747",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 558",
|
||||
"_": "Missing Localizations: 568",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 180",
|
||||
"_": "Missing Localizations: 190",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 572",
|
||||
"_": "Missing Localizations: 582",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1384,9 +1384,15 @@
|
|||
"create.schedule.loop": "UNLOCALIZED: Loop Forever",
|
||||
"create.schedule.loop1": "UNLOCALIZED: Schedule starts over",
|
||||
"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.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.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.valid_connection": "UNLOCALIZED: Can Connect ✔",
|
||||
|
@ -1403,6 +1409,11 @@
|
|||
"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.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.frontmost_bogey_at_station": "UNLOCALIZED: Frontmost Bogey must be at Station Marker",
|
||||
"create.train_assembly.no_bogeys": "UNLOCALIZED: No Bogeys Found",
|
||||
|
|
|
@ -261,6 +261,11 @@ public class AllSoundEvents {
|
|||
public static SoundEntryProvider provider(DataGenerator 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
|
||||
// public static void cancelSubtitlesOfCompoundedSounds(PlaySoundEvent event) {
|
||||
|
|
|
@ -28,10 +28,11 @@ public class BlazeBurnerInteractionBehaviour extends MovingInteractionBehaviour
|
|||
public boolean handlePlayerInteraction(Player player, InteractionHand activeHand, BlockPos localPos,
|
||||
AbstractContraptionEntity contraptionEntity) {
|
||||
ItemStack itemInHand = player.getItemInHand(activeHand);
|
||||
if (!AllItems.SCHEDULE.isIn(itemInHand))
|
||||
return false;
|
||||
|
||||
if (!(contraptionEntity instanceof CarriageContraptionEntity carriageEntity))
|
||||
return false;
|
||||
if (activeHand == InteractionHand.OFF_HAND)
|
||||
return false;
|
||||
Contraption contraption = carriageEntity.getContraption();
|
||||
if (!(contraption instanceof CarriageContraption carriageContraption))
|
||||
return false;
|
||||
|
@ -44,26 +45,55 @@ public class BlazeBurnerInteractionBehaviour extends MovingInteractionBehaviour
|
|||
|
||||
Direction assemblyDirection = carriageContraption.getAssemblyDirection();
|
||||
for (Direction direction : Iterate.directionsInAxis(assemblyDirection.getAxis())) {
|
||||
if (carriageContraption.inControl(localPos, direction)) {
|
||||
if (!carriageContraption.inControl(localPos, direction))
|
||||
continue;
|
||||
|
||||
Schedule schedule = ScheduleItem.getSchedule(itemInHand);
|
||||
if (schedule == null)
|
||||
return false;
|
||||
Train train = carriageEntity.getCarriage().train;
|
||||
if (train == null)
|
||||
return false;
|
||||
if (train.heldForAssembly) {
|
||||
player.displayClientMessage(Lang.translate("schedule.train_still_assembling"), true);
|
||||
Train train = carriageEntity.getCarriage().train;
|
||||
if (train == null)
|
||||
return false;
|
||||
if (player.level.isClientSide)
|
||||
return true;
|
||||
|
||||
if (train.runtime.getSchedule() != null) {
|
||||
if (!itemInHand.isEmpty()) {
|
||||
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
|
||||
player.displayClientMessage(Lang.translate("schedule.remove_with_empty_hand"), 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);
|
||||
AllSoundEvents.playItemPickup(player);
|
||||
player.displayClientMessage(Lang.translate(
|
||||
train.runtime.isAutoSchedule ? "schedule.auto_removed_from_train" : "schedule.removed_from_train"),
|
||||
true);
|
||||
player.setItemInHand(activeHand, train.runtime.returnSchedule());
|
||||
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);
|
||||
|
|
|
@ -69,7 +69,7 @@ public class DataGathererTileEntity extends SmartTileEntity {
|
|||
BlockPos sourcePosition = getSourcePosition();
|
||||
BlockPos targetPosition = getTargetPosition();
|
||||
|
||||
if (!level.isAreaLoaded(targetPosition, 1) || !level.isAreaLoaded(sourcePosition, 1))
|
||||
if (!level.isLoaded(targetPosition) || !level.isLoaded(sourcePosition))
|
||||
return;
|
||||
|
||||
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 java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
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.foundation.block.ITE;
|
||||
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.MutableBlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
@ -24,6 +31,7 @@ import net.minecraft.server.level.ServerLevel;
|
|||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.DyeColor;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
|
@ -61,7 +69,7 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
|||
|
||||
@Override
|
||||
protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) {
|
||||
return false;
|
||||
return super.areStatesKineticallyEquivalent(oldState, newState);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -111,6 +119,12 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
|||
return InteractionResult.PASS;
|
||||
|
||||
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);
|
||||
|
||||
if (flapTe == null)
|
||||
|
@ -191,7 +205,7 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
|||
Move: for (Direction movement : Iterate.directionsInAxis(axis)) {
|
||||
currentPos.set(pos);
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
if (!level.isAreaLoaded(currentPos, 1))
|
||||
if (!level.isLoaded(currentPos))
|
||||
break;
|
||||
|
||||
BlockState other1 = currentPos.equals(pos) ? state : level.getBlockState(currentPos);
|
||||
|
@ -216,6 +230,7 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
|||
|
||||
@Override
|
||||
public void onPlace(BlockState pState, Level pLevel, BlockPos pPos, BlockState pOldState, boolean pIsMoving) {
|
||||
super.onPlace(pState, pLevel, pPos, pOldState, pIsMoving);
|
||||
if (pOldState.getBlock() == this)
|
||||
return;
|
||||
LevelTickAccess<Block> blockTicks = pLevel.getBlockTicks();
|
||||
|
@ -238,10 +253,7 @@ public class FlapDisplayBlock extends HorizontalKineticBlock
|
|||
@Override
|
||||
public BlockState updateShape(BlockState state, Direction pDirection, BlockState pNeighborState,
|
||||
LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) {
|
||||
BlockState newState = updatedShapeInner(state, pDirection, pNeighborState, pLevel, pCurrentPos);
|
||||
if (pLevel instanceof Level level)
|
||||
KineticTileEntity.switchToBlockState(level, pCurrentPos, newState);
|
||||
return newState;
|
||||
return updatedShapeInner(state, pDirection, pNeighborState, pLevel, pCurrentPos);
|
||||
}
|
||||
|
||||
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.hasGap = hasGap;
|
||||
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.component = null;
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ public class FlapDisplaySection {
|
|||
boolean continueSpin = Create.RANDOM.nextInt(increasingChance * max / 4) != 0;
|
||||
continueSpin &= max > 5 || spinningTicks < 2;
|
||||
spinning[i] &= continueSpin;
|
||||
|
||||
|
||||
if (i > 0 && Create.RANDOM.nextInt(3) > 0)
|
||||
spinning[i - 1] &= continueSpin;
|
||||
if (i < spinning.length - 1 && Create.RANDOM.nextInt(3) > 0)
|
||||
|
|
|
@ -2,8 +2,8 @@ package com.simibubi.create.content.logistics.trains.management.edgePoint.statio
|
|||
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
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.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
@ -73,10 +72,22 @@ public class StationBlock extends HorizontalDirectionalBlock implements ITE<Stat
|
|||
ItemStack itemInHand = pPlayer.getItemInHand(pHand);
|
||||
if (AllItems.WRENCH.isIn(itemInHand))
|
||||
return InteractionResult.PASS;
|
||||
if (itemInHand.getItem() == Items.SPONGE)
|
||||
Create.RAILWAYS.trains.clear();
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
|
||||
() -> () -> withTileEntityDo(pLevel, pPos, te -> this.displayScreen(te, pPlayer)));
|
||||
|
||||
InteractionResult result = onTileEntityUse(pLevel, pPos, station -> {
|
||||
ItemStack autoSchedule = station.getAutoSchedule();
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,19 +4,30 @@ import com.simibubi.create.Create;
|
|||
import com.simibubi.create.content.logistics.trains.GraphLocation;
|
||||
import com.simibubi.create.content.logistics.trains.entity.Train;
|
||||
import com.simibubi.create.foundation.networking.TileEntityConfigurationPacket;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
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.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class StationEditPacket extends TileEntityConfigurationPacket<StationTileEntity> {
|
||||
|
||||
boolean dropSchedule;
|
||||
boolean assemblyMode;
|
||||
Boolean tryAssemble;
|
||||
String name;
|
||||
|
||||
public static StationEditPacket dropSchedule(BlockPos pos) {
|
||||
StationEditPacket packet = new StationEditPacket(pos);
|
||||
packet.dropSchedule = true;
|
||||
return packet;
|
||||
}
|
||||
|
||||
public static StationEditPacket tryAssemble(BlockPos pos) {
|
||||
StationEditPacket packet = new StationEditPacket(pos);
|
||||
packet.tryAssemble = true;
|
||||
|
@ -47,6 +58,9 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
|||
|
||||
@Override
|
||||
protected void writeSettings(FriendlyByteBuf buffer) {
|
||||
buffer.writeBoolean(dropSchedule);
|
||||
if (dropSchedule)
|
||||
return;
|
||||
buffer.writeBoolean(tryAssemble != null);
|
||||
if (tryAssemble != null) {
|
||||
buffer.writeBoolean(tryAssemble);
|
||||
|
@ -58,6 +72,10 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
|||
|
||||
@Override
|
||||
protected void readSettings(FriendlyByteBuf buffer) {
|
||||
if (buffer.readBoolean()) {
|
||||
dropSchedule = true;
|
||||
return;
|
||||
}
|
||||
name = "";
|
||||
if (buffer.readBoolean()) {
|
||||
tryAssemble = buffer.readBoolean();
|
||||
|
@ -73,6 +91,11 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
|||
BlockPos blockPos = te.getBlockPos();
|
||||
BlockState blockState = level.getBlockState(blockPos);
|
||||
|
||||
if (dropSchedule) {
|
||||
scheduleDropRequested(player, te);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!name.isBlank()) {
|
||||
GlobalStation station = te.getStation();
|
||||
GraphLocation graphLocation = te.edgePoint.determineGraphLocation();
|
||||
|
@ -92,7 +115,7 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
|||
if (tryAssemble)
|
||||
te.assemble(player.getUUID());
|
||||
else {
|
||||
if (disassembleAndEnterMode(te))
|
||||
if (disassembleAndEnterMode(player, te))
|
||||
te.refreshAssemblyInfo();
|
||||
}
|
||||
return;
|
||||
|
@ -103,7 +126,7 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
|||
BlockState newState = blockState.cycle(StationBlock.ASSEMBLING);
|
||||
Boolean nowAssembling = newState.getValue(StationBlock.ASSEMBLING);
|
||||
if (nowAssembling) {
|
||||
if (!disassembleAndEnterMode(te))
|
||||
if (!disassembleAndEnterMode(player, te))
|
||||
return;
|
||||
} else {
|
||||
te.cancelAssembly();
|
||||
|
@ -116,17 +139,46 @@ public class StationEditPacket extends TileEntityConfigurationPacket<StationTile
|
|||
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();
|
||||
if (station != null) {
|
||||
Train train = station.getPresentTrain();
|
||||
BlockPos trackPosition = te.edgePoint.getGlobalPosition();
|
||||
ItemStack schedule = train == null ? ItemStack.EMPTY : train.runtime.returnSchedule();
|
||||
if (train != null && !train.disassemble(te.getAssemblyDirection(), trackPosition.above()))
|
||||
return false;
|
||||
dropSchedule(sender, te, schedule);
|
||||
}
|
||||
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
|
||||
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.widget.IconButton;
|
||||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||
|
||||
import net.minecraft.client.gui.components.EditBox;
|
||||
|
@ -26,7 +27,7 @@ public class StationScreen extends AbstractStationScreen {
|
|||
private EditBox trainNameBox;
|
||||
private IconButton newTrainButton;
|
||||
private IconButton disassembleTrainButton;
|
||||
private IconButton openScheduleButton;
|
||||
private IconButton dropScheduleButton;
|
||||
|
||||
private int leavingAnimation;
|
||||
private LerpedFloat trainPosition;
|
||||
|
@ -69,20 +70,23 @@ public class StationScreen extends AbstractStationScreen {
|
|||
};
|
||||
|
||||
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);
|
||||
addRenderableWidget(newTrainButton);
|
||||
|
||||
disassembleTrainButton = new WideIconButton(x + 94, y + 65, AllGuiTextures.I_DISASSEMBLE_TRAIN);
|
||||
disassembleTrainButton.active = false;
|
||||
disassembleTrainButton.visible = false;
|
||||
disassembleTrainButton.setToolTip(Lang.translate("station.disassemble_train"));
|
||||
disassembleTrainButton.withCallback(assemblyCallback);
|
||||
addRenderableWidget(disassembleTrainButton);
|
||||
|
||||
openScheduleButton = new IconButton(x + 73, y + 65, AllIcons.I_VIEW_SCHEDULE);
|
||||
openScheduleButton.active = false;
|
||||
openScheduleButton.visible = false;
|
||||
addRenderableWidget(openScheduleButton);
|
||||
dropScheduleButton = new IconButton(x + 73, y + 65, AllIcons.I_VIEW_SCHEDULE);
|
||||
dropScheduleButton.active = false;
|
||||
dropScheduleButton.visible = false;
|
||||
dropScheduleButton
|
||||
.withCallback(() -> AllPackets.channel.sendToServer(StationEditPacket.dropSchedule(te.getBlockPos())));
|
||||
addRenderableWidget(dropScheduleButton);
|
||||
|
||||
onTextChanged = s -> trainNameBox.x = nameBoxX(s, trainNameBox);
|
||||
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;
|
||||
disassembleTrainButton.active = false;
|
||||
disassembleTrainButton.visible = true;
|
||||
openScheduleButton.active = false;
|
||||
openScheduleButton.visible = true;
|
||||
dropScheduleButton.active = te.trainHasSchedule;
|
||||
dropScheduleButton.visible = true;
|
||||
|
||||
trainNameBox.active = true;
|
||||
trainNameBox.setValue(imminentTrain.name.getString());
|
||||
|
@ -164,8 +168,8 @@ public class StationScreen extends AbstractStationScreen {
|
|||
|
||||
displayedTrain = new WeakReference<>(null);
|
||||
disassembleTrainButton.visible = false;
|
||||
openScheduleButton.active = false;
|
||||
openScheduleButton.visible = false;
|
||||
dropScheduleButton.active = false;
|
||||
dropScheduleButton.visible = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -176,7 +180,14 @@ public class StationScreen extends AbstractStationScreen {
|
|||
|
||||
boolean trainAtStation = trainPresent();
|
||||
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);
|
||||
trainPosition.setValue(targetPos - (targetPos + trainIconWidth) * f);
|
||||
|
|
|
@ -12,6 +12,8 @@ import java.util.UUID;
|
|||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException;
|
||||
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.management.edgePoint.EdgePointType;
|
||||
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.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
import com.simibubi.create.foundation.utility.WorldAttached;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -43,6 +48,7 @@ import net.minecraft.core.Direction.AxisDirection;
|
|||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.util.Mth;
|
||||
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.state.BlockState;
|
||||
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.minecraftforge.api.distmarker.Dist;
|
||||
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;
|
||||
|
||||
public class StationTileEntity extends SmartTileEntity {
|
||||
|
@ -58,18 +69,24 @@ public class StationTileEntity extends SmartTileEntity {
|
|||
|
||||
protected int failedCarriageIndex;
|
||||
protected AssemblyException lastException;
|
||||
protected IItemHandlerModifiable autoSchedule;
|
||||
protected LazyOptional<IItemHandler> capability;
|
||||
|
||||
// for display
|
||||
UUID imminentTrain;
|
||||
boolean trainPresent;
|
||||
boolean trainBackwards;
|
||||
boolean trainCanDisassemble;
|
||||
boolean trainHasSchedule;
|
||||
boolean trainHasAutoSchedule;
|
||||
|
||||
public StationTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
setLazyTickRate(20);
|
||||
lastException = null;
|
||||
failedCarriageIndex = -1;
|
||||
autoSchedule = new StationInventory();
|
||||
capability = LazyOptional.of(() -> autoSchedule);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -85,6 +102,8 @@ public class StationTileEntity extends SmartTileEntity {
|
|||
super.read(tag, clientPacket);
|
||||
invalidateRenderBoundingBox();
|
||||
|
||||
autoSchedule.setStackInSlot(0, ItemStack.of(tag.getCompound("HeldItem")));
|
||||
|
||||
if (!clientPacket)
|
||||
return;
|
||||
if (!tag.contains("ImminentTrain")) {
|
||||
|
@ -96,15 +115,19 @@ public class StationTileEntity extends SmartTileEntity {
|
|||
}
|
||||
|
||||
imminentTrain = tag.getUUID("ImminentTrain");
|
||||
trainPresent = tag.getBoolean("TrainPresent");
|
||||
trainCanDisassemble = tag.getBoolean("TrainCanDisassemble");
|
||||
trainBackwards = tag.getBoolean("TrainBackwards");
|
||||
trainPresent = tag.contains("TrainPresent");
|
||||
trainCanDisassemble = tag.contains("TrainCanDisassemble");
|
||||
trainBackwards = tag.contains("TrainBackwards");
|
||||
trainHasSchedule = tag.contains("TrainHasSchedule");
|
||||
trainHasAutoSchedule = tag.contains("TrainHasAutoSchedule");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void write(CompoundTag tag, boolean clientPacket) {
|
||||
AssemblyException.write(tag, lastException);
|
||||
tag.putInt("FailedCarriageIndex", failedCarriageIndex);
|
||||
tag.put("HeldItem", autoSchedule.getStackInSlot(0)
|
||||
.serializeNBT());
|
||||
super.write(tag, clientPacket);
|
||||
|
||||
if (!clientPacket)
|
||||
|
@ -113,9 +136,17 @@ public class StationTileEntity extends SmartTileEntity {
|
|||
return;
|
||||
|
||||
tag.putUUID("ImminentTrain", imminentTrain);
|
||||
tag.putBoolean("TrainPresent", trainPresent);
|
||||
tag.putBoolean("TrainCanDisassemble", trainCanDisassemble);
|
||||
tag.putBoolean("TrainBackwards", trainBackwards);
|
||||
|
||||
if (trainPresent)
|
||||
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
|
||||
|
@ -157,13 +188,24 @@ public class StationTileEntity extends SmartTileEntity {
|
|||
boolean trainPresent = imminentTrain != null && imminentTrain.getCurrentStation() == station;
|
||||
boolean canDisassemble = trainPresent && imminentTrain.canDisassemble();
|
||||
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.trainPresent = trainPresent;
|
||||
this.trainCanDisassemble = canDisassemble;
|
||||
this.trainBackwards = imminentTrain != null && imminentTrain.currentlyBackwards;
|
||||
this.trainHasSchedule = trainHasSchedule;
|
||||
this.trainHasAutoSchedule = trainHasAutoSchedule;
|
||||
|
||||
notifyUpdate();
|
||||
}
|
||||
}
|
||||
|
@ -531,4 +573,51 @@ public class StationTileEntity extends SmartTileEntity {
|
|||
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 boolean cyclic;
|
||||
public int savedProgress;
|
||||
|
||||
public Schedule() {
|
||||
entries = new ArrayList<>();
|
||||
cyclic = true;
|
||||
savedProgress = 0;
|
||||
}
|
||||
|
||||
public CompoundTag write() {
|
||||
|
@ -77,6 +79,8 @@ public class Schedule {
|
|||
ListTag list = NBTHelper.writeCompoundList(entries, ScheduleEntry::write);
|
||||
tag.put("Entries", list);
|
||||
tag.putBoolean("Cyclic", cyclic);
|
||||
if (savedProgress > 0)
|
||||
tag.putInt("Progress", savedProgress);
|
||||
return tag;
|
||||
}
|
||||
|
||||
|
@ -84,6 +88,8 @@ public class Schedule {
|
|||
Schedule schedule = new Schedule();
|
||||
schedule.entries = NBTHelper.readCompoundList(tag.getList("Entries", Tag.TAG_COMPOUND), ScheduleEntry::fromTag);
|
||||
schedule.cyclic = tag.getBoolean("Cyclic");
|
||||
if (tag.contains("Progress"))
|
||||
schedule.savedProgress = tag.getInt("Progress");
|
||||
return schedule;
|
||||
}
|
||||
|
||||
|
|
|
@ -100,11 +100,24 @@ public class ScheduleItem extends Item implements MenuProvider {
|
|||
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);
|
||||
AllSoundEvents.CONFIRM.playOnServer(pPlayer.level, pPlayer.blockPosition(), 1, 1);
|
||||
pPlayer.displayClientMessage(Lang.translate("schedule.applied_to_train")
|
||||
.withStyle(ChatFormatting.GREEN), true);
|
||||
|
||||
pStack.shrink(1);
|
||||
pPlayer.setItemInHand(pUsedHand, pStack.isEmpty() ? ItemStack.EMPTY : pStack);
|
||||
}
|
||||
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.List;
|
||||
|
||||
import com.simibubi.create.AllItems;
|
||||
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.edgePoint.EdgePointType;
|
||||
|
@ -20,6 +21,7 @@ import net.minecraft.nbt.CompoundTag;
|
|||
import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.network.chat.TextComponent;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
||||
public class ScheduleRuntime {
|
||||
|
@ -31,7 +33,7 @@ public class ScheduleRuntime {
|
|||
Train train;
|
||||
Schedule schedule;
|
||||
|
||||
boolean isAutoSchedule;
|
||||
public boolean isAutoSchedule;
|
||||
public boolean paused;
|
||||
public int currentEntry;
|
||||
public State state;
|
||||
|
@ -173,7 +175,7 @@ public class ScheduleRuntime {
|
|||
public void setSchedule(Schedule schedule, boolean auto) {
|
||||
reset();
|
||||
this.schedule = schedule;
|
||||
currentEntry = 0;
|
||||
currentEntry = Mth.clamp(schedule.savedProgress, 0, schedule.entries.size() - 1);
|
||||
paused = false;
|
||||
isAutoSchedule = auto;
|
||||
train.status.newSchedule();
|
||||
|
@ -186,6 +188,7 @@ public class ScheduleRuntime {
|
|||
}
|
||||
|
||||
public void discardSchedule() {
|
||||
train.navigation.cancelNavigation();
|
||||
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 Indicator cyclicIndicator;
|
||||
|
||||
private IconButton resetProgress;
|
||||
private IconButton skipProgress;
|
||||
|
||||
private ScheduleDestination editingDestination;
|
||||
private ScheduleWaitCondition editingCondition;
|
||||
private SelectionScrollInput scrollInput;
|
||||
|
@ -112,6 +115,7 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
|||
schedule.cyclic = !schedule.cyclic;
|
||||
cyclicIndicator.state = schedule.cyclic ? State.ON : State.OFF;
|
||||
});
|
||||
|
||||
List<Component> tip = cyclicButton.getToolTip();
|
||||
tip.add(Lang.translate("schedule.loop"));
|
||||
tip.add(Lang.translate("schedule.loop1")
|
||||
|
@ -121,6 +125,25 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
|||
|
||||
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();
|
||||
extraAreas = ImmutableList.of(new Rect2i(leftPos + bg.width, topPos + bg.height - 56, 48, 48));
|
||||
horizontalScrolls.clear();
|
||||
|
@ -134,6 +157,8 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
|||
confirmButton.visible = false;
|
||||
cyclicButton.visible = false;
|
||||
cyclicIndicator.visible = false;
|
||||
skipProgress.visible = false;
|
||||
resetProgress.visible = false;
|
||||
scrollInput = new SelectionScrollInput(leftPos + 56, topPos + 65, 143, 16);
|
||||
scrollInputLabel = new Label(leftPos + 59, topPos + 69, new TextComponent("")).withShadow();
|
||||
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;
|
||||
cyclicButton.visible = true;
|
||||
cyclicIndicator.visible = true;
|
||||
skipProgress.visible = true;
|
||||
resetProgress.visible = true;
|
||||
if (editingCondition == null && editingDestination == null)
|
||||
return;
|
||||
removeWidget(scrollInput);
|
||||
|
@ -248,6 +275,11 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
|||
scroll.tickChaser();
|
||||
for (LerpedFloat lerpedFloat : horizontalScrolls)
|
||||
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
|
||||
|
@ -275,6 +307,17 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
|||
float scrollOffset = -scroll.getValue(partialTicks);
|
||||
|
||||
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);
|
||||
matrixStack.pushPose();
|
||||
matrixStack.translate(0, scrollOffset, 0);
|
||||
|
@ -431,7 +474,8 @@ public class ScheduleScreen extends AbstractSimiContainerScreen<ScheduleContaine
|
|||
matrixStack.popPose();
|
||||
|
||||
if (xOffset + 16 > cardWidth - 26) {
|
||||
TransformStack.cast(matrixStack).rotateZ(-90);
|
||||
TransformStack.cast(matrixStack)
|
||||
.rotateZ(-90);
|
||||
Matrix4f m = matrixStack.last()
|
||||
.pose();
|
||||
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) {
|
||||
super.renderForeground(matrixStack, mouseX, mouseY, partialTicks);
|
||||
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)
|
||||
.render(matrixStack);
|
||||
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_SECOND_LINE("schedule_2", 20, 91, 124, 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_ASSEMBLING("assemble", 200, 178),
|
||||
|
|
|
@ -604,9 +604,15 @@
|
|||
"create.schedule.loop": "Loop Forever",
|
||||
"create.schedule.loop1": "Schedule starts over",
|
||||
"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.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.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.valid_connection": "Can Connect \u2714",
|
||||
|
@ -623,6 +629,11 @@
|
|||
"create.track.leave_slope_descending": "Cannot leave this slope while descending",
|
||||
"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.frontmost_bogey_at_station": "Frontmost Bogey must be at Station Marker",
|
||||
"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",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"0": "create:block/track",
|
||||
"3": "create:block/brass_block",
|
||||
"4": "create:block/bogey/top",
|
||||
"particle": "create:block/bogey/particle"
|
||||
},
|
||||
"elements": [
|
||||
|
@ -13,12 +13,12 @@
|
|||
"to": [16, 16, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, -2, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 13.875, 4.25, 15], "texture": "#0"},
|
||||
"east": {"uv": [4.375, 13.875, 6.375, 15], "texture": "#0"},
|
||||
"south": {"uv": [2.25, 13.875, 4.25, 15], "texture": "#0"},
|
||||
"west": {"uv": [4.375, 13.875, 6.375, 15], "texture": "#0"},
|
||||
"up": {"uv": [0.125, 13.875, 2.125, 15.875], "texture": "#0"},
|
||||
"down": {"uv": [0.125, 13.875, 2.125, 15.875], "texture": "#0"}
|
||||
"north": {"uv": [8, 8, 16, 12.5], "texture": "#4"},
|
||||
"east": {"uv": [0, 8, 8, 12.5], "texture": "#4"},
|
||||
"south": {"uv": [8, 8, 16, 12.5], "texture": "#4"},
|
||||
"west": {"uv": [0, 8, 8, 12.5], "texture": "#4"},
|
||||
"up": {"uv": [0, 0, 8, 8], "rotation": 90, "texture": "#4"},
|
||||
"down": {"uv": [0, 0, 16, 16], "texture": "#3"}
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -27,12 +27,11 @@
|
|||
"to": [14, 7, 14],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, -16, -144]},
|
||||
"faces": {
|
||||
"north": {"uv": [2, 14, 14, 16], "texture": "#3"},
|
||||
"east": {"uv": [2, 14, 14, 16], "texture": "#3"},
|
||||
"south": {"uv": [2, 14, 14, 16], "texture": "#3"},
|
||||
"west": {"uv": [2, 14, 14, 16], "texture": "#3"},
|
||||
"up": {"uv": [6, 8, 7, 10], "texture": "#missing"},
|
||||
"down": {"uv": [2, 2, 14, 14], "texture": "#3"}
|
||||
"north": {"uv": [2, 2, 14, 4], "texture": "#particle"},
|
||||
"east": {"uv": [2, 2, 14, 4], "texture": "#particle"},
|
||||
"south": {"uv": [2, 2, 14, 4], "texture": "#particle"},
|
||||
"west": {"uv": [2, 2, 14, 4], "texture": "#particle"},
|
||||
"down": {"uv": [4, 4, 12, 12], "texture": "#particle"}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
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 |