Ponder Ponder Ponder

- Fixed all scenes with broken mechanical arms
- Display Board Scene
- Bogeys now animate
- Controls now show handles, Conductors show hats
- Train Schedule Scene
- Updated ponder tags
- Fixed Scene end timings to work with "Up Next"
- Fixed Glue in Chassis Scene
This commit is contained in:
simibubi 2022-06-28 00:07:10 +02:00
parent a1b892ba60
commit 724d3af40e
59 changed files with 873 additions and 177 deletions

View file

@ -559,22 +559,22 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
f85edc574ee6de0de7693ffb031266643db6724a assets/create/lang/en_ud.json
e4387cb6c9c2f655780caae6695c21d4b0f7ff00 assets/create/lang/en_us.json
034ed85767e85796f1fbd24e9bc82f6efbb0ff00 assets/create/lang/unfinished/de_de.json
8cb1689cfca91a9b90b696c40c255668432f2067 assets/create/lang/unfinished/es_cl.json
8aae499911d504a1853e93a1faf3cda884cc33c3 assets/create/lang/unfinished/es_es.json
e9e5a2a515962b41deb5cdd64fdda7b88d5b02ce assets/create/lang/unfinished/fr_fr.json
d0553cb3b398b02bccc9424de4a5047d798751c9 assets/create/lang/unfinished/it_it.json
db62d0e6b3eb76e0e1de5f9172586c7c2a4983a2 assets/create/lang/unfinished/ja_jp.json
8ba5cbbcf5b87ce731b591334fa37df9f166d50c assets/create/lang/unfinished/ko_kr.json
a70fb96e62e155970756d7b6fc03b110a9f567c6 assets/create/lang/unfinished/nl_nl.json
78412fe67fe8d83d21cde2b71619bedecdd0dde1 assets/create/lang/unfinished/pl_pl.json
df49ae1125eaa7238b37b3718d3f457eb0995d68 assets/create/lang/unfinished/pt_br.json
08313ea78351409316476109c911c01b7f3cd4e0 assets/create/lang/unfinished/pt_pt.json
532b44d44f9c5936ab3685b8364110e8589f86c2 assets/create/lang/unfinished/ro_ro.json
cd21ad8384b2324dc555d9e83e1335fd3d33be26 assets/create/lang/unfinished/ru_ru.json
f25383665c84b72792df13c958324912f664ef73 assets/create/lang/unfinished/zh_cn.json
f8fd3b4be22a34130711033ed939a6bad87a5dd6 assets/create/lang/unfinished/zh_tw.json
a7577ac3c680ab2310dc75ad5f4ae2b7c04e3e43 assets/create/lang/en_us.json
8735c5c7044b78e597f5a824e8983d0621860796 assets/create/lang/unfinished/de_de.json
2d30195c7141ccc90f5082a49d45339b228c084b assets/create/lang/unfinished/es_cl.json
34d4ac6a07e0aa9532dd2236f453be14afa62dfd assets/create/lang/unfinished/es_es.json
97f5084b105870db9d9fd09cf69f76204d09fb31 assets/create/lang/unfinished/fr_fr.json
c22700892b9c1d182fcd1fce7949b9514a6dc08d assets/create/lang/unfinished/it_it.json
91001c998ab514bd8c1622934768f2c214a9b400 assets/create/lang/unfinished/ja_jp.json
0e81eec61de0c788d544532cc7d9415953a57532 assets/create/lang/unfinished/ko_kr.json
b5cd4570f324f7ef479b4498530db8424a0fce4e assets/create/lang/unfinished/nl_nl.json
4119cf3e85c2db269cfcbb9b0855dc589f1b2efd assets/create/lang/unfinished/pl_pl.json
7dfea0cf1817b578cf77bb3cf7aec56cf3ae3c79 assets/create/lang/unfinished/pt_br.json
6ebfab1999c828e118fd3416cfc1e7deb92a1951 assets/create/lang/unfinished/pt_pt.json
c0696548db7c287f4328da87d7dbd71b5c2fd5cb assets/create/lang/unfinished/ro_ro.json
8e51c6dff7d3440fb64e96912de3477b7d93b785 assets/create/lang/unfinished/ru_ru.json
b7b8e40e1fdcb192a7d4995ac8e171de8b18714d assets/create/lang/unfinished/zh_cn.json
20ecd8bcb6f5bae81b73e6dc578fbac8d0e18cfb 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

View file

@ -2056,7 +2056,7 @@
"create.ponder.close": "Close",
"create.ponder.identify": "Identify",
"create.ponder.next": "Next Scene",
"create.ponder.next_up": "Next up:",
"create.ponder.next_up": "Up Next:",
"create.ponder.previous": "Previous Scene",
"create.ponder.replay": "Replay",
"create.ponder.think_back": "Think Back",
@ -2105,6 +2105,8 @@
"create.ponder.tag.logistics.description": "Components which help moving items around",
"create.ponder.tag.display_targets": "Targets for Display Links",
"create.ponder.tag.display_targets.description": "Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "Railway Equipment",
"create.ponder.tag.train_related.description": "Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "Controlling signals using the Analog Lever",
"create.ponder.analog_lever.text_1": "Analog Levers make for a compact and precise source of redstone power",
@ -2352,6 +2354,14 @@
"create.ponder.depot.text_3": "Just like Mechanical Belts, it can provide items to processing",
"create.ponder.depot.text_4": "...as well as provide Items to Mechanical Arms",
"create.ponder.display_board.header": "Using Display Boards",
"create.ponder.display_board.text_1": "Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "They require Rotational Force to operate",
"create.ponder.display_board.text_3": "Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "...or through the use of Display Links",
"create.ponder.display_board.text_5": "Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "Setting up Display Links",
"create.ponder.display_link.text_1": "Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "First select a target by Right- Clicking while holding the Link ...",
@ -2897,6 +2907,12 @@
"create.ponder.train_controls.text_8": "Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "Using Train Schedules",
"create.ponder.train_schedule.text_1": "Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "Generating Rotational Force using Valve Handles",
"create.ponder.valve_handle.text_1": "Valve Handles can be used by players to apply rotational force manually",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1270",
"_": "Missing Localizations: 1285",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "UNLOCALIZED: Close",
"create.ponder.identify": "UNLOCALIZED: Identify",
"create.ponder.next": "UNLOCALIZED: Next Scene",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "UNLOCALIZED: Previous Scene",
"create.ponder.replay": "UNLOCALIZED: Replay",
"create.ponder.think_back": "UNLOCALIZED: Think Back",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "UNLOCALIZED: Controlling signals using the Analog Lever",
"create.ponder.analog_lever.text_1": "UNLOCALIZED: Analog Levers make for a compact and precise source of redstone power",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing",
"create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles",
"create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 920",
"_": "Missing Localizations: 935",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "Cerrar",
"create.ponder.identify": "Identificar",
"create.ponder.next": "Siguiente Escena",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "Escena Previa",
"create.ponder.replay": "Reiniciar",
"create.ponder.think_back": "Pensar Atrás",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "Componentes que ayudan a mover objetos",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "Controlando señales usando la Palanca Análoga",
"create.ponder.analog_lever.text_1": "Las Palancas Análogas son una fuente compacta y precisa de redstone",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "Al igual que las Cintas Mecánicas, pueden proporcionar objetos para procesar.",
"create.ponder.depot.text_4": "...así como proporcionar objetos a los brazos mecánicos",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "Generación Fuerza Rotacional mediante Válvulas de Cobre",
"create.ponder.valve_handle.text_1": "Los jugadores pueden usar las Válvulas para aplicar fuerza de rotación manualmente",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 584",
"_": "Missing Localizations: 599",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "Cerrar",
"create.ponder.identify": "Identificar",
"create.ponder.next": "Escena siguiente",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "Escena previa",
"create.ponder.replay": "Repetición",
"create.ponder.think_back": "Volver atrás",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "Componentes que ayudan a desplazar los objetos",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "Controlar señales mediante la palanca analógica",
"create.ponder.analog_lever.text_1": "Las palancas analógicas son una fuente compacta y precisa de energía de redstone",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "Al igual que en las cintas mecánicas, pueden procesarse objetos",
"create.ponder.depot.text_4": "...así como proporcionar objetos a los brazos mecánicos",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "Generar fuerza rotacional mediante asas de válvula",
"create.ponder.valve_handle.text_1": "Los jugadores pueden utilizar las asas de válvulas para aplicar fuerza rotacional manualmente",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2072",
"_": "Missing Localizations: 2087",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "UNLOCALIZED: Close",
"create.ponder.identify": "UNLOCALIZED: Identify",
"create.ponder.next": "UNLOCALIZED: Next Scene",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "UNLOCALIZED: Previous Scene",
"create.ponder.replay": "UNLOCALIZED: Replay",
"create.ponder.think_back": "UNLOCALIZED: Think Back",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "UNLOCALIZED: Controlling signals using the Analog Lever",
"create.ponder.analog_lever.text_1": "UNLOCALIZED: Analog Levers make for a compact and precise source of redstone power",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing",
"create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles",
"create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1843",
"_": "Missing Localizations: 1858",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "UNLOCALIZED: Close",
"create.ponder.identify": "UNLOCALIZED: Identify",
"create.ponder.next": "UNLOCALIZED: Next Scene",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "UNLOCALIZED: Previous Scene",
"create.ponder.replay": "UNLOCALIZED: Replay",
"create.ponder.think_back": "UNLOCALIZED: Think Back",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "UNLOCALIZED: Controlling signals using the Analog Lever",
"create.ponder.analog_lever.text_1": "UNLOCALIZED: Analog Levers make for a compact and precise source of redstone power",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing",
"create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles",
"create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 586",
"_": "Missing Localizations: 601",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "閉じる",
"create.ponder.identify": "ブロック名を確認",
"create.ponder.next": "次のシーン",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "前のシーン",
"create.ponder.replay": "最初から",
"create.ponder.think_back": "戻る",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "アイテムの運搬を補助する機械です",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "アナログレバーによる信号制御",
"create.ponder.analog_lever.text_1": "アナログレバーはコンパクトに正確なレッドストーン動力を出力できます。",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "メカニカルベルトのように、載せたアイテムを加工できます",
"create.ponder.depot.text_4": "また、メカニカルアームにアイテムを供給することもできます",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "バルブハンドルによる回転力の生成",
"create.ponder.valve_handle.text_1": "バルブハンドルは手動で回転力を生み出す原動機です",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 586",
"_": "Missing Localizations: 601",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "닫기",
"create.ponder.identify": "탐색",
"create.ponder.next": "다음 장면",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "이전 장면",
"create.ponder.replay": "다시 재생",
"create.ponder.think_back": "되돌아가기",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "아이템을 옮기는데 도움을 줄 부품입니다.",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "아날로그 레버를 이용해 신호 조절하기",
"create.ponder.analog_lever.text_1": "아날로그 레버는 정확하고 간편하게 레드스톤 신호의 세기를 조절합니다.",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "벨트처럼, 놓여진 아이템은 가공될 수 있습니다.",
"create.ponder.depot.text_4": "그리고 기계 팔의 목표가 될 수 있습니다.",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "밸브 손잡이로 동력 생산하기",
"create.ponder.valve_handle.text_1": "밸브 손잡이를 사용하면 수동으로 동력을 생성할 수 있습니다.",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2420",
"_": "Missing Localizations: 2435",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "UNLOCALIZED: Close",
"create.ponder.identify": "UNLOCALIZED: Identify",
"create.ponder.next": "UNLOCALIZED: Next Scene",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "UNLOCALIZED: Previous Scene",
"create.ponder.replay": "UNLOCALIZED: Replay",
"create.ponder.think_back": "UNLOCALIZED: Think Back",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "UNLOCALIZED: Controlling signals using the Analog Lever",
"create.ponder.analog_lever.text_1": "UNLOCALIZED: Analog Levers make for a compact and precise source of redstone power",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing",
"create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles",
"create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 959",
"_": "Missing Localizations: 974",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "Zamknij",
"create.ponder.identify": "Identyfikacja",
"create.ponder.next": "Następna scena",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "Poprzednia scena",
"create.ponder.replay": "Powtórka",
"create.ponder.think_back": "Powrót",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "Komponenty, które pomagają w transporcie przedmiotów",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "Kontrola sygnałów z wykorzystaniem dźwigni analogowej",
"create.ponder.analog_lever.text_1": "Dźwignie analogowe są kompaktowymi i dokładnymi źródłami sygnału Redstone",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "Podobnie jak taśmociągi, składnica może dostarczać przedmioty do obróbki...",
"create.ponder.depot.text_4": "…jak i również dla mechanicznych ramion",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "Generowanie siły obrotowej z użyciem pokręteł",
"create.ponder.valve_handle.text_1": "Pokrętła mogą być użyte, aby ręcznie wytworzyć siłę obrotową bezpośrednio w miejscu postawienia",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1453",
"_": "Missing Localizations: 1468",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "UNLOCALIZED: Close",
"create.ponder.identify": "UNLOCALIZED: Identify",
"create.ponder.next": "UNLOCALIZED: Next Scene",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "UNLOCALIZED: Previous Scene",
"create.ponder.replay": "UNLOCALIZED: Replay",
"create.ponder.think_back": "UNLOCALIZED: Think Back",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "UNLOCALIZED: Controlling signals using the Analog Lever",
"create.ponder.analog_lever.text_1": "UNLOCALIZED: Analog Levers make for a compact and precise source of redstone power",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing",
"create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles",
"create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2129",
"_": "Missing Localizations: 2144",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "UNLOCALIZED: Close",
"create.ponder.identify": "UNLOCALIZED: Identify",
"create.ponder.next": "UNLOCALIZED: Next Scene",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "UNLOCALIZED: Previous Scene",
"create.ponder.replay": "UNLOCALIZED: Replay",
"create.ponder.think_back": "UNLOCALIZED: Think Back",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "UNLOCALIZED: Controlling signals using the Analog Lever",
"create.ponder.analog_lever.text_1": "UNLOCALIZED: Analog Levers make for a compact and precise source of redstone power",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing",
"create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles",
"create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 587",
"_": "Missing Localizations: 602",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "Închide",
"create.ponder.identify": "Identifică",
"create.ponder.next": "Scena următoare",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "Scena precedentă",
"create.ponder.replay": "Reia",
"create.ponder.think_back": "Gândește Înapoi",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "Componente ce ajută la mișcarea obiectelor în jur",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "Controlarea semnalelor folosind Maneta Analogică",
"create.ponder.analog_lever.text_1": "Manetele Analogice fac pentru o sursă de redstone compactă și precisă",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "La fel ca Benzile Mecanice, poate oferi obiecte către procesare",
"create.ponder.depot.text_4": "...precum și oferirea Obiectelor Brațelor Mecanice",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "Generarea Forței De Rotație folosind Mânere De Supapă",
"create.ponder.valve_handle.text_1": "Mânerele De Supapă pot fi folosite de jucători pentru a aplica forță de rotație manual",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 964",
"_": "Missing Localizations: 979",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "Закрыть",
"create.ponder.identify": "Определить",
"create.ponder.next": "Следующая сцена",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "Предыдущая сцена",
"create.ponder.replay": "Воспроизвести снова",
"create.ponder.think_back": "Подумать о предыдущем",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "Компоненты, помогающие перемещать предметы",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "Управлении сигналами используя Аналоговый рычаг",
"create.ponder.analog_lever.text_1": "Аналоговый рычаг создан как компактный и точный источник Редстоун сигнала",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "Так же, как Механические ремни, оно может предоставлять предметы для обработки",
"create.ponder.depot.text_4": "...а также поставлять предметы Механическим рукам",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "Генерации силы вращения при помощи Вентилей",
"create.ponder.valve_handle.text_1": "Игроки могут использовать вентили для применения силы вращения вручную",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 584",
"_": "Missing Localizations: 599",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "思索结束",
"create.ponder.identify": "显示方块名称",
"create.ponder.next": "下一情景",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "上一情景",
"create.ponder.replay": "重放",
"create.ponder.think_back": "回想",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "该组件可以协助物品运输",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "使用模拟拉杆控制红石信号",
"create.ponder.analog_lever.text_1": "模拟拉杆可提供紧凑而精确的红石信号源",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "与传送带一样,它也可以将其内的物品转送到其他设备中进行加工……",
"create.ponder.depot.text_4": "……同时物品也可以被机械手存取",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "使用阀门手轮产生旋转力",
"create.ponder.valve_handle.text_1": "玩家可以手动使用阀门手轮来产生旋转力",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 978",
"_": "Missing Localizations: 993",
"_": "->------------------------] Game Elements [------------------------<-",
@ -2057,7 +2057,7 @@
"create.ponder.close": "關閉",
"create.ponder.identify": "暫停",
"create.ponder.next": "下個場景",
"create.ponder.next_up": "UNLOCALIZED: Next up:",
"create.ponder.next_up": "UNLOCALIZED: Up Next:",
"create.ponder.previous": "上個場景",
"create.ponder.replay": "重播",
"create.ponder.think_back": "返回",
@ -2106,6 +2106,8 @@
"create.ponder.tag.logistics.description": "該裝置用於物品的傳輸",
"create.ponder.tag.display_targets": "UNLOCALIZED: Targets for Display Links",
"create.ponder.tag.display_targets.description": "UNLOCALIZED: Components or Blocks which can process and display the data received from a Display Link",
"create.ponder.tag.train_related": "UNLOCALIZED: Railway Equipment",
"create.ponder.tag.train_related.description": "UNLOCALIZED: Components used in the construction or management of Train Contraptions",
"create.ponder.analog_lever.header": "使用可調式拉桿來控制訊號",
"create.ponder.analog_lever.text_1": "可調式拉桿是一種小巧而輕準的紅石能源",
@ -2353,6 +2355,14 @@
"create.ponder.depot.text_3": "與傳送帶一樣,它也可以將其內的物品轉送到其他設備中進行加工...",
"create.ponder.depot.text_4": "...同時物品也可以被機械手存取",
"create.ponder.display_board.header": "UNLOCALIZED: Using Display Boards",
"create.ponder.display_board.text_1": "UNLOCALIZED: Display Boards are a scalable alternative to the sign",
"create.ponder.display_board.text_2": "UNLOCALIZED: They require Rotational Force to operate",
"create.ponder.display_board.text_3": "UNLOCALIZED: Text can be displayed using Name Tags...",
"create.ponder.display_board.text_4": "UNLOCALIZED: ...or through the use of Display Links",
"create.ponder.display_board.text_5": "UNLOCALIZED: Dyes can be applied to individual lines of the board",
"create.ponder.display_board.text_6": "UNLOCALIZED: Lines can be reset by clicking them with an empty hand",
"create.ponder.display_link.header": "UNLOCALIZED: Setting up Display Links",
"create.ponder.display_link.text_1": "UNLOCALIZED: Display Links should be assigned a target before they are placed",
"create.ponder.display_link.text_2": "UNLOCALIZED: First select a target by Right- Clicking while holding the Link ...",
@ -2898,6 +2908,12 @@
"create.ponder.train_controls.text_8": "UNLOCALIZED: Sneak or click again to stop controlling the Train",
"create.ponder.train_schedule.header": "UNLOCALIZED: Using Train Schedules",
"create.ponder.train_schedule.text_1": "UNLOCALIZED: Schedules allow Trains to be controlled by other Drivers",
"create.ponder.train_schedule.text_2": "UNLOCALIZED: Right-click with the item in hand to open its Interface",
"create.ponder.train_schedule.text_3": "UNLOCALIZED: Once programmed, the Schedule can be handed off to a Train Driver",
"create.ponder.train_schedule.text_4": "UNLOCALIZED: Any mob or blaze burner sitting in front of Train Controls is an eligible conductor",
"create.ponder.train_schedule.text_5": "UNLOCALIZED: Creatures on a lead can be given their seat more conveniently",
"create.ponder.train_schedule.text_6": "UNLOCALIZED: Schedules can be retrieved from Drivers at any moment",
"create.ponder.valve_handle.header": "使用閥門手輪產生動能",
"create.ponder.valve_handle.text_1": "玩家可以手動使用閥門手輪來產生動能",

View file

@ -179,7 +179,7 @@ import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchTileE
import com.simibubi.create.content.logistics.block.vault.ItemVaultTileEntity;
import com.simibubi.create.content.logistics.item.LecternControllerRenderer;
import com.simibubi.create.content.logistics.item.LecternControllerTileEntity;
import com.simibubi.create.content.logistics.trains.IBogeyTileEntityRenderer;
import com.simibubi.create.content.logistics.trains.BogeyTileEntityRenderer;
import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayRenderer;
import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayTileEntity;
import com.simibubi.create.content.logistics.trains.management.edgePoint.observer.TrackObserverRenderer;
@ -788,7 +788,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<StandardBogeyTileEntity> BOGEY = Create.registrate()
.tileEntity("bogey", StandardBogeyTileEntity::new)
.renderer(() -> IBogeyTileEntityRenderer::new)
.renderer(() -> BogeyTileEntityRenderer::new)
.validBlocks(AllBlocks.SMALL_BOGEY, AllBlocks.LARGE_BOGEY)
.register();

View file

@ -45,7 +45,7 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer<BlazeBurnerTileE
float animation = te.headAnimation.getValue(partialTicks) * .175f;
BlockState blockState = te.getBlockState();
boolean drawGoggles = te.goggles;
boolean drawHat = false;
boolean drawHat = te.hat;
renderShared(level, buffer, null, ms, blockState, horizontalAngle, animation, drawGoggles, drawHat, hashCode);
}
@ -122,14 +122,16 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer<BlazeBurnerTileE
draw(CachedBufferer.partial(AllBlockPartials.BLAZE_GOGGLES, blockState)
.translate(0, headY + 8 / 16f, 0), horizontalAngle, modelTransform, ms, solid);
if (drawHat && modelTransform != null)
CachedBufferer.partial(AllBlockPartials.TRAIN_HAT, blockState)
.transform(modelTransform)
.translate(0, headY + 0.75f, 0)
if (drawHat) {
SuperByteBuffer partial = CachedBufferer.partial(AllBlockPartials.TRAIN_HAT, blockState);
if (modelTransform != null)
partial.transform(modelTransform);
partial.translate(0, headY + 0.75f, 0)
.rotateCentered(Direction.UP, horizontalAngle + Mth.PI)
.translate(0.5f, 0, 0.5f)
.light(LightTexture.FULL_BRIGHT)
.renderInto(ms, solid);
}
draw(CachedBufferer.partial(rods, blockState)
.translate(0, offset1 + animation + .125f, 0), 0, modelTransform, ms, solid);

View file

@ -40,6 +40,7 @@ public class BlazeBurnerTileEntity extends SmartTileEntity {
protected LerpedFloat headAngle;
protected boolean isCreative;
protected boolean goggles;
protected boolean hat;
public BlazeBurnerTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
@ -142,6 +143,8 @@ public class BlazeBurnerTileEntity extends SmartTileEntity {
compound.putBoolean("isCreative", true);
if (goggles)
compound.putBoolean("Goggles", true);
if (hat)
compound.putBoolean("TrainHat", true);
super.write(compound, clientPacket);
}
@ -151,6 +154,7 @@ public class BlazeBurnerTileEntity extends SmartTileEntity {
remainingBurnTime = compound.getInt("burnTimeRemaining");
isCreative = compound.getBoolean("isCreative");
goggles = compound.contains("Goggles");
hat = compound.contains("TrainHat");
super.read(compound, clientPacket);
}

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.logistics.trains;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.content.logistics.trains.track.StandardBogeyTileEntity;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
@ -8,16 +9,19 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
public class IBogeyTileEntityRenderer<T extends BlockEntity> extends SafeTileEntityRenderer<T> {
public class BogeyTileEntityRenderer<T extends BlockEntity> extends SafeTileEntityRenderer<T> {
public IBogeyTileEntityRenderer(BlockEntityRendererProvider.Context context) {}
public BogeyTileEntityRenderer(BlockEntityRendererProvider.Context context) {}
@Override
protected void renderSafe(T te, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light,
int overlay) {
BlockState blockState = te.getBlockState();
float angle = 0;
if (te instanceof StandardBogeyTileEntity sbte)
angle = sbte.getVirtualAngle(partialTicks);
if (blockState.getBlock()instanceof IBogeyBlock bogey)
bogey.render(blockState, 0, ms, partialTicks, buffer, light, overlay);
bogey.render(blockState, angle, ms, partialTicks, buffer, light, overlay);
}
}

View file

@ -29,6 +29,7 @@ import net.minecraft.network.chat.Style;
import net.minecraft.network.chat.TextColor;
import net.minecraft.util.FormattedCharSink;
import net.minecraft.util.StringDecomposer;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@ -85,12 +86,12 @@ public class FlapDisplayRenderer extends KineticTileEntityRenderer {
Pose transform = ms.last();
FlapDisplayRenderOutput renderOutput = new FlapDisplayRenderOutput(buffer, color, transform.pose(), light,
j, !te.isSpeedRequirementFulfilled());
j, !te.isSpeedRequirementFulfilled(), te.getLevel());
for (int i = 0; i < line.size(); i++) {
FlapDisplaySection section = line.get(i);
renderOutput.nextSection(section);
int ticks = AnimationTickHolder.getTicks();
int ticks = AnimationTickHolder.getTicks(te.getLevel());
String text = section.renderCharsIndividually() || !section.spinning[0] ? section.text
: section.cyclingOptions[((ticks / 3) + i * 13) % section.cyclingOptions.length];
StringDecomposer.iterateFormatted(text, Style.EMPTY, renderOutput);
@ -124,11 +125,13 @@ public class FlapDisplayRenderer extends KineticTileEntityRenderer {
FlapDisplaySection section;
float x;
private int lineIndex;
private Level level;
public FlapDisplayRenderOutput(MultiBufferSource buffer, int color, Matrix4f pose, int light, int lineIndex,
boolean paused) {
boolean paused, Level level) {
this.bufferSource = buffer;
this.lineIndex = lineIndex;
this.level = level;
this.a = .75f;
this.r = (color >> 16 & 255) / 255f;
this.g = (color >> 8 & 255) / 255f;
@ -145,8 +148,8 @@ public class FlapDisplayRenderer extends KineticTileEntityRenderer {
public boolean accept(int charIndex, Style style, int glyph) {
FontSet fontset = getFontSet();
int ticks = paused ? 0 : AnimationTickHolder.getTicks();
float time = paused ? 0 : AnimationTickHolder.getRenderTime();
int ticks = paused ? 0 : AnimationTickHolder.getTicks(level);
float time = paused ? 0 : AnimationTickHolder.getRenderTime(level);
float dim = 1;
if (section.renderCharsIndividually() && section.spinning[Math.min(charIndex, section.spinning.length)]) {

View file

@ -60,7 +60,7 @@ public class FlapDisplaySection {
sendTransition = true;
}
private void refresh(boolean transition) {
public void refresh(boolean transition) {
if (component == null)
return;

View file

@ -105,7 +105,7 @@ public class FlapDisplayTileEntity extends KineticTileEntity {
public void tick() {
super.tick();
isRunning = super.isSpeedRequirementFulfilled();
if (!level.isClientSide || !isRunning)
if ((!level.isClientSide || !isRunning) && !isVirtual())
return;
int activeFlaps = 0;
for (FlapDisplayLayout line : lines)
@ -139,10 +139,10 @@ public class FlapDisplayTileEntity extends KineticTileEntity {
layout.loadDefault(getMaxCharCount());
List<FlapDisplaySection> sections = layout.getSections();
FlapDisplaySection flapDisplaySection = sections.get(0);
if (rawComponentText == null) {
manualLines[lineIndex] = false;
sections.get(0)
.setText(new TextComponent(""));
flapDisplaySection.setText(new TextComponent(""));
notifyUpdate();
return;
}
@ -152,10 +152,13 @@ public class FlapDisplayTileEntity extends KineticTileEntity {
return;
manualLines[lineIndex] = true;
Component text = DynamicComponent.parseCustomText(level, worldPosition, json);
sections.get(0)
.setText(text);
notifyUpdate();
Component text = isVirtual() ? Component.Serializer.fromJson(rawComponentText)
: DynamicComponent.parseCustomText(level, worldPosition, json);
flapDisplaySection.setText(text);
if (isVirtual())
flapDisplaySection.refresh(true);
else
notifyUpdate();
}
public void setColour(int lineIndex, DyeColor color) {

View file

@ -125,6 +125,9 @@ public class TrainHatArmorLayer<T extends LivingEntity, M extends EntityModel<T>
private boolean shouldRenderOn(LivingEntity entity) {
if (entity == null)
return false;
if (entity.getPersistentData()
.contains("TrainHat"))
return true;
if (!entity.isPassenger())
return false;
if (entity instanceof Player p) {

View file

@ -1,6 +1,8 @@
package com.simibubi.create.content.logistics.trains.track;
import com.simibubi.create.content.logistics.trains.IBogeyBlock;
import com.simibubi.create.foundation.tileEntity.CachedRenderBBTileEntity;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.entity.BlockEntityType;
@ -18,4 +20,21 @@ public class StandardBogeyTileEntity extends CachedRenderBBTileEntity {
return super.createRenderBoundingBox().inflate(2);
}
// Ponder
LerpedFloat virtualAnimation = LerpedFloat.angular();
public float getVirtualAngle(float partialTicks) {
return virtualAnimation.getValue(partialTicks);
}
public void animate(float distanceMoved) {
BlockState blockState = getBlockState();
if (!(blockState.getBlock() instanceof IBogeyBlock type))
return;
double angleDiff = 360 * distanceMoved / (Math.PI * 2 * type.getWheelRadius());
double newWheelAngle = (virtualAnimation.getValue() - angleDiff) % 360;
virtualAnimation.setValue(newWheelAngle);
}
}

View file

@ -126,7 +126,7 @@ public class PonderLocalization {
addGeneral(object, PonderUI.CLOSE, "Close");
addGeneral(object, PonderUI.IDENTIFY, "Identify");
addGeneral(object, PonderUI.NEXT, "Next Scene");
addGeneral(object, PonderUI.NEXT_UP, "Next up:");
addGeneral(object, PonderUI.NEXT_UP, "Up Next:");
addGeneral(object, PonderUI.PREVIOUS, "Previous Scene");
addGeneral(object, PonderUI.REPLAY, "Replay");
addGeneral(object, PonderUI.THINK_BACK, "Think Back");

View file

@ -22,74 +22,71 @@ public class PonderTag implements ScreenElement {
public static final PonderTag
KINETIC_RELAYS = create("kinetic_relays").item(AllBlocks.COGWHEEL.get(), true, false)
.defaultLang("Kinetic Blocks", "Components which help relaying Rotational Force elsewhere")
.addToIndex(),
.defaultLang("Kinetic Blocks", "Components which help relaying Rotational Force elsewhere")
.addToIndex(),
KINETIC_SOURCES = create("kinetic_sources").item(AllBlocks.WATER_WHEEL.get(), true, false)
KINETIC_SOURCES = create("kinetic_sources").item(AllBlocks.WATER_WHEEL.get(), true, false)
.defaultLang("Kinetic Sources", "Components which generate Rotational Force")
.addToIndex(),
KINETIC_APPLIANCES = create("kinetic_appliances").item(AllBlocks.MECHANICAL_PRESS.get(), true, false)
KINETIC_APPLIANCES = create("kinetic_appliances").item(AllBlocks.MECHANICAL_PRESS.get(), true, false)
.defaultLang("Kinetic Appliances", "Components which make use of Rotational Force")
.addToIndex(),
FLUIDS = create("fluids").item(AllBlocks.FLUID_PIPE.get(), true, false)
FLUIDS = create("fluids").item(AllBlocks.FLUID_PIPE.get(), true, false)
.defaultLang("Fluid Manipulators", "Components which help relaying and making use of Fluids")
.addToIndex(),
LOGISTICS = create("logistics").item(Blocks.CHEST, true, false)
LOGISTICS = create("logistics").item(Blocks.CHEST, true, false)
.defaultLang("Item Transportation", "Components which help moving items around")
.addToIndex(),
REDSTONE = create("redstone").item(Items.REDSTONE, true, false)
REDSTONE = create("redstone").item(Items.REDSTONE, true, false)
.defaultLang("Logic Components", "Components which help with redstone engineering")
.addToIndex(),
DECORATION = create("decoration").item(Items.ROSE_BUSH, true, false)
DECORATION = create("decoration").item(Items.ROSE_BUSH, true, false)
.defaultLang("Aesthetics", "Components used mostly for decorative purposes"),
CREATIVE = create("creative").item(AllBlocks.CREATIVE_CRATE.get(), true, false)
CREATIVE = create("creative").item(AllBlocks.CREATIVE_CRATE.get(), true, false)
.defaultLang("Creative Mode", "Components not usually available for Survival Mode")
.addToIndex(),
MOVEMENT_ANCHOR = create("movement_anchor").item(AllBlocks.MECHANICAL_PISTON.get(), true, false)
MOVEMENT_ANCHOR = create("movement_anchor").item(AllBlocks.MECHANICAL_PISTON.get(), true, false)
.defaultLang("Movement Anchors",
"Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways")
"Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways")
.addToIndex(),
CONTRAPTION_ACTOR = create("contraption_actor").item(AllBlocks.MECHANICAL_HARVESTER.get(), true, false)
CONTRAPTION_ACTOR = create("contraption_actor").item(AllBlocks.MECHANICAL_HARVESTER.get(), true, false)
.defaultLang("Contraption Actors",
"Components which expose special behaviour when attached to a moving contraption")
"Components which expose special behaviour when attached to a moving contraption")
.addToIndex(),
CONTRAPTION_ASSEMBLY = create("contraption_assembly").item(AllItems.SUPER_GLUE.get(), true, false)
CONTRAPTION_ASSEMBLY = create("contraption_assembly").item(AllItems.SUPER_GLUE.get(), true, false)
.defaultLang("Block Attachment Utility",
"Tools and Components used to assemble structures moved as an animated Contraption")
"Tools and Components used to assemble structures moved as an animated Contraption")
.addToIndex(),
SAILS = create("windmill_sails").item(AllBlocks.WINDMILL_BEARING.get(), true, true)
SAILS = create("windmill_sails").item(AllBlocks.WINDMILL_BEARING.get(), true, true)
.defaultLang("Sails for Windmill Bearings",
"Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so."),
"Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so."),
ARM_TARGETS = create("arm_targets").item(AllBlocks.MECHANICAL_ARM.get())
ARM_TARGETS = create("arm_targets").item(AllBlocks.MECHANICAL_ARM.get())
.defaultLang("Targets for Mechanical Arms",
"Components which can be selected as inputs or outputs to the Mechanical Arm"),
"Components which can be selected as inputs or outputs to the Mechanical Arm"),
DISPLAY_SOURCES = create("display_sources")
.item(AllBlocks.CONTENT_OBSERVER.get(), true, false)
.item(AllBlocks.DISPLAY_LINK.get(), false, true)
.defaultLang(
"Sources for Display Links",
"Components or Blocks which offer some data that can be read with a Display Link"
),
TRAIN_RELATED = create("train_related").item(AllBlocks.TRACK.get())
.defaultLang("Railway Equipment", "Components used in the construction or management of Train Contraptions"),
DISPLAY_TARGETS = create("display_targets")
.item(AllBlocks.DISPLAY_BOARD.get(), true, false)
DISPLAY_SOURCES = create("display_sources").item(AllBlocks.DISPLAY_LINK.get(), true, false)
.item(AllBlocks.DISPLAY_LINK.get(), false, true)
.defaultLang(
"Targets for Display Links",
"Components or Blocks which can process and display the data received from a Display Link"
);
.defaultLang("Sources for Display Links",
"Components or Blocks which offer some data that can be read with a Display Link"),
DISPLAY_TARGETS = create("display_targets").item(AllBlocks.DISPLAY_LINK.get(), true, false)
.item(AllBlocks.DISPLAY_LINK.get(), false, true)
.defaultLang("Targets for Display Links",
"Components or Blocks which can process and display the data received from a Display Link");
public static class Highlight {
public static final PonderTag ALL = create("_all");

View file

@ -17,10 +17,13 @@ import com.simibubi.create.content.contraptions.components.structureMovement.glu
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.ControlsBlock;
import com.simibubi.create.content.contraptions.fluids.PumpTileEntity;
import com.simibubi.create.content.contraptions.particle.RotationIndicatorParticleData;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerTileEntity;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity;
import com.simibubi.create.content.logistics.block.display.DisplayLinkTileEntity;
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity;
import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayTileEntity;
import com.simibubi.create.content.logistics.trains.management.edgePoint.signal.SignalTileEntity;
import com.simibubi.create.content.logistics.trains.management.edgePoint.signal.SignalTileEntity.SignalState;
import com.simibubi.create.content.logistics.trains.management.edgePoint.station.StationTileEntity;
@ -73,9 +76,11 @@ import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Vec3i;
import net.minecraft.core.particles.DustParticleOptions;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
@ -393,7 +398,7 @@ public class SceneBuilder {
public void showLine(PonderPalette color, Vec3 start, Vec3 end, int duration) {
addInstruction(new LineInstruction(color, start, end, duration, false));
}
public void showBigLine(PonderPalette color, Vec3 start, Vec3 end, int duration) {
addInstruction(new LineInstruction(color, start, end, duration, true));
}
@ -428,6 +433,11 @@ public class SceneBuilder {
.setPose(pose.get()));
}
public void conductorBirb(ElementLink<ParrotElement> birb, boolean conductor) {
addInstruction(scene -> scene.resolve(birb)
.setConductor(conductor));
}
public void movePointOfInterest(Vec3 location) {
addInstruction(new MovePoiInstruction(location));
}
@ -585,6 +595,10 @@ public class SceneBuilder {
addInstruction(AnimateTileEntityInstruction.pulley(pos, distance, duration));
}
public void animateBogey(BlockPos pos, float distance, int duration) {
addInstruction(AnimateTileEntityInstruction.bogey(pos, distance, duration + 1));
}
public void moveDeployer(BlockPos pos, float distance, int duration) {
addInstruction(AnimateTileEntityInstruction.deployer(pos, distance, duration));
}
@ -825,17 +839,35 @@ public class SceneBuilder {
public void toggleControls(BlockPos position) {
cycleBlockProperty(position, ControlsBlock.VIRTUAL);
}
public void animateTrainStation(BlockPos position, boolean trainPresent) {
modifyTileNBT(scene.getSceneBuildingUtil().select.position(position), StationTileEntity.class,
c -> c.putBoolean("ForceFlag", trainPresent));
}
public void conductorBlaze(BlockPos position, boolean conductor) {
modifyTileNBT(scene.getSceneBuildingUtil().select.position(position), BlazeBurnerTileEntity.class,
c -> c.putBoolean("TrainHat", conductor));
}
public void changeSignalState(BlockPos position, SignalState state) {
modifyTileNBT(scene.getSceneBuildingUtil().select.position(position), SignalTileEntity.class,
c -> NBTHelper.writeEnum(c, "State", state));
}
public void setDisplayBoardText(BlockPos position, int line, Component text) {
modifyTileEntity(position, FlapDisplayTileEntity.class,
t -> t.applyTextManually(line, Component.Serializer.toJson(text)));
}
public void dyeDisplayBoard(BlockPos position, int line, DyeColor color) {
modifyTileEntity(position, FlapDisplayTileEntity.class, t -> t.setColour(line, color));
}
public void flashDisplayLink(BlockPos position) {
modifyTileEntity(position, DisplayLinkTileEntity.class, linkTile -> linkTile.glow.setValue(2));
}
}
public class DebugInstructions {

View file

@ -263,6 +263,8 @@ public class ArmScenes {
scene.idle(2);
}
}
scene.world.showSection(util.select.position(6, 1, 1), Direction.WEST);
scene.world.showSection(util.select.position(2, 1, 1), Direction.EAST);
ItemStack sand = new ItemStack(Items.SAND, 64);

View file

@ -152,6 +152,7 @@ public class BearingScenes {
.pointAt(util.vector.topOf(windmill))
.placeNearTarget()
.text("Right-click the Bearing anytime to stop and edit the Structure again");
scene.idle(30);
}
@ -370,8 +371,10 @@ public class BearingScenes {
scene.overlay.showText(120)
.colored(PonderPalette.GREEN)
.placeNearTarget()
.pointAt(util.vector.blockSurface(util.grid.at(3, 1, 3), Direction.UP))
.text("It can be configured never to revert to solid blocks, or only near the angle it started at");
scene.idle(90);
}

View file

@ -168,6 +168,7 @@ public class BeltScenes {
.text("Mechanical Belts can be dyed for aesthetic purposes")
.placeNearTarget()
.pointAt(util.vector.topOf(shaftLocation.east()));
scene.idle(50);
}
public static void directions(SceneBuilder scene, SceneBuildingUtil util) {

View file

@ -10,14 +10,12 @@ import com.simibubi.create.foundation.ponder.PonderPalette;
import com.simibubi.create.foundation.ponder.SceneBuilder;
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
import com.simibubi.create.foundation.ponder.Selection;
import com.simibubi.create.foundation.ponder.element.EntityElement;
import com.simibubi.create.foundation.ponder.element.InputWindowElement;
import com.simibubi.create.foundation.ponder.element.WorldSectionElement;
import com.simibubi.create.foundation.utility.Pointing;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.phys.AABB;
@ -87,6 +85,7 @@ public class ChassisScenes {
scene.world.rotateBearing(bearingPos, 360, 80);
scene.world.rotateSection(chassis, 0, 360, 0, 80);
scene.idle(50);
}
public static void linearAttachement(SceneBuilder scene, SceneBuildingUtil util) {
@ -253,7 +252,8 @@ public class ChassisScenes {
scene.overlay.showControls(new InputWindowElement(glueSurface, Pointing.DOWN).rightClick()
.withItem(AllItems.SUPER_GLUE.asStack()), 30);
scene.idle(7);
// ElementLink<EntityElement> glueEntity = scene.world.createGlueEntity(chassisPos.west(), Direction.NORTH);TODO
scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, glueSurface,
new AABB(util.grid.at(1, 2, 2)).expandTowards(0, 0, -1), 40);
scene.idle(20);
ElementLink<WorldSectionElement> gluedPlank =
scene.world.showIndependentSection(util.select.position(3, 3, 1), Direction.SOUTH);
@ -262,7 +262,6 @@ public class ChassisScenes {
scene.effects.superGlue(chassisPos.west(), Direction.NORTH, true);
scene.idle(20);
// scene.world.modifyEntity(glueEntity, Entity::discard);
scene.world.hideIndependentSection(glassSection, Direction.UP);
scene.world.hideIndependentSection(gluedPlank, Direction.UP);
scene.world.hideIndependentSection(topGlassSection, Direction.UP);
@ -463,7 +462,7 @@ public class ChassisScenes {
scene.world.rotateBearing(bearingPos, 360, 80);
scene.world.rotateSection(contraption, 0, 360, 0, 80);
scene.idle(90);
scene.world.destroyBlock(util.grid.at(1, 2, 0));
scene.idle(1);
scene.world.destroyBlock(util.grid.at(1, 2, 1));

View file

@ -136,6 +136,7 @@ public class ChuteScenes {
new InputWindowElement(util.vector.blockSurface(util.grid.at(2, 1, 1), Direction.NORTH), Pointing.RIGHT)
.withItem(stack),
50);
scene.markAsFinished();
}
public static void upward(SceneBuilder scene, SceneBuildingUtil util) {

View file

@ -485,6 +485,7 @@ public class DeployerScenes {
.text("Thus, a negative pulse can be used to trigger exactly one activation cycle");
scene.idle(31);
scene.world.moveDeployer(deployerPos, -1, 30);
scene.idle(40);
}

View file

@ -1,6 +1,7 @@
package com.simibubi.create.foundation.ponder.content;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.logistics.block.display.DisplayLinkTileEntity;
import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayTileEntity;
import com.simibubi.create.foundation.ponder.ElementLink;
@ -16,10 +17,13 @@ import com.simibubi.create.foundation.utility.Pointing;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.SignBlockEntity;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class DisplayScenes {
@ -44,18 +48,20 @@ public class DisplayScenes {
scene.idle(10);
scene.effects.indicateRedstone(invalidLinkPos);
scene.overlay.showSelectionWithText(invalidLinkSel, 60)
.attachKeyFrame()
.colored(PonderPalette.RED)
.text("Display Links should be assigned a target before they are placed")
.pointAt(util.vector.blockSurface(invalidLinkPos, Direction.WEST))
.placeNearTarget();
.attachKeyFrame()
.colored(PonderPalette.RED)
.text("Display Links should be assigned a target before they are placed")
.pointAt(util.vector.blockSurface(invalidLinkPos, Direction.WEST))
.placeNearTarget();
scene.idle(60);
ElementLink<WorldSectionElement> signSection = scene.world.showIndependentSection(util.select.position(signPos), Direction.DOWN);
ElementLink<WorldSectionElement> signSection =
scene.world.showIndependentSection(util.select.position(signPos), Direction.DOWN);
scene.world.moveSection(signSection, util.vector.of(0, 1, 0), 0);
ElementLink<WorldSectionElement> concreteSection = scene.world.showIndependentSection(util.select.position(signPos.below()), Direction.UP);
ElementLink<WorldSectionElement> concreteSection =
scene.world.showIndependentSection(util.select.position(signPos.below()), Direction.UP);
scene.world.moveSection(concreteSection, util.vector.of(0, 1, 0), 0);
scene.world.hideSection(invalidLinkSel, Direction.UP);
@ -63,20 +69,20 @@ public class DisplayScenes {
scene.idle(20);
scene.overlay.showControls(
new InputWindowElement(util.vector.blockSurface(signTarget, Direction.UP), Pointing.DOWN)
.rightClick().withItem(linkItem),
50
);
new InputWindowElement(util.vector.blockSurface(signTarget, Direction.UP), Pointing.DOWN).rightClick()
.withItem(linkItem),
50);
scene.idle(5);
AABB signBounds = Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D).bounds();
AABB signBounds = Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D)
.bounds();
scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, new Object(), signBounds.move(signTarget), 60);
scene.overlay.showText(70)
.colored(PonderPalette.OUTPUT)
.text("First select a target by Right- Clicking while holding the Link ...")
.pointAt(util.vector.topOf(signTarget))
.placeNearTarget();
.colored(PonderPalette.OUTPUT)
.text("First select a target by Right- Clicking while holding the Link ...")
.pointAt(util.vector.topOf(signTarget))
.placeNearTarget();
scene.idle(50);
@ -87,16 +93,15 @@ public class DisplayScenes {
scene.idle(10);
scene.overlay.showControls(
new InputWindowElement(util.vector.blockSurface(observerPos, Direction.WEST), Pointing.RIGHT)
.rightClick().withItem(linkItem),
50
);
new InputWindowElement(util.vector.blockSurface(observerPos, Direction.WEST), Pointing.RIGHT).rightClick()
.withItem(linkItem),
50);
scene.overlay.showText(60)
.attachKeyFrame()
.colored(PonderPalette.INPUT)
.text("... then select the source by placing the Link against it")
.pointAt(util.vector.blockSurface(observerPos, Direction.UP))
.placeNearTarget();
.attachKeyFrame()
.colored(PonderPalette.INPUT)
.text("... then select the source by placing the Link against it")
.pointAt(util.vector.blockSurface(observerPos, Direction.UP))
.placeNearTarget();
scene.idle(55);
@ -104,10 +109,9 @@ public class DisplayScenes {
scene.idle(20);
scene.world.modifyTileEntity(linkPos, DisplayLinkTileEntity.class, linkTile ->
linkTile.glow.setValue(2));
scene.world.modifyTileEntity(signPos, SignBlockEntity.class, signTile ->
signTile.setMessage(1, new TextComponent("42 Cinder Flour")));
scene.world.modifyTileEntity(linkPos, DisplayLinkTileEntity.class, linkTile -> linkTile.glow.setValue(2));
scene.world.modifyTileEntity(signPos, SignBlockEntity.class,
signTile -> signTile.setMessage(1, new TextComponent("42 Cinder Flour")));
scene.idle(60);
@ -116,33 +120,34 @@ public class DisplayScenes {
scene.idle(25);
Selection boards = util.select.fromTo(4, 1, 4, 1, 2, 4)
.substract(util.select.position(signPos));
.substract(util.select.position(signPos));
Selection cogs = util.select.position(5, 2, 4)
.add(util.select.position(5, 2, 5))
.add(util.select.position(5, 1, 5))
.add(util.select.position(4, 0, 5));
.add(util.select.position(5, 2, 5))
.add(util.select.position(5, 1, 5))
.add(util.select.position(4, 0, 5));
scene.world.showSection(boards, Direction.DOWN);
scene.world.showSection(cogs, Direction.DOWN);
scene.overlay.showText(70)
.attachKeyFrame()
.colored(PonderPalette.WHITE)
.text("Replacing Targets or Sources at a later time is possible as well")
.placeNearTarget();
.attachKeyFrame()
.colored(PonderPalette.WHITE)
.text("Replacing Targets or Sources at a later time is possible as well")
.placeNearTarget();
scene.idle(7);
scene.world.modifyTileEntity(linkPos, DisplayLinkTileEntity.class, linkTile ->
linkTile.glow.setValue(2));
scene.world.modifyTileEntity(linkPos, DisplayLinkTileEntity.class, linkTile -> linkTile.glow.setValue(2));
scene.idle(43);
scene.world.hideSection(util.select.fromTo(observerPos, observerPos.relative(Direction.SOUTH)), Direction.SOUTH);
scene.world.hideSection(util.select.fromTo(observerPos, observerPos.relative(Direction.SOUTH)),
Direction.SOUTH);
scene.idle(15);
ElementLink<WorldSectionElement> seatSection = scene.world.showIndependentSection(util.select.position(3, 1, 0), Direction.SOUTH);
ElementLink<WorldSectionElement> seatSection =
scene.world.showIndependentSection(util.select.position(3, 1, 0), Direction.SOUTH);
scene.world.moveSection(seatSection, util.vector.of(0, 0, 1), 0);
scene.world.modifyTileEntity(util.grid.at(4, 2, 4), FlapDisplayTileEntity.class, displayTile -> {
@ -150,25 +155,172 @@ public class DisplayScenes {
displayTile.applyTextManually(1, "");
});
scene.idle(30);
scene.special.createBirb(util.vector.of(3.5, 1.4, 1.5), ParrotElement.DancePose::new);
scene.idle(10);
//scene.world.modifyTileEntity(util.grid.at(4, 2, 4), FlapDisplayTileEntity.class, displayTile -> {
// displayTile.applyTextManually(0, "Sitting here:");
// displayTile.applyTextManually(1, "Party Parrot");
//});
// scene.world.modifyTileEntity(util.grid.at(4, 2, 4),
// FlapDisplayTileEntity.class, displayTile -> {
// displayTile.applyTextManually(0, "Sitting here:");
// displayTile.applyTextManually(1, "Party Parrot");
// });
ElementLink<WorldSectionElement> replacementBoards = scene.world.showIndependentSectionImmediately(util.select.fromTo(4, 2, 3, 1, 2, 3));
ElementLink<WorldSectionElement> replacementBoards =
scene.world.showIndependentSectionImmediately(util.select.fromTo(4, 2, 3, 1, 2, 3));
scene.world.moveSection(replacementBoards, util.vector.of(0, 0, 1), 0);
scene.world.modifyTileEntity(linkPos, DisplayLinkTileEntity.class, linkTile ->
linkTile.glow.setValue(2));
scene.world.modifyTileEntity(linkPos, DisplayLinkTileEntity.class, linkTile -> linkTile.glow.setValue(2));
scene.idle(10);
}
public static void board(SceneBuilder scene, SceneBuildingUtil util) {
scene.title("display_board", "Using Display Boards");
scene.configureBasePlate(0, 0, 5);
scene.showBasePlate();
Selection largeCog = util.select.position(5, 0, 1);
Selection cogs = util.select.fromTo(4, 1, 1, 4, 1, 3);
BlockPos depotPos = util.grid.at(3, 1, 1);
Selection depot = util.select.position(3, 1, 1);
BlockPos linkPos = util.grid.at(2, 1, 1);
Selection link = util.select.position(linkPos);
BlockPos board = util.grid.at(3, 2, 3);
Selection fullBoard = util.select.fromTo(3, 2, 3, 1, 1, 3);
scene.world.setKineticSpeed(fullBoard, 0);
scene.idle(15);
for (int y = 1; y <= 2; y++) {
for (int x = 3; x >= 1; x--) {
scene.world.showSection(util.select.position(x, y, 3), Direction.DOWN);
scene.idle(2);
}
scene.idle(2);
}
scene.idle(10);
scene.overlay.showText(70)
.attachKeyFrame()
.text("Display Boards are a scalable alternative to the sign")
.pointAt(util.vector.blockSurface(util.grid.at(1, 2, 3), Direction.WEST))
.placeNearTarget();
scene.idle(80);
scene.rotateCameraY(60);
scene.idle(20);
scene.world.showSection(cogs, Direction.DOWN);
scene.world.showSection(largeCog, Direction.UP);
scene.idle(10);
scene.world.setKineticSpeed(fullBoard, 32);
scene.world.multiplyKineticSpeed(util.select.position(3, 1, 3), -1);
scene.world.multiplyKineticSpeed(util.select.position(2, 2, 3), -1);
scene.world.multiplyKineticSpeed(util.select.position(1, 1, 3), -1);
scene.overlay.showText(50)
.text("They require Rotational Force to operate")
.pointAt(util.vector.blockSurface(util.grid.at(3, 1, 3), Direction.EAST))
.attachKeyFrame()
.placeNearTarget();
scene.idle(40);
scene.rotateCameraY(-60);
scene.idle(20);
scene.world.showSection(util.select.position(0, 1, 2), Direction.DOWN);
scene.idle(15);
Vec3 target = util.vector.of(3.95, 2.75, 3.25);
scene.overlay
.showControls(new InputWindowElement(target, Pointing.RIGHT).withItem(new ItemStack(Items.NAME_TAG))
.rightClick(), 40);
scene.idle(6);
scene.world.setDisplayBoardText(board, 0, new TextComponent("Create"));
scene.idle(25);
scene.overlay.showText(50)
.text("Text can be displayed using Name Tags...")
.pointAt(target.add(-2, 0, 0))
.attachKeyFrame()
.placeNearTarget();
scene.idle(40);
scene.world.hideSection(util.select.position(0, 1, 2), Direction.WEST);
scene.idle(20);
scene.world.showSection(depot, Direction.DOWN);
scene.idle(10);
scene.world.showSection(link, Direction.EAST);
scene.idle(15);
scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, depot, new AABB(linkPos).contract(-.5f, 0, 0), 60);
scene.idle(5);
scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, link, new AABB(board).expandTowards(-2, -1, 0)
.deflate(0, 0, 3 / 16f), 60);
scene.idle(20);
scene.overlay.showText(50)
.text("...or through the use of Display Links")
.pointAt(target.add(-2, 0, 0))
.attachKeyFrame()
.colored(PonderPalette.OUTPUT)
.placeNearTarget();
scene.idle(50);
ItemStack item = AllItems.PROPELLER.asStack();
scene.world.createItemOnBeltLike(depotPos, Direction.SOUTH, item);
scene.world.setDisplayBoardText(board, 1, item.getHoverName());
scene.world.flashDisplayLink(linkPos);
scene.idle(50);
scene.world.removeItemsFromBelt(depotPos);
item = AllItems.BLAZE_CAKE.asStack();
scene.world.createItemOnBeltLike(depotPos, Direction.SOUTH, item);
scene.world.setDisplayBoardText(board, 1, item.getHoverName());
scene.world.flashDisplayLink(linkPos);
scene.idle(50);
scene.world.removeItemsFromBelt(depotPos);
item = AllBlocks.DISPLAY_BOARD.asStack();
scene.world.createItemOnBeltLike(depotPos, Direction.SOUTH, item);
scene.world.setDisplayBoardText(board, 1, item.getHoverName());
scene.world.flashDisplayLink(linkPos);
scene.idle(50);
scene.overlay
.showControls(new InputWindowElement(target, Pointing.RIGHT).withItem(new ItemStack(Items.PINK_DYE))
.rightClick(), 40);
scene.idle(6);
scene.world.dyeDisplayBoard(board, 0, DyeColor.PINK);
scene.idle(25);
scene.overlay.showText(70)
.text("Dyes can be applied to individual lines of the board")
.pointAt(target.add(-2, 0, 0))
.attachKeyFrame()
.placeNearTarget();
scene.idle(25);
scene.overlay.showControls(
new InputWindowElement(target.add(0, -.5f, 0), Pointing.RIGHT).withItem(new ItemStack(Items.LIME_DYE))
.rightClick(),
40);
scene.idle(6);
scene.world.dyeDisplayBoard(board, 1, DyeColor.LIME);
scene.idle(55);
scene.overlay.showControls(new InputWindowElement(target, Pointing.RIGHT).rightClick(), 40);
scene.idle(6);
scene.world.setDisplayBoardText(board, 0, new TextComponent(""));
scene.idle(25);
scene.overlay.showText(70)
.text("Lines can be reset by clicking them with an empty hand")
.pointAt(target.add(-2, 0, 0))
.attachKeyFrame()
.placeNearTarget();
scene.idle(40);
}
}

View file

@ -209,6 +209,7 @@ public class EjectorScenes {
.text("Other Entities will always trigger an Ejector when stepping on it")
.pointAt(util.vector.topOf(targetPos))
.placeNearTarget();
scene.idle(50);
}

View file

@ -345,6 +345,7 @@ public class FunnelScenes {
}
}
scene.idle(60);
}
public static void brass(SceneBuilder scene, SceneBuildingUtil util) {

View file

@ -20,7 +20,6 @@ import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
import com.simibubi.create.foundation.ponder.Selection;
import com.simibubi.create.foundation.ponder.element.InputWindowElement;
import com.simibubi.create.foundation.ponder.element.WorldSectionElement;
import com.simibubi.create.foundation.ponder.instruction.EmitParticlesInstruction.Emitter;
import com.simibubi.create.foundation.utility.Pointing;
import com.tterrag.registrate.util.entry.BlockEntry;
@ -28,12 +27,9 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Vec3i;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.FurnaceBlock;
import net.minecraft.world.level.block.RedStoneWireBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
@ -107,10 +103,11 @@ public class KineticsScenes {
scene.world.setKineticSpeed(shaft, 32);
scene.idle(10);
scene.overlay.showText(1000)
scene.overlay.showText(100)
.placeNearTarget()
.text("Brass or Andesite Casing can be used to decorate Shafts")
.pointAt(util.vector.topOf(1, 1, 2));
scene.idle(70);
}
public static void cogAsRelay(SceneBuilder scene, SceneBuildingUtil util) {
@ -148,7 +145,9 @@ public class KineticsScenes {
scene.overlay.showText(100)
.text("Neighbouring shafts connected like this will rotate in opposite directions")
.placeNearTarget()
.attachKeyFrame()
.pointAt(util.vector.blockSurface(util.grid.at(1, 1, 2), Direction.NORTH));
scene.idle(70);
}
@ -197,6 +196,7 @@ public class KineticsScenes {
.pointAt(util.vector.blockSurface(util.grid.at(1, 2, 3), Direction.WEST));
scene.effects.rotationSpeedIndicator(util.grid.at(3, 1, 3));
scene.effects.rotationSpeedIndicator(util.grid.at(4, 2, 3));
scene.idle(60);
}

View file

@ -78,6 +78,7 @@ public class MechanicalDrillScenes {
scene.world.createItemEntity(util.vector.centerOf(breakingPos), util.vector.of(0, .1f, 0),
new ItemStack(Items.OAK_PLANKS));
scene.idle(50);
}
public static void contraption(SceneBuilder scene, SceneBuildingUtil util) {

View file

@ -328,6 +328,8 @@ public class PonderIndex {
// Display Link
HELPER.forComponents(AllBlocks.DISPLAY_LINK)
.addStoryBoard("display/link", DisplayScenes::link);
HELPER.forComponents(AllBlocks.DISPLAY_BOARD)
.addStoryBoard("display_board", DisplayScenes::board);
// Debug scenes, can be found in game via the Brass Hand
if (REGISTER_DEBUG_SCENES)
@ -362,6 +364,17 @@ public class PonderIndex {
.add(AllBlocks.STEAM_ENGINE)
.add(AllBlocks.CREATIVE_MOTOR);
PonderRegistry.TAGS.forTag(PonderTag.TRAIN_RELATED)
.add(AllBlocks.TRACK)
.add(AllBlocks.TRACK_STATION)
.add(AllBlocks.TRACK_SIGNAL)
.add(AllBlocks.TRACK_OBSERVER)
.add(AllBlocks.CONTROLS)
.add(AllItems.SCHEDULE)
.add(AllBlocks.TRAIN_DOOR)
.add(AllBlocks.TRAIN_TRAPDOOR)
.add(AllBlocks.RAILWAY_CASING);
PonderRegistry.TAGS.forTag(PonderTag.KINETIC_APPLIANCES)
.add(AllBlocks.MILLSTONE)
.add(AllBlocks.TURNTABLE)
@ -381,6 +394,7 @@ public class PonderIndex {
.add(AllBlocks.GANTRY_SHAFT)
.add(AllBlocks.GANTRY_CARRIAGE)
.add(AllBlocks.CLOCKWORK_BEARING)
.add(AllBlocks.DISPLAY_BOARD)
.add(AllBlocks.CRUSHING_WHEEL);
PonderRegistry.TAGS.forTag(PonderTag.FLUIDS)
@ -410,6 +424,7 @@ public class PonderIndex {
.add(AllBlocks.MECHANICAL_SAW)
.add(AllBlocks.BLAZE_BURNER)
.add(AllBlocks.CRUSHING_WHEEL)
.add(AllBlocks.TRACK_STATION)
.add(Blocks.COMPOSTER)
.add(Blocks.JUKEBOX);
@ -434,12 +449,15 @@ public class PonderIndex {
PonderRegistry.TAGS.forTag(PonderTag.DECORATION)
.add(AllBlocks.ORANGE_NIXIE_TUBE)
.add(AllBlocks.DISPLAY_BOARD)
.add(AllBlocks.CUCKOO_CLOCK)
.add(AllBlocks.WOODEN_BRACKET)
.add(AllBlocks.METAL_BRACKET)
.add(AllBlocks.METAL_GIRDER)
.add(AllBlocks.ANDESITE_CASING)
.add(AllBlocks.BRASS_CASING)
.add(AllBlocks.COPPER_CASING);
.add(AllBlocks.COPPER_CASING)
.add(AllBlocks.RAILWAY_CASING);
PonderRegistry.TAGS.forTag(PonderTag.CREATIVE)
.add(AllBlocks.CREATIVE_CRATE)
@ -459,7 +477,8 @@ public class PonderIndex {
.add(AllBlocks.PULSE_EXTENDER)
.add(AllBlocks.PULSE_REPEATER)
.add(AllBlocks.POWERED_LATCH)
.add(AllBlocks.POWERED_TOGGLE_LATCH);
.add(AllBlocks.POWERED_TOGGLE_LATCH)
.add(AllBlocks.ROSE_QUARTZ_LAMP);
PonderRegistry.TAGS.forTag(PonderTag.MOVEMENT_ANCHOR)
.add(AllBlocks.MECHANICAL_PISTON)
@ -468,7 +487,8 @@ public class PonderIndex {
.add(AllBlocks.CLOCKWORK_BEARING)
.add(AllBlocks.ROPE_PULLEY)
.add(AllBlocks.GANTRY_CARRIAGE)
.add(AllBlocks.CART_ASSEMBLER);
.add(AllBlocks.CART_ASSEMBLER)
.add(AllBlocks.TRACK_STATION);
PonderRegistry.TAGS.forTag(PonderTag.CONTRAPTION_ASSEMBLY)
.add(AllBlocks.LINEAR_CHASSIS)
@ -491,6 +511,7 @@ public class PonderIndex {
.add(AllBlocks.ANDESITE_FUNNEL)
.add(AllBlocks.BRASS_FUNNEL)
.add(AllBlocks.SEATS.get(DyeColor.WHITE))
.add(AllBlocks.CONTROLS)
.add(AllBlocks.REDSTONE_CONTACT)
.add(Blocks.BELL)
.add(Blocks.DISPENSER)

View file

@ -451,12 +451,12 @@ public class ProcessingScenes {
scene.idle(60);
Vec3 filterPos = util.vector.of(1, 2.75f, 2.5f);
scene.overlay.showFilterSlotInput(filterPos, 100);
scene.overlay.showText(120)
scene.overlay.showText(100)
.pointAt(filterPos)
.placeNearTarget()
.attachKeyFrame()
.text("The filter slot can be used in case two recipes are conflicting.");
scene.idle(60);
scene.idle(80);
}
public static void compacting(SceneBuilder scene, SceneBuildingUtil util) {
@ -552,12 +552,12 @@ public class ProcessingScenes {
scene.idle(60);
Vec3 filterPos = util.vector.of(1, 2.75f, 2.5f);
scene.overlay.showFilterSlotInput(filterPos, 100);
scene.overlay.showText(120)
scene.overlay.showText(100)
.pointAt(filterPos)
.placeNearTarget()
.attachKeyFrame()
.text("The filter slot can be used in case two recipes are conflicting.");
scene.idle(60);
scene.idle(80);
}
public static void emptyBlazeBurner(SceneBuilder scene, SceneBuildingUtil util) {

View file

@ -177,6 +177,7 @@ public class PulleyScenes {
.pointAt(util.vector.blockSurface(flowerPos, Direction.WEST))
.placeNearTarget()
.text("It can be configured never to revert to solid blocks, or only at the location it started at");
scene.idle(90);
}
public static void attachment(SceneBuilder scene, SceneBuildingUtil util) {
@ -229,6 +230,7 @@ public class PulleyScenes {
.pointAt(util.vector.topOf(pulleyPos.west(2)))
.placeNearTarget()
.text("Mind that pulleys are only movable while stopped");
scene.idle(50);
}
}

View file

@ -191,9 +191,11 @@ public class FluidMovementActorScenes {
scene.world.modifyTileNBT(both, psiClass, nbt -> nbt.putFloat("Timer", 9));
scene.idle(15);
scene.markAsFinished();
scene.world.rotateBearing(bearing, 270, 120);
scene.world.rotateSection(contraption, 0, 270, 0, 120);
scene.idle(100);
scene.markAsFinished();
}
}

View file

@ -152,6 +152,7 @@ public class HosePulleyScenes {
.attachKeyFrame()
.pointAt(util.vector.centerOf(util.grid.at(3, 1, 1)));
scene.idle(40);
scene.markAsFinished();
}

View file

@ -28,6 +28,7 @@ public class TrackObserverScenes {
scene.setSceneOffsetY(-1);
scene.showBasePlate();
scene.world.toggleControls(util.grid.at(5, 3, 7));
scene.special.movePointOfInterest(util.grid.at(-10, 2, 7));
Selection observer = util.select.position(5, 1, 4);
@ -79,6 +80,7 @@ public class TrackObserverScenes {
ElementLink<WorldSectionElement> trainInstance1 = scene.world.showIndependentSection(train1, Direction.WEST);
scene.world.moveSection(trainInstance1, util.vector.of(6, 0, 0), 0);
scene.world.moveSection(trainInstance1, util.vector.of(-16, 0, 0), 80);
scene.world.animateBogey(util.grid.at(5, 2, 7), 16, 80);
ElementLink<ParrotElement> birb =
scene.special.createBirb(util.vector.centerOf(12, 3, 7), FacePointOfInterestPose::new);
scene.special.moveParrot(birb, util.vector.of(-16, 0, 0), 80);
@ -87,6 +89,7 @@ public class TrackObserverScenes {
ElementLink<WorldSectionElement> trainInstance2 = scene.world.showIndependentSection(train2, Direction.WEST);
scene.world.moveSection(trainInstance2, util.vector.of(4, 0, 0), 0);
scene.world.moveSection(trainInstance2, util.vector.of(-14, 0, 0), 70);
scene.world.animateBogey(util.grid.at(9, 2, 7), 14, 70);
Selection add = redstone.add(observer);
@ -123,6 +126,7 @@ public class TrackObserverScenes {
trainInstance1 = scene.world.showIndependentSection(train1, Direction.WEST);
scene.world.moveSection(trainInstance1, util.vector.of(6, 0, 0), 0);
scene.world.moveSection(trainInstance1, util.vector.of(-16, 0, 0), 80);
scene.world.animateBogey(util.grid.at(5, 2, 7), 16, 80);
birb = scene.special.createBirb(util.vector.centerOf(12, 3, 7), FacePointOfInterestPose::new);
scene.special.moveParrot(birb, util.vector.of(-16, 0, 0), 80);
scene.idle(10);
@ -130,6 +134,7 @@ public class TrackObserverScenes {
trainInstance2 = scene.world.showIndependentSection(train2b, Direction.WEST);
scene.world.moveSection(trainInstance2, util.vector.of(4, 0, 6), 0);
scene.world.moveSection(trainInstance2, util.vector.of(-14, 0, 0), 70);
scene.world.animateBogey(util.grid.at(9, 2, 1), 14, 80);
scene.idle(33);
scene.world.hideIndependentSection(trainInstance1, Direction.WEST);
@ -141,6 +146,7 @@ public class TrackObserverScenes {
trainInstance1 = scene.world.showIndependentSection(train1, Direction.WEST);
scene.world.moveSection(trainInstance1, util.vector.of(6, 0, 0), 0);
scene.world.moveSection(trainInstance1, util.vector.of(-16, 0, 0), 80);
scene.world.animateBogey(util.grid.at(5, 2, 7), 16, 80);
birb = scene.special.createBirb(util.vector.centerOf(12, 3, 7), FacePointOfInterestPose::new);
scene.special.moveParrot(birb, util.vector.of(-16, 0, 0), 80);
scene.idle(10);
@ -148,6 +154,7 @@ public class TrackObserverScenes {
trainInstance2 = scene.world.showIndependentSection(train2a, Direction.WEST);
scene.world.moveSection(trainInstance2, util.vector.of(4, 0, 3), 0);
scene.world.moveSection(trainInstance2, util.vector.of(-14, 0, 0), 70);
scene.world.animateBogey(util.grid.at(9, 2, 4), 14, 70);
scene.idle(13);
scene.world.toggleRedstonePower(add);

View file

@ -27,8 +27,6 @@ public class TrackScenes {
scene.configureBasePlate(0, 0, 15);
scene.scaleSceneView(.5f);
scene.showBasePlate();
// scene.debug.debugSchematic();
scene.idle(10);
ElementLink<WorldSectionElement> bgTrack =
@ -265,7 +263,6 @@ public class TrackScenes {
scene.setSceneOffsetY(-1);
scene.showBasePlate();
scene.world.showSection(util.select.fromTo(2, 1, 7, 6, 6, 7), Direction.UP);
// scene.debug.debugSchematic();
scene.idle(10);
for (int i = 1; i <= 5; i++) {
@ -301,6 +298,7 @@ public class TrackScenes {
ElementLink<ParrotElement> birb =
scene.special.createBirb(util.vector.centerOf(4, 3, 2), FacePointOfInterestPose::new);
scene.special.conductorBirb(birb, true);
scene.special.movePointOfInterest(util.grid.at(4, 4, 10));
scene.addKeyframe();
@ -309,6 +307,7 @@ public class TrackScenes {
for (ElementLink<WorldSectionElement> e : List.of(t1, t2, t3))
scene.world.moveSection(e, util.vector.of(0, 0, 6), 30);
scene.special.moveParrot(birb, util.vector.of(0, 0, 5.6), 28);
scene.world.animateBogey(util.grid.at(4, 2, 3), -6, 30);
for (ElementLink<WorldSectionElement> e : List.of(t3, t2, t1)) {
scene.idle(2);
@ -331,6 +330,7 @@ public class TrackScenes {
scene.world.moveSection(s1, util.vector.of(0, 0, 3.5f), 0);
scene.world.moveSection(s1, util.vector.of(0, 0, -3.5f), 18);
scene.special.moveParrot(birb, util.vector.of(0, 0, -3.5f), 18);
scene.world.animateBogey(util.grid.at(4, 2, 3), -3.5f, 18);
scene.idle(30);
scene.overlay.showText(70)
@ -395,6 +395,7 @@ public class TrackScenes {
scene.world.moveSection(trackElement, util.vector.of(12, 0, 0), 120);
scene.world.moveSection(stationElement, util.vector.of(12, 0, 0), 120);
scene.world.moveSection(stationTrackElement, util.vector.of(12, 0, 0), 120);
scene.world.animateBogey(util.grid.at(4, 2, 4), 12f, 120);
scene.special.moveParrot(birb, util.vector.of(12, 0, 0), 120);
scene.idle(15);
scene.world.hideIndependentSection(stationElement, null);
@ -424,6 +425,7 @@ public class TrackScenes {
scene.world.moveSection(trackElement, util.vector.of(19, 0, 0), 190);
scene.world.moveSection(stationTrackElement, util.vector.of(19, 0, 0), 190);
scene.world.animateBogey(util.grid.at(4, 2, 4), 19f, 190);
scene.idle(30);
scene.overlay.showText(90)

View file

@ -1,5 +1,6 @@
package com.simibubi.create.foundation.ponder.content.trains;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.logistics.trains.management.edgePoint.station.StationBlock;
import com.simibubi.create.foundation.ponder.ElementLink;
import com.simibubi.create.foundation.ponder.PonderPalette;
@ -7,12 +8,17 @@ import com.simibubi.create.foundation.ponder.SceneBuilder;
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
import com.simibubi.create.foundation.ponder.Selection;
import com.simibubi.create.foundation.ponder.element.InputWindowElement;
import com.simibubi.create.foundation.ponder.element.ParrotElement;
import com.simibubi.create.foundation.ponder.element.ParrotElement.FacePointOfInterestPose;
import com.simibubi.create.foundation.ponder.element.WorldSectionElement;
import com.simibubi.create.foundation.utility.Pointing;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class TrainScenes {
@ -71,6 +77,7 @@ public class TrainScenes {
scene.idle(60);
scene.world.moveSection(trainElement, util.vector.of(4, 0, 0), 20);
scene.world.animateBogey(util.grid.at(3, 2, 4), -4f, 20);
scene.world.animateTrainStation(stationPos, false);
scene.idle(30);
@ -81,6 +88,7 @@ public class TrainScenes {
scene.idle(60);
scene.world.moveSection(trainElement, util.vector.of(-4, 0, 0), 30);
scene.world.animateBogey(util.grid.at(3, 2, 4), 4f, 30);
scene.idle(40);
scene.overlay
@ -94,9 +102,11 @@ public class TrainScenes {
scene.idle(90);
scene.world.moveSection(trainElement, util.vector.of(2, 0, 0), 30);
scene.world.animateBogey(util.grid.at(3, 2, 4), -2f, 30);
scene.idle(40);
scene.world.moveSection(trainElement, util.vector.of(-3, 0, 0), 60);
scene.world.animateBogey(util.grid.at(3, 2, 4), 3f, 60);
scene.idle(70);
scene.overlay.showText(50)
@ -107,6 +117,7 @@ public class TrainScenes {
scene.idle(40);
scene.world.moveSection(trainElement, util.vector.of(1, 0, 0), 20);
scene.world.animateBogey(util.grid.at(3, 2, 4), -1f, 20);
scene.idle(20);
scene.effects.indicateSuccess(stationPos);
scene.world.animateTrainStation(stationPos, true);
@ -153,14 +164,124 @@ public class TrainScenes {
scene.scaleSceneView(.75f);
scene.setSceneOffsetY(-1);
scene.showBasePlate();
scene.debug.debugSchematic();
for (int i = 10; i >= 0; i--) {
scene.world.showSection(util.select.position(i, 1, 4), Direction.DOWN);
scene.idle(1);
}
scene.world.toggleControls(util.grid.at(4, 3, 4));
scene.world.toggleControls(util.grid.at(4, 3, 7));
BlockPos stationPos = util.grid.at(5, 1, 1);
Selection train1 = util.select.fromTo(6, 2, 3, 2, 3, 5);
Selection train2 = util.select.fromTo(6, 2, 6, 2, 3, 8);
scene.idle(10);
scene.world.showSection(util.select.position(stationPos), Direction.DOWN);
scene.idle(5);
ElementLink<WorldSectionElement> trainElement1 = scene.world.showIndependentSection(train1, Direction.DOWN);
scene.idle(10);
scene.world.animateTrainStation(stationPos, true);
scene.idle(10);
scene.overlay.showText(70)
.pointAt(util.vector.blockSurface(util.grid.at(3, 3, 4), Direction.WEST))
.placeNearTarget()
.attachKeyFrame()
.text("Schedules allow Trains to be controlled by other Drivers");
scene.idle(80);
Vec3 target = util.vector.topOf(util.grid.at(4, 0, 2));
scene.overlay.showControls(new InputWindowElement(target, Pointing.RIGHT).rightClick()
.withItem(AllItems.SCHEDULE.asStack()), 80);
scene.overlay.showText(80)
.pointAt(target)
.placeNearTarget()
.attachKeyFrame()
.colored(PonderPalette.BLUE)
.text("Right-click with the item in hand to open its Interface");
scene.idle(100);
scene.overlay
.showControls(new InputWindowElement(util.vector.topOf(util.grid.at(3, 3, 4)), Pointing.DOWN).rightClick()
.withItem(AllItems.SCHEDULE.asStack()), 80);
scene.idle(6);
scene.world.conductorBlaze(util.grid.at(3, 3, 4), true);
scene.overlay.showText(70)
.pointAt(util.vector.blockSurface(util.grid.at(3, 3, 4), Direction.WEST))
.placeNearTarget()
.attachKeyFrame()
.text("Once programmed, the Schedule can be handed off to a Train Driver");
scene.idle(80);
scene.world.moveSection(trainElement1, util.vector.of(12, 0, 0), 60);
scene.world.animateBogey(util.grid.at(4, 2, 4), -12f, 60);
scene.world.animateTrainStation(stationPos, false);
scene.idle(20);
scene.world.hideIndependentSection(trainElement1, null);
scene.idle(25);
ElementLink<WorldSectionElement> trainElement2 = scene.world.showIndependentSection(train2, Direction.DOWN);
scene.world.moveSection(trainElement2, util.vector.of(0, 0, -3), 0);
scene.idle(10);
Vec3 birbVec = util.vector.topOf(util.grid.at(3, 0, 7));
ElementLink<ParrotElement> birb = scene.special.createBirb(birbVec, FacePointOfInterestPose::new);
scene.world.animateTrainStation(stationPos, true);
scene.overlay.showText(110)
.pointAt(birbVec)
.placeNearTarget()
.attachKeyFrame()
.text("Any mob or blaze burner sitting in front of Train Controls is an eligible conductor");
scene.idle(80);
scene.overlay.showControls(new InputWindowElement(util.vector.centerOf(util.grid.at(3, 1, 7)), Pointing.DOWN)
.withItem(new ItemStack(Items.LEAD)), 30);
scene.idle(40);
target = util.vector.centerOf(util.grid.at(3, 3, 4));
scene.overlay.showControls(new InputWindowElement(target.add(0.5, 0, 0), Pointing.RIGHT).rightClick()
.withItem(new ItemStack(Items.LEAD)), 30);
scene.idle(6);
scene.special.moveParrot(birb, target.subtract(birbVec), 5);
scene.effects.indicateSuccess(util.grid.at(3, 3, 4));
scene.idle(15);
scene.overlay.showText(70)
.pointAt(target)
.placeNearTarget()
.colored(PonderPalette.BLUE)
.attachKeyFrame()
.text("Creatures on a lead can be given their seat more conveniently");
scene.idle(80);
scene.overlay.showControls(new InputWindowElement(util.vector.topOf(util.grid.at(3, 3, 4)), Pointing.DOWN)
.withItem(AllItems.SCHEDULE.asStack()), 15);
scene.idle(6);
scene.special.conductorBirb(birb, true);
scene.special.movePointOfInterest(util.grid.at(16, 4, 4));
scene.idle(14);
scene.world.moveSection(trainElement2, util.vector.of(3, 0, 0), 30);
scene.world.animateBogey(util.grid.at(4, 2, 7), -3f, 30);
scene.special.moveParrot(birb, util.vector.of(3, 0, 0), 30);
scene.idle(40);
scene.overlay.showControls(
new InputWindowElement(util.vector.topOf(util.grid.at(6, 3, 4)), Pointing.DOWN).rightClick(), 70);
scene.idle(6);
scene.special.conductorBirb(birb, false);
scene.special.movePointOfInterest(util.grid.at(3, 4, 1));
scene.idle(19);
scene.overlay.showText(70)
.pointAt(target.add(3, 0, 0))
.placeNearTarget()
.colored(PonderPalette.BLUE)
.attachKeyFrame()
.text("Schedules can be retrieved from Drivers at any moment");
scene.idle(80);
}
}

View file

@ -48,6 +48,8 @@ public class TrainSignalScenes {
Selection secondNixie = util.select.position(8, 2, 9);
Selection thirdNixie = util.select.position(9, 4, 8);
Selection train = util.select.fromTo(5, 2, 5, 1, 3, 7);
scene.world.toggleControls(util.grid.at(3, 3, 6));
Vec3 marker = util.vector.topOf(8, 0, 6)
.add(0, 3 / 16f, 0);
@ -172,6 +174,7 @@ public class TrainSignalScenes {
scene.idle(20);
scene.world.moveSection(trainElement, util.vector.of(7, 0, 0), 25);
scene.world.animateBogey(util.grid.at(3, 2, 6), -7f, 25);
scene.special.moveParrot(birb, util.vector.of(7, 0, 0), 25);
scene.idle(25);
@ -211,6 +214,10 @@ public class TrainSignalScenes {
scene.world.showSection(util.select.position(i, 1, 15 - i), Direction.DOWN);
scene.idle(1);
}
scene.world.toggleControls(util.grid.at(13, 3, 7));
scene.world.toggleControls(util.grid.at(13, 3, 1));
scene.world.toggleControls(util.grid.at(13, 3, 4));
Selection train1 = util.select.fromTo(11, 2, 6, 15, 3, 8);
Selection train2a = util.select.fromTo(15, 2, 3, 11, 3, 5);
@ -283,6 +290,7 @@ public class TrainSignalScenes {
scene.special.createBirb(util.vector.centerOf(18, 3, 7), FacePointOfInterestPose::new);
scene.world.moveSection(trainElement, util.vector.of(4, 0, 0), 0);
scene.world.moveSection(trainElement, util.vector.of(-9, 0, 0), 45);
scene.world.animateBogey(util.grid.at(13, 2, 7), 9f, 45);
scene.special.moveParrot(birb1, util.vector.of(-9, 0, 0), 45);
scene.idle(20);
@ -307,6 +315,7 @@ public class TrainSignalScenes {
scene.special.createBirb(util.vector.centerOf(18, 3, 7), FacePointOfInterestPose::new);
scene.world.moveSection(trainElement2, util.vector.of(4, 0, 6), 0);
scene.world.moveSection(trainElement2, util.vector.of(-4.5, 0, 0), 35);
scene.world.animateBogey(util.grid.at(13, 2, 1), 4.5f, 35);
scene.special.moveParrot(birb2, util.vector.of(-4.5, 0, 0), 35);
scene.idle(40);
scene.special.movePointOfInterest(s1Pos.above(2));
@ -397,6 +406,7 @@ public class TrainSignalScenes {
scene.world.moveSection(trainElement2, util.vector.of(4, 0, 6), 0);
scene.world.moveSection(trainElement2, util.vector.of(-4.5, 0, 0), 35);
scene.world.animateBogey(util.grid.at(13, 2, 1), 4.5f, 35);
scene.special.moveParrot(birb2, util.vector.of(-4.5, 0, 0), 35);
scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb, bb.inflate(.45f, 0, .45f), 140);
@ -436,6 +446,7 @@ public class TrainSignalScenes {
scene.world.rotateSection(trainElement3a, 0, 45, 0, 0);
scene.world.moveSection(trainElement3a, util.vector.of(4, 0, -6), 0);
scene.world.moveSection(trainElement3a, util.vector.of(-20, 0, 20), 40);
scene.world.animateBogey(util.grid.at(13, 2, 4), -20f, 40);
ElementLink<ParrotElement> birb3 =
scene.special.createBirb(util.vector.of(18, 3.5, -2), FacePointOfInterestPose::new);
scene.special.moveParrot(birb3, util.vector.of(-20, 0, 20), 40);
@ -448,6 +459,7 @@ public class TrainSignalScenes {
scene.world.rotateSection(trainElement3b, 0, 45, 0, 0);
scene.world.moveSection(trainElement3b, util.vector.of(0.5, 0, -7), 0);
scene.world.moveSection(trainElement3b, util.vector.of(-20, 0, 20), 40);
scene.world.animateBogey(util.grid.at(17, 2, 4), -20f, 40);
scene.idle(10);
scene.effects.indicateRedstone(s4Pos.west());
@ -530,6 +542,7 @@ public class TrainSignalScenes {
.text("Reversely, red signals emit a comparator output");
scene.idle(40);
scene.world.toggleControls(util.grid.at(6, 3, 5));
scene.world.showSection(train, Direction.DOWN);
scene.special.createBirb(util.vector.centerOf(util.grid.at(6, 3, 4)), DancePose::new);
scene.idle(10);

View file

@ -250,6 +250,9 @@ public class TrainStationScenes {
scene.world.moveSection(controlsElement, util.vector.of(18, 0, 0), 70);
scene.world.moveSection(trainElement1, util.vector.of(18, 0, 0), 70);
scene.world.moveSection(trainElement2, util.vector.of(18, 0, 0), 70);
scene.world.animateBogey(util.grid.at(10, 2, 6), -18f, 70);
scene.world.animateBogey(util.grid.at(6, 2, 6), -18f, 70);
scene.world.animateBogey(util.grid.at(3, 2, 6), -18f, 70);
scene.special.moveParrot(birb, util.vector.of(18, 0, 0), 70);
scene.idle(10);
@ -361,6 +364,7 @@ public class TrainStationScenes {
scene.world.showSection(redstone, Direction.SOUTH);
scene.world.moveSection(trainElement, util.vector.of(4, 0, 0), 20);
scene.world.animateBogey(util.grid.at(7, 2, 6), -4f, 20);
scene.special.moveParrot(birb, util.vector.of(4, 0, 0), 20);
scene.idle(20);
@ -443,6 +447,7 @@ public class TrainStationScenes {
birb = scene.special.createBirb(target, FacePointOfInterestPose::new);
scene.idle(10);
scene.world.moveSection(trainElement, util.vector.of(4, 0, 0), 20);
scene.world.animateBogey(util.grid.at(7, 2, 6), -4f, 20);
scene.special.moveParrot(birb, util.vector.of(4, 0, 0), 20);
scene.idle(10);
@ -461,6 +466,8 @@ public class TrainStationScenes {
.add(0, -.125, .45), target.add(0, 0, -.5), 40);
scene.idle(10);
scene.effects.indicateSuccess(util.grid.at(6, 3, 6));
scene.special.conductorBirb(birb, true);
scene.special.movePointOfInterest(util.grid.at(18, 4, 6));
scene.idle(25);
scene.overlay.showText(80)
@ -472,6 +479,7 @@ public class TrainStationScenes {
scene.world.moveSection(trainElement, util.vector.of(8, 0, 0), 30);
scene.special.moveParrot(birb, util.vector.of(8, 0, 0), 30);
scene.world.animateBogey(util.grid.at(7, 2, 6), -8f, 30);
scene.world.animateTrainStation(stationPos, false);
scene.idle(10);
scene.world.hideIndependentSection(trainElement, null);

View file

@ -16,6 +16,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.animal.Parrot;
@ -27,6 +28,7 @@ public class ParrotElement extends AnimatedSceneElement {
private Vec3 location;
private Parrot entity;
private ParrotPose pose;
private boolean deferConductor = false;
private Supplier<? extends ParrotPose> initialPose;
public static ParrotElement create(Vec3 location, Supplier<? extends ParrotPose> pose) {
@ -52,6 +54,9 @@ public class ParrotElement extends AnimatedSceneElement {
entity.zOld = 0;
entity.setXRot(entity.xRotO = 0);
entity.setYRot(entity.yRotO = 180);
entity.getPersistentData()
.remove("TrainHat");
deferConductor = false;
}
@Override
@ -60,6 +65,9 @@ public class ParrotElement extends AnimatedSceneElement {
if (entity == null) {
entity = pose.create(scene.getWorld());
entity.setYRot(entity.yRotO = 180);
if (deferConductor)
setConductor(deferConductor);
deferConductor = false;
}
entity.tickCount++;
@ -102,6 +110,18 @@ public class ParrotElement extends AnimatedSceneElement {
entity.xRotO = entity.getXRot();
entity.yRotO = entity.getYRot();
}
public void setConductor(boolean isConductor) {
if (entity == null) {
deferConductor = isConductor;
return;
}
CompoundTag data = entity.getPersistentData();
if (isConductor)
data.putBoolean("TrainHat", true);
else
data.remove("TrainHat");
}
public Vec3 getPositionOffset() {
return entity != null ? entity.position() : Vec3.ZERO;

View file

@ -0,0 +1,5 @@
package com.simibubi.create.foundation.ponder.instruction;
public class AnimateBogeyInstruction {
}

View file

@ -7,6 +7,7 @@ import java.util.function.Function;
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.IBearingTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
import com.simibubi.create.content.logistics.trains.track.StandardBogeyTileEntity;
import com.simibubi.create.foundation.ponder.PonderScene;
import com.simibubi.create.foundation.ponder.PonderWorld;
@ -30,6 +31,14 @@ public class AnimateTileEntityInstruction extends TickingInstruction {
.orElse(0f));
}
public static AnimateTileEntityInstruction bogey(BlockPos location, float totalDelta, int ticks) {
float movedPerTick = totalDelta / ticks;
return new AnimateTileEntityInstruction(location, totalDelta, ticks,
(w, f) -> castIfPresent(w, location, StandardBogeyTileEntity.class)
.ifPresent(bte -> bte.animate(f.equals(totalDelta) ? 0 : movedPerTick)),
(w) -> 0f);
}
public static AnimateTileEntityInstruction pulley(BlockPos location, float totalDelta, int ticks) {
return new AnimateTileEntityInstruction(location, totalDelta, ticks,
(w, f) -> castIfPresent(w, location, PulleyTileEntity.class).ifPresent(pulley -> pulley.animateOffset(f)),