From 1a4efbaa71c0ff17b0df0146a527391bba56c07b Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 26 Jun 2022 00:44:00 +0200 Subject: [PATCH] Ponder - Tracks & Chunk loading - Train Observer, Filtering - Train Station, Assembly, Auto-Scheduling - Placard tooltip - Added a "Next up:" prompt to make sure people are aware of other scenes --- src/generated/resources/.cache/cache | 32 +- .../resources/assets/create/lang/en_us.json | 41 ++ .../assets/create/lang/unfinished/de_de.json | 43 +- .../assets/create/lang/unfinished/es_cl.json | 43 +- .../assets/create/lang/unfinished/es_es.json | 43 +- .../assets/create/lang/unfinished/fr_fr.json | 43 +- .../assets/create/lang/unfinished/it_it.json | 43 +- .../assets/create/lang/unfinished/ja_jp.json | 43 +- .../assets/create/lang/unfinished/ko_kr.json | 43 +- .../assets/create/lang/unfinished/nl_nl.json | 43 +- .../assets/create/lang/unfinished/pl_pl.json | 43 +- .../assets/create/lang/unfinished/pt_pt.json | 43 +- .../assets/create/lang/unfinished/ro_ro.json | 43 +- .../assets/create/lang/unfinished/ru_ru.json | 43 +- .../assets/create/lang/unfinished/zh_cn.json | 43 +- .../assets/create/lang/unfinished/zh_tw.json | 43 +- .../zapper/ZapperRenderHandler.java | 2 +- .../edgePoint/TrackTargetingBehaviour.java | 3 +- .../edgePoint/station/StationTileEntity.java | 2 + .../foundation/ponder/PonderLocalization.java | 1 + .../foundation/ponder/SceneBuilder.java | 6 +- .../ponder/content/PonderIndex.java | 63 ++- .../content/trains/TrackObserverScenes.java | 165 +++++++ .../ponder/content/trains/TrackScenes.java | 118 +++++ .../content/trains/TrainStationScenes.java | 462 ++++++++++++++++++ .../instruction/FadeIntoSceneInstruction.java | 4 +- .../FadeOutOfSceneInstruction.java | 6 +- .../ponder/instruction/LineInstruction.java | 17 +- .../create/foundation/ponder/ui/PonderUI.java | 40 +- .../utility/outliner/LineOutline.java | 17 +- .../foundation/utility/outliner/Outliner.java | 7 +- .../assets/create/lang/default/tooltips.json | 7 + .../assets/create/ponder/train_observer.nbt | Bin 0 -> 1430 bytes .../create/ponder/train_station/assembly.nbt | Bin 0 -> 1985 bytes .../create/ponder/train_station/schedule.nbt | Bin 0 -> 1680 bytes .../create/ponder/train_track/chunks.nbt | Bin 0 -> 1516 bytes .../textures/block/deepslate_zinc_ore.png | Bin 664 -> 315 bytes 37 files changed, 1517 insertions(+), 78 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackObserverScenes.java create mode 100644 src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainStationScenes.java create mode 100644 src/main/resources/assets/create/ponder/train_observer.nbt create mode 100644 src/main/resources/assets/create/ponder/train_station/assembly.nbt create mode 100644 src/main/resources/assets/create/ponder/train_station/schedule.nbt create mode 100644 src/main/resources/assets/create/ponder/train_track/chunks.nbt diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index bb38f11ff..c4e4ec2cf 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 -1dae1310d9826990ebe3c5a2c0229e6ca00b05ff assets/create/lang/en_us.json -552e2a1c69a39abb3d8fdad6dc77c436dac0d095 assets/create/lang/unfinished/de_de.json -354b4dfe3d6a5d384cd43b79068586eef8c8a407 assets/create/lang/unfinished/es_cl.json -5a5a451b9262be0aad5832dd9cfefa624a5635eb assets/create/lang/unfinished/es_es.json -863c0e0781de73acd633e7cf72b6cffda1260dbb assets/create/lang/unfinished/fr_fr.json -78ce0b9469a619661c91204f2596e79285cd4b40 assets/create/lang/unfinished/it_it.json -34e93498cfda555a0dd74624e8d9737491e51539 assets/create/lang/unfinished/ja_jp.json -b06a53e0870498c0818447d36fad5d81746866a3 assets/create/lang/unfinished/ko_kr.json -0946dda62ad0f1011b4ef3aeb362860808d45bcc assets/create/lang/unfinished/nl_nl.json -9c82d73d6ca083814a68a4ca59c8730df3cf085c assets/create/lang/unfinished/pl_pl.json -cbd0c1a891756ff4a535490a058cde99b4feb288 assets/create/lang/unfinished/pt_br.json -f0e79ed9788b5c8ef27466ca7a2bc6d47bb44318 assets/create/lang/unfinished/pt_pt.json -8271678d9098f7ba2118cbb292375cc0ee9ec49b assets/create/lang/unfinished/ro_ro.json -d2a4438332b12f48b7490a1438ce771544dab816 assets/create/lang/unfinished/ru_ru.json -5ea50f171848efb2d8883b42ba1a59ad33551aa4 assets/create/lang/unfinished/zh_cn.json -3587c3011498fe0c8661bd96779d9b024f497651 assets/create/lang/unfinished/zh_tw.json +022c884e9c43e70b4b4a5e6564f1691588aa9152 assets/create/lang/en_us.json +fa67e4b5cbd891d51c389378ac0b206992436835 assets/create/lang/unfinished/de_de.json +37eda47e7afabec68e8564ab692744a0263ea4db assets/create/lang/unfinished/es_cl.json +2bcbf43ef52cebaf0b8a35be8ae0fae574f6cc79 assets/create/lang/unfinished/es_es.json +ca213ce03cb746d7add46ae66d2dbf2603fda7e0 assets/create/lang/unfinished/fr_fr.json +3b5cba1c56bc78ef18be1b2d2145a8b91d59584d assets/create/lang/unfinished/it_it.json +bd5bffaadb12bdfaea26d17ad3aceef130aa0bb3 assets/create/lang/unfinished/ja_jp.json +40435b76d39e4252d29cafe58d508043c7f526c5 assets/create/lang/unfinished/ko_kr.json +fcbdb2a3e469d22a6cb7e626b7238ad159892204 assets/create/lang/unfinished/nl_nl.json +2e2bb8da893262df07aee6362027e227e600fd10 assets/create/lang/unfinished/pl_pl.json +983d5469ccd171b697f818bd831b6c4f8e8baf8d assets/create/lang/unfinished/pt_br.json +2bd53a9fb09b4e46b4bccdcab83d7cfb459c8f40 assets/create/lang/unfinished/pt_pt.json +9a6b0c119ac70311b38886315eef7cc4df8f469f assets/create/lang/unfinished/ro_ro.json +4ec0c881565f953d447fc235c71fa3c7c7407749 assets/create/lang/unfinished/ru_ru.json +f23bea2510950c22497b7c0700904a5d9ed88a60 assets/create/lang/unfinished/zh_cn.json +87a6f3b191e0158e7f7788b2b3b4f4391aa1f99d 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 6ea752f8f..3734d7c69 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -2003,6 +2003,13 @@ "item.create.copper_backtank.tooltip.condition2": "When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "_Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "PLACARD", + "block.create.placard.tooltip.summary": "_Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "_Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "When Punched", + "block.create.placard.tooltip.behaviour2": "_Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "FLYWHEEL", "block.create.flywheel.tooltip.summary": "_Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "When Powered by Kinetics", @@ -2049,6 +2056,7 @@ "create.ponder.close": "Close", "create.ponder.identify": "Identify", "create.ponder.next": "Next Scene", + "create.ponder.next_up": "Next up:", "create.ponder.previous": "Previous Scene", "create.ponder.replay": "Replay", "create.ponder.think_back": "Think Back", @@ -2109,6 +2117,27 @@ "create.ponder.andesite_tunnel.text_3": "...they will split exactly one item off of any passing stacks", "create.ponder.andesite_tunnel.text_4": "The remainder will continue on its path", + "create.ponder.assembly.header": "Assembling Trains", + "create.ponder.assembly.text_1": "Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "Processing Items in the Basin", "create.ponder.basin.text_1": "A Basin can hold Items and Fluids for Processing", "create.ponder.basin.text_2": "After a processing step, basins try to output below to the side of them", @@ -2218,6 +2247,13 @@ "create.ponder.chain_gearshift.text_5": "Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "12 RPM", + "create.ponder.chunks.header": "Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "Transporting Items downward via Chutes", "create.ponder.chute.text_1": "Chutes can transport items vertically from and to inventories", "create.ponder.chute.text_2": "Using the Wrench, a window can be created", @@ -2643,6 +2679,11 @@ "create.ponder.nixie_tube.text_2": "Using name tags edited with an anvil, custom text can be displayed", "create.ponder.nixie_tube.text_3": "Right-Click with Dye to change their display colour", + "create.ponder.observe.header": "Detecting Trains", + "create.ponder.observe.text_1": "Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "Piston Extension Poles", "create.ponder.piston_pole.text_1": "Without attached Poles, a Mechanical Piston cannot move", "create.ponder.piston_pole.text_2": "The Length of pole added at its back determines the Extension Range", 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 251c773a6..8e1174e9f 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: 1203", + "_": "Missing Localizations: 1239", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "Wenn platziert und mit kinetischer Energie betrieben", "item.create.copper_backtank.tooltip.behaviour2": "_Sammelt_ _komprimierte_ _Luft_ mit einer Geschwindigkeit basierend auf der Rotationsgeschwindigkeit.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +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.previous": "UNLOCALIZED: Previous Scene", "create.ponder.replay": "UNLOCALIZED: Replay", "create.ponder.think_back": "UNLOCALIZED: Think Back", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "UNLOCALIZED: ...they will split exactly one item off of any passing stacks", "create.ponder.andesite_tunnel.text_4": "UNLOCALIZED: The remainder will continue on its path", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "UNLOCALIZED: Processing Items in the Basin", "create.ponder.basin.text_1": "UNLOCALIZED: A Basin can hold Items and Fluids for Processing", "create.ponder.basin.text_2": "UNLOCALIZED: After a processing step, basins try to output below to the side of them", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", "create.ponder.piston_pole.text_2": "UNLOCALIZED: The Length of pole added at its back determines the Extension Range", 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 4c61d10aa..218107b20 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: 853", + "_": "Missing Localizations: 889", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "Al colocarlo, y darle Cinética", "item.create.copper_backtank.tooltip.behaviour2": "_Recolecta_ _Aire_ _Comprimido_ a una velocidad dependiente de la velocidad de rotación.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +2057,7 @@ "create.ponder.close": "Cerrar", "create.ponder.identify": "Identificar", "create.ponder.next": "Siguiente Escena", + "create.ponder.next_up": "UNLOCALIZED: Next up:", "create.ponder.previous": "Escena Previa", "create.ponder.replay": "Reiniciar", "create.ponder.think_back": "Pensar Atrás", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "...separarán exactamente un objeto de cualquier stack que pase a través", "create.ponder.andesite_tunnel.text_4": "Lo restante continuará en su camino", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "Procesando Objetos en el tónel", "create.ponder.basin.text_1": "Un tónel puede sostener Objetos y Fluidos para ser Procesados", "create.ponder.basin.text_2": "Despues de un procesado, los tóneles intentarán dar salida a un lado y hacia abajo", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "Usando señales análogas, la razón se puede ajustar más precisamente entre 1 y 2", "create.ponder.chain_gearshift.text_6": "12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "Transportando Objetos a través de Tolvoganes Verticales", "create.ponder.chute.text_1": "Los tolvoganes pueden transportar artículos verticalmente desde y hacia los inventarios.", "create.ponder.chute.text_2": "Usando la Llave, una ventana se puede crear", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "Usando etiquetas editadas con un yunque, se puede mostrar Texto Personalizado", "create.ponder.nixie_tube.text_3": "Haz Click-Derecho con un Tinte para cambiar su color de visualización", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "Postes de Extensión de Pistón", "create.ponder.piston_pole.text_1": "Sin postes adjuntos, un Pistón Mecanico no se puede mover", "create.ponder.piston_pole.text_2": "La longitud del poste agregado en su parte posterior determina el rango de extensión", 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 df93e4150..533619c42 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: 517", + "_": "Missing Localizations: 553", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "Cuando se coloca y es alimentado por cinética", "item.create.copper_backtank.tooltip.behaviour2": "Recoge _aire presurizado_ a un ritmo que depende de la velocidad rotacional.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +2057,7 @@ "create.ponder.close": "Cerrar", "create.ponder.identify": "Identificar", "create.ponder.next": "Escena siguiente", + "create.ponder.next_up": "UNLOCALIZED: Next up:", "create.ponder.previous": "Escena previa", "create.ponder.replay": "Repetición", "create.ponder.think_back": "Volver atrás", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "...dividirá exactamente un objeto de cualquier pila que pase", "create.ponder.andesite_tunnel.text_4": "El resto continuará su camino", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "Procesar objetos en la cuenca", "create.ponder.basin.text_1": "Una cuenca puede contener objetos y fluidos para su procesamiento", "create.ponder.basin.text_2": "Después de un paso de procesamamiento, las cuencas intentan descargar por debajo a un lado de ellas", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "Utilizando señales analógicas, la relación puede ajustarse con mayor precisión, entre 1 y 2", "create.ponder.chain_gearshift.text_6": "12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "Transportar objetos hacia abajo a través de ductos", "create.ponder.chute.text_1": "Los ductos pueden transportar objetos verticalmente desde y hacia los inventarios", "create.ponder.chute.text_2": "Usando la llave inglesa, se puede crear una ventana", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "Con las etiquetas editadas en un yunque, pueden mostar un texto personalizado", "create.ponder.nixie_tube.text_3": "Haga clic derecho con un tinte para cambiar su color de visualización", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "Pértigas de extensión de pistones", "create.ponder.piston_pole.text_1": "Sin las pértigas de extensión unidas, un pistón mecánico no puede moverse", "create.ponder.piston_pole.text_2": "La longitud de la pértiga añadida en su parte posterior determina el rango de alcance", 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 d7abe1c6e..3be36fb70 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: 2005", + "_": "Missing Localizations: 2041", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "VOLANT D'INERTIE", "block.create.flywheel.tooltip.summary": "Une grande roue métallique pour _exploiter_ _et_ _stabiliser_ la force générée par un _moteur_ _attaché_. Les volants d'inertie se connectent aux moteurs s'ils sont séparés _d'un_ _mètre_ et tournés à un _angle_ de _90°_ les uns des autres.", "block.create.flywheel.tooltip.condition1": "Lorsqu'attaché à un moteur en marche", @@ -2050,6 +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.previous": "UNLOCALIZED: Previous Scene", "create.ponder.replay": "UNLOCALIZED: Replay", "create.ponder.think_back": "UNLOCALIZED: Think Back", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "UNLOCALIZED: ...they will split exactly one item off of any passing stacks", "create.ponder.andesite_tunnel.text_4": "UNLOCALIZED: The remainder will continue on its path", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "UNLOCALIZED: Processing Items in the Basin", "create.ponder.basin.text_1": "UNLOCALIZED: A Basin can hold Items and Fluids for Processing", "create.ponder.basin.text_2": "UNLOCALIZED: After a processing step, basins try to output below to the side of them", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", "create.ponder.piston_pole.text_2": "UNLOCALIZED: The Length of pole added at its back determines the Extension Range", 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 3ec25b78a..a9fc11c81 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: 1776", + "_": "Missing Localizations: 1812", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "VOLANO", "block.create.flywheel.tooltip.summary": "Una grande ruota di metallo per _imbrigliare_ _e_ _stabilizzare_ la forza generata da un _motore_ _collegato_. I volani si collegano ai motori se sono a _1_ _metro_ di distanza e ad un _angolo_ _di_ _90°_ l'uno dall'altro.", "block.create.flywheel.tooltip.condition1": "Se collegato a un motore in funzione", @@ -2050,6 +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.previous": "UNLOCALIZED: Previous Scene", "create.ponder.replay": "UNLOCALIZED: Replay", "create.ponder.think_back": "UNLOCALIZED: Think Back", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "UNLOCALIZED: ...they will split exactly one item off of any passing stacks", "create.ponder.andesite_tunnel.text_4": "UNLOCALIZED: The remainder will continue on its path", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "UNLOCALIZED: Processing Items in the Basin", "create.ponder.basin.text_1": "UNLOCALIZED: A Basin can hold Items and Fluids for Processing", "create.ponder.basin.text_2": "UNLOCALIZED: After a processing step, basins try to output below to the side of them", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", "create.ponder.piston_pole.text_2": "UNLOCALIZED: The Length of pole added at its back determines the Extension Range", 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 67f8f923c..f63cf6164 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: 519", + "_": "Missing Localizations: 555", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "設置して動力を供給したとき", "item.create.copper_backtank.tooltip.behaviour2": "_圧縮空気_を_集めます_。速度は回転速度によって決まります。", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +2057,7 @@ "create.ponder.close": "閉じる", "create.ponder.identify": "ブロック名を確認", "create.ponder.next": "次のシーン", + "create.ponder.next_up": "UNLOCALIZED: Next up:", "create.ponder.previous": "前のシーン", "create.ponder.replay": "最初から", "create.ponder.think_back": "戻る", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "...通過するアイテムスタックから正確に1つのアイテムを分割します", "create.ponder.andesite_tunnel.text_4": "残ったものは、そのルートを進み続けます", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "鉢によるアイテム加工", "create.ponder.basin.text_1": "鉢には素材となるアイテムや液体を入れられます", "create.ponder.basin.text_2": "鉢は完成品アイテムを斜め下へ搬出しようとします", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "レッドストーン信号の強度で、比率を1と2の間でより正確に調整できます", "create.ponder.chain_gearshift.text_6": "12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "シュートでの下方向へ運搬", "create.ponder.chute.text_1": "シュートは、収納ブロックから垂直方向にアイテムを運搬できます", "create.ponder.chute.text_2": "レンチを使って、窓を付けられます", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "金床で名付けた名札を使って、好きな文字を表示することもできます", "create.ponder.nixie_tube.text_3": "染料で右クリックすることで表示の色を変えられます", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "ピストン延長ポール", "create.ponder.piston_pole.text_1": "ポールが無いとメカニカルピストンは動きません", "create.ponder.piston_pole.text_2": "後ろに付けたポールの長さによって、伸び縮みする長さが決まります", 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 4feac9fdb..42416bd5b 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: 519", + "_": "Missing Localizations: 555", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "설치되고 동력으로 회전될 때", "item.create.copper_backtank.tooltip.behaviour2": "동력 속도에 따라 _공기_를 _모읍니다_.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +2057,7 @@ "create.ponder.close": "닫기", "create.ponder.identify": "탐색", "create.ponder.next": "다음 장면", + "create.ponder.next_up": "UNLOCALIZED: Next up:", "create.ponder.previous": "이전 장면", "create.ponder.replay": "다시 재생", "create.ponder.think_back": "되돌아가기", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "...터널은 통과하는 아이템 스택에서 1개의 아이템을 분리시킵니다.", "create.ponder.andesite_tunnel.text_4": "나머지는 가던 길을 갑니다.", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "대야 안에서 아이템 처리하기", "create.ponder.basin.text_1": "대야는 아이템과 액체를 담을 수 있습니다.", "create.ponder.basin.text_2": "처리 이후, 대야는 옆면 아래로 결과물을 내보냅니다.", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "아날로그 레버를 사용하면, 속도 비율을 1 ~ 2배 사이로 맞출 수 있습니다.", "create.ponder.chain_gearshift.text_6": "12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "슈트를 이용해 아이템을 아래로 옮기기", "create.ponder.chute.text_1": "슈트는 보관함에 있는 아이템을 수직으로 옮깁니다.", "create.ponder.chute.text_2": "렌치를 이용해 창문을 만들 수 있습니다.", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "이름표를 사용하여 원하는 글자를 나타낼 수도 있습니다.", "create.ponder.nixie_tube.text_3": "염료를 들고 우클릭하여 색을 바꿀 수 있습니다.", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "피스톤 연장 축", "create.ponder.piston_pole.text_1": "연장 축이 없으면, 기계식 피스톤은 움직일 수 없습니다.", "create.ponder.piston_pole.text_2": "연장 축의 수가 곧 피스톤이 연장할 수 있는 거리입니다.", 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 b0834ebfc..c7b20b7cf 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: 2353", + "_": "Missing Localizations: 2389", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +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.previous": "UNLOCALIZED: Previous Scene", "create.ponder.replay": "UNLOCALIZED: Replay", "create.ponder.think_back": "UNLOCALIZED: Think Back", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "UNLOCALIZED: ...they will split exactly one item off of any passing stacks", "create.ponder.andesite_tunnel.text_4": "UNLOCALIZED: The remainder will continue on its path", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "UNLOCALIZED: Processing Items in the Basin", "create.ponder.basin.text_1": "UNLOCALIZED: A Basin can hold Items and Fluids for Processing", "create.ponder.basin.text_2": "UNLOCALIZED: After a processing step, basins try to output below to the side of them", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", "create.ponder.piston_pole.text_2": "UNLOCALIZED: The Length of pole added at its back determines the Extension Range", 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 10f2519a7..ca9fdd2b2 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: 892", + "_": "Missing Localizations: 928", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "Po postawieniu i zasileniu siłą obrotową", "item.create.copper_backtank.tooltip.behaviour2": "_Zbiera_ _sprężone_ _powietrze_, w tempie zależnym od prędkości obrotu.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +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.previous": "Poprzednia scena", "create.ponder.replay": "Powtórka", "create.ponder.think_back": "Powrót", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "...będzie oddzielał dokładnie jeden przedmiot na każde wyjście", "create.ponder.andesite_tunnel.text_4": "Reszta przedmiotów będzie kontynuowało swoją podróż", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "Przetwarzanie przedmiotów w tyglu", "create.ponder.basin.text_1": "Tygiel może przechowywać przedmioty i płyny do późniejszej obróbki", "create.ponder.basin.text_2": "Po obróbce, tygle spróbują wyrzucić gotowy przedmiot z boku, jeden blok pod spodem", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "Z użyciem sygnałów analogowych, ta różnica może być dostosowana z większą dokładnością - pomiędzy 1 a 2x", "create.ponder.chain_gearshift.text_6": "12 Ob/min", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "Transport przedmiotów w dół z użyciem zsypów", "create.ponder.chute.text_1": "Zsypy mogą transportować przedmioty pionowo z- i do pojemników", "create.ponder.chute.text_2": "Używając klucza można stworzyć okno", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "Używając znaczników i kowadła można wyświetlić własny tekst", "create.ponder.nixie_tube.text_3": "Użyj barwników, aby zmienić kolor lampy", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "Przedłużenia tłoka", "create.ponder.piston_pole.text_1": "Bez przyłączonych przedłużeń, mechaniczny tłok nie może się wysunąć", "create.ponder.piston_pole.text_2": "Długość przedłużenia z tyłu ustala maksymalny zasięg tłoka", 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 ed663821b..cfea9d346 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: 2062", + "_": "Missing Localizations: 2098", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +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.previous": "UNLOCALIZED: Previous Scene", "create.ponder.replay": "UNLOCALIZED: Replay", "create.ponder.think_back": "UNLOCALIZED: Think Back", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "UNLOCALIZED: ...they will split exactly one item off of any passing stacks", "create.ponder.andesite_tunnel.text_4": "UNLOCALIZED: The remainder will continue on its path", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "UNLOCALIZED: Processing Items in the Basin", "create.ponder.basin.text_1": "UNLOCALIZED: A Basin can hold Items and Fluids for Processing", "create.ponder.basin.text_2": "UNLOCALIZED: After a processing step, basins try to output below to the side of them", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", "create.ponder.piston_pole.text_2": "UNLOCALIZED: The Length of pole added at its back determines the Extension Range", 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 76fbd1e68..ff764538e 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: 520", + "_": "Missing Localizations: 556", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "Când este plasat, Alimentat de Cinetice", "item.create.copper_backtank.tooltip.behaviour2": "_Colectează_ _Presiune de_ _Aer_ într-un ritm depinzând de Viteză de Rotație.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +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.previous": "Scena precedentă", "create.ponder.replay": "Reia", "create.ponder.think_back": "Gândește Înapoi", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "...ele vor împărți exact un obiect din orice stack care trece", "create.ponder.andesite_tunnel.text_4": "Restul își va continua drumul", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "Procesarea Obiectelor în Bazin", "create.ponder.basin.text_1": "Un Bazin poate ține Obiecte și Fluide pentru Procesare", "create.ponder.basin.text_2": "După un pas de procesare, bazinele încearcă să scoată rezultatul jos, în lateralele lui", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "Folsind semnale analogice, raportul poate fi adjustat mai precis între 1 și 2", "create.ponder.chain_gearshift.text_6": "12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "Transportarea Obiectelor în jos prin Tobogane", "create.ponder.chute.text_1": "Toboganele pot transporta obiecte vertical către și de la inventare", "create.ponder.chute.text_2": "Folosind Cheia, o fereastră poate fi creată", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "Folosind etichete de nume editate cu o nicovală, text personalizat poate fi afișat", "create.ponder.nixie_tube.text_3": "Click-Dreapta cu Colorant pentru a le schimba culoarea de afișare", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "Brațe De Extensie De Piston", "create.ponder.piston_pole.text_1": "Fără Brațe atașate, un Piston Mecanic nu se poate mișca", "create.ponder.piston_pole.text_2": "Lungimea unui braț adăugat în spatele lui determină Raza De Extensie", 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 2cbea2af6..b16e87ac6 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: 897", + "_": "Missing Localizations: 933", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "При размещении и питании от кинетической энергии", "item.create.copper_backtank.tooltip.behaviour2": "Собирает и сжимает воздух со скоростью, зависящей от скорости вращения.", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +2057,7 @@ "create.ponder.close": "Закрыть", "create.ponder.identify": "Определить", "create.ponder.next": "Следующая сцена", + "create.ponder.next_up": "UNLOCALIZED: Next up:", "create.ponder.previous": "Предыдущая сцена", "create.ponder.replay": "Воспроизвести снова", "create.ponder.think_back": "Подумать о предыдущем", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "...он будет отделять ровно один предмет из любых проходящих мимо стаков", "create.ponder.andesite_tunnel.text_4": "Остаток продолжит свой путь", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "Обработке предметов в Чаше", "create.ponder.basin.text_1": "Чаша может хранить предметы и жидкости для обработки", "create.ponder.basin.text_2": "После обработки, чаши пытаются вывести результат под любой из их сторон", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "Используя аналоговые сигналы, это умножение может быть настроено более точно между 1 и 2", "create.ponder.chain_gearshift.text_6": "12 об./мин.", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "Транспортировке предметов вниз через Желоба", "create.ponder.chute.text_1": "Желоба могут транспортировать предметы вертикально из и в инвентари", "create.ponder.chute.text_2": "Используя Ключ, вы можете создать окно", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "С помощью бирок, отредактированных на наковальне, вы можете отобразить любой текст.", "create.ponder.nixie_tube.text_3": "Щелкните ПКМ с красителем, чтобы изменить цвет их дисплея", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "Удлинителях Поршня", "create.ponder.piston_pole.text_1": "Без присоединённых Удлинителей, Механический поршень не может двигаться", "create.ponder.piston_pole.text_2": "Длина стержня, добавленного к его задней части, определяет Диапазон выдвижения.", 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 6783df952..335fb5c65 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: 517", + "_": "Missing Localizations: 553", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "放下并接入动力时", "item.create.copper_backtank.tooltip.behaviour2": "基于转速从周围环境中_收集_并_加压空气_", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +2057,7 @@ "create.ponder.close": "思索结束", "create.ponder.identify": "显示方块名称", "create.ponder.next": "下一情景", + "create.ponder.next_up": "UNLOCALIZED: Next up:", "create.ponder.previous": "上一情景", "create.ponder.replay": "重放", "create.ponder.think_back": "回想", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "……经过的所有物品堆都会被精准地分出一个物品", "create.ponder.andesite_tunnel.text_4": "剩下的物品则不受影响,继续前进", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "工作盆内物品处理", "create.ponder.basin.text_1": "一个可以对放入的物品以及流体进行处理的盆", "create.ponder.basin.text_2": "处理完毕后,工作盆会尝试从它下方的侧面输出", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "转速的倍率可在 x1 和 x2 间根据红石信号的强弱来精确调整", "create.ponder.chain_gearshift.text_6": "12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "使用溜槽向下运输物品", "create.ponder.chute.text_1": "溜槽可在两个容器之间垂直传输物品", "create.ponder.chute.text_2": "使用扳手右击可以在溜槽上设置观察窗", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "对着它使用更改过名称的命名牌,可以自定义它的显示文本", "create.ponder.nixie_tube.text_3": "使用染料右击,便可更改辉光管的显示颜色", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "活塞延长杆", "create.ponder.piston_pole.text_1": "若无相接的活塞杆,动力活塞无法移动其他方块", "create.ponder.piston_pole.text_2": "在其背面安装的活塞杆长度,决定了活塞的推动范围", 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 5a6d351d3..335a6ba1a 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: 911", + "_": "Missing Localizations: 947", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,13 @@ "item.create.copper_backtank.tooltip.condition2": "當放置時,由轉動來補充驅動", "item.create.copper_backtank.tooltip.behaviour2": "旋轉的速度決定收集_壓縮空氣_的速率", + "block.create.placard.tooltip": "UNLOCALIZED: PLACARD", + "block.create.placard.tooltip.summary": "UNLOCALIZED: _Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "UNLOCALIZED: When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "UNLOCALIZED: _Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "UNLOCALIZED: When Punched", + "block.create.placard.tooltip.behaviour2": "UNLOCALIZED: _Removes_ the current _item_ in the frame.", + "block.create.flywheel.tooltip": "UNLOCALIZED: FLYWHEEL", "block.create.flywheel.tooltip.summary": "UNLOCALIZED: _Embellish_ your _Machines_ with this imposing Wheel of Brass.", "block.create.flywheel.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", @@ -2050,6 +2057,7 @@ "create.ponder.close": "關閉", "create.ponder.identify": "暫停", "create.ponder.next": "下個場景", + "create.ponder.next_up": "UNLOCALIZED: Next up:", "create.ponder.previous": "上個場景", "create.ponder.replay": "重播", "create.ponder.think_back": "返回", @@ -2110,6 +2118,27 @@ "create.ponder.andesite_tunnel.text_3": "...隧道將會從經過的整組物品中拿出一個丟到另一條輸送帶上", "create.ponder.andesite_tunnel.text_4": "剩餘物品則按照原路輸出", + "create.ponder.assembly.header": "UNLOCALIZED: Assembling Trains", + "create.ponder.assembly.text_1": "UNLOCALIZED: Select a Train Track then place the Station nearby", + "create.ponder.assembly.text_10": "UNLOCALIZED: Open the Station UI and confirm the Assembly process", + "create.ponder.assembly.text_11": "UNLOCALIZED: Trains can be disassembled back into blocks at stations only", + "create.ponder.assembly.text_2": "UNLOCALIZED: Stations are the Waypoints of your Track Network", + "create.ponder.assembly.text_3": "UNLOCALIZED: To create a new Train, open the UI and switch to Assembly Mode", + "create.ponder.assembly.text_4": "UNLOCALIZED: During Assembly no scheduled trains will approach this station", + "create.ponder.assembly.text_5": "UNLOCALIZED: Create new bogeys by using Train Casing on Tracks", + "create.ponder.assembly.text_6": "UNLOCALIZED: Click the track again to cycle between bogey designs", + "create.ponder.assembly.text_7": "UNLOCALIZED: Next, attach blocks to them with the help of chassis or super glue", + "create.ponder.assembly.text_8": "UNLOCALIZED: Every Train requires Train Controls on board", + "create.ponder.assembly.text_9": "UNLOCALIZED: An optional second one allows departure from Stations in both directions", + + "create.ponder.auto_schedule.header": "UNLOCALIZED: Stations & Scheduling", + "create.ponder.auto_schedule.text_1": "UNLOCALIZED: Schedules can be used to provide drivers with a destination", + "create.ponder.auto_schedule.text_2": "UNLOCALIZED: Comparators will receive a signal whenever a Train is present", + "create.ponder.auto_schedule.text_3": "UNLOCALIZED: Mind that a Station can only be approached from the indicated direction", + "create.ponder.auto_schedule.text_4": "UNLOCALIZED: Stations can also be used to assign new Schedules automatically", + "create.ponder.auto_schedule.text_5": "UNLOCALIZED: The Schedule placed on a station will automatically copy itself to present trains", + "create.ponder.auto_schedule.text_6": "UNLOCALIZED: As opposed to manual scheduling, drivers will not take the item with them", + "create.ponder.basin.header": "在作業盆中處理物品", "create.ponder.basin.text_1": "作業盆可以放入物品或液體來進行處理", "create.ponder.basin.text_2": "在每次的處理完成後, 作業盆會試著輸出成品到他的側面下方", @@ -2219,6 +2248,13 @@ "create.ponder.chain_gearshift.text_5": "利用紅石訊號的強弱可以調整轉速倍率為x1或x2", "create.ponder.chain_gearshift.text_6": "12 RPM", + "create.ponder.chunks.header": "UNLOCALIZED: Traversing unloaded Chunks", + "create.ponder.chunks.text_1": "UNLOCALIZED: Tracks stay functional outside of loaded chunks", + "create.ponder.chunks.text_2": "UNLOCALIZED: Trains will travel through inactive sections of the world without issue", + "create.ponder.chunks.text_3": "UNLOCALIZED: They will still stop at stations or red signals", + "create.ponder.chunks.text_4": "UNLOCALIZED: However, Drills and other on-board machines will not operate", + "create.ponder.chunks.text_5": "UNLOCALIZED: Once near a Player, the train will visually re-appear", + "create.ponder.chute.header": "使用滑道向下輸送物品", "create.ponder.chute.text_1": "滑道可以在兩個垂直的儲物空間中輸送物品", "create.ponder.chute.text_2": "使用扳手可以讓它產生一個觀景窗", @@ -2644,6 +2680,11 @@ "create.ponder.nixie_tube.text_2": "使用命名牌在鐵砧上為其命名,可以自訂它的顯示文本", "create.ponder.nixie_tube.text_3": "使用染料右鍵點擊可以上色", + "create.ponder.observe.header": "UNLOCALIZED: Detecting Trains", + "create.ponder.observe.text_1": "UNLOCALIZED: Select a Train Track then place the Observer nearby", + "create.ponder.observe.text_2": "UNLOCALIZED: The Observer will detect any Trains passing over the marker", + "create.ponder.observe.text_3": "UNLOCALIZED: Observers can be filtered to activate for matching cargo", + "create.ponder.piston_pole.header": "活塞延長杆", "create.ponder.piston_pole.text_1": "若無相接的延長杆,動力活塞無法移動其他方塊", "create.ponder.piston_pole.text_2": "在其背面安裝的延長杆長度,決定了活塞的推動範圍", diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java index b0b64eb26..9028abdaa 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java @@ -38,7 +38,7 @@ public class ZapperRenderHandler extends ShootableGadgetRenderHandler { return; cachedBeams.forEach(beam -> { - CreateClient.OUTLINER.endChasingLine(beam, beam.start, beam.end, 1 - beam.itensity) + CreateClient.OUTLINER.endChasingLine(beam, beam.start, beam.end, 1 - beam.itensity, false) .disableNormals() .colored(0xffffff) .lineWidth(beam.itensity * 1 / 8f); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/TrackTargetingBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/TrackTargetingBehaviour.java index 4becad387..ed921d730 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/TrackTargetingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/TrackTargetingBehaviour.java @@ -22,6 +22,7 @@ import com.simibubi.create.content.logistics.trains.management.edgePoint.signal. import com.simibubi.create.content.logistics.trains.track.BezierTrackPointLocation; import com.simibubi.create.content.logistics.trains.track.TrackTileEntity; import com.simibubi.create.content.schematics.SchematicWorld; +import com.simibubi.create.foundation.ponder.PonderWorld; import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -312,7 +313,7 @@ public class TrackTargetingBehaviour extends TileEntit public static void render(LevelAccessor level, BlockPos pos, AxisDirection direction, BezierTrackPointLocation bezier, PoseStack ms, MultiBufferSource buffer, int light, int overlay, RenderedTrackOverlayType type, float scale) { - if (level instanceof SchematicWorld) + if (level instanceof SchematicWorld && !(level instanceof PonderWorld)) return; BlockState trackState = level.getBlockState(pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/station/StationTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/station/StationTileEntity.java index 7b924b9ce..335c4345e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/station/StationTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/edgePoint/station/StationTileEntity.java @@ -125,6 +125,8 @@ public class StationTileEntity extends SmartTileEntity implements ITransformable super.read(tag, clientPacket); invalidateRenderBoundingBox(); + if (tag.contains("ForceFlag")) + trainPresent = tag.getBoolean("ForceFlag"); if (tag.contains("PrevTrainName")) lastDisassembledTrainName = Component.Serializer.fromJson(tag.getString("PrevTrainName")); 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 4c6b85318..1b2b8d27a 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java @@ -126,6 +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.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/SceneBuilder.java b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java index ec1d521de..889603f81 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java @@ -384,7 +384,11 @@ public class SceneBuilder { } public void showLine(PonderPalette color, Vec3 start, Vec3 end, int duration) { - addInstruction(new LineInstruction(color, start, end, duration)); + addInstruction(new LineInstruction(color, start, end, duration, false)); + } + + public void chaseLine(PonderPalette color, Vec3 start, Vec3 end, int duration) { + addInstruction(new LineInstruction(color, start, end, duration, true)); } public void showOutline(PonderPalette color, Object slot, Selection selection, int duration) { 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 e4d32bb27..ce3e3507c 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 @@ -14,7 +14,9 @@ import com.simibubi.create.foundation.ponder.content.fluid.HosePulleyScenes; import com.simibubi.create.foundation.ponder.content.fluid.PipeScenes; import com.simibubi.create.foundation.ponder.content.fluid.PumpScenes; import com.simibubi.create.foundation.ponder.content.fluid.SpoutScenes; +import com.simibubi.create.foundation.ponder.content.trains.TrackObserverScenes; import com.simibubi.create.foundation.ponder.content.trains.TrackScenes; +import com.simibubi.create.foundation.ponder.content.trains.TrainStationScenes; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.Blocks; @@ -298,11 +300,19 @@ public class PonderIndex { // Trains HELPER.forComponents(AllBlocks.TRACK) .addStoryBoard("train_track/placement", TrackScenes::placement) - .addStoryBoard("train_track/portal", TrackScenes::portal); + .addStoryBoard("train_track/portal", TrackScenes::portal) + .addStoryBoard("train_track/chunks", TrackScenes::chunks); - //Display Link + HELPER.forComponents(AllBlocks.TRACK_STATION) + .addStoryBoard("train_station/assembly", TrainStationScenes::assembly) + .addStoryBoard("train_station/schedule", TrainStationScenes::autoSchedule); + + HELPER.forComponents(AllBlocks.TRACK_OBSERVER) + .addStoryBoard("train_observer", TrackObserverScenes::observe); + + // Display Link HELPER.forComponents(AllBlocks.DISPLAY_LINK) - .addStoryBoard("display/link", DisplayScenes::link); + .addStoryBoard("display/link", DisplayScenes::link); // Debug scenes, can be found in game via the Brass Hand if (REGISTER_DEBUG_SCENES) @@ -472,32 +482,31 @@ public class PonderIndex { .add(Blocks.DROPPER); PonderRegistry.TAGS.forTag(PonderTag.DISPLAY_SOURCES) - .add(AllBlocks.SEATS.get(DyeColor.WHITE)) - .add(AllBlocks.ORANGE_NIXIE_TUBE) - .add(AllBlocks.STOCKPILE_SWITCH) - .add(AllBlocks.CONTENT_OBSERVER) - .add(AllBlocks.ANDESITE_TUNNEL) - .add(AllBlocks.TRACK_OBSERVER) - .add(AllBlocks.TRACK_STATION) - .add(AllBlocks.DISPLAY_LINK) - .add(AllBlocks.BRASS_TUNNEL) - .add(AllBlocks.CUCKOO_CLOCK) - .add(AllBlocks.STRESSOMETER) - .add(AllBlocks.SPEEDOMETER) - .add(AllBlocks.FLUID_TANK) - .add(AllItems.BELT_CONNECTOR) - .add(Blocks.ENCHANTING_TABLE) - .add(Blocks.RESPAWN_ANCHOR) - .add(Blocks.COMMAND_BLOCK) - .add(Blocks.TARGET) - ; + .add(AllBlocks.SEATS.get(DyeColor.WHITE)) + .add(AllBlocks.ORANGE_NIXIE_TUBE) + .add(AllBlocks.STOCKPILE_SWITCH) + .add(AllBlocks.CONTENT_OBSERVER) + .add(AllBlocks.ANDESITE_TUNNEL) + .add(AllBlocks.TRACK_OBSERVER) + .add(AllBlocks.TRACK_STATION) + .add(AllBlocks.DISPLAY_LINK) + .add(AllBlocks.BRASS_TUNNEL) + .add(AllBlocks.CUCKOO_CLOCK) + .add(AllBlocks.STRESSOMETER) + .add(AllBlocks.SPEEDOMETER) + .add(AllBlocks.FLUID_TANK) + .add(AllItems.BELT_CONNECTOR) + .add(Blocks.ENCHANTING_TABLE) + .add(Blocks.RESPAWN_ANCHOR) + .add(Blocks.COMMAND_BLOCK) + .add(Blocks.TARGET); PonderRegistry.TAGS.forTag(PonderTag.DISPLAY_TARGETS) - .add(AllBlocks.ORANGE_NIXIE_TUBE) - .add(AllBlocks.DISPLAY_BOARD) - .add(AllBlocks.DISPLAY_LINK) - .add(Blocks.OAK_SIGN) - .add(Blocks.LECTERN); + .add(AllBlocks.ORANGE_NIXIE_TUBE) + .add(AllBlocks.DISPLAY_BOARD) + .add(AllBlocks.DISPLAY_LINK) + .add(Blocks.OAK_SIGN) + .add(Blocks.LECTERN); } 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 new file mode 100644 index 000000000..f0907553c --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackObserverScenes.java @@ -0,0 +1,165 @@ +package com.simibubi.create.foundation.ponder.content.trains; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.logistics.trains.management.edgePoint.observer.TrackObserverTileEntity; +import com.simibubi.create.foundation.ponder.ElementLink; +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.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.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 TrackObserverScenes { + + public static void observe(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("observe", "Detecting Trains"); + scene.configureBasePlate(1, 1, 9); + scene.scaleSceneView(.65f); + scene.setSceneOffsetY(-1); + scene.showBasePlate(); + + scene.special.movePointOfInterest(util.grid.at(-10, 2, 7)); + + Selection observer = util.select.position(5, 1, 4); + Selection redstone = util.select.fromTo(5, 1, 3, 5, 1, 2); + + Selection train1 = util.select.fromTo(7, 2, 6, 3, 3, 8); + Selection train2 = util.select.fromTo(11, 2, 6, 8, 3, 8); + Selection train2a = util.select.fromTo(11, 2, 3, 8, 3, 5); + Selection train2b = util.select.fromTo(11, 2, 0, 8, 3, 2); + + for (int i = 10; i >= 0; i--) { + scene.world.showSection(util.select.position(i, 1, 7), Direction.DOWN); + scene.idle(1); + } + + scene.idle(10); + + Vec3 target = util.vector.topOf(5, 0, 7); + AABB bb = new AABB(target, target).move(0, 2 / 16f, 0); + + scene.overlay.showControls(new InputWindowElement(target, Pointing.DOWN).rightClick() + .withItem(AllBlocks.TRACK_OBSERVER.asStack()), 40); + scene.idle(6); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, bb, 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, bb.inflate(.45f, 1 / 16f, .45f), 60); + scene.idle(10); + + scene.overlay.showText(50) + .pointAt(target) + .placeNearTarget() + .colored(PonderPalette.GREEN) + .text("Select a Train Track then place the Observer nearby"); + scene.idle(20); + + scene.world.showSection(observer, Direction.DOWN); + scene.idle(15); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, new AABB(util.grid.at(5, 1, 4)), 20); + scene.idle(25); + + scene.overlay.showText(70) + .pointAt(util.vector.blockSurface(util.grid.at(5, 1, 4), Direction.WEST)) + .attachKeyFrame() + .placeNearTarget() + .text("The Observer will detect any Trains passing over the marker"); + scene.idle(20); + scene.world.showSection(redstone, Direction.SOUTH); + scene.idle(30); + + 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); + ElementLink 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); + + 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); + + Selection add = redstone.add(observer); + + scene.idle(13); + scene.world.toggleRedstonePower(add); + scene.effects.indicateRedstone(util.grid.at(5, 1, 4)); + scene.idle(20); + scene.world.hideIndependentSection(trainInstance1, Direction.WEST); + scene.special.hideElement(birb, Direction.WEST); + scene.idle(10); + scene.world.toggleRedstonePower(add); + scene.idle(5); + scene.world.hideIndependentSection(trainInstance2, Direction.WEST); + scene.idle(20); + + target = util.vector.topOf(5, 1, 4); + bb = new AABB(target, target); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.WHITE, bb, bb, 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.WHITE, bb, bb.inflate(.2f, 0, .2f), 60); + + scene.overlay.showText(80) + .pointAt(util.vector.topOf(5, 1, 4)) + .attachKeyFrame() + .placeNearTarget() + .text("Observers can be filtered to activate for matching cargo"); + scene.idle(40); + + ItemStack waterBucket = new ItemStack(Items.WATER_BUCKET); + scene.overlay.showControls(new InputWindowElement(target, Pointing.DOWN).withItem(waterBucket), 30); + scene.idle(6); + scene.world.setFilterData(observer, TrackObserverTileEntity.class, waterBucket); + scene.idle(50); + + 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); + 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); + + 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.idle(33); + scene.world.hideIndependentSection(trainInstance1, Direction.WEST); + scene.special.hideElement(birb, Direction.WEST); + scene.idle(10); + scene.world.hideIndependentSection(trainInstance2, Direction.WEST); + scene.idle(20); + + 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); + 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); + + 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.idle(13); + scene.world.toggleRedstonePower(add); + scene.effects.indicateRedstone(util.grid.at(5, 1, 4)); + scene.idle(20); + scene.world.hideIndependentSection(trainInstance1, Direction.WEST); + scene.special.hideElement(birb, Direction.WEST); + scene.idle(10); + scene.world.toggleRedstonePower(add); + scene.idle(5); + scene.world.hideIndependentSection(trainInstance2, Direction.WEST); + + } + +} 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 c8ca8dd71..d8738bbcc 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 @@ -3,10 +3,12 @@ package com.simibubi.create.foundation.ponder.content.trains; import java.util.List; import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.logistics.trains.management.edgePoint.station.StationTileEntity; import com.simibubi.create.foundation.ponder.ElementLink; 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.InputWindowElement; import com.simibubi.create.foundation.ponder.element.ParrotElement; import com.simibubi.create.foundation.ponder.element.ParrotElement.FacePointOfInterestPose; @@ -339,4 +341,120 @@ public class TrackScenes { } + public static void chunks(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("chunks", "Traversing unloaded Chunks"); + scene.configureBasePlate(0, 0, 9); + scene.scaleSceneView(.65f); + scene.setSceneOffsetY(-1); + ElementLink stationElement = + scene.world.showIndependentSection(util.select.fromTo(0, 0, 0, 8, 0, 8), Direction.UP); + ElementLink stationTrackElement = + scene.world.showIndependentSection(util.select.position(0, 2, 0), Direction.UP); + scene.world.showSection(util.select.position(0, 3, 0), Direction.DOWN); + scene.idle(10); + + Selection vPlatform = util.select.fromTo(7, 1, 6, 1, 2, 8); + Selection vStation = util.select.position(7, 1, 1); + Selection dPlatform = util.select.fromTo(7, 3, 6, 1, 4, 8); + Selection dStation = util.select.position(1, 1, 1); + Selection train = util.select.fromTo(6, 2, 3, 2, 3, 5); + Selection track = util.select.fromTo(7, 1, 4, 37, 1, 4); + + scene.world.modifyTileNBT(vStation, StationTileEntity.class, c -> c.putBoolean("ForceFlag", true)); + + for (int i = 6; i >= 2; i--) { + scene.world.showSectionAndMerge(util.select.position(i, 1, 4), Direction.DOWN, stationTrackElement); + scene.idle(2); + } + + scene.world.showSectionAndMerge(vPlatform, Direction.NORTH, stationElement); + scene.idle(5); + scene.world.showSectionAndMerge(vStation, Direction.DOWN, stationElement); + ElementLink birb = + scene.special.createBirb(util.vector.centerOf(2, 2, 7), FacePointOfInterestPose::new); + scene.special.movePointOfInterest(util.grid.at(4, 3, 4)); + scene.idle(5); + ElementLink trainElement = scene.world.showIndependentSection(train, Direction.DOWN); + + scene.idle(10); + ElementLink trackElement = scene.world.showIndependentSection(track, Direction.EAST); + scene.world.moveSection(trackElement, util.vector.of(-36, 0, 0), 0); + + scene.idle(15); + scene.overlay.showText(60) + .pointAt(util.vector.topOf(1, 0, 4)) + .placeNearTarget() + .attachKeyFrame() + .text("Tracks stay functional outside of loaded chunks"); + scene.idle(60); + + scene.idle(30); + scene.world.modifyTileNBT(vStation, StationTileEntity.class, c -> c.putBoolean("ForceFlag", false)); + 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.special.moveParrot(birb, util.vector.of(12, 0, 0), 120); + scene.idle(15); + scene.world.hideIndependentSection(stationElement, null); + scene.special.hideElement(birb, null); + scene.idle(10); + scene.world.hideIndependentSection(trainElement, null); + scene.idle(5); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.BLUE, trainElement, + new AABB(util.grid.at(4, 2, 4)).inflate(1, .75f, .5f), 280); + + scene.idle(15); + scene.overlay.showText(60) + .pointAt(util.vector.blockSurface(util.grid.at(3, 2, 4), Direction.WEST)) + .placeNearTarget() + .colored(PonderPalette.BLUE) + .attachKeyFrame() + .text("Trains will travel through inactive sections of the world without issue"); + scene.idle(70); + + scene.overlay.showText(60) + .pointAt(util.vector.blockSurface(util.grid.at(3, 2, 4), Direction.WEST)) + .placeNearTarget() + .colored(PonderPalette.BLUE) + .attachKeyFrame() + .text("They will still stop at stations or red signals"); + scene.idle(50); + + scene.world.moveSection(trackElement, util.vector.of(19, 0, 0), 190); + scene.world.moveSection(stationTrackElement, util.vector.of(19, 0, 0), 190); + + scene.idle(30); + scene.overlay.showText(90) + .pointAt(util.vector.blockSurface(util.grid.at(3, 2, 4), Direction.WEST)) + .placeNearTarget() + .colored(PonderPalette.RED) + .attachKeyFrame() + .text("However, Drills and other on-board machines will not operate"); + scene.idle(80); + + stationElement = scene.world.showIndependentSection(util.select.fromTo(0, 0, 0, 8, 0, 8) + .add(dStation), null); + ElementLink dPlatformElement = + scene.world.showIndependentSection(dPlatform, null); + birb = scene.special.createBirb(util.vector.centerOf(-2, 2, 7), FacePointOfInterestPose::new); + scene.world.moveSection(dPlatformElement, util.vector.of(-8, -2, 0), 0); + scene.world.moveSection(stationElement, util.vector.of(-8, 0, 0), 0); + scene.world.moveSection(stationElement, util.vector.of(8, 0, 0), 80); + scene.world.moveSection(dPlatformElement, util.vector.of(8, 0, 0), 80); + scene.special.moveParrot(birb, util.vector.of(8, 0, 0), 80); + + scene.idle(30); + trainElement = scene.world.showIndependentSection(train, null); + scene.idle(20); + + scene.overlay.showText(90) + .pointAt(util.vector.blockSurface(util.grid.at(3, 2, 4), Direction.WEST)) + .placeNearTarget() + .attachKeyFrame() + .text("Once near a Player, the train will visually re-appear"); + scene.idle(30); + scene.world.modifyTileNBT(dStation, StationTileEntity.class, c -> c.putBoolean("ForceFlag", true)); + scene.idle(30); + } + } 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 new file mode 100644 index 000000000..282fd150e --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrainStationScenes.java @@ -0,0 +1,462 @@ +package com.simibubi.create.foundation.ponder.content.trains; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.content.logistics.trains.management.edgePoint.station.StationBlock; +import com.simibubi.create.content.logistics.trains.management.edgePoint.station.StationTileEntity; +import com.simibubi.create.foundation.ponder.ElementLink; +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.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.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +public class TrainStationScenes { + + public static void assembly(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("assembly", "Assembling Trains"); + scene.configureBasePlate(1, 0, 12); + scene.scaleSceneView(.65f); + scene.setSceneOffsetY(-1); + scene.showBasePlate(); + + for (int i = 13; i >= 0; i--) { + scene.world.showSection(util.select.position(i, 1, 6), Direction.DOWN); + scene.idle(1); + } + + BlockState air = Blocks.AIR.defaultBlockState(); + scene.world.setBlock(util.grid.at(10, 2, 6), air, false); + scene.world.setBlock(util.grid.at(6, 2, 6), air, false); + scene.world.setBlock(util.grid.at(3, 2, 6), air, false); + + scene.idle(10); + + Selection station = util.select.position(11, 1, 3); + Selection controls = util.select.fromTo(9, 3, 6, 10, 3, 6); + Selection train1 = util.select.fromTo(12, 2, 5, 8, 2, 7) + .substract(util.select.position(10, 2, 6)); + Selection train2 = util.select.fromTo(7, 2, 5, 2, 2, 7) + .substract(util.select.position(6, 2, 6)) + .substract(util.select.position(3, 2, 6)); + + BlockPos stationPos = util.grid.at(11, 1, 3); + Vec3 marker = util.vector.topOf(11, 0, 6) + .add(0, 3 / 16f, 0); + Vec3 stationTop = util.vector.topOf(stationPos); + + AABB bb = new AABB(util.vector.topOf(11, 0, 6), util.vector.topOf(11, 0, 6)).move(0, 2 / 16f, 0); + + scene.overlay.showControls(new InputWindowElement(marker, Pointing.DOWN).rightClick() + .withItem(AllBlocks.TRACK_STATION.asStack()), 40); + scene.idle(6); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, bb, 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, bb.inflate(.45f, 1 / 16f, .45f), 100); + scene.idle(10); + + scene.overlay.showText(70) + .pointAt(marker) + .placeNearTarget() + .colored(PonderPalette.GREEN) + .text("Select a Train Track then place the Station nearby"); + scene.idle(60); + + scene.world.showSection(station, Direction.DOWN); + scene.idle(15); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, + new AABB(stationPos).contract(1 / 16f, 2 / 16f, 1 / 16f), 20); + scene.idle(25); + + scene.overlay.showText(80) + .pointAt(marker) + .attachKeyFrame() + .placeNearTarget() + .text("Stations are the Waypoints of your Track Network"); + scene.idle(90); + + scene.overlay.showControls(new InputWindowElement(stationTop, Pointing.DOWN).rightClick(), 50); + scene.idle(16); + scene.overlay.showText(70) + .pointAt(stationTop) + .placeNearTarget() + .attachKeyFrame() + .text("To create a new Train, open the UI and switch to Assembly Mode"); + scene.idle(50); + + scene.world.cycleBlockProperty(stationPos, StationBlock.ASSEMBLING); + scene.effects.indicateSuccess(stationPos); + + scene.idle(20); + scene.overlay.showControls(new InputWindowElement(marker, Pointing.DOWN).withItem(new ItemStack(Items.BARRIER)), + 60); + scene.idle(6); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb, bb, 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb, bb.inflate(.45f, 1 / 16f, .45f), 80); + scene.idle(10); + scene.overlay.showText(70) + .pointAt(marker) + .placeNearTarget() + .colored(PonderPalette.RED) + .text("During Assembly no scheduled trains will approach this station"); + scene.idle(85); + + ItemStack casing = AllBlocks.RAILWAY_CASING.asStack(); + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(11, 0, 6), Pointing.RIGHT).rightClick() + .withItem(casing), 80); + scene.idle(6); + scene.world.restoreBlocks(util.select.position(10, 2, 6)); + ElementLink trainElement1 = + scene.world.showIndependentSection(util.select.position(10, 2, 6), Direction.DOWN); + scene.idle(20); + scene.overlay.showText(70) + .pointAt(util.vector.blockSurface(util.grid.at(10, 2, 6), Direction.WEST)) + .placeNearTarget() + .attachKeyFrame() + .colored(PonderPalette.BLUE) + .text("Create new bogeys by using Train Casing on Tracks"); + scene.idle(55); + + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(4, 0, 6), Pointing.RIGHT).rightClick() + .withItem(casing), 15); + scene.idle(6); + scene.world.setBlock(util.grid.at(3, 2, 6), AllBlocks.SMALL_BOGEY.getDefaultState(), false); + ElementLink trainElement2 = + scene.world.showIndependentSection(util.select.position(3, 2, 6), Direction.DOWN); + scene.idle(20); + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(7, 0, 6), Pointing.RIGHT).rightClick() + .withItem(casing), 15); + scene.idle(6); + scene.world.setBlock(util.grid.at(6, 2, 6), AllBlocks.SMALL_BOGEY.getDefaultState(), false); + scene.world.showSectionAndMerge(util.select.position(6, 2, 6), Direction.DOWN, trainElement2); + scene.idle(30); + + scene.overlay.showText(50) + .pointAt(util.vector.topOf(3, 0, 6)) + .placeNearTarget() + .attachKeyFrame() + .colored(PonderPalette.BLUE) + .text("Click the track again to cycle between bogey designs"); + scene.idle(35); + + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(4, 0, 6), Pointing.RIGHT).rightClick(), 15); + scene.idle(6); + scene.world.restoreBlocks(util.select.position(3, 2, 6)); + scene.idle(20); + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(7, 0, 6), Pointing.RIGHT).rightClick(), 15); + scene.idle(6); + scene.world.restoreBlocks(util.select.position(6, 2, 6)); + scene.idle(30); + + scene.overlay.showOutline(PonderPalette.GREEN, casing, util.select.position(10, 2, 6) + .add(util.select.position(6, 2, 6)) + .add(util.select.position(3, 2, 6)), 40); + + scene.overlay.showText(120) + .pointAt(util.vector.topOf(3, 2, 6)) + .placeNearTarget() + .attachKeyFrame() + .colored(PonderPalette.GREEN) + .text("Next, attach blocks to them with the help of chassis or super glue"); + scene.idle(35); + + scene.world.showSectionAndMerge(train1, Direction.DOWN, trainElement1); + scene.idle(10); + scene.world.showSectionAndMerge(train2, Direction.DOWN, trainElement2); + scene.idle(5); + scene.world.showSectionAndMerge(util.select.fromTo(6, 4, 5, 6, 3, 7), Direction.WEST, trainElement2); + scene.idle(3); + scene.world.showSectionAndMerge(util.select.fromTo(5, 3, 6, 4, 4, 7), Direction.NORTH, trainElement2); + scene.idle(3); + scene.world.showSectionAndMerge(util.select.fromTo(3, 3, 6, 3, 5, 6), Direction.DOWN, trainElement2); + scene.idle(3); + scene.world.showSectionAndMerge(util.select.fromTo(3, 5, 5, 3, 6, 5), Direction.SOUTH, trainElement2); + scene.idle(3); + scene.world.showSectionAndMerge(util.select.position(3, 3, 5), Direction.EAST, trainElement2); + scene.idle(3); + scene.world.showSectionAndMerge(util.select.position(5, 3, 5), Direction.SOUTH, trainElement2); + scene.idle(10); + + AABB glue1 = new AABB(util.grid.at(10, 2, 6)); + AABB glue2 = new AABB(util.grid.at(4, 2, 6)); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, glue2, glue2, 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, glue2, glue2.inflate(2, 0, 1) + .expandTowards(1, 3, 0), 60); + scene.idle(5); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, glue1, glue1, 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, glue1, glue1.inflate(1.25, 0, .25) + .expandTowards(0, 1, 0), 60); + scene.idle(15); + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(util.grid.at(4, 2, 6)), Pointing.UP) + .withItem(AllItems.SUPER_GLUE.asStack()), 40); + scene.idle(5); + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(util.grid.at(10, 2, 6)), Pointing.UP) + .withItem(AllItems.SUPER_GLUE.asStack()), 40); + scene.idle(55); + + ElementLink controlsElement = scene.world.showIndependentSection(controls, Direction.DOWN); + scene.idle(15); + scene.overlay.showText(60) + .pointAt(util.vector.topOf(10, 3, 6)) + .placeNearTarget() + .attachKeyFrame() + .text("Every Train requires Train Controls on board"); + scene.idle(55); + scene.world.showSectionAndMerge(util.select.position(8, 3, 6), Direction.DOWN, controlsElement); + scene.idle(15); + scene.world.moveSection(controlsElement, util.vector.of(1, 0, 0), 10); + scene.idle(15); + + scene.overlay.showText(80) + .pointAt(util.vector.topOf(9, 3, 6)) + .placeNearTarget() + .text("An optional second one allows departure from Stations in both directions"); + scene.idle(75); + + scene.overlay.showControls(new InputWindowElement(stationTop, Pointing.DOWN).rightClick(), 50); + scene.idle(16); + scene.overlay.showText(60) + .pointAt(stationTop) + .placeNearTarget() + .attachKeyFrame() + .text("Open the Station UI and confirm the Assembly process"); + scene.idle(50); + + scene.world.cycleBlockProperty(stationPos, StationBlock.ASSEMBLING); + scene.effects.indicateSuccess(stationPos); + scene.world.modifyTileNBT(util.select.position(stationPos), StationTileEntity.class, + c -> c.putBoolean("ForceFlag", true)); + scene.idle(20); + + ElementLink birb = + scene.special.createBirb(util.vector.centerOf(10, 3, 6), FacePointOfInterestPose::new); + scene.idle(15); + scene.special.movePointOfInterest(util.grid.at(18, 3, 6)); + scene.idle(15); + scene.world.modifyTileNBT(util.select.position(stationPos), StationTileEntity.class, + c -> c.putBoolean("ForceFlag", false)); + 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.special.moveParrot(birb, util.vector.of(18, 0, 0), 70); + + scene.idle(10); + scene.world.hideIndependentSection(controlsElement, null); + scene.world.hideIndependentSection(trainElement1, null); + scene.special.hideElement(birb, null); + scene.idle(20); + scene.world.hideIndependentSection(trainElement2, null); + scene.idle(20); + + scene.overlay.showText(80) + .pointAt(stationTop) + .placeNearTarget() + .attachKeyFrame() + .text("Trains can be disassembled back into blocks at stations only"); + scene.idle(50); + } + + public static void autoSchedule(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("auto_schedule", "Stations & Scheduling"); + scene.configureBasePlate(1, 0, 12); + scene.scaleSceneView(.65f); + scene.setSceneOffsetY(-1); + scene.showBasePlate(); + + for (int i = 13; i >= 0; i--) { + scene.world.showSection(util.select.position(i, 1, 6), Direction.DOWN); + scene.idle(1); + } + + scene.idle(4); + Selection redstone = util.select.fromTo(8, 1, 2, 8, 1, 1); + Selection belt = util.select.fromTo(9, 1, 3, 12, 1, 3); + Selection largeCog = util.select.position(13, 0, 4); + Selection cog = util.select.position(12, 1, 4); + BlockPos stationPos = util.grid.at(8, 1, 3); + Selection train = util.select.fromTo(9, 2, 5, 5, 3, 7); + Selection station = util.select.position(stationPos); + + scene.world.showSection(station, Direction.DOWN); + scene.idle(10); + + ElementLink trainElement = scene.world.showIndependentSection(train, Direction.DOWN); + scene.world.moveSection(trainElement, util.vector.of(-4, 0, 0), 0); + Vec3 target = util.vector.centerOf(2, 3, 6); + ElementLink birb = scene.special.createBirb(target, FacePointOfInterestPose::new); + scene.idle(10); + + scene.overlay.showText(90) + .pointAt(target) + .placeNearTarget() + .attachKeyFrame() + .text("Schedules can be used to provide drivers with a destination"); + scene.idle(70); + scene.overlay.showControls( + new InputWindowElement(target.add(0, 0.5, 0), Pointing.DOWN).withItem(AllItems.SCHEDULE.asStack()), 40); + scene.idle(6); + scene.special.movePointOfInterest(util.grid.at(9, 4, 6)); + + Vec3 marker = util.vector.topOf(8, 0, 6) + .add(0, 3 / 16f, 0); + AABB bb = new AABB(marker, marker); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, bb, bb, 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, bb, bb.inflate(.45f, 0, .45f), 40); + scene.idle(15); + + AABB bb2 = new AABB(marker, marker).move(-.45, 0, 0); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, bb2, bb2.move(-4, 0, 0), 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, bb2, bb2.expandTowards(-4, 0, 0), 20); + scene.idle(15); + + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, bb.inflate(.45f, 0, .45f), 25); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb2, bb2.expandTowards(-4, 0, 0), 25); + scene.idle(20); + + scene.world.showSection(redstone, Direction.SOUTH); + + scene.world.moveSection(trainElement, util.vector.of(4, 0, 0), 20); + scene.special.moveParrot(birb, util.vector.of(4, 0, 0), 20); + scene.idle(20); + + scene.world.modifyTileNBT(util.select.position(stationPos), StationTileEntity.class, + c -> c.putBoolean("ForceFlag", true)); + scene.world.toggleRedstonePower(redstone); + scene.effects.indicateRedstone(stationPos); + scene.idle(25); + scene.overlay.showText(80) + .pointAt(util.vector.topOf(stationPos.north()) + .subtract(0, 14 / 16f, 0)) + .placeNearTarget() + .attachKeyFrame() + .text("Comparators will receive a signal whenever a Train is present"); + scene.idle(90); + + scene.world.hideSection(redstone, Direction.NORTH); + scene.world.modifyTileNBT(util.select.position(stationPos), StationTileEntity.class, + c -> c.putBoolean("ForceFlag", false)); + scene.world.moveSection(trainElement, util.vector.of(0, 1, 0), 5); + scene.special.moveParrot(birb, util.vector.of(0, 2, 0), 5); + scene.idle(7); + scene.world.moveSection(trainElement, util.vector.of(4, 0, 0), 10); + scene.world.rotateSection(trainElement, 0, 180, 0, 10); + scene.special.moveParrot(birb, util.vector.of(6, 0, 0), 10); + scene.idle(12); + scene.world.moveSection(trainElement, util.vector.of(0, -1, 0), 5); + scene.special.moveParrot(birb, util.vector.of(0, -2, 0), 5); + scene.idle(25); + + target = target.add(10, 0, 0); + scene.overlay.showText(90) + .pointAt(marker.add(-.45, 0, 0)) + .colored(PonderPalette.RED) + .placeNearTarget() + .attachKeyFrame() + .text("Mind that a Station can only be approached from the indicated direction"); + scene.idle(70); + scene.overlay.showControls( + new InputWindowElement(target.add(0, 0.5, 0), Pointing.DOWN).withItem(AllItems.SCHEDULE.asStack()), 40); + scene.idle(6); + + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, bb, bb, 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, bb, bb.inflate(.45f, 0, .45f), 40); + scene.idle(15); + + bb2 = new AABB(marker, marker).move(.45, 0, 0); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, bb2, bb2.move(4, 0, 0), 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, bb2, bb2.expandTowards(4, 0, 0), 20); + scene.idle(15); + + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb, bb.inflate(.45f, 0, .45f), 45); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb2, bb2.expandTowards(4, 0, 0), 45); + scene.idle(20); + + scene.special.movePointOfInterest(util.grid.at(11, 2, 5)); + scene.idle(25); + + scene.world.hideIndependentSection(trainElement, Direction.EAST); + scene.special.hideElement(birb, Direction.EAST); + scene.idle(20); + + scene.world.multiplyKineticSpeed(util.select.everywhere(), .75f); + + scene.world.showSection(largeCog, Direction.UP); + scene.world.showSection(cog, Direction.DOWN); + scene.idle(3); + scene.world.showSection(belt, Direction.SOUTH); + scene.idle(15); + + scene.overlay.showText(70) + .pointAt(util.vector.topOf(stationPos) + .add(-.5, 0, 0)) + .placeNearTarget() + .attachKeyFrame() + .text("Stations can also be used to assign new Schedules automatically"); + scene.idle(40); + + trainElement = scene.world.showIndependentSection(train, Direction.DOWN); + scene.world.moveSection(trainElement, util.vector.of(-4, 0, 0), 0); + target = util.vector.centerOf(2, 3, 6); + birb = scene.special.createBirb(target, FacePointOfInterestPose::new); + scene.idle(10); + scene.world.moveSection(trainElement, util.vector.of(4, 0, 0), 20); + scene.special.moveParrot(birb, util.vector.of(4, 0, 0), 20); + scene.idle(10); + + scene.world.createItemOnBelt(util.grid.at(11, 1, 3), Direction.DOWN, AllItems.SCHEDULE.asStack()); + scene.idle(10); + scene.world.modifyTileNBT(util.select.position(stationPos), StationTileEntity.class, + c -> c.putBoolean("ForceFlag", true)); + + scene.idle(10); + scene.overlay.showControls( + new InputWindowElement(util.vector.topOf(stationPos), Pointing.DOWN).withItem(AllItems.SCHEDULE.asStack()), + 20); + scene.idle(30); + scene.effects.indicateSuccess(stationPos); + scene.idle(10); + target = util.vector.centerOf(6, 3, 6); + scene.overlay.showLine(PonderPalette.GREEN, util.vector.topOf(stationPos) + .add(0, -.125, .45), target.add(0, 0, -.5), 40); + scene.idle(10); + scene.effects.indicateSuccess(util.grid.at(6, 3, 6)); + scene.idle(25); + + scene.overlay.showText(80) + .pointAt(target) + .placeNearTarget() + .attachKeyFrame() + .text("The Schedule placed on a station will automatically copy itself to present trains"); + scene.idle(90); + + scene.world.moveSection(trainElement, util.vector.of(8, 0, 0), 30); + scene.special.moveParrot(birb, util.vector.of(8, 0, 0), 30); + scene.world.modifyTileNBT(util.select.position(stationPos), StationTileEntity.class, + c -> c.putBoolean("ForceFlag", false)); + scene.idle(10); + scene.world.hideIndependentSection(trainElement, null); + scene.special.hideElement(birb, null); + scene.idle(25); + + scene.overlay.showText(100) + .pointAt(util.vector.topOf(stationPos) + .add(-.5, 0, 0)) + .placeNearTarget() + .colored(PonderPalette.BLUE) + .text("As opposed to manual scheduling, drivers will not take the item with them"); + scene.idle(60); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instruction/FadeIntoSceneInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instruction/FadeIntoSceneInstruction.java index ab3ee8f7e..267345998 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instruction/FadeIntoSceneInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instruction/FadeIntoSceneInstruction.java @@ -25,7 +25,9 @@ public abstract class FadeIntoSceneInstruction e scene.addElement(element); element.setVisible(true); element.setFade(0); - element.setFadeVec(Vec3.atLowerCornerOf(fadeInFrom.getNormal()).scale(.5f)); + element.setFadeVec(fadeInFrom == null ? Vec3.ZERO + : Vec3.atLowerCornerOf(fadeInFrom.getNormal()) + .scale(.5f)); if (elementLink != null) scene.linkElement(element, elementLink); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instruction/FadeOutOfSceneInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instruction/FadeOutOfSceneInstruction.java index 249f54f73..fdd2589f0 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instruction/FadeOutOfSceneInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instruction/FadeOutOfSceneInstruction.java @@ -15,7 +15,7 @@ public class FadeOutOfSceneInstruction extends T public FadeOutOfSceneInstruction(int fadeOutTicks, Direction fadeOutTo, ElementLink link) { super(false, fadeOutTicks); - this.fadeOutTo = fadeOutTo.getOpposite(); + this.fadeOutTo = fadeOutTo == null ? null : fadeOutTo.getOpposite(); this.link = link; } @@ -27,7 +27,9 @@ public class FadeOutOfSceneInstruction extends T return; element.setVisible(true); element.setFade(1); - element.setFadeVec(Vec3.atLowerCornerOf(fadeOutTo.getNormal()).scale(.5f)); + element.setFadeVec(fadeOutTo == null ? Vec3.ZERO + : Vec3.atLowerCornerOf(fadeOutTo.getNormal()) + .scale(.5f)); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instruction/LineInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instruction/LineInstruction.java index 6e0d52184..89816814f 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instruction/LineInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instruction/LineInstruction.java @@ -2,7 +2,9 @@ package com.simibubi.create.foundation.ponder.instruction; import com.simibubi.create.foundation.ponder.PonderPalette; import com.simibubi.create.foundation.ponder.PonderScene; +import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams; +import net.minecraft.util.Mth; import net.minecraft.world.phys.Vec3; public class LineInstruction extends TickingInstruction { @@ -10,20 +12,27 @@ public class LineInstruction extends TickingInstruction { private PonderPalette color; private Vec3 start; private Vec3 end; + private boolean chaseEnd; - public LineInstruction(PonderPalette color, Vec3 start, Vec3 end, int ticks) { + public LineInstruction(PonderPalette color, Vec3 start, Vec3 end, int ticks, boolean chaseEnd) { super(false, ticks); this.color = color; this.start = start; this.end = end; + this.chaseEnd = chaseEnd; } @Override public void tick(PonderScene scene) { super.tick(scene); - scene.getOutliner() - .showLine(start, start, end) - .lineWidth(1 / 16f) + int ticksElapsed = totalTicks - remainingTicks; + float progress = Mth.clamp(ticksElapsed / 15f, 0, 1); + + OutlineParams line = chaseEnd ? scene.getOutliner() + .endChasingLine(start, start, end, progress, true) + : scene.getOutliner() + .showLine(start, start, end); + line.lineWidth(1 / 16f) .colored(color.getColor()); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderUI.java b/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderUI.java index 51ecfed07..4026ff41d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderUI.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderUI.java @@ -77,6 +77,7 @@ public class PonderUI extends NavigatableSimiScreen { public static final String PREVIOUS = LANG_PREFIX + "previous"; public static final String CLOSE = LANG_PREFIX + "close"; public static final String NEXT = LANG_PREFIX + "next"; + public static final String NEXT_UP = LANG_PREFIX + "next_up"; public static final String REPLAY = LANG_PREFIX + "replay"; public static final String SLOW_TEXT = LANG_PREFIX + "slow_text"; @@ -97,7 +98,9 @@ public class PonderUI extends NavigatableSimiScreen { private BlockPos copiedBlockPos; private LerpedFloat finishingFlash; + private LerpedFloat nextUp; private int finishingFlashWarmup = 0; + private int nextUpWarmup = 0; private LerpedFloat lazyIndex; private int index = 0; @@ -155,6 +158,9 @@ public class PonderUI extends NavigatableSimiScreen { finishingFlash = LerpedFloat.linear() .startWithValue(0) .chase(0, .1f, Chaser.EXP); + nextUp = LerpedFloat.linear() + .startWithValue(0) + .chase(0, .4f, Chaser.EXP); } @Override @@ -284,6 +290,7 @@ public class PonderUI extends NavigatableSimiScreen { lazyIndex.tickChaser(); fadeIn.tickChaser(); finishingFlash.tickChaser(); + nextUp.tickChaser(); PonderScene activeScene = scenes.get(index); extendedTickLength = 0; @@ -307,8 +314,11 @@ public class PonderUI extends NavigatableSimiScreen { } else extendedTickTimer--; - if (activeScene.getCurrentTime() == activeScene.getTotalTime() - 1) + if (activeScene.getCurrentTime() == activeScene.getTotalTime() - 1) { finishingFlashWarmup = 30; + nextUpWarmup = 50; + } + if (finishingFlashWarmup > 0) { finishingFlashWarmup--; if (finishingFlashWarmup == 0) { @@ -317,6 +327,12 @@ public class PonderUI extends NavigatableSimiScreen { } } + if (nextUpWarmup > 0) { + nextUpWarmup--; + if (nextUpWarmup == 0) + nextUp.updateChaseTarget(1); + } + updateIdentifiedItem(activeScene); } @@ -544,6 +560,7 @@ public class PonderUI extends NavigatableSimiScreen { float lazyIndexValue = lazyIndex.getValue(partialTicks); float indexDiff = Math.abs(lazyIndexValue - index); PonderScene activeScene = scenes.get(index); + PonderScene nextScene = scenes.size() > index + 1 ? scenes.get(index + 1) : null; boolean noWidgetsHovered = true; for (GuiEventListener child : children()) @@ -671,6 +688,20 @@ public class PonderUI extends NavigatableSimiScreen { ms.popPose(); } + boolean finished = activeScene.isFinished(); + + // Next up: + if (finished && nextScene != null && nextUp.getValue() > 1 / 16f) { + ms.pushPose(); + ms.translate(right.x + 10, right.y - 6 + nextUp.getValue(partialTicks) * 5, 400); + int boxWidth = (Math.max(font.width(nextScene.getTitle()), font.width(Lang.translate(NEXT_UP))) + 5); + renderSpeechBox(ms, 0, 0, boxWidth, 20, right.isHoveredOrFocused(), Pointing.DOWN, false); + ms.translate(0, -29, 100); + drawCenteredString(ms, font, Lang.translate(NEXT_UP), 0, 0, Theme.i(Theme.Key.TEXT_DARKER)); + drawCenteredString(ms, font, nextScene.getTitle(), 0, 10, Theme.i(Theme.Key.TEXT)); + ms.popPose(); + } + // Widgets renderables.forEach(w -> { if (w instanceof PonderButton button) { @@ -686,11 +717,12 @@ public class PonderUI extends NavigatableSimiScreen { right.fade() .startWithValue(scenes.size() - lazyIndexValue - 1); - boolean finished = activeScene.isFinished(); if (finished) right.flash(); - else + else { right.dim(); + nextUp.updateChaseTarget(0); + } // Tags List sceneTags = activeScene.getTags(); @@ -862,7 +894,7 @@ public class PonderUI extends NavigatableSimiScreen { int divotSize = 8; int distance = 1; int divotRadius = divotSize / 2; - Couple borderColors = Theme.p(highlighted ? Theme.Key.PONDER_HIGHLIGHT : Theme.Key.PONDER_IDLE); + Couple borderColors = Theme.p(highlighted ? Theme.Key.PONDER_BUTTON_HOVER : Theme.Key.PONDER_IDLE); Color c; switch (pointing) { diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java index b13b9be32..7803dbe84 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java @@ -26,10 +26,14 @@ public class LineOutline extends Outline { float prevProgress = 0; float progress = 0; + private boolean lockStart; + + public EndChasingLineOutline(boolean lockStart) { + this.lockStart = lockStart; + } @Override - public void tick() { - } + public void tick() {} public EndChasingLineOutline setProgress(float progress) { prevProgress = this.progress; @@ -46,8 +50,13 @@ public class LineOutline extends Outline { @Override public void render(PoseStack ms, SuperRenderTypeBuffer buffer, float pt) { - float distanceToTarget = 1 - Mth.lerp(pt, prevProgress, progress); - Vec3 start = end.add(this.start.subtract(end) + float distanceToTarget = Mth.lerp(pt, prevProgress, progress); + if (!lockStart) + distanceToTarget = 1 - distanceToTarget; + Vec3 start = lockStart ? this.end : this.start; + Vec3 end = lockStart ? this.start : this.end; + + start = end.add(this.start.subtract(end) .scale(distanceToTarget)); renderCuboidLine(ms, buffer, start, end); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java index e94edaeb4..c6f061cec 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java @@ -40,9 +40,9 @@ public class Outliner { return entry.outline.getParams(); } - public OutlineParams endChasingLine(Object slot, Vec3 start, Vec3 end, float chasingProgress) { + public OutlineParams endChasingLine(Object slot, Vec3 start, Vec3 end, float chasingProgress, boolean lockStart) { if (!outlines.containsKey(slot)) { - EndChasingLineOutline outline = new EndChasingLineOutline(); + EndChasingLineOutline outline = new EndChasingLineOutline(lockStart); outlines.put(slot, new OutlineEntry(outline)); } OutlineEntry entry = outlines.get(slot); @@ -127,7 +127,8 @@ public class Outliner { // Maintenance public void tickOutlines() { - Iterator iterator = outlines.values().iterator(); + Iterator iterator = outlines.values() + .iterator(); while (iterator.hasNext()) { OutlineEntry entry = iterator.next(); entry.tick(); diff --git a/src/main/resources/assets/create/lang/default/tooltips.json b/src/main/resources/assets/create/lang/default/tooltips.json index 10dff70c3..870b1f292 100644 --- a/src/main/resources/assets/create/lang/default/tooltips.json +++ b/src/main/resources/assets/create/lang/default/tooltips.json @@ -212,6 +212,13 @@ "item.create.copper_backtank.tooltip.behaviour1": "Provides _Pressurized_ _Air_ to Equipment that requires it.", "item.create.copper_backtank.tooltip.condition2": "When placed, Powered by Kinetics", "item.create.copper_backtank.tooltip.behaviour2": "_Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + + "block.create.placard.tooltip": "PLACARD", + "block.create.placard.tooltip.summary": "_Frame_ your _items_ in brass using this fancy wall panel. Safe for contraptions!", + "block.create.placard.tooltip.condition1": "When R-Clicked with Item", + "block.create.placard.tooltip.behaviour1": "_Adds_ the held _item_ to the Placard. _Emits_ a brief _Redstone_ signal if a matching item was present already.", + "block.create.placard.tooltip.condition2": "When Punched", + "block.create.placard.tooltip.behaviour2": "_Removes_ the current _item_ in the frame.", "block.create.flywheel.tooltip": "FLYWHEEL", "block.create.flywheel.tooltip.summary": "_Embellish_ your _Machines_ with this imposing Wheel of Brass.", diff --git a/src/main/resources/assets/create/ponder/train_observer.nbt b/src/main/resources/assets/create/ponder/train_observer.nbt new file mode 100644 index 0000000000000000000000000000000000000000..3eb076554e3380b6efd0cf1663427bd49d32e45e GIT binary patch literal 1430 zcmZXPeLNF*9LHBo9JTTg%SFZ}MP^gvDdy%ym{STfZm!Ei9wHB+T%MwhJk!=R4>8xU zE%R^^wLHsHhNkk+K>-YM;KA-pd`%_Pq25isfFxl~{Dq5w(w@H88 z({yi;)sa%7gl(R2sHL=UFgc%YDVc>m8sdIeKrru)@jZ!5&ruWopvW+fi?PJ5qeZ)K z%1SD0VZ1+06Y42r<(g%ASbGd#WYqt1^Yh0ZSh@`1PPs^8Mjl0+<(ZkUq-n}mJB0O; zA#Iuvj+PQvLW!ab(&W#eIFJ+;swrCW&Y zO!D(Bh7>o1SM1%Wwp|u%xxehRKUw2h;+^^zZ@=RIA-7H27i!AxjsFjF$Mo%*xts-y z>PP)WZJGD|N2Vg*rCOwd-QW!1lskODHH_v3N^FzSB^3h|u<$IPg2xqOKZD;>k`wbm ziE1>kFR#TgRwZ)oYbCB3T~MTn8EP>MNWVeyVK{dS0St{;StTz%U z)fgGa@iAE#D32ASnXE5dVg(E^pBa&>(ifY0adUsu-_oNSQr3n7f5gD>`~jj-v;WNA07Uxdnj{yR2b1_AS$XW)4GKyxSv41QL6S zdZ}FJJ$iANRct(q6+8%taGmxUER?1q=Ch+ZjdVC`vD%b#fjYzYA@9HSZR-?_O`wOgDWbLNO^8+hsUOPmHFlU5)*VL zX7z)(@JvQm)V*V3G;Czl%Q@1&@c8Xm3(D8@2N1{xwPKG<=yB@=Cz3(x1=Hl2uJDU(LK9GTC%JIDAaE zUccL(SwM9)Fz<>Mz8jxwIF(wOS2TV;!R9v-H`l+HIJS7r_9^0@MM`IPI4QSKW`ERL zmCZQtwJw?1GZchs*BZ}(_*RQ7HMD}ePcEjUm8xXf1Tc)f6kzg z?S5F(Fi+pFuXECt6cPhvN3Mp3Wn4*FC6QH@5joY;(2Ft7H+2!my)L7Iy`lp~0AY_$ zsfAcrdbm+y#SYCt$2CF)dYs$Gk{c7DSx)6<6jvY#0K4dOD6hgX<*p~mm+<+1e^O?@ zeneTTY_F%2feZS_OPe+m(@96h8Y77r@$Ear9YUl>eQ3POJ4s z!IZPjF8sEmzhF0}&u>IWPTXoxsx!U5(O2+52TK`=tg0Kesa2c@UpC!c$Y{bbJqH_3 ztMvpD*}XKlle((5q(X76TX0<+_uMtM*{hjcN0+nOf=oS~#uK?S<|P-bhTc`n&(0Z+ zl$qpX2MrzR6voA(H~pL^W~`QLqG3P_cZ5ov9hDdpOLTLoFk){R+dgeAO6F##9HM{DG}x6kIChD)9y=x2s-^2D9NC z`>(E^Z;x0%z&Wg|R7sArTe15b5^LW2>gE3I?umY*#bM0Wg_`AOcc_{75idwqGJ5pi zvl@%n_|!}rl@lu&3pEKXnVcN2D3f@mNmpxT0Yx2*&gY|)3>GDbuMX)G9`!)at5)|x z-5~_2pioGwE$pm(-&nwun)sPo_HPg;dD^d`A&j2S`=wX_RTnJtm zdoP(yR+eTBjgA6ThyA<1NpcH@0T9}+yB6WzI~sOqmk^#R zkv8%zWv4t9OYZi$Ta0(oc09&i>fZ-Ohb`@S|9Zy%wopR;Zm{|Hf%zfd1@>6Uo+#p@ z^&bKhf)>Ja&YdQ_^vw!#aI{GaMMJPsLFm0#hy3T8v&lUPYL1As3)Q5OX^Ud(M#4*r z)q{j|2*Fm}MJu;fxqmz(D2&l`o=XKLzrON0Z`d?zt3VjqxHITfR{2%9#$Z^YL1|KX zZk2~3Zcgt;v8bQrNv_U_v2A*RWt6)u=M9JJqD$_Z0BL~^Efp?n&x=cin(YO#iD}{H z3KWTXQC0S80^`Rf`H5b8>t;st4yn*v_Jitb{%+f;PQi$-=DTAw_6E|A7ko>ggQS~} zPanj&F0phlog3(lWt`&nIh>9h&NAwpaA6@b~ zzBJ!4JT2Krw-cd}VQO@?{2#r#i_zj_1{S`In1kjJYo?{6bOvH7k1NIR9$`PvCB+TMl!=o+fk5!zry99svGQ1O*^bIrr6M4=%#)3W4bnMN zJbiemYPK2gr3DnDkg_`|4hq-TMu>oB%z$eJ<7-13=0ASW1@wn zIO?Y0qk(K^GHRt^^q($W{XZ7e$mspV{+FjiGdIsj(izTS@TH@jk2isi;n+FiHrXNc zEMCPsXvET7^={wRt&z(oF?lFjAaE@d*l%Tw*`CrQ=8r@3B$pLE)z?8jgF|H*@y(_3 zQqae>CUSTD@f(f|-W-TDbKh``WD#a~&rFUBJ7;=%<&!fQYTS0f zlDoZ^`n-+WI_;cj(G4(P1)8ky=cRArvKN{RCyn(6;!+MTuU{j!e*h7RR!%e3+Y<~> zD)?8azXU`mTQVFjiQgnV;<&-*HAT?tARqtz&Ba^(M!G-8d5hk1pIadXc=C4RB>3vB z!rFU7dexT~$88VMP0D1=h`nFERlyubIUNhb;OT<#`ip-)r7ryTyh_nUTl;TI{YdjK zUbBlf`jK`F*Rnw`SLxj2lxP#MLK_z&rIdWBH^dx|NcFjy_m-97e7AEg#DfU+$WAun z_n|C~KeiJGl4ra?dCfw%x@T*3uPagriB*i>+*FAK*ZLjo# zXK#R*Ae9nU5*-*AotOBSu8$~vfYV^M^c7mXF|(x^ggw zq2)4{M9O7mm1(2N%yrqA+lbzMhtk)r6x6Ln0 z;lnkIjDu0vb{OBhB6KS5kgqbdJ>uqUsPG*)h)XR;Z0Sy!_Ih{1eX@3_%Gw0|IzbyR zcecsbX$7d~Zu_J;cP94Li!FGnvntBoo%?AteA;4gftPY8B8k5arX()hp4grTdc!d9 zjz>^155L!LclA#r23$;3RR%?&Jl4RLyn@O`N9ppn4}tFkcPy&RAW&V=kF%qfPd5f z_t(fF_hk&?QyC+8*yltvR^z*!DTr-uy` zi-g{%d_@kd!9)>rI62^A;10$@K7>`E^M%WDI-xr0u8F+mqOoj8{s8Tk0Of_!NPC8|@4 zb_eU~!4IkJkR?+iNIh;oX|c`M(~P#-6}&nsfW*!7g=Dae{dLZSN&i-IS9*_){WP+s zrqBr6uaatRs*hEvd+s<=h{O8boQ}P_Yq=`IoJhIe;`A8BL|YW#9FK2@cM(?-UCt42 z*DM5ZqivX;yZgN9a7%mo^t&5p7Aphhl|&7^$C-+B+h-Ht35X`G#AXA=pLbs1;TU*! zBtA#cGRgp!p0Cuz)uM&!if>KesHxq#oR@a^JQr}#`L{2J>v19qC&D;7e4&5bVL2x{ ze3`W0A_$xoy>Q;>XG`b^uCCd** z0NFjo@JdDpids3xGBPomt(8Ys@bdDsxEX#;W$3*Tv<6~l<$COz`cm$($CLR$Rsn1e z&Q&ArcrPe5*bIpo@Q1_@HqWu&zhJnisnINegJz|Ltv5?%olQR&5QR=NeJRD+it%Ej z>rA?F49cC-3xpHx+iGqSVKAJA^_3$>Q)#E$M4;cHE_q zEl=|J#n9Cu%_z3G@37;JUI+=LdWgvEFU*e|{vZMcR=cQf(@6cXc*V=`VQk?>b3)5j z?d+76Vx5OA9!hOjGubg~jNmO?QB%~uZ2VL}-A{b0u-mL|1DFatlFd+oL!Rju*XpwU z676jgKjwjyoJCKWRV6}H*~SH3-EP=NLb9vkWq7#2EO1fZ2w0i6ftO&Fm0AdN+#9)R z(V4=7Tsa9TXyM<17&aD5j3Mx~`ryA*3j&vyCIJI*VG2q)HtjjvlnarW)3<*YWW;KN`NzAHg=zz#|46(a6zan{_TyC$ zeFZ?V(~)-XTBG1_IJKs0w8X?zPcKak#c)$i;$nll6HQ5OVVRxAP~++O-B}hmcE?^q>9V>m$3p>33UKR#0m`kBe#y}~nFwTp zFi?i>p$S!Z5G{U8cz5+ClXNs*@A;IEvvibl~feE5$2Mr4sBx1#-^1o;QXeih0na^>* z(D*XSXmfz5uQcv}>HrUB{@O1$N?+}%>h{_ON0n>RB`bnYTi}_qsB)$cFkY! zssUn}DcXb*RQpHL~vHr~At$N{}5uZrc@V zoCl}f@BQ1+aiR)FI~6h|9h6#K1m7x`vtJ!ANV=mOTj0OVC-+$Fj$yaCgwjqf&sY!3 ztsC;1I%3o3i%E4)r}Sd_A>BLmi7-Bx+@9tUxErLL7)@z zs@~-$EYj=j5IZTxdq{kii8ebd$SQt|r5CVw7L%|yF|Cm?IMicNL&*tgm?-~n*LKoV zGyHnfm`7y;zT@zOM&)zSH6wy9XG-bb6ZWk~yyxy`tf z%c-T)Uqexg&KnQBszm~j<2Pbd}q`Gd*`)6x^ba>jaZrEtE+1yC%#|s-pm+G+N0m>j9BO6 zTE@j&TJ^KmN!(#fs#{gSU8_0_TrZ+`QJ+Hw?$&VJi{Di zL&FTb&tM&SF_y<-Lcg5|NoAt73=4B~%fkET3NB}cyZm-Ca;bFJE5|k1fK18rUa}jR zv#m-hWm5-Ahofy1%S`v2z@c6hW1hBQPe?*+ueuej-|ad&Cqj;1ITfMV_(lQM;-;uy zGSi1pGnq`&0DWdw6tT+Xy9^6lwx0NI>=C}{+`#nsG_{zv^!)8pNo+4s;xuoQZ5XHD z5_EzvAKX>57+bb!v)kGebV_e50^5f$S+U zu@ACj&LpTTkvWhdv$ONy%^Np7E)_>>0CXgSr>mdKI;Vst06b-I>;M1& delta 652 zcmV;70(1Sl0+sWrN&8c}eO(3Rk-LjQt7^CuLs>kckN3&mX*0}3g& z3`{8riWa&UtzRh4qVLUSuqzkoBFwANyLun@Ud}o9+*q|*ZGQ?O2!ep?A!Vq}*=!0x zsZ-ZDU^pi*=01!g3 zzki~TnVE;=`+s^_T(pRX;pHvP0QLGVQR67)=F3c%N&r~aN{hnG%nMw%L3(PC!axRq zFP4pzAyS6qayf($7=}i^uNU7x#WWHb0sznR0Em^#<>pQP z#o`bEJ*oTZ?daf?`M0lFUs}U;8vq!F)|x_eF-^0Td~~E}B$H_@Yef}BegV+5PU6{Y zs%`GcWSY%djoRiGXD1hcql(j0gQU6>_+B3U&Q41MfStx39d|Xx#-8E($DEy9kjv%T zxX#U&X@B