diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 5fc30f621..afdcd0027 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -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 diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 3de7ce26b..24eaa9baf 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index d092bbcd7..83653035b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_cl.json b/src/generated/resources/assets/create/lang/unfinished/es_cl.json index f8fbc4c26..aea4abde6 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_cl.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_cl.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 438f3c1be..a9b8c185c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 93363766f..f6f3a83e9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index e63d2e33d..a939d5250 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 50a2b1a49..8b93a40b0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -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": "バルブハンドルは手動で回転力を生み出す原動機です", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index b8c05284d..dde0c37a0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -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": "밸브 손잡이를 사용하면 수동으로 동력을 생성할 수 있습니다.", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index f52042a56..0cb68524f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 9c5093981..9516a0361 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index f852ff701..2e3e4a587 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json index b550c766c..0749681b3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json index 9b810974e..4e078bd7a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json +++ b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 24aa6aad9..0698415b0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -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": "Игроки могут использовать вентили для применения силы вращения вручную", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index baa37eed9..5281f73f5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -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": "玩家可以手动使用阀门手轮来产生旋转力", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index dfdd3285d..00a728699 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -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": "玩家可以手動使用閥門手輪來產生動能", diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 4c9719f8a..3647ad732 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -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 BOGEY = Create.registrate() .tileEntity("bogey", StandardBogeyTileEntity::new) - .renderer(() -> IBogeyTileEntityRenderer::new) + .renderer(() -> BogeyTileEntityRenderer::new) .validBlocks(AllBlocks.SMALL_BOGEY, AllBlocks.LARGE_BOGEY) .register(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java index 61f531863..129b37759 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java @@ -45,7 +45,7 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer 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); } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/IBogeyTileEntityRenderer.java b/src/main/java/com/simibubi/create/content/logistics/trains/BogeyTileEntityRenderer.java similarity index 59% rename from src/main/java/com/simibubi/create/content/logistics/trains/IBogeyTileEntityRenderer.java rename to src/main/java/com/simibubi/create/content/logistics/trains/BogeyTileEntityRenderer.java index df8ccafca..94a08b145 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/IBogeyTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/BogeyTileEntityRenderer.java @@ -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 extends SafeTileEntityRenderer { +public class BogeyTileEntityRenderer extends SafeTileEntityRenderer { - 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); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java index 75269afbe..02fd3f386 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java @@ -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)]) { diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplaySection.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplaySection.java index 60be7e744..802395800 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplaySection.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplaySection.java @@ -60,7 +60,7 @@ public class FlapDisplaySection { sendTransition = true; } - private void refresh(boolean transition) { + public void refresh(boolean transition) { if (component == null) return; diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayTileEntity.java index 7b2dc5d9d..e0811b8c7 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayTileEntity.java @@ -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 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) { diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/TrainHatArmorLayer.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/TrainHatArmorLayer.java index 4dd316d5c..29593a164 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/TrainHatArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/schedule/TrainHatArmorLayer.java @@ -125,6 +125,9 @@ public class TrainHatArmorLayer 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) { diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/track/StandardBogeyTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/trains/track/StandardBogeyTileEntity.java index 362570409..9a4c8a621 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/track/StandardBogeyTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/track/StandardBogeyTileEntity.java @@ -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); + } + } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java index 1b2b8d27a..51b931397 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java @@ -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"); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderTag.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderTag.java index 8f5e77b1e..5d6f63b7d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderTag.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderTag.java @@ -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"); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java index d8498c292..890d8a2cd 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java @@ -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 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 { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ArmScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ArmScenes.java index 489fa594d..ee25578c2 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ArmScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ArmScenes.java @@ -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); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java index 280d81cf6..c2b602971 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java @@ -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); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java index edaa54e0f..9739f37ca 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java @@ -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) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ChassisScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ChassisScenes.java index d3e283f94..40b57f68f 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ChassisScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ChassisScenes.java @@ -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 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 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)); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java index 8672254d6..61f607240 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java @@ -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) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/DeployerScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/DeployerScenes.java index e24662732..82205e5b7 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/DeployerScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/DeployerScenes.java @@ -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); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/DisplayScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/DisplayScenes.java index 4ea6c8800..66a997707 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/DisplayScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/DisplayScenes.java @@ -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 signSection = scene.world.showIndependentSection(util.select.position(signPos), Direction.DOWN); + ElementLink signSection = + scene.world.showIndependentSection(util.select.position(signPos), Direction.DOWN); scene.world.moveSection(signSection, util.vector.of(0, 1, 0), 0); - ElementLink concreteSection = scene.world.showIndependentSection(util.select.position(signPos.below()), Direction.UP); + ElementLink 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 seatSection = scene.world.showIndependentSection(util.select.position(3, 1, 0), Direction.SOUTH); + ElementLink 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 replacementBoards = scene.world.showIndependentSectionImmediately(util.select.fromTo(4, 2, 3, 1, 2, 3)); + ElementLink 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); + + } + } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/EjectorScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/EjectorScenes.java index d3a714128..08a978e0c 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/EjectorScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/EjectorScenes.java @@ -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); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java index 5fe639aea..554883d2f 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java @@ -345,6 +345,7 @@ public class FunnelScenes { } } + scene.idle(60); } public static void brass(SceneBuilder scene, SceneBuildingUtil util) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java index 9c66f5413..3fd3e89a1 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java @@ -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); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalDrillScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalDrillScenes.java index 74db92edf..5399be267 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalDrillScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalDrillScenes.java @@ -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) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java index 42d08396e..f413c5d24 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java @@ -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) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java index dab04a9a6..bd20d9bbe 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java @@ -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) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PulleyScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PulleyScenes.java index 0c6ccb5da..683acfac4 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PulleyScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PulleyScenes.java @@ -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); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidMovementActorScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidMovementActorScenes.java index a211fcc03..a0f01576d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidMovementActorScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidMovementActorScenes.java @@ -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(); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/HosePulleyScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/HosePulleyScenes.java index accb2ab6a..9fdfa78f8 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/HosePulleyScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/HosePulleyScenes.java @@ -152,6 +152,7 @@ public class HosePulleyScenes { .attachKeyFrame() .pointAt(util.vector.centerOf(util.grid.at(3, 1, 1))); scene.idle(40); + scene.markAsFinished(); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackObserverScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackObserverScenes.java index f0907553c..7e0828189 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackObserverScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackObserverScenes.java @@ -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 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 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 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); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackScenes.java index ce0865cf3..6b23a636d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackScenes.java @@ -27,8 +27,6 @@ public class TrackScenes { scene.configureBasePlate(0, 0, 15); scene.scaleSceneView(.5f); scene.showBasePlate(); -// scene.debug.debugSchematic(); - scene.idle(10); ElementLink 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 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 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 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) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainScenes.java index 49a9222ae..8f130edf5 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainScenes.java @@ -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 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 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 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); + } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainSignalScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainSignalScenes.java index 372abf7b6..115b9b21b 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainSignalScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainSignalScenes.java @@ -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 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); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainStationScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainStationScenes.java index 2b3139b01..40df7b579 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainStationScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainStationScenes.java @@ -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); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java index 134736dc5..0c4c8fe7a 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/ParrotElement.java @@ -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 initialPose; public static ParrotElement create(Vec3 location, Supplier 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; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instruction/AnimateBogeyInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instruction/AnimateBogeyInstruction.java new file mode 100644 index 000000000..7ef25e721 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/instruction/AnimateBogeyInstruction.java @@ -0,0 +1,5 @@ +package com.simibubi.create.foundation.ponder.instruction; + +public class AnimateBogeyInstruction { + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instruction/AnimateTileEntityInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instruction/AnimateTileEntityInstruction.java index 373727e8e..cd65b8a36 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instruction/AnimateTileEntityInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instruction/AnimateTileEntityInstruction.java @@ -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)), diff --git a/src/main/resources/assets/create/ponder/depot.nbt b/src/main/resources/assets/create/ponder/depot.nbt index cb1824d1b..0eeb616fc 100644 Binary files a/src/main/resources/assets/create/ponder/depot.nbt and b/src/main/resources/assets/create/ponder/depot.nbt differ diff --git a/src/main/resources/assets/create/ponder/display_board.nbt b/src/main/resources/assets/create/ponder/display_board.nbt new file mode 100644 index 000000000..d8aa3f3bf Binary files /dev/null and b/src/main/resources/assets/create/ponder/display_board.nbt differ diff --git a/src/main/resources/assets/create/ponder/mechanical_arm/filter.nbt b/src/main/resources/assets/create/ponder/mechanical_arm/filter.nbt index f7e859d44..e4b05286c 100644 Binary files a/src/main/resources/assets/create/ponder/mechanical_arm/filter.nbt and b/src/main/resources/assets/create/ponder/mechanical_arm/filter.nbt differ diff --git a/src/main/resources/assets/create/ponder/mechanical_arm/modes.nbt b/src/main/resources/assets/create/ponder/mechanical_arm/modes.nbt index d7226abc0..f2fee06d8 100644 Binary files a/src/main/resources/assets/create/ponder/mechanical_arm/modes.nbt and b/src/main/resources/assets/create/ponder/mechanical_arm/modes.nbt differ diff --git a/src/main/resources/assets/create/ponder/mechanical_arm/redstone.nbt b/src/main/resources/assets/create/ponder/mechanical_arm/redstone.nbt index 3c80e9c82..f3efff4f2 100644 Binary files a/src/main/resources/assets/create/ponder/mechanical_arm/redstone.nbt and b/src/main/resources/assets/create/ponder/mechanical_arm/redstone.nbt differ diff --git a/src/main/resources/assets/create/ponder/mechanical_arm/setup.nbt b/src/main/resources/assets/create/ponder/mechanical_arm/setup.nbt index 4c935edb0..9b257d38f 100644 Binary files a/src/main/resources/assets/create/ponder/mechanical_arm/setup.nbt and b/src/main/resources/assets/create/ponder/mechanical_arm/setup.nbt differ