From d11fd6dc48a4500cac99e7e1bda0e84237a233a9 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 23 Jun 2022 03:26:16 +0200 Subject: [PATCH] Down the Checklist, Part III - Contraptions no-damage ticks after relocation now get sent to other players - Fixed signal overlay rendering twice when ctrl is held - The track system now sends checksums and id lists to prevent de-syncs after incremental changes - Fixed pig spawner in blaze burner scene - Fixed trains not processing graph migrations when graph was not present yet - Fixed previous train name in a station not being serialised - Fixed z-fighting between bogeys and adjacent blocks - Added ponder scenes for the Train Track - Fixed flywheel item model - Added flywheel tooltip - Display Board touchups --- src/generated/resources/.cache/cache | 32 +- .../resources/assets/create/lang/en_us.json | 26 +- .../assets/create/lang/unfinished/de_de.json | 22 +- .../assets/create/lang/unfinished/es_cl.json | 22 +- .../assets/create/lang/unfinished/es_es.json | 22 +- .../assets/create/lang/unfinished/fr_fr.json | 28 +- .../assets/create/lang/unfinished/it_it.json | 28 +- .../assets/create/lang/unfinished/ja_jp.json | 22 +- .../assets/create/lang/unfinished/ko_kr.json | 22 +- .../assets/create/lang/unfinished/nl_nl.json | 28 +- .../assets/create/lang/unfinished/pl_pl.json | 22 +- .../assets/create/lang/unfinished/pt_br.json | 28 +- .../assets/create/lang/unfinished/pt_pt.json | 28 +- .../assets/create/lang/unfinished/ro_ro.json | 22 +- .../assets/create/lang/unfinished/ru_ru.json | 28 +- .../assets/create/lang/unfinished/zh_cn.json | 22 +- .../assets/create/lang/unfinished/zh_tw.json | 28 +- .../ContraptionRelocationPacket.java | 38 ++ .../OrientedContraptionEntity.java | 9 +- .../trains/GlobalRailwayManager.java | 8 +- .../content/logistics/trains/TrackGraph.java | 37 +- .../logistics/trains/TrackGraphPacket.java | 3 +- .../trains/TrackGraphRequestPacket.java | 44 ++ .../trains/TrackGraphRollCallPacket.java | 83 +++ .../logistics/trains/TrackGraphSync.java | 69 +- .../trains/TrackGraphSyncPacket.java | 25 +- .../trains/TrackGraphVisualizer.java | 2 +- .../entity/CarriageContraptionEntity.java | 4 +- .../trains/entity/TrainRelocationPacket.java | 9 +- .../display/FlapDisplayRenderer.java | 10 +- .../edgePoint/station/StationTileEntity.java | 10 +- .../trains/track/StandardBogeyBlock.java | 2 + .../foundation/networking/AllPackets.java | 6 + .../ponder/content/PonderIndex.java | 6 + .../ponder/content/trains/TrackScenes.java | 342 ++++++++++ .../ponder/element/TextWindowElement.java | 1 + .../assets/create/lang/default/tooltips.json | 11 +- .../models/block/display_board/block.json | 32 +- .../models/block/display_board/item.json | 48 +- .../create/models/block/flywheel/flywheel.obj | 646 ++++++++++-------- .../create/ponder/empty_blaze_burner.nbt | Bin 481 -> 491 bytes .../create/ponder/train_track/placement.nbt | Bin 0 -> 2006 bytes .../create/ponder/train_track/portal.nbt | Bin 0 -> 1251 bytes .../textures/block/flap_display_front.png | Bin 226 -> 217 bytes .../textures/block/flap_display_inside.png | Bin 0 -> 275 bytes .../textures/block/flap_display_side.png | Bin 501 -> 307 bytes .../textures/block/flap_display_top.png | Bin 0 -> 260 bytes 47 files changed, 1435 insertions(+), 440 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRelocationPacket.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphRequestPacket.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphRollCallPacket.java create mode 100644 src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackScenes.java create mode 100644 src/main/resources/assets/create/ponder/train_track/placement.nbt create mode 100644 src/main/resources/assets/create/ponder/train_track/portal.nbt create mode 100644 src/main/resources/assets/create/textures/block/flap_display_inside.png create mode 100644 src/main/resources/assets/create/textures/block/flap_display_top.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 868015d25..3064da771 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 -57a2f5cfc09aac190e97fb9f2ca42b304fab5680 assets/create/lang/en_us.json -5dbd68efd854c32656011d3c3cd120a593a19bf8 assets/create/lang/unfinished/de_de.json -7be6eb18aef39f3f8221392653a3882a627233dd assets/create/lang/unfinished/es_cl.json -ecde05c35a44688bde60f641e7072b634c9e1d5b assets/create/lang/unfinished/es_es.json -dbbcf41cd1f79d7c2507219e0dc2b31638084299 assets/create/lang/unfinished/fr_fr.json -6afdfa1b7b94bc00b2ce9471d88290c44077a66f assets/create/lang/unfinished/it_it.json -18327c2775e14b3f9963718851b96a38f0c1da5b assets/create/lang/unfinished/ja_jp.json -71b6e7609551a6c1dcd74904ec08b4658e480593 assets/create/lang/unfinished/ko_kr.json -3d68851099b7a3da153b5348122554a868942274 assets/create/lang/unfinished/nl_nl.json -492b259e69a13d91e092f81ad2629ab0db9d0340 assets/create/lang/unfinished/pl_pl.json -13abb3643e0341ace3f95074215fe3d37482c74b assets/create/lang/unfinished/pt_br.json -273c495ef88363bc685d94e80b9bd09c4fe5cd16 assets/create/lang/unfinished/pt_pt.json -21c869ff5d2f076aa135c30a8c6de32cfd3529b0 assets/create/lang/unfinished/ro_ro.json -0a3f87d04dd6bd672039537df9710ce12ea84028 assets/create/lang/unfinished/ru_ru.json -f91a984ecda39e0dfdab621467289cfd48ad90de assets/create/lang/unfinished/zh_cn.json -19c9edd37eb2f911a60f815ff699766a6b5127a7 assets/create/lang/unfinished/zh_tw.json +2fd1ef9375af6d068257f31cfc5e708f122d8360 assets/create/lang/en_us.json +11c5a3201a3c15c342c9f68d33ca460d2f1fde68 assets/create/lang/unfinished/de_de.json +ba66d36b4a9a67a8f0e826aa9c3fb3a31d12959f assets/create/lang/unfinished/es_cl.json +704a322cc044ca04c719a1a08b2321ded2489ef6 assets/create/lang/unfinished/es_es.json +6a3d4587e6b0e245462630acad6940f3349346bd assets/create/lang/unfinished/fr_fr.json +9348d8d8a4d74e550f225764bd76a24293cf95ef assets/create/lang/unfinished/it_it.json +fc4faa5359f05cce4b940635029def93a0a3f1d5 assets/create/lang/unfinished/ja_jp.json +832b57bcb0bf7fc9e81c52e32f7042d7c94bc968 assets/create/lang/unfinished/ko_kr.json +5ac1987c570fd90bf2ef57cbfe12bb4379c9c779 assets/create/lang/unfinished/nl_nl.json +fd78059dc58f805710e83fa5446ef084fc06734c assets/create/lang/unfinished/pl_pl.json +22965c458689766a8d23e1bd5f957b4e2f4eb9b2 assets/create/lang/unfinished/pt_br.json +06e4ab83c9da087ea64e55706a471cd2ba99c11e assets/create/lang/unfinished/pt_pt.json +4d3f2a22c68b35bd8a20ce8d2b7f411bc388db84 assets/create/lang/unfinished/ro_ro.json +fb2c526a98c7f0af30b4f62acad302ea2ea82580 assets/create/lang/unfinished/ru_ru.json +e0fbf7132c91fbce3dd42559518f43ef965c45e8 assets/create/lang/unfinished/zh_cn.json +b37921c2b8d6320d17f6070ac5a426f3fd014784 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 82169a8f5..068ab4cfd 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1953,9 +1953,9 @@ "block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", "item.create.creative_blaze_cake.tooltip": "CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "_Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip.summary": "A very special treat for your _Blaze Burners_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "When Used", + "item.create.creative_blaze_cake.tooltip.behaviour1": "_Cycles_ a Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", @@ -2003,6 +2003,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "Starts spinning.", + "item.create.diving_boots.tooltip": "DIVING BOOTS", "item.create.diving_boots.tooltip.summary": "A pair of _heavy_ _boots_, allowing for better traversal of the Ocean floor.", "item.create.diving_boots.tooltip.condition1": "When Worn", @@ -2632,6 +2637,16 @@ "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", + "create.ponder.placement.header": "Placing Train Tracks", + "create.ponder.placement.text_1": "A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "Then place or select a second track", + "create.ponder.placement.text_4": "Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "Contraption Fluid Exchange", "create.ponder.portable_fluid_interface.text_1": "Fluid Tanks on moving contraptions cannot be accessed by any pipes", "create.ponder.portable_fluid_interface.text_2": "This component can interact with fluid tanks without the need to stop the contraption", @@ -2655,6 +2670,11 @@ "create.ponder.portable_storage_interface_redstone.header": "Redstone Control", "create.ponder.portable_storage_interface_redstone.text_1": "Redstone power will prevent the stationary interface from engaging", + "create.ponder.portal.header": "Tracks and the Nether", + "create.ponder.portal.text_1": "Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "Controlling signals using the Powered Latch", "create.ponder.powered_latch.text_1": "Powered Latches are redstone controllable Levers", "create.ponder.powered_latch.text_2": "Signals at the back switch it on", 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 e217b5fb7..ed1bf3e1d 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: 1177", + "_": "Missing Localizations: 1194", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "TAUCHSCHUHE", "item.create.diving_boots.tooltip.summary": "Ein Paar _schwere_ _Schuhe_, welches es erlaubt, besser auf dem Grund des Ozenas zu reisen.", "item.create.diving_boots.tooltip.condition1": "Wenn getragen", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", 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 6868315f4..cd03de2c7 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: 827", + "_": "Missing Localizations: 844", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "BOTAS DE BUCEO", "item.create.diving_boots.tooltip.summary": "Un par de _botas_ _pesadas_, permitiendo un mejor recorrido del suelo oceánico.", "item.create.diving_boots.tooltip.condition1": "Al equiparlas", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "Intercambio de Fluidos en Contrapciones", "create.ponder.portable_fluid_interface.text_1": "No se puede acceder a los Tanques de Fluido de una Contrapción en movimiento por ninguna tubería", "create.ponder.portable_fluid_interface.text_2": "Este componente puede interactuar con los Tanques de Fluidos sin necesidad de detener la contrapción.", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "Control de Redstone", "create.ponder.portable_storage_interface_redstone.text_1": "La Redstone evitará que la interfaz estacionaria se active", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "Control de señales usando el Cerrojo de Redstone", "create.ponder.powered_latch.text_1": "Los Cerrojos de Redstone son palancas controlables de Redstone", "create.ponder.powered_latch.text_2": "Las señales en la parte trasera lo encienden", 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 2836cea4b..15ac12019 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: 491", + "_": "Missing Localizations: 508", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "BOTAS DE BUCEO", "item.create.diving_boots.tooltip.summary": "Un par de _botas_ pesadas, que permiten atravesar mejor el suelo del océano.", "item.create.diving_boots.tooltip.condition1": "Cuando se llevan puestas", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "Interfaz de fluidos portátil", "create.ponder.portable_fluid_interface.text_1": "No se puede acceder a los depósitos de fluidos de los artefactos en movimiento por ninguna tubería", "create.ponder.portable_fluid_interface.text_2": "Este componente puede interactuar con los depósitos de fluidos sin necesidad de detener el artefacto", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "Interfaz de almacenamiento portátil controlada por redstone", "create.ponder.portable_storage_interface_redstone.text_1": "La energía de redstone impedirá que las interfaces de almacenamiento portátil se conecten", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "Controlar señales mediante la palanca motorizada", "create.ponder.powered_latch.text_1": "Las palancas motorizadas son palancas controlables por redstone", "create.ponder.powered_latch.text_2": "Las señales en la parte trasera la encienden", 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 34756edde..bf4a116b6 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: 1983", + "_": "Missing Localizations: 1996", "_": "->------------------------] Game Elements [------------------------<-", @@ -1954,9 +1954,9 @@ "block.create.creative_crate.tooltip.behaviour1": "Tout ce qui _extrait_ de ce conteneur aura une _alimentation illimitée_ de l'objet spécifié. Les objets _insérés_ dans cette caisse seront _éliminés_.", "item.create.creative_blaze_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for your _Blaze Burners_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: When Used", + "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Cycles_ a Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "UNLOCALIZED: CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "UNLOCALIZED: A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "Fournit une _force_ _de_ rotation_ à un engin connecté basé sur la force et la vitesse du générateur.", + "item.create.diving_boots.tooltip": "UNLOCALIZED: DIVING BOOTS", "item.create.diving_boots.tooltip.summary": "UNLOCALIZED: A pair of _heavy_ _boots_, allowing for better traversal of the Ocean floor.", "item.create.diving_boots.tooltip.condition1": "UNLOCALIZED: When Worn", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", 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 4e2c6fe99..579b8399f 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: 1754", + "_": "Missing Localizations: 1767", "_": "->------------------------] Game Elements [------------------------<-", @@ -1954,9 +1954,9 @@ "block.create.creative_crate.tooltip.behaviour1": "Qualsiasi _estrazione_ da questo contenitore fornisce _provviste infinite_ dell'oggetto in questione. Gli oggetti _inseriti_ in questo baule verranno _svuotati_.", "item.create.creative_blaze_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for your _Blaze Burners_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: When Used", + "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Cycles_ a Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "BINARIO DI CONTROLLO", "block.create.controller_rail.tooltip.summary": "Un _binario alimentato unidirezionale_ capace di _controllare precisamente_ la _velocità di movimento_ di un carrello da miniera.", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "Fornisce la _forza_ _di_ _rotazione_ a una macchina connessa in base alla forza e alla velocità del generatore.", + "item.create.diving_boots.tooltip": "UNLOCALIZED: DIVING BOOTS", "item.create.diving_boots.tooltip.summary": "UNLOCALIZED: A pair of _heavy_ _boots_, allowing for better traversal of the Ocean floor.", "item.create.diving_boots.tooltip.condition1": "UNLOCALIZED: When Worn", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", 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 9990850f8..ee340c188 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: 493", + "_": "Missing Localizations: 510", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,11 @@ "item.create.copper_backtank.tooltip.condition2": "設置して動力を供給したとき", "item.create.copper_backtank.tooltip.behaviour2": "_圧縮空気_を_集めます_。速度は回転速度によって決まります。", + "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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "潜水ブーツ", "item.create.diving_boots.tooltip.summary": "海底を歩けるようになる_重いブーツ_。", "item.create.diving_boots.tooltip.condition1": "装備したとき", @@ -2633,6 +2638,16 @@ "create.ponder.piston_pole.text_1": "ポールが無いとメカニカルピストンは動きません", "create.ponder.piston_pole.text_2": "後ろに付けたポールの長さによって、伸び縮みする長さが決まります", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "からくり液体交換", "create.ponder.portable_fluid_interface.text_1": "移動しているからくりの液体タンクは、どんなパイプでも出し入れできません", "create.ponder.portable_fluid_interface.text_2": "この機械は、からくりをブロックに戻すことなく液体を出し入れできます", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "レッドストーンによる制御", "create.ponder.portable_storage_interface_redstone.text_1": "レッドストーン信号を受けている間、設置されたインターフェースは接続を行いません", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "パワードラッチによる信号制御", "create.ponder.powered_latch.text_1": "パワードラッチはレッドストーン信号で制御できるレバーです", "create.ponder.powered_latch.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 5cbb793be..47b268bd4 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: 493", + "_": "Missing Localizations: 510", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,11 @@ "item.create.copper_backtank.tooltip.condition2": "설치되고 동력으로 회전될 때", "item.create.copper_backtank.tooltip.behaviour2": "동력 속도에 따라 _공기_를 _모읍니다_.", + "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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "DIVING BOOTS", "item.create.diving_boots.tooltip.summary": "해저를 돌아다니기에 적합한 _무거운_ _부츠_ 한 켤레입니다.", "item.create.diving_boots.tooltip.condition1": "착용했을 때", @@ -2633,6 +2638,16 @@ "create.ponder.piston_pole.text_1": "연장 축이 없으면, 기계식 피스톤은 움직일 수 없습니다.", "create.ponder.piston_pole.text_2": "연장 축의 수가 곧 피스톤이 연장할 수 있는 거리입니다.", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "구조물 장치의 액체 교환", "create.ponder.portable_fluid_interface.text_1": "움직이는 구조물의 액체 탱크는 파이프와 연결되지 않습니다.", "create.ponder.portable_fluid_interface.text_2": "액체 인터페이스는 장치를 멈추지 않아도 탱크와 상호작용할 수 있습니다.", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "레드스톤 설정", "create.ponder.portable_storage_interface_redstone.text_1": "레드스톤 신호를 받으면 인터페이스가 작동하지 않습니다.", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "레드스톤 걸쇠 사용하기", "create.ponder.powered_latch.text_1": "레드스톤 걸쇠는 설정 가능한 레버입니다.", "create.ponder.powered_latch.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 13febd5e1..bf30e5d58 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: 2327", + "_": "Missing Localizations: 2344", "_": "->------------------------] Game Elements [------------------------<-", @@ -1954,9 +1954,9 @@ "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", "item.create.creative_blaze_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for your _Blaze Burners_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: When Used", + "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Cycles_ a Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "UNLOCALIZED: CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "UNLOCALIZED: A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "UNLOCALIZED: DIVING BOOTS", "item.create.diving_boots.tooltip.summary": "UNLOCALIZED: A pair of _heavy_ _boots_, allowing for better traversal of the Ocean floor.", "item.create.diving_boots.tooltip.condition1": "UNLOCALIZED: When Worn", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", 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 30eed8fd1..774addfee 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: 866", + "_": "Missing Localizations: 883", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "BUTY DO NURKOWANIA", "item.create.diving_boots.tooltip.summary": "Para _ciężkich_ _butów_, pozwalająca na efektywniejsze _przemierzanie_ _dna_ _oceanu_.", "item.create.diving_boots.tooltip.condition1": "Kiedy na stopach", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "Przekazywanie cieczy z ruchomych maszyn do stojących bloków", "create.ponder.portable_fluid_interface.text_1": "Zwyczajne rury nie mają dostępu do zbiorników z ruchomych maszyn", "create.ponder.portable_fluid_interface.text_2": "Ten blok pozwala na transport cieczy bez potrzeby zatrzymywania maszyny", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "Kontrola Redstonem", "create.ponder.portable_storage_interface_redstone.text_1": "Zasilenie Redstonem zapobiegnie połączeniu się interfejsów", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "Kontrola sygnału z użyciem zaawansowanego zasilanego przełącznika", "create.ponder.powered_latch.text_1": "Zaawansowane zasilane przełączniki to dźwignie, które można kontrolować przez Redstone", "create.ponder.powered_latch.text_2": "Sygnały otrzymane z tyłu włączają je...", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 5acf1dbf6..05a027e2c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1360", + "_": "Missing Localizations: 1377", "_": "->------------------------] Game Elements [------------------------<-", @@ -1954,9 +1954,9 @@ "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", "item.create.creative_blaze_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for your _Blaze Burners_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: When Used", + "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Cycles_ a Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "UNLOCALIZED: CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "UNLOCALIZED: A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "UNLOCALIZED: DIVING BOOTS", "item.create.diving_boots.tooltip.summary": "UNLOCALIZED: A pair of _heavy_ _boots_, allowing for better traversal of the Ocean floor.", "item.create.diving_boots.tooltip.condition1": "UNLOCALIZED: When Worn", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", 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 183c2e0c8..32cefe02c 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: 2036", + "_": "Missing Localizations: 2053", "_": "->------------------------] Game Elements [------------------------<-", @@ -1954,9 +1954,9 @@ "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", "item.create.creative_blaze_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for your _Blaze Burners_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: When Used", + "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Cycles_ a Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "UNLOCALIZED: CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "UNLOCALIZED: A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "UNLOCALIZED: DIVING BOOTS", "item.create.diving_boots.tooltip.summary": "UNLOCALIZED: A pair of _heavy_ _boots_, allowing for better traversal of the Ocean floor.", "item.create.diving_boots.tooltip.condition1": "UNLOCALIZED: When Worn", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", 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 5a09af010..081bdb480 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: 494", + "_": "Missing Localizations: 511", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "BOCANCI DE SCUFUNDARE", "item.create.diving_boots.tooltip.summary": "O pereche de _bocanci_ _grei_, permițând traversare mai bună a fundului Oceanului.", "item.create.diving_boots.tooltip.condition1": "Când sunt purtați", @@ -2633,6 +2638,16 @@ "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", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "Schimb De Fluide în Invenție", "create.ponder.portable_fluid_interface.text_1": "Rezervoarele De Fluid pe invenții mișcătoare nu pot fi accesate de nicio conductă", "create.ponder.portable_fluid_interface.text_2": "Acest component oate interacționa cu rezervoare de fluid fără nevoia de a opri invenția", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "Control Redstone", "create.ponder.portable_storage_interface_redstone.text_1": "Puterea redstone va preveni interfața staționară de la angajare", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "Controlarea semnalelor folosind Maneta Alimentată", "create.ponder.powered_latch.text_1": "Manetele Alimentate sunt Manete controlabile cu redstone", "create.ponder.powered_latch.text_2": "Semnalele din spate o pornesc", 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 a6dbcb863..ab6b499d6 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: 871", + "_": "Missing Localizations: 888", "_": "->------------------------] Game Elements [------------------------<-", @@ -1954,9 +1954,9 @@ "block.create.creative_crate.tooltip.behaviour1": "Все, что извлечено из этого контейнера, обеспечит бесконечную поставку указанного предмета. Предметы, _вставленные_ в этот ящик, будут _аннулированы_.", "item.create.creative_blaze_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for your _Blaze Burners_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: When Used", + "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Cycles_ a Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "КОНТРОЛИРУЮЩАЯ РЕЛЬСА", "block.create.controller_rail.tooltip.summary": "_Все-направленные запитанные рельсы_, позволяющие _точную настройку_ _скорости_ вагонеток.", @@ -2004,6 +2004,11 @@ "item.create.copper_backtank.tooltip.condition2": "При размещении и питании от кинетической энергии", "item.create.copper_backtank.tooltip.behaviour2": "Собирает и сжимает воздух со скоростью, зависящей от скорости вращения.", + "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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "БОТИНКИ ДЛЯ ДАЙВИНГА", "item.create.diving_boots.tooltip.summary": "Пара _тяжелых_ _ботинок_, позволяющая лучше передвигаться по океанскому дну.", "item.create.diving_boots.tooltip.condition1": "При ношении", @@ -2633,6 +2638,16 @@ "create.ponder.piston_pole.text_1": "Без присоединённых Удлинителей, Механический поршень не может двигаться", "create.ponder.piston_pole.text_2": "Длина стержня, добавленного к его задней части, определяет Диапазон выдвижения.", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "Портативном жидкостном интерфейсе на штуковинах", "create.ponder.portable_fluid_interface.text_1": "Жидкостные баки на движущихся штуковинах не могут быть доступны ни каким трубам", "create.ponder.portable_fluid_interface.text_2": "Этот интерфейс может взаимодействовать с жидкостными баками без необходимости останавливать штуковину", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "Управлении редстоуном", "create.ponder.portable_storage_interface_redstone.text_1": "Редстоун сигнал предотвратит включение стационарного интерфейса", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "Управлении сигналами при помощи Питаемого рычага", "create.ponder.powered_latch.text_1": "Питаемый рычаг - управляемый редстоуном рычаг", "create.ponder.powered_latch.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 1f011ac6c..09cc87f07 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: 491", + "_": "Missing Localizations: 508", "_": "->------------------------] Game Elements [------------------------<-", @@ -2004,6 +2004,11 @@ "item.create.copper_backtank.tooltip.condition2": "放下并接入动力时", "item.create.copper_backtank.tooltip.behaviour2": "基于转速从周围环境中_收集_并_加压空气_", + "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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "潜水靴", "item.create.diving_boots.tooltip.summary": "一双_沉重的靴子_,让穿戴者可以更方便的探索海底。", "item.create.diving_boots.tooltip.condition1": "穿在脚上时", @@ -2633,6 +2638,16 @@ "create.ponder.piston_pole.text_1": "若无相接的活塞杆,动力活塞无法移动其他方块", "create.ponder.piston_pole.text_2": "在其背面安装的活塞杆长度,决定了活塞的推动范围", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "装置流体交换", "create.ponder.portable_fluid_interface.text_1": "管道无法与运动装置内的流体储罐直接交互", "create.ponder.portable_fluid_interface.text_2": "这一组件可以在不停止装置的情况下与装置内的流体存储进行交互", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "红石控制", "create.ponder.portable_storage_interface_redstone.text_1": "通入红石信号可以阻止固定侧接口的连接行为", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "使用锁存器控制信号", "create.ponder.powered_latch.text_1": "锁存器是一种可以用红石信号控制的拉杆", "create.ponder.powered_latch.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 e8c57c02f..46a1ff80a 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: 885", + "_": "Missing Localizations: 902", "_": "->------------------------] Game Elements [------------------------<-", @@ -1954,9 +1954,9 @@ "block.create.creative_crate.tooltip.behaviour1": "容器將會從虛空中提供_無限量_的標記物品,並且任何放置到容器中的物品都會被_送入虛空_", "item.create.creative_blaze_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for your _Blaze Burners_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: When Used", + "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Cycles_ a Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "控制鐵軌", "block.create.controller_rail.tooltip.summary": "單向電動導軌,能夠精細控制礦車的移動速度。", @@ -2004,6 +2004,11 @@ "item.create.copper_backtank.tooltip.condition2": "當放置時,由轉動來補充驅動", "item.create.copper_backtank.tooltip.behaviour2": "旋轉的速度決定收集_壓縮空氣_的速率", + "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", + "block.create.flywheel.tooltip.behaviour1": "UNLOCALIZED: Starts spinning.", + "item.create.diving_boots.tooltip": "潛水鞋", "item.create.diving_boots.tooltip.summary": "一雙_沈重的鞋子_,提供更好的水下移動", "item.create.diving_boots.tooltip.condition1": "當裝備時", @@ -2633,6 +2638,16 @@ "create.ponder.piston_pole.text_1": "若無相接的延長杆,動力活塞無法移動其他方塊", "create.ponder.piston_pole.text_2": "在其背面安裝的延長杆長度,決定了活塞的推動範圍", + "create.ponder.placement.header": "UNLOCALIZED: Placing Train Tracks", + "create.ponder.placement.text_1": "UNLOCALIZED: A new type of rail designed for Train Contraptions", + "create.ponder.placement.text_2": "UNLOCALIZED: To place rows of track in bulk, click on an existing track", + "create.ponder.placement.text_3": "UNLOCALIZED: Then place or select a second track", + "create.ponder.placement.text_4": "UNLOCALIZED: Tracks can also be placed as turns or slopes", + "create.ponder.placement.text_5": "UNLOCALIZED: When connecting, tracks will try to make each turn equally sized", + "create.ponder.placement.text_6": "UNLOCALIZED: Holding the sprint key while connecting...", + "create.ponder.placement.text_7": "UNLOCALIZED: ...will create the longest fitting bend instead", + "create.ponder.placement.text_8": "UNLOCALIZED: Materials in the off-hand will be paved under tracks automatically", + "create.ponder.portable_fluid_interface.header": "移動式液體口", "create.ponder.portable_fluid_interface.text_1": "任何管道線都無法與移動裝置上的液體罐連接", "create.ponder.portable_fluid_interface.text_2": "該元件可以與液體罐相互作用,而無需停止裝置", @@ -2656,6 +2671,11 @@ "create.ponder.portable_storage_interface_redstone.header": "紅石控制", "create.ponder.portable_storage_interface_redstone.text_1": "通入紅石訊號可以阻止固定側介面的連接行為", + "create.ponder.portal.header": "UNLOCALIZED: Tracks and the Nether", + "create.ponder.portal.text_1": "UNLOCALIZED: Tracks placed up against a nether portal...", + "create.ponder.portal.text_2": "UNLOCALIZED: ...will attempt to create a paired track on the other side", + "create.ponder.portal.text_3": "UNLOCALIZED: Trains on this track are now able to travel across dimensions", + "create.ponder.powered_latch.header": "使用閂鎖器控制訊號", "create.ponder.powered_latch.text_1": "閂鎖器是一種可以用紅石訊號控制的拉杆", "create.ponder.powered_latch.text_2": "後方輸入的訊號會將其設為開啟狀態", diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRelocationPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRelocationPacket.java new file mode 100644 index 000000000..5ff0fa20b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRelocationPacket.java @@ -0,0 +1,38 @@ +package com.simibubi.create.content.contraptions.components.structureMovement; + +import java.util.function.Supplier; + +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.network.NetworkEvent.Context; + +public class ContraptionRelocationPacket extends SimplePacketBase { + + int entityID; + + public ContraptionRelocationPacket(int entityID) { + this.entityID = entityID; + } + + public ContraptionRelocationPacket(FriendlyByteBuf buffer) { + entityID = buffer.readInt(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeInt(entityID); + } + + @Override + public void handle(Supplier context) { + context.get() + .enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, + () -> () -> OrientedContraptionEntity.handleRelocationPacket(this))); + context.get() + .setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java index 5dca9a313..6738e4769 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java @@ -22,6 +22,7 @@ import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; @@ -74,7 +75,7 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { public float prevPitch; public float pitch; - + public int nonDamageTicks; public OrientedContraptionEntity(EntityType type, Level world) { @@ -597,4 +598,10 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { return Vec3.ZERO; } + + @OnlyIn(Dist.CLIENT) + public static void handleRelocationPacket(ContraptionRelocationPacket packet) { + if (Minecraft.getInstance().level.getEntity(packet.entityID) instanceof OrientedContraptionEntity oce) + oce.nonDamageTicks = 10; + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/GlobalRailwayManager.java b/src/main/java/com/simibubi/create/content/logistics/trains/GlobalRailwayManager.java index d5022e84a..6930a4f80 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/GlobalRailwayManager.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/GlobalRailwayManager.java @@ -119,8 +119,12 @@ public class GlobalRailwayManager { // - public TrackGraph getOrCreateGraph(UUID graphID) { - return trackNetworks.computeIfAbsent(graphID, uid -> new TrackGraph(graphID)); + public TrackGraph getOrCreateGraph(UUID graphID, int netId) { + return trackNetworks.computeIfAbsent(graphID, uid -> { + TrackGraph trackGraph = new TrackGraph(graphID); + trackGraph.netId = netId; + return trackGraph; + }); } public void putGraphWithDefaultGroup(TrackGraph graph) { diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraph.java b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraph.java index efe26277b..3a6b4fb95 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraph.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraph.java @@ -13,6 +13,7 @@ import java.util.Random; import java.util.Set; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -29,6 +30,7 @@ import com.simibubi.create.content.logistics.trains.management.edgePoint.signal. import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.NBTHelper; +import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.nbt.CompoundTag; @@ -41,7 +43,8 @@ import net.minecraft.world.phys.Vec3; public class TrackGraph { - public static final AtomicInteger netIdGenerator = new AtomicInteger(); + public static final AtomicInteger graphNetIdGenerator = new AtomicInteger(); + public static final AtomicInteger nodeNetIdGenerator = new AtomicInteger(); public UUID id; public Color color; @@ -54,6 +57,9 @@ public class TrackGraph { List deferredIntersectionUpdates; + int netId; + int checksum = 0; + public TrackGraph() { this(UUID.randomUUID()); } @@ -66,6 +72,7 @@ public class TrackGraph { connectionsByNode = new IdentityHashMap<>(); edgePoints = new EdgePointStorage(); deferredIntersectionUpdates = new ArrayList<>(); + netId = nextGraphId(); } // @@ -106,6 +113,7 @@ public class TrackGraph { } public void invalidateBounds() { + checksum = 0; bounds.clear(); } @@ -230,7 +238,11 @@ public class TrackGraph { } public static int nextNodeId() { - return netIdGenerator.incrementAndGet(); + return nodeNetIdGenerator.incrementAndGet(); + } + + public static int nextGraphId() { + return graphNetIdGenerator.incrementAndGet(); } public void transferAll(TrackGraph toOther) { @@ -267,7 +279,7 @@ public class TrackGraph { } public Set findDisconnectedGraphs(@Nullable LevelAccessor level, - @Nullable Map preAssignedIds) { + @Nullable Map> splitSubGraphs) { Set dicovered = new HashSet<>(); Set vertices = new HashSet<>(nodes.keySet()); List frontier = new ArrayList<>(); @@ -293,8 +305,11 @@ public class TrackGraph { frontier.add(connected.getLocation()); if (target != null) { - if (preAssignedIds != null && preAssignedIds.containsKey(currentNode.getNetId())) - target.setId(preAssignedIds.get(currentNode.getNetId())); + if (splitSubGraphs != null && splitSubGraphs.containsKey(currentNode.getNetId())) { + Pair ids = splitSubGraphs.get(currentNode.getNetId()); + target.setId(ids.getSecond()); + target.netId = ids.getFirst(); + } transfer(level, currentNode, target); } } @@ -311,6 +326,18 @@ public class TrackGraph { color = Color.rainbowColor(new Random(id.getLeastSignificantBits()).nextInt()); } + public void setNetId(int id) { + this.netId = id; + } + + public int getChecksum() { + if (checksum == 0) + checksum = nodes.values() + .stream() + .collect(Collectors.summingInt(TrackNode::getNetId)); + return checksum; + } + public void transfer(LevelAccessor level, TrackNode node, TrackGraph target) { target.addNode(node); target.invalidateBounds(); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphPacket.java b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphPacket.java index b723a5eac..888474405 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphPacket.java @@ -11,12 +11,13 @@ import net.minecraftforge.network.NetworkEvent.Context; public abstract class TrackGraphPacket extends SimplePacketBase { public UUID graphId; + public int netId; public boolean packetDeletesGraph; @Override public void handle(Supplier context) { context.get() - .enqueueWork(() -> handle(CreateClient.RAILWAYS, CreateClient.RAILWAYS.getOrCreateGraph(graphId))); + .enqueueWork(() -> handle(CreateClient.RAILWAYS, CreateClient.RAILWAYS.getOrCreateGraph(graphId, netId))); context.get() .setPacketHandled(true); } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphRequestPacket.java b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphRequestPacket.java new file mode 100644 index 000000000..eb179ba41 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphRequestPacket.java @@ -0,0 +1,44 @@ +package com.simibubi.create.content.logistics.trains; + +import java.util.function.Supplier; + +import com.simibubi.create.Create; +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.network.NetworkEvent.Context; + +public class TrackGraphRequestPacket extends SimplePacketBase { + + private int netId; + + public TrackGraphRequestPacket(int netId) { + this.netId = netId; + } + + public TrackGraphRequestPacket(FriendlyByteBuf buffer) { + netId = buffer.readInt(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeInt(netId); + } + + @Override + public void handle(Supplier context) { + context.get() + .enqueueWork(() -> { + for (TrackGraph trackGraph : Create.RAILWAYS.trackNetworks.values()) { + if (trackGraph.netId == netId) { + Create.RAILWAYS.sync.sendFullGraphTo(trackGraph, context.get() + .getSender()); + break; + } + } + }); + context.get() + .setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphRollCallPacket.java b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphRollCallPacket.java new file mode 100644 index 000000000..fe4f3b0f8 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphRollCallPacket.java @@ -0,0 +1,83 @@ +package com.simibubi.create.content.logistics.trains; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.function.Supplier; + +import com.simibubi.create.Create; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.network.NetworkEvent.Context; + +public class TrackGraphRollCallPacket extends SimplePacketBase { + + int[] ints; + + public TrackGraphRollCallPacket() { + GlobalRailwayManager manager = Create.RAILWAYS; + ints = new int[manager.trackNetworks.size() * 2]; + int i = 0; + for (TrackGraph trackGraph : manager.trackNetworks.values()) { + ints[i] = trackGraph.netId; + ints[i + 1] = trackGraph.getChecksum(); + i += 2; + } + } + + public TrackGraphRollCallPacket(FriendlyByteBuf buffer) { + ints = new int[buffer.readVarInt()]; + for (int i = 0; i < ints.length; i++) + ints[i] = buffer.readInt(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeVarInt(ints.length); + for (int i : ints) + buffer.writeInt(i); + } + + @Override + public void handle(Supplier context) { + context.get() + .enqueueWork(() -> { + + GlobalRailwayManager manager = Create.RAILWAYS.sided(null); + Set unusedIds = new HashSet<>(manager.trackNetworks.keySet()); + List failedIds = new ArrayList<>(); + Map idByNetId = new HashMap<>(); + manager.trackNetworks.forEach((uuid, g) -> idByNetId.put(g.netId, uuid)); + + for (int i = 0; i < ints.length; i += 2) { + UUID uuid = idByNetId.get(ints[i]); + if (uuid == null) { + failedIds.add(ints[i]); + continue; + } + unusedIds.remove(uuid); + TrackGraph trackGraph = manager.trackNetworks.get(uuid); + if (trackGraph.getChecksum() == ints[i + 1]) + continue; + Create.LOGGER.warn("Track network: " + uuid.toString() + .substring(0, 6) + " failed its checksum; Requesting refresh"); + failedIds.add(ints[i]); + } + + for (Integer failed : failedIds) + AllPackets.channel.sendToServer(new TrackGraphRequestPacket(failed)); + for (UUID unused : unusedIds) + manager.trackNetworks.remove(unused); + + }); + context.get() + .setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphSync.java b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphSync.java index a2fc36808..2c52fe585 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphSync.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphSync.java @@ -24,44 +24,56 @@ import net.minecraftforge.network.PacketDistributor; public class TrackGraphSync { List queuedPackets = new ArrayList<>(); + int rollCallIn; public void serverTick() { - flushGraphPacket(null); - if (queuedPackets.isEmpty()) - return; - for (TrackGraphPacket packet : queuedPackets) { - if (!packet.packetDeletesGraph && !Create.RAILWAYS.trackNetworks.containsKey(packet.graphId)) - continue; - AllPackets.channel.send(PacketDistributor.ALL.noArg(), packet); + flushGraphPacket(); + + if (!queuedPackets.isEmpty()) { + for (TrackGraphPacket packet : queuedPackets) { + if (!packet.packetDeletesGraph && !Create.RAILWAYS.trackNetworks.containsKey(packet.graphId)) + continue; + AllPackets.channel.send(PacketDistributor.ALL.noArg(), packet); + rollCallIn = 3; + } + + queuedPackets.clear(); } - queuedPackets.clear(); + + if (rollCallIn <= 0) + return; + rollCallIn--; + if (rollCallIn > 0) + return; + + sendRollCall(); } // public void nodeAdded(TrackGraph graph, TrackNode node) { - flushGraphPacket(graph.id); + flushGraphPacket(graph); currentGraphSyncPacket.addedNodes.put(node.getNetId(), Pair.of(node.getLocation(), node.getNormal())); } public void edgeAdded(TrackGraph graph, TrackNode node1, TrackNode node2, TrackEdge edge) { - flushGraphPacket(graph.id); + flushGraphPacket(graph); currentGraphSyncPacket.addedEdges .add(Pair.of(Couple.create(node1.getNetId(), node2.getNetId()), edge.getTurn())); } public void pointAdded(TrackGraph graph, TrackEdgePoint point) { - flushGraphPacket(graph.id); + flushGraphPacket(graph); currentGraphSyncPacket.addedEdgePoints.add(point); } public void pointRemoved(TrackGraph graph, TrackEdgePoint point) { - flushGraphPacket(graph.id); + flushGraphPacket(graph); currentGraphSyncPacket.removedEdgePoints.add(point.getId()); } public void nodeRemoved(TrackGraph graph, TrackNode node) { - flushGraphPacket(graph.id); + flushGraphPacket(graph); int nodeId = node.getNetId(); if (currentGraphSyncPacket.addedNodes.remove(nodeId) == null) currentGraphSyncPacket.removedNodes.add(nodeId); @@ -75,15 +87,15 @@ public class TrackGraphSync { } public void graphSplit(TrackGraph graph, Set additional) { - flushGraphPacket(graph.id); + flushGraphPacket(graph); additional.forEach(rg -> currentGraphSyncPacket.splitSubGraphs.put(rg.nodesById.keySet() .stream() .findFirst() - .get(), rg.id)); + .get(), Pair.of(rg.netId, rg.id))); } public void graphRemoved(TrackGraph graph) { - flushGraphPacket(graph.id); + flushGraphPacket(graph); currentGraphSyncPacket.packetDeletesGraph = true; } @@ -106,18 +118,19 @@ public class TrackGraphSync { // public void edgeDataChanged(TrackGraph graph, TrackNode node1, TrackNode node2, TrackEdge edge) { - flushGraphPacket(graph.id); + flushGraphPacket(graph); currentGraphSyncPacket.syncEdgeData(node1, node2, edge); } public void edgeDataChanged(TrackGraph graph, TrackNode node1, TrackNode node2, TrackEdge edge, TrackEdge edge2) { - flushGraphPacket(graph.id); + flushGraphPacket(graph); currentGraphSyncPacket.syncEdgeData(node1, node2, edge); currentGraphSyncPacket.syncEdgeData(node2, node1, edge2); } public void sendFullGraphTo(TrackGraph graph, ServerPlayer player) { - TrackGraphSyncPacket packet = new TrackGraphSyncPacket(graph.id); + TrackGraphSyncPacket packet = new TrackGraphSyncPacket(graph.id, graph.netId); + packet.fullWipe = true; int sent = 0; for (TrackNode node : graph.nodes.values()) { @@ -164,9 +177,13 @@ public class TrackGraphSync { flushAndCreateNew(graph, player, packet); } + private void sendRollCall() { + AllPackets.channel.send(PacketDistributor.ALL.noArg(), new TrackGraphRollCallPacket()); + } + private TrackGraphSyncPacket flushAndCreateNew(TrackGraph graph, ServerPlayer player, TrackGraphSyncPacket packet) { AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> player), packet); - packet = new TrackGraphSyncPacket(graph.id); + packet = new TrackGraphSyncPacket(graph.id, graph.netId); return packet; } @@ -174,7 +191,15 @@ public class TrackGraphSync { private TrackGraphSyncPacket currentGraphSyncPacket; - private void flushGraphPacket(@Nullable UUID graphId) { + private void flushGraphPacket() { + flushGraphPacket(null, 0); + } + + private void flushGraphPacket(TrackGraph graph) { + flushGraphPacket(graph.id, graph.netId); + } + + private void flushGraphPacket(@Nullable UUID graphId, int netId) { if (currentGraphSyncPacket != null) { if (currentGraphSyncPacket.graphId.equals(graphId)) return; @@ -183,7 +208,7 @@ public class TrackGraphSync { } if (graphId != null) - currentGraphSyncPacket = new TrackGraphSyncPacket(graphId); + currentGraphSyncPacket = new TrackGraphSyncPacket(graphId, netId); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphSyncPacket.java b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphSyncPacket.java index c85ef8ec2..33e5e0790 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphSyncPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphSyncPacket.java @@ -8,6 +8,7 @@ import java.util.Map.Entry; import java.util.Objects; import java.util.UUID; +import com.simibubi.create.Create; import com.simibubi.create.content.logistics.trains.management.edgePoint.EdgeData; import com.simibubi.create.content.logistics.trains.management.edgePoint.EdgePointType; import com.simibubi.create.content.logistics.trains.management.edgePoint.signal.TrackEdgePoint; @@ -25,13 +26,16 @@ public class TrackGraphSyncPacket extends TrackGraphPacket { List removedNodes; List addedEdgePoints; List removedEdgePoints; - Map splitSubGraphs; + Map> splitSubGraphs; Map, Pair>> updatedEdgeData; + boolean fullWipe; + static final int NULL_GROUP = 0, PASSIVE_GROUP = 1, GROUP = 2; - public TrackGraphSyncPacket(UUID graphId) { + public TrackGraphSyncPacket(UUID graphId, int netId) { this.graphId = graphId; + this.netId = netId; addedNodes = new HashMap<>(); addedEdges = new ArrayList<>(); removedNodes = new ArrayList<>(); @@ -46,7 +50,9 @@ public class TrackGraphSyncPacket extends TrackGraphPacket { int size; graphId = buffer.readUUID(); + netId = buffer.readInt(); packetDeletesGraph = buffer.readBoolean(); + fullWipe = buffer.readBoolean(); if (packetDeletesGraph) return; @@ -96,13 +102,15 @@ public class TrackGraphSyncPacket extends TrackGraphPacket { size = buffer.readVarInt(); for (int i = 0; i < size; i++) - splitSubGraphs.put(buffer.readVarInt(), buffer.readUUID()); + splitSubGraphs.put(buffer.readVarInt(), Pair.of(buffer.readInt(), buffer.readUUID())); } @Override public void write(FriendlyByteBuf buffer) { buffer.writeUUID(graphId); + buffer.writeInt(netId); buffer.writeBoolean(packetDeletesGraph); + buffer.writeBoolean(fullWipe); if (packetDeletesGraph) return; @@ -152,9 +160,10 @@ public class TrackGraphSyncPacket extends TrackGraphPacket { } buffer.writeVarInt(splitSubGraphs.size()); - splitSubGraphs.forEach((node, uuid) -> { + splitSubGraphs.forEach((node, p) -> { buffer.writeVarInt(node); - buffer.writeUUID(uuid); + buffer.writeInt(p.getFirst()); + buffer.writeUUID(p.getSecond()); }); } @@ -165,6 +174,12 @@ public class TrackGraphSyncPacket extends TrackGraphPacket { return; } + if (fullWipe) { + manager.removeGraph(graph); + graph = Create.RAILWAYS.sided(null) + .getOrCreateGraph(graphId, netId); + } + for (int nodeId : removedNodes) { TrackNode node = graph.getNode(nodeId); if (node != null) diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphVisualizer.java b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphVisualizer.java index 68fb5dc3d..e82b7ec16 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphVisualizer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/TrackGraphVisualizer.java @@ -37,7 +37,7 @@ public class TrackGraphVisualizer { Vec3 camera = cameraEntity.getEyePosition(); Outliner outliner = CreateClient.OUTLINER; - boolean ctrl = AllKeys.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL); + boolean ctrl = false; // AllKeys.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL); Map allGroups = Create.RAILWAYS.sided(null).signalEdgeGroups; float width = 1 / 8f; diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageContraptionEntity.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageContraptionEntity.java index cee9cfb88..484771ba6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageContraptionEntity.java @@ -124,7 +124,7 @@ public class CarriageContraptionEntity extends OrientedContraptionEntity { bindCarriage(); - if (TRACK_GRAPH.equals(key)) + if (TRACK_GRAPH.equals(key)) updateTrackGraph(); if (CARRIAGE_DATA.equals(key)) { @@ -258,6 +258,8 @@ public class CarriageContraptionEntity extends OrientedContraptionEntity { } DimensionalCarriageEntity dce = carriage.getDimensional(level); + if (tickCount % 10 == 0) + updateTrackGraph(); if (!dce.pointsInitialised) return; diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/TrainRelocationPacket.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/TrainRelocationPacket.java index f44808f6a..ee0e273e6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/TrainRelocationPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/TrainRelocationPacket.java @@ -4,7 +4,9 @@ import java.util.UUID; import java.util.function.Supplier; import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionRelocationPacket; import com.simibubi.create.content.logistics.trains.track.BezierTrackPointLocation; +import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.networking.SimplePacketBase; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.VecHelper; @@ -16,6 +18,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkEvent.Context; +import net.minecraftforge.network.PacketDistributor; public class TrainRelocationPacket extends SimplePacketBase { @@ -95,7 +98,11 @@ public class TrainRelocationPacket extends SimplePacketBase { if (TrainRelocator.relocate(train, sender.level, pos, hoveredBezier, direction, lookAngle, false)) { sender.displayClientMessage(Lang.translate("train.relocate.success") .withStyle(ChatFormatting.GREEN), true); - train.carriages.forEach(c -> c.forEachPresentEntity(e -> e.nonDamageTicks = 10)); + train.carriages.forEach(c -> c.forEachPresentEntity(e -> { + e.nonDamageTicks = 10; + AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> e), + new ContraptionRelocationPacket(e.getId())); + })); return; } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java index a07468da3..75269afbe 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayRenderer.java @@ -81,7 +81,7 @@ public class FlapDisplayRenderer extends KineticTileEntityRenderer { w += section.getSize() + (section.hasGap ? 8 : 1); } - ms.translate(flapTe.xSize * 16 - w / 2 + 1, 4, 0); + ms.translate(flapTe.xSize * 16 - w / 2 + 1, 4.5f, 0); Pose transform = ms.last(); FlapDisplayRenderOutput renderOutput = new FlapDisplayRenderOutput(buffer, color, transform.pose(), light, @@ -94,9 +94,9 @@ public class FlapDisplayRenderer extends KineticTileEntityRenderer { String text = section.renderCharsIndividually() || !section.spinning[0] ? section.text : section.cyclingOptions[((ticks / 3) + i * 13) % section.cyclingOptions.length]; StringDecomposer.iterateFormatted(text, Style.EMPTY, renderOutput); - ms.translate(0, 0, -1 / 4f); - renderOutput.finish(0x55000000); - ms.translate(0, 0, 1 / 4f); +// ms.translate(0, 0, -1 / 4f); +// renderOutput.finish(0x55000000); +// ms.translate(0, 0, 1 / 4f); ms.translate(section.size + (section.hasGap ? 8 : 1), 0, 0); } @@ -129,7 +129,7 @@ public class FlapDisplayRenderer extends KineticTileEntityRenderer { boolean paused) { this.bufferSource = buffer; this.lineIndex = lineIndex; - this.a = (color >> 24 & 255) / 255f; + this.a = .75f; this.r = (color >> 16 & 255) / 255f; this.g = (color >> 8 & 255) / 255f; this.b = (color & 255) / 255f; 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 dbc4e8217..7b924b9ce 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,9 @@ public class StationTileEntity extends SmartTileEntity implements ITransformable super.read(tag, clientPacket); invalidateRenderBoundingBox(); + if (tag.contains("PrevTrainName")) + lastDisassembledTrainName = Component.Serializer.fromJson(tag.getString("PrevTrainName")); + if (!clientPacket) return; if (!tag.contains("ImminentTrain")) { @@ -148,6 +151,9 @@ public class StationTileEntity extends SmartTileEntity implements ITransformable AssemblyException.write(tag, lastException); tag.putInt("FailedCarriageIndex", failedCarriageIndex); + if (lastDisassembledTrainName != null) + tag.putString("PrevTrainName", Component.Serializer.toJson(lastDisassembledTrainName)); + super.write(tag, clientPacket); if (!clientPacket) @@ -471,12 +477,12 @@ public class StationTileEntity extends SmartTileEntity implements ITransformable int loc = bogeyLocations[i]; if (loc == -1) break; - + if (loc - iPrevious < 3) { exception(new AssemblyException(Lang.translate("train_assembly.bogeys_too_close", i, i + 1)), -1); return; } - + double bogeySize = bogeyTypes[i].getWheelPointSpacing(); pointOffsets.add(Double.valueOf(loc + .5 - bogeySize / 2)); pointOffsets.add(Double.valueOf(loc + .5 + bogeySize / 2)); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/track/StandardBogeyBlock.java b/src/main/java/com/simibubi/create/content/logistics/trains/track/StandardBogeyBlock.java index 1f61dd38e..9db10db41 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/track/StandardBogeyBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/track/StandardBogeyBlock.java @@ -150,6 +150,7 @@ public class StandardBogeyBlock extends Block private void renderBogey(float wheelAngle, PoseStack ms, int light, VertexConsumer vb, BlockState air) { CachedBufferer.partial(AllBlockPartials.BOGEY_FRAME, air) + .scale(1 - 1 / 512f) .light(light) .renderInto(ms, vb); @@ -176,6 +177,7 @@ public class StandardBogeyBlock extends Block .renderInto(ms, vb); CachedBufferer.partial(AllBlockPartials.BOGEY_DRIVE, air) + .scale(1 - 1 / 512f) .light(light) .renderInto(ms, vb); CachedBufferer.partial(AllBlockPartials.BOGEY_PISTON, air) diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index 629b90b2a..a87c02ef6 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -10,6 +10,7 @@ import java.util.function.Supplier; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionBlockChangedPacket; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionDisassemblyPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionRelocationPacket; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionStallPacket; import com.simibubi.create.content.contraptions.components.structureMovement.TrainCollisionPacket; import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionUpdatePacket; @@ -54,6 +55,8 @@ import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket; import com.simibubi.create.content.logistics.packet.ConfigureStockswitchPacket; import com.simibubi.create.content.logistics.packet.FunnelFlapPacket; import com.simibubi.create.content.logistics.packet.TunnelFlapPacket; +import com.simibubi.create.content.logistics.trains.TrackGraphRequestPacket; +import com.simibubi.create.content.logistics.trains.TrackGraphRollCallPacket; import com.simibubi.create.content.logistics.trains.TrackGraphSyncPacket; import com.simibubi.create.content.logistics.trains.entity.TrainPacket; import com.simibubi.create.content.logistics.trains.entity.TrainPromptPacket; @@ -144,6 +147,7 @@ public enum AllPackets { C_TRAIN_HONK(HonkPacket.Serverbound.class, HonkPacket.Serverbound::new, PLAY_TO_SERVER), OBSERVER_STRESSOMETER(GaugeObservedPacket.class, GaugeObservedPacket::new, PLAY_TO_SERVER), EJECTOR_AWARD(EjectorAwardPacket.class, EjectorAwardPacket::new, PLAY_TO_SERVER), + TRACK_GRAPH_REQUEST(TrackGraphRequestPacket.class, TrackGraphRequestPacket::new, PLAY_TO_SERVER), // Server to Client SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new, PLAY_TO_CLIENT), @@ -178,6 +182,8 @@ public enum AllPackets { S_TRAIN_HUD(TrainHUDUpdatePacket.class, TrainHUDUpdatePacket::new, PLAY_TO_CLIENT), S_TRAIN_HONK(HonkPacket.class, HonkPacket::new, PLAY_TO_CLIENT), S_TRAIN_PROMPT(TrainPromptPacket.class, TrainPromptPacket::new, PLAY_TO_CLIENT), + CONTRAPTION_RELOCATION(ContraptionRelocationPacket.class, ContraptionRelocationPacket::new, PLAY_TO_CLIENT), + TRACK_GRAPH_ROLL_CALL(TrackGraphRollCallPacket.class, TrackGraphRollCallPacket::new, PLAY_TO_CLIENT), ; 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 7aeff3816..ec709396d 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,6 +14,7 @@ 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.TrackScenes; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.Blocks; @@ -294,6 +295,11 @@ public class PonderIndex { HELPER.forComponents(AllBlocks.REDSTONE_LINK) .addStoryBoard("redstone_link", RedstoneScenes::redstoneLink); + // Trains + HELPER.forComponents(AllBlocks.TRACK) + .addStoryBoard("train_track/placement", TrackScenes::placement) + .addStoryBoard("train_track/portal", TrackScenes::portal); + // Debug scenes, can be found in game via the Brass Hand if (REGISTER_DEBUG_SCENES) DebugScenes.registerAll(); 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 new file mode 100644 index 000000000..c8ca8dd71 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/trains/TrackScenes.java @@ -0,0 +1,342 @@ +package com.simibubi.create.foundation.ponder.content.trains; + +import java.util.List; + +import com.simibubi.create.AllBlocks; +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.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.level.block.Blocks; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +public class TrackScenes { + + public static void placement(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("placement", "Placing Train Tracks"); + scene.configureBasePlate(0, 0, 15); + scene.scaleSceneView(.5f); + scene.showBasePlate(); +// scene.debug.debugSchematic(); + + scene.idle(10); + + ElementLink bgTrack = + scene.world.showIndependentSection(util.select.position(11, 4, 9), Direction.DOWN); + scene.world.moveSection(bgTrack, util.vector.of(0, -2, 0), 0); + + for (int i = 11; i >= 2; i--) { + scene.world.showSectionAndMerge(util.select.position(i, 3, 9), Direction.DOWN, bgTrack); + if (i == 5) + scene.world.showSectionAndMerge(util.select.position(7, 4, 9), Direction.DOWN, bgTrack); + scene.idle(2); + } + + scene.overlay.showText(60) + .pointAt(util.vector.topOf(5, 0, 9)) + .placeNearTarget() + .text("A new type of rail designed for Train Contraptions"); + scene.idle(50); + + ElementLink fgTrack = + scene.world.showIndependentSection(util.select.position(3, 3, 5), Direction.DOWN); + scene.world.moveSection(fgTrack, util.vector.of(0, -2, 0), 0); + scene.idle(20); + + Vec3 startTrack = util.vector.topOf(3, 0, 5); + scene.overlay.showText(70) + .pointAt(startTrack) + .placeNearTarget() + .colored(PonderPalette.GREEN) + .attachKeyFrame() + .text("To place rows of track in bulk, click on an existing track"); + scene.idle(30); + + ItemStack trackStack = AllBlocks.TRACK.asStack(); + scene.overlay.showControls(new InputWindowElement(startTrack, Pointing.DOWN).rightClick() + .withItem(trackStack), 40); + scene.idle(6); + AABB bb = new AABB(util.grid.at(3, 1, 5)).contract(0, .75f, 0) + .inflate(0, 0, .85f); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, startTrack, bb, 32); + scene.idle(45); + + scene.overlay.showControls(new InputWindowElement(startTrack.add(9, 0, 0), Pointing.DOWN).rightClick() + .withItem(trackStack), 40); + scene.idle(6); + scene.overlay.showText(40) + .pointAt(util.vector.topOf(12, 0, 5)) + .placeNearTarget() + .colored(PonderPalette.GREEN) + .text("Then place or select a second track"); + scene.idle(20); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, startTrack, bb.expandTowards(9, 0, 0), 30); + + scene.world.showSectionAndMerge(util.select.fromTo(12, 3, 5, 4, 3, 5), Direction.WEST, fgTrack); + scene.idle(55); + + scene.world.hideIndependentSection(bgTrack, Direction.UP); + scene.idle(7); + scene.world.hideIndependentSection(fgTrack, Direction.UP); + scene.idle(25); + + scene.world.showSection(util.select.position(8, 1, 2), Direction.SOUTH); + scene.idle(10); + scene.addKeyframe(); + + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(8, 0, 2), Pointing.DOWN).rightClick() + .withItem(trackStack), 15); + scene.idle(15); + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(2, 0, 8), Pointing.DOWN).rightClick() + .withItem(trackStack), 15); + scene.idle(7); + scene.world.showSection(util.select.position(2, 1, 8), Direction.DOWN); + scene.idle(25); + + scene.overlay.showText(60) + .pointAt(util.vector.topOf(7, 0, 7)) + .placeNearTarget() + .text("Tracks can also be placed as turns or slopes"); + scene.idle(40); + + scene.world.showSection(util.select.position(12, 1, 2), Direction.SOUTH); + scene.idle(10); + + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(12, 0, 2), Pointing.DOWN).rightClick() + .withItem(trackStack), 10); + scene.idle(15); + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(2, 0, 12), Pointing.DOWN).rightClick() + .withItem(trackStack), 10); + scene.idle(7); + scene.world.showSection(util.select.fromTo(12, 1, 3, 12, 1, 5), Direction.DOWN); + scene.idle(3); + scene.world.showSection(util.select.fromTo(12, 1, 6, 6, 1, 12), Direction.DOWN); + scene.idle(3); + scene.world.showSection(util.select.fromTo(5, 1, 12, 2, 1, 12), Direction.DOWN); + scene.idle(25); + + scene.overlay.showText(70) + .pointAt(util.vector.topOf(11, 0, 11)) + .colored(PonderPalette.GREEN) + .attachKeyFrame() + .placeNearTarget() + .text("When connecting, tracks will try to make each turn equally sized"); + scene.idle(70); + + scene.world.hideSection(util.select.fromTo(12, 1, 2, 12, 1, 5), Direction.NORTH); + scene.world.hideSection(util.select.fromTo(5, 1, 12, 2, 1, 12), Direction.WEST); + + bb = new AABB(util.grid.at(5, 1, 5)).contract(0, .75f, 0) + .inflate(3, 0, 3) + .expandTowards(.85f, 0, .85f); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, startTrack, bb, 32); + scene.idle(20); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, startTrack, bb.move(4, 0, 4), 32); + scene.idle(30); + + scene.world.hideSection(util.select.fromTo(12, 1, 6, 6, 1, 12), Direction.UP); + scene.idle(5); + scene.world.showSection(util.select.position(12, 1, 2), Direction.SOUTH); + scene.idle(20); + + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(12, 0, 2), Pointing.DOWN).rightClick() + .withItem(trackStack), 10); + scene.idle(10); + + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(2, 0, 12), Pointing.DOWN).rightClick() + .withItem(trackStack) + .whileCTRL(), 60); + scene.idle(10); + + scene.overlay.showText(60) + .pointAt(util.vector.topOf(2, 0, 12)) + .colored(PonderPalette.GREEN) + .attachKeyFrame() + .placeNearTarget() + .text("Holding the sprint key while connecting..."); + scene.idle(50); + + ElementLink longBend = + scene.world.showIndependentSection(util.select.position(2, 2, 12), Direction.DOWN); + scene.world.moveSection(longBend, util.vector.of(0, -1, 0), 0); + scene.idle(30); + + scene.overlay.showText(60) + .pointAt(util.vector.centerOf(9, 1, 9)) + .colored(PonderPalette.GREEN) + .placeNearTarget() + .text("...will create the longest fitting bend instead"); + scene.idle(70); + + scene.world.hideIndependentSection(longBend, Direction.UP); + scene.world.hideSection(util.select.position(12, 1, 2), Direction.UP); + scene.idle(5); + scene.world.hideSection(util.select.fromTo(8, 1, 2, 2, 1, 8), Direction.UP); + scene.idle(25); + + ElementLink slopeStart = + scene.world.showIndependentSection(util.select.fromTo(12, 6, 2, 12, 9, 12), Direction.DOWN); + scene.world.moveSection(slopeStart, util.vector.of(0, -5, 0), 0); + scene.idle(10); + scene.world.showSectionAndMerge(util.select.fromTo(2, 6, 2, 2, 7, 4), Direction.DOWN, slopeStart); + scene.world.showSectionAndMerge(util.select.fromTo(2, 6, 6, 2, 9, 8), Direction.DOWN, slopeStart); + scene.world.showSectionAndMerge(util.select.fromTo(2, 6, 10, 2, 11, 12), Direction.DOWN, slopeStart); + scene.idle(20); + + scene.overlay + .showControls(new InputWindowElement(util.vector.topOf(12, 3, 11), Pointing.LEFT).withItem(trackStack), 30); + scene.idle(4); + ItemStack smoothStone = new ItemStack(Blocks.SMOOTH_STONE); + scene.overlay.showControls( + new InputWindowElement(util.vector.topOf(12, 3, 11), Pointing.RIGHT).withItem(smoothStone), 26); + scene.idle(30); + + scene.overlay + .showControls(new InputWindowElement(util.vector.topOf(2, 6, 11), Pointing.LEFT).withItem(trackStack), 30); + scene.idle(4); + scene.overlay.showControls( + new InputWindowElement(util.vector.topOf(2, 6, 11), Pointing.RIGHT).withItem(smoothStone), 26); + scene.idle(10); + + scene.world.showSectionAndMerge(util.select.position(2, 12, 11), Direction.DOWN, slopeStart); + scene.idle(2); + scene.world.showSectionAndMerge(util.select.fromTo(11, 8, 10, 3, 11, 12), Direction.UP, slopeStart); + scene.idle(20); + + scene.overlay.showText(100) + .pointAt(util.vector.blockSurface(util.grid.at(9, 3, 10), Direction.NORTH)) + .placeNearTarget() + .attachKeyFrame() + .text("Materials in the off-hand will be paved under tracks automatically"); + scene.idle(80); + + scene.overlay + .showControls(new InputWindowElement(util.vector.topOf(12, 2, 7), Pointing.LEFT).withItem(trackStack), 30); + scene.idle(4); + smoothStone = new ItemStack(Blocks.SMOOTH_STONE_SLAB); + scene.overlay.showControls( + new InputWindowElement(util.vector.topOf(12, 2, 7), Pointing.RIGHT).withItem(smoothStone), 26); + scene.idle(30); + + scene.overlay + .showControls(new InputWindowElement(util.vector.topOf(2, 4, 7), Pointing.LEFT).withItem(trackStack), 30); + scene.idle(4); + scene.overlay + .showControls(new InputWindowElement(util.vector.topOf(2, 4, 7), Pointing.RIGHT).withItem(smoothStone), 26); + scene.idle(10); + + scene.world.showSectionAndMerge(util.select.position(2, 10, 7), Direction.DOWN, slopeStart); + scene.idle(2); + scene.world.showSectionAndMerge(util.select.fromTo(11, 7, 6, 3, 11, 8), Direction.UP, slopeStart); + scene.idle(20); + + scene.overlay + .showControls(new InputWindowElement(util.vector.topOf(12, 1, 3), Pointing.LEFT).withItem(trackStack), 30); + scene.idle(4); + smoothStone = AllBlocks.METAL_GIRDER.asStack(); + scene.overlay.showControls( + new InputWindowElement(util.vector.topOf(12, 1, 3), Pointing.RIGHT).withItem(smoothStone), 26); + scene.idle(30); + + scene.overlay + .showControls(new InputWindowElement(util.vector.topOf(2, 2, 3), Pointing.LEFT).withItem(trackStack), 30); + scene.idle(4); + scene.overlay + .showControls(new InputWindowElement(util.vector.topOf(2, 2, 3), Pointing.RIGHT).withItem(smoothStone), 26); + scene.idle(10); + + scene.world.showSectionAndMerge(util.select.position(2, 8, 3), Direction.DOWN, slopeStart); + } + + public static void portal(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("portal", "Tracks and the Nether"); + scene.configureBasePlate(0, 0, 9); + scene.scaleSceneView(.65f); + scene.setSceneOffsetY(-1); + scene.showBasePlate(); + scene.world.showSection(util.select.fromTo(2, 1, 7, 6, 6, 7), Direction.UP); +// scene.debug.debugSchematic(); + scene.idle(10); + + for (int i = 1; i <= 5; i++) { + scene.world.showSection(util.select.position(4, 1, i), Direction.DOWN); + scene.idle(2); + } + + scene.idle(15); + scene.overlay.showText(60) + .pointAt(util.vector.topOf(4, 0, 6)) + .placeNearTarget() + .attachKeyFrame() + .text("Tracks placed up against a nether portal..."); + scene.idle(50); + + scene.world.showSection(util.select.position(4, 1, 6), Direction.DOWN); + + scene.idle(20); + scene.overlay.showText(70) + .pointAt(util.vector.topOf(4, 0, 6)) + .placeNearTarget() + .text("...will attempt to create a paired track on the other side"); + scene.idle(40); + + ElementLink t1 = + scene.world.showIndependentSection(util.select.fromTo(5, 2, 1, 3, 3, 2), Direction.DOWN); + ElementLink t2 = + scene.world.showIndependentSection(util.select.fromTo(5, 2, 3, 3, 3, 3), Direction.DOWN); + ElementLink t3 = + scene.world.showIndependentSection(util.select.fromTo(5, 2, 4, 3, 3, 5), Direction.DOWN); + + ElementLink birb = + scene.special.createBirb(util.vector.centerOf(4, 3, 2), FacePointOfInterestPose::new); + scene.special.movePointOfInterest(util.grid.at(4, 4, 10)); + + scene.addKeyframe(); + scene.idle(30); + + for (ElementLink e : List.of(t1, t2, t3)) + scene.world.moveSection(e, util.vector.of(0, 0, 6), 30); + scene.special.moveParrot(birb, util.vector.of(0, 0, 5.6), 28); + + for (ElementLink e : List.of(t3, t2, t1)) { + scene.idle(2); + scene.world.hideIndependentSection(e, Direction.SOUTH); + } + + scene.world.hideSection(util.select.layers(0, 1), Direction.UP); + scene.rotateCameraY(360); + scene.idle(15); + scene.special.movePointOfInterest(util.grid.at(4, 4, 0)); + ElementLink nether = + scene.world.showIndependentSection(util.select.layers(7, 1), Direction.UP); + scene.world.moveSection(nether, util.vector.of(0, -7, 0), 0); + scene.special.moveParrot(birb, util.vector.of(0, 0, -.1f), 1); + scene.idle(25); + + ElementLink s1 = + scene.world.showIndependentSection(util.select.fromTo(5, 2, 1, 3, 3, 5), Direction.NORTH); + scene.world.rotateSection(s1, 0, 180, 0, 0); + scene.world.moveSection(s1, util.vector.of(0, 0, 3.5f), 0); + scene.world.moveSection(s1, util.vector.of(0, 0, -3.5f), 18); + scene.special.moveParrot(birb, util.vector.of(0, 0, -3.5f), 18); + scene.idle(30); + + scene.overlay.showText(70) + .pointAt(util.vector.topOf(util.grid.at(3, 2, 3))) + .attachKeyFrame() + .placeNearTarget() + .text("Trains on this track are now able to travel across dimensions"); + scene.idle(40); + + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/TextWindowElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/TextWindowElement.java index 44f331929..6d792a8af 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/TextWindowElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/TextWindowElement.java @@ -127,6 +127,7 @@ public class TextWindowElement extends AnimatedOverlayElement { //PonderUI.renderBox(ms, targetX - 10, 3, boxWidth, boxHeight - 1, 0xaa000000, 0x30eebb00, 0x10eebb00); int brighterColor = Color.mixColors(color, 0xFFffffdd, 1 / 2f); + brighterColor = (0x00ffffff & brighterColor) | 0xff000000; if (vec != null) { ms.pushPose(); ms.translate(sceneToScreen.x, 0, 0); diff --git a/src/main/resources/assets/create/lang/default/tooltips.json b/src/main/resources/assets/create/lang/default/tooltips.json index f1a66e641..10dff70c3 100644 --- a/src/main/resources/assets/create/lang/default/tooltips.json +++ b/src/main/resources/assets/create/lang/default/tooltips.json @@ -163,9 +163,9 @@ "block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", "item.create.creative_blaze_cake.tooltip": "CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "_Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip.summary": "A very special treat for your _Blaze Burners_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "When Used", + "item.create.creative_blaze_cake.tooltip.behaviour1": "_Cycles_ a Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", @@ -212,6 +212,11 @@ "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.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", + "block.create.flywheel.tooltip.behaviour1": "Starts spinning.", "item.create.diving_boots.tooltip": "DIVING BOOTS", "item.create.diving_boots.tooltip.summary": "A pair of _heavy_ _boots_, allowing for better traversal of the Ocean floor.", diff --git a/src/main/resources/assets/create/models/block/display_board/block.json b/src/main/resources/assets/create/models/block/display_board/block.json index c8ee0f1a3..cd848767f 100644 --- a/src/main/resources/assets/create/models/block/display_board/block.json +++ b/src/main/resources/assets/create/models/block/display_board/block.json @@ -5,6 +5,8 @@ "2": "create:block/flap_display_front", "3": "create:block/dark_metal_block", "4": "create:block/flap_display_side", + "5": "create:block/flap_display_top", + "6": "create:block/flap_display_inside", "particle": "create:block/flap_display_front" }, "elements": [ @@ -15,10 +17,10 @@ "faces": { "north": {"uv": [0, 0, 16, 16], "texture": "#2"}, "east": {"uv": [13, 0, 16, 16], "texture": "#4"}, - "south": {"uv": [0, 0, 16, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#6"}, "west": {"uv": [0, 0, 3, 16], "texture": "#4"}, - "up": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#4"}, - "down": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#4"} + "up": {"uv": [0, 0, 3, 16], "rotation": 90, "texture": "#5"}, + "down": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#5"} } }, { @@ -26,32 +28,32 @@ "to": [16, 16, 13], "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 6]}, "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#3"}, - "east": {"uv": [10, 0, 13, 16], "texture": "#4"}, + "north": {"uv": [0, 0, 16, 16], "texture": "#6"}, + "east": {"uv": [3, 0, 6, 16], "texture": "#4"}, "south": {"uv": [0, 0, 16, 16], "texture": "#3"}, "west": {"uv": [10, 0, 13, 16], "texture": "#4"}, - "up": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#4"}, - "down": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#4"} + "up": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 0, 3, 16], "rotation": 90, "texture": "#5"} } }, { "from": [0, 0, 6], "to": [16, 16, 10], "faces": { - "east": {"uv": [3, 0, 7, 16], "texture": "#4"}, - "west": {"uv": [3, 0, 7, 16], "texture": "#4"}, - "up": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#4"}, - "down": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#4"} + "east": {"uv": [6, 0, 10, 16], "texture": "#4"}, + "west": {"uv": [6, 0, 10, 16], "texture": "#4"}, + "up": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#5"}, + "down": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#5"} } }, { "from": [15.95, 0.05, 6], "to": [0.05, 15.95, 10], "faces": { - "east": {"uv": [3, 0, 7, 16], "texture": "#4"}, - "west": {"uv": [3, 0, 7, 16], "texture": "#4"}, - "up": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#4"}, - "down": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#4"} + "east": {"uv": [6, 0, 10, 16], "texture": "#4"}, + "west": {"uv": [6, 0, 10, 16], "texture": "#4"}, + "up": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#5"}, + "down": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#5"} } } ] diff --git a/src/main/resources/assets/create/models/block/display_board/item.json b/src/main/resources/assets/create/models/block/display_board/item.json index e4bdba618..c457a70ae 100644 --- a/src/main/resources/assets/create/models/block/display_board/item.json +++ b/src/main/resources/assets/create/models/block/display_board/item.json @@ -5,8 +5,10 @@ "2": "create:block/flap_display_front", "3": "create:block/dark_metal_block", "4": "create:block/flap_display_side", - "1_2": "create:block/cogwheel", - "particle": "create:block/flap_display_front" + "5": "create:block/flap_display_top", + "6": "create:block/flap_display_inside", + "particle": "create:block/flap_display_front", + "1_2": "create:block/cogwheel" }, "elements": [ { @@ -100,10 +102,10 @@ "faces": { "north": {"uv": [0, 0, 16, 16], "texture": "#2"}, "east": {"uv": [13, 0, 16, 16], "texture": "#4"}, - "south": {"uv": [0, 0, 16, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#6"}, "west": {"uv": [0, 0, 3, 16], "texture": "#4"}, - "up": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#4"}, - "down": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#4"} + "up": {"uv": [0, 0, 3, 16], "rotation": 90, "texture": "#5"}, + "down": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#5"} } }, { @@ -111,32 +113,32 @@ "to": [16, 16, 13], "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 6]}, "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#3"}, - "east": {"uv": [0, 0, 3, 16], "texture": "#4"}, + "north": {"uv": [0, 0, 16, 16], "texture": "#6"}, + "east": {"uv": [3, 0, 6, 16], "texture": "#4"}, "south": {"uv": [0, 0, 16, 16], "texture": "#3"}, - "west": {"uv": [0, 0, 3, 16], "texture": "#4"}, - "up": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#4"}, - "down": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#4"} + "west": {"uv": [10, 0, 13, 16], "texture": "#4"}, + "up": {"uv": [7, 0, 10, 16], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 0, 3, 16], "rotation": 90, "texture": "#5"} } }, { "from": [0, 0, 6], "to": [16, 16, 10], "faces": { - "east": {"uv": [3, 0, 7, 16], "texture": "#4"}, - "west": {"uv": [3, 0, 7, 16], "texture": "#4"}, - "up": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#4"}, - "down": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#4"} + "east": {"uv": [6, 0, 10, 16], "texture": "#4"}, + "west": {"uv": [6, 0, 10, 16], "texture": "#4"}, + "up": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#5"}, + "down": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#5"} } }, { "from": [15.95, 0.05, 6], "to": [0.05, 15.95, 10], "faces": { - "east": {"uv": [3, 0, 7, 16], "texture": "#4"}, - "west": {"uv": [3, 0, 7, 16], "texture": "#4"}, - "up": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#4"}, - "down": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#4"} + "east": {"uv": [6, 0, 10, 16], "texture": "#4"}, + "west": {"uv": [6, 0, 10, 16], "texture": "#4"}, + "up": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#5"}, + "down": {"uv": [3, 0, 7, 16], "rotation": 90, "texture": "#5"} } } ], @@ -147,9 +149,11 @@ "color": 0, "children": [0, 1, 2, 3, 4, 5] }, - 6, - 7, - 8, - 9 + { + "name": "block", + "origin": [8, 8, 8], + "color": 0, + "children": [6, 7, 8, 9] + } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/flywheel/flywheel.obj b/src/main/resources/assets/create/models/block/flywheel/flywheel.obj index 152ce8b0e..11392429e 100644 --- a/src/main/resources/assets/create/models/block/flywheel/flywheel.obj +++ b/src/main/resources/assets/create/models/block/flywheel/flywheel.obj @@ -1,4 +1,4 @@ -# Blender v3.1.2 OBJ File: 'engine.blend' +# Blender v3.2.0 OBJ File: 'engine.blend' # www.blender.org mtllib flywheel.mtl o cube.008_cube.006 @@ -94,38 +94,6 @@ v 0.750000 0.812500 0.750000 v 0.750000 0.812500 0.250000 v 0.250000 0.812500 0.750000 v 0.250000 0.812500 0.250000 -v 1.068750 0.687500 1.873085 -v 1.068750 0.312500 1.873085 -v 0.940102 0.312500 1.562500 -v 0.940102 0.687500 1.562500 -v 1.873085 0.687500 1.068751 -v 1.873084 0.312500 1.068751 -v 1.562500 0.312500 0.940102 -v 1.562500 0.687500 0.940102 -v 1.873085 0.687500 -0.068750 -v 1.873085 0.312500 -0.068750 -v 1.562500 0.312500 0.059898 -v 1.562500 0.687500 0.059898 -v 1.068750 0.687500 -0.873084 -v 1.068750 0.312500 -0.873084 -v 0.940102 0.312500 -0.562500 -v 0.940102 0.687500 -0.562500 -v -0.068750 0.687500 -0.873084 -v -0.068750 0.312500 -0.873084 -v 0.059898 0.312500 -0.562500 -v 0.059898 0.687500 -0.562500 -v -0.873084 0.687500 -0.068750 -v -0.873084 0.312500 -0.068750 -v -0.562500 0.312500 0.059898 -v -0.562499 0.687500 0.059898 -v -0.873084 0.687500 1.068750 -v -0.873084 0.312500 1.068750 -v -0.562500 0.312500 0.940102 -v -0.562500 0.687500 0.940102 -v -0.068750 0.687500 1.873084 -v -0.068750 0.312500 1.873084 -v 0.059898 0.312500 1.562499 -v 0.059898 0.687500 1.562499 v 0.250000 0.375000 0.625000 v 0.062500 0.375000 0.625000 v 0.250000 0.187500 0.625000 @@ -244,6 +212,54 @@ v 0.625000 0.000000 0.375000 v 0.625000 0.000000 0.625000 v 0.625000 1.000000 0.375000 v 0.625000 1.000000 0.625000 +v 1.068750 0.312500 1.873085 +v 0.940102 0.312500 1.562500 +v 1.873084 0.312500 1.068751 +v 1.562500 0.312500 0.940102 +v 1.873085 0.312500 -0.068750 +v 1.562500 0.312500 0.059898 +v 1.068750 0.312500 -0.873084 +v 0.940102 0.312500 -0.562500 +v -0.068750 0.312500 -0.873084 +v 0.059898 0.312500 -0.562500 +v -0.873084 0.312500 -0.068750 +v -0.562500 0.312500 0.059898 +v -0.873084 0.312500 1.068750 +v -0.562500 0.312500 0.940102 +v -0.068750 0.312500 1.873084 +v 0.059898 0.312500 1.562499 +v 0.940102 0.500000 1.562500 +v 0.059898 0.500000 1.562499 +v 1.562500 0.500000 0.940102 +v 1.562500 0.500000 0.059898 +v 0.940102 0.500000 -0.562500 +v 0.059898 0.500000 -0.562500 +v -0.562500 0.500000 0.059898 +v -0.562500 0.500000 0.940102 +v 1.068750 0.500000 1.873085 +v -0.068750 0.500000 1.873084 +v 1.873085 0.500000 1.068751 +v 1.873085 0.500000 -0.068750 +v 1.068750 0.500000 -0.873084 +v -0.068750 0.500000 -0.873084 +v -0.873084 0.500000 -0.068750 +v -0.873084 0.500000 1.068750 +v 1.068750 0.687500 1.873085 +v 0.940102 0.687500 1.562500 +v 1.873084 0.687500 1.068751 +v 1.562500 0.687500 0.940102 +v 1.873085 0.687500 -0.068750 +v 1.562500 0.687500 0.059898 +v 1.068750 0.687500 -0.873084 +v 0.940102 0.687500 -0.562500 +v -0.068750 0.687500 -0.873084 +v 0.059898 0.687500 -0.562500 +v -0.873084 0.687500 -0.068750 +v -0.562500 0.687500 0.059898 +v -0.873084 0.687500 1.068750 +v -0.562500 0.687500 0.940102 +v -0.068750 0.687500 1.873084 +v 0.059898 0.687500 1.562499 vt 0.375000 0.000000 vt 0.625000 0.000000 vt 0.625000 1.000000 @@ -273,11 +289,11 @@ vt 0.562500 0.500000 vt 0.687500 0.500000 vt 0.687500 0.687500 vt 0.812500 1.000000 -vt 1.000000 1.000000 vt 0.906250 0.781250 vt 1.000000 1.000000 +vt 1.000000 1.000000 +vt 0.906250 0.781250 vt 0.812500 1.000000 -vt 0.906250 0.781250 vt 0.562500 0.687500 vt 0.562500 0.500000 vt 0.687500 0.500000 @@ -634,102 +650,6 @@ vt 0.218750 0.468750 vt 0.468750 0.468750 vt 0.468750 0.375000 vt 0.218750 0.375000 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.062500 0.468750 -vt 0.500000 0.468750 -vt 0.000000 0.812500 -vt 0.562500 0.812500 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.562500 0.812500 -vt 0.000000 0.812500 -vt 0.562500 1.000000 -vt 0.000000 1.000000 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.062500 0.468750 -vt 0.500000 0.468750 -vt 0.000000 0.812500 -vt 0.562500 0.812500 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.562500 0.812500 -vt 0.000000 0.812500 -vt 0.562500 1.000000 -vt 0.000000 1.000000 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.062500 0.468750 -vt 0.500000 0.468750 -vt 0.000000 0.812500 -vt 0.562500 0.812500 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.562500 0.812500 -vt 0.000000 0.812500 -vt 0.562500 1.000000 -vt 0.000000 1.000000 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.062500 0.468750 -vt 0.500000 0.468750 -vt 0.000000 0.812500 -vt 0.562500 0.812500 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.562500 0.812500 -vt 0.000000 0.812500 -vt 0.562500 1.000000 -vt 0.000000 1.000000 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.062500 0.468750 -vt 0.500000 0.468750 -vt 0.000000 0.812500 -vt 0.562500 0.812500 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.562500 0.812500 -vt 0.000000 0.812500 -vt 0.562500 1.000000 -vt 0.000000 1.000000 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.062500 0.468750 -vt 0.500000 0.468750 -vt 0.000000 0.812500 -vt 0.562500 0.812500 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.562500 0.812500 -vt 0.000000 0.812500 -vt 0.562500 1.000000 -vt 0.000000 1.000000 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.062500 0.468750 -vt 0.500000 0.468750 -vt 0.000000 0.812500 -vt 0.562500 0.812500 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.562500 0.812500 -vt 0.000000 0.812500 -vt 0.562500 1.000000 -vt 0.000000 1.000000 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.062500 0.468750 -vt 0.500000 0.468750 -vt 0.000000 0.812500 -vt 0.562500 0.812500 -vt 0.500000 0.656250 -vt 0.062500 0.656250 -vt 0.562500 0.812500 -vt 0.000000 0.812500 -vt 0.562500 1.000000 -vt 0.000000 1.000000 vt 0.125000 0.250000 vt 0.125000 0.312500 vt 0.031250 0.312500 @@ -798,130 +718,242 @@ vt 0.125000 0.312500 vt 0.125000 0.406250 vt 0.218750 0.406250 vt 0.218750 0.312500 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.7071 0.0000 0.7071 -vn 1.0000 0.0000 -0.0000 -vn 0.7071 0.0000 -0.7071 -vn -0.0000 0.0000 -1.0000 -vn -0.7071 0.0000 -0.7071 +vt 0.562500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.656250 +vt 0.500000 0.656250 +vt 0.562500 0.906250 +vt 0.000000 0.906250 +vt 0.562500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.656250 +vt 0.500000 0.656250 +vt 0.562500 0.906250 +vt 0.000000 0.906250 +vt 0.562500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.656250 +vt 0.500000 0.656250 +vt 0.562500 0.906250 +vt 0.000000 0.906250 +vt 0.562500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.656250 +vt 0.500000 0.656250 +vt 0.562500 0.906250 +vt 0.000000 0.906250 +vt 0.562500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.656250 +vt 0.500000 0.656250 +vt 0.562500 0.906250 +vt 0.000000 0.906250 +vt 0.562500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.656250 +vt 0.500000 0.656250 +vt 0.562500 0.906250 +vt 0.000000 0.906250 +vt 0.562500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.656250 +vt 0.500000 0.656250 +vt 0.562500 0.906250 +vt 0.000000 0.906250 +vt 0.562500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.656250 +vt 0.500000 0.656250 +vt 0.562500 0.906250 +vt 0.000000 0.906250 +vt 0.062500 0.562500 +vt 0.500000 0.562500 +vt 0.062500 0.562500 +vt 0.500000 0.562500 +vt 0.062500 0.562500 +vt 0.500000 0.562500 +vt 0.062500 0.562500 +vt 0.500000 0.562500 +vt 0.062500 0.562500 +vt 0.500000 0.562500 +vt 0.062500 0.562500 +vt 0.500000 0.562500 +vt 0.062500 0.562500 +vt 0.500000 0.562500 +vt 0.062500 0.562500 +vt 0.500000 0.562500 +vt 0.562500 0.812500 +vt 0.500000 0.656250 +vt 0.062500 0.656250 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.500000 0.656250 +vt 0.062500 0.656250 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.500000 0.656250 +vt 0.062500 0.656250 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.500000 0.656250 +vt 0.062500 0.656250 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.500000 0.656250 +vt 0.062500 0.656250 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.500000 0.656250 +vt 0.062500 0.656250 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.500000 0.656250 +vt 0.062500 0.656250 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.500000 0.656250 +vt 0.062500 0.656250 +vt 0.000000 0.812500 vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.7071 0.0000 0.7071 +vn 0.7071 -0.0000 -0.7071 +vn -0.7071 0.0000 -0.7071 vn -0.7071 0.0000 0.7071 -vn -0.6060 -0.2741 -0.7468 -vn 0.0995 -0.2741 -0.9565 -vn 0.3827 -0.0000 -0.9239 -vn -0.3827 -0.0000 -0.9239 -vn -0.3822 0.8881 -0.2554 -vn -0.0897 0.8881 -0.4509 vn -0.2554 -0.8881 0.3822 vn -0.4509 -0.8881 0.0896 -vn -0.0207 0.3739 0.9272 -vn -0.6703 0.3739 0.6410 +vn 0.6066 -0.0001 0.7950 +vn -0.3699 0.2562 0.8930 vn -0.3827 -0.0000 0.9239 vn 0.3827 -0.0000 0.9239 -vn -0.9565 -0.2741 -0.0995 -vn -0.9239 -0.0000 -0.3827 -vn -0.4509 0.8881 0.0897 vn 0.0896 -0.8881 0.4509 -vn 0.6410 0.3739 0.6703 +vn 0.9911 -0.0001 0.1332 vn 0.9239 -0.0000 0.3827 -vn -0.7468 -0.2741 0.6060 -vn -0.9239 0.0000 0.3827 -vn -0.2554 0.8881 0.3822 vn 0.3822 -0.8881 0.2554 -vn 0.9272 0.3739 0.0207 +vn 0.7950 -0.0001 -0.6066 vn 0.9239 0.0000 -0.3827 -vn -0.0995 -0.2741 0.9565 -vn 0.0897 0.8881 0.4509 vn 0.4509 -0.8881 -0.0896 -vn 0.6703 0.3739 -0.6410 -vn 0.6060 -0.2741 0.7468 -vn 0.3822 0.8881 0.2554 +vn 0.1332 -0.0002 -0.9911 +vn 0.3827 0.0000 -0.9239 vn 0.2554 -0.8881 -0.3822 -vn 0.0207 0.3739 -0.9272 -vn 0.9565 -0.2741 0.0995 -vn 0.4509 0.8881 -0.0897 +vn -0.6066 0.0000 -0.7950 +vn -0.3827 -0.0000 -0.9239 vn -0.0896 -0.8881 -0.4509 -vn -0.6410 0.3739 -0.6703 -vn 0.7468 -0.2741 -0.6060 -vn 0.2554 0.8881 -0.3822 +vn -0.9911 0.0000 -0.1332 +vn -0.9239 -0.0000 -0.3827 vn -0.3822 -0.8881 -0.2554 -vn -0.9272 0.3739 -0.0207 +vn -0.7950 -0.0001 0.6066 +vn -0.9239 -0.0000 0.3827 +vn 0.0995 -0.2741 -0.9565 +vn 0.7468 -0.2741 -0.6060 +vn 0.8184 0.0000 -0.5746 +vn 0.3735 -0.2177 -0.9017 +vn 0.9565 -0.2741 0.0995 +vn 0.9850 0.0000 0.1724 +vn 0.6060 -0.2741 0.7468 +vn 0.5746 0.0000 0.8184 +vn -0.0995 -0.2741 0.9565 +vn -0.1724 -0.0001 0.9850 +vn -0.7468 -0.2741 0.6060 +vn -0.8184 0.0000 0.5746 +vn -0.9565 -0.2741 -0.0995 +vn -0.9850 0.0000 -0.1724 +vn -0.6060 -0.2741 -0.7468 +vn -0.5746 0.0000 -0.8184 +vn -0.2554 0.8881 0.3822 +vn -0.4509 0.8881 0.0896 +vn 0.0896 0.8881 0.4509 +vn 0.3822 0.8881 0.2554 +vn 0.4509 0.8881 -0.0896 +vn 0.2554 0.8881 -0.3822 +vn -0.0896 0.8881 -0.4509 +vn -0.3822 0.8881 -0.2554 +vn 0.0995 0.2741 -0.9565 +vn 0.7468 0.2741 -0.6060 +vn 0.9565 0.2741 0.0995 +vn 0.6060 0.2741 0.7468 +vn -0.0995 0.2741 0.9565 +vn -0.7468 0.2741 0.6060 +vn -0.9566 0.2739 -0.0994 +vn -0.6060 0.2741 -0.7468 usemtl m_1 s off -f 235/1/1 236/2/1 238/3/1 237/4/1 -f 241/5/2 242/6/2 240/7/2 239/8/2 -f 237/9/3 241/10/3 239/11/3 235/12/3 -f 242/13/4 238/14/4 236/15/4 240/16/4 +f 203/1/1 204/2/1 206/3/1 205/4/1 +f 209/5/2 210/6/2 208/7/2 207/8/2 +f 205/9/3 209/10/3 207/11/3 203/12/3 +f 210/13/4 206/14/4 204/15/4 208/16/4 usemtl m_2 -f 237/17/5 238/18/5 242/19/5 241/20/5 -f 239/21/6 240/22/6 236/23/6 235/24/6 +f 205/17/5 206/18/5 210/19/5 209/20/5 +f 207/21/6 208/22/6 204/23/6 203/24/6 usemtl m_0 f 19/25/4 74/26/4 9/27/4 20/28/4 -f 9/29/5 20/30/5 41/31/5 -f 19/32/6 74/33/6 40/34/6 +f 9/29/6 41/30/6 20/31/6 +f 19/32/5 40/33/5 74/34/5 f 18/35/7 19/36/7 20/37/7 21/38/7 -f 20/39/5 21/40/5 41/31/5 -f 18/41/6 19/42/6 40/34/6 +f 20/39/6 41/30/6 21/40/6 +f 18/41/5 40/33/5 19/42/5 f 28/43/2 18/44/2 21/45/2 38/46/2 -f 21/47/5 38/48/5 41/31/5 -f 28/49/6 18/50/6 40/34/6 +f 21/47/6 41/30/6 38/48/6 +f 28/49/5 40/33/5 18/50/5 f 37/51/8 28/52/8 38/53/8 39/54/8 -f 38/55/5 39/56/5 41/31/5 -f 37/57/6 28/58/6 40/34/6 +f 38/55/6 41/30/6 39/56/6 +f 37/57/5 40/33/5 28/58/5 f 58/59/3 37/60/3 39/61/3 59/62/3 -f 39/63/5 59/64/5 41/31/5 -f 58/65/6 37/66/6 40/34/6 +f 39/63/6 41/30/6 59/64/6 +f 58/65/5 40/33/5 37/66/5 f 65/67/9 58/68/9 59/69/9 60/70/9 -f 59/71/5 60/72/5 41/31/5 -f 65/73/6 58/74/6 40/34/6 +f 59/71/6 41/30/6 60/72/6 +f 65/73/5 40/33/5 58/74/5 f 75/75/1 65/76/1 60/77/1 76/78/1 -f 60/79/5 76/80/5 41/31/5 -f 75/81/6 65/82/6 40/34/6 +f 60/79/6 41/30/6 76/80/6 +f 75/81/5 40/33/5 65/82/5 f 74/83/10 75/84/10 76/85/10 9/86/10 -f 76/87/5 9/88/5 41/31/5 -f 74/89/6 75/90/6 40/34/6 -f 133/91/1 134/92/1 136/93/1 135/94/1 -f 135/95/5 136/96/5 140/97/5 139/98/5 -f 139/99/2 140/100/2 138/101/2 137/102/2 -f 137/103/6 138/104/6 134/105/6 133/106/6 -f 140/107/4 136/108/4 134/109/4 138/110/4 -f 148/111/2 150/112/2 151/113/2 149/114/2 -f 150/115/5 154/116/5 155/117/5 151/118/5 -f 154/119/1 152/120/1 153/121/1 155/122/1 -f 152/123/6 148/124/6 149/125/6 153/126/6 -f 155/127/4 153/128/4 149/129/4 151/130/4 -f 164/131/1 166/132/1 167/133/1 165/134/1 -f 166/135/6 170/136/6 171/137/6 167/138/6 -f 170/139/2 168/140/2 169/141/2 171/142/2 -f 168/143/5 164/144/5 165/145/5 169/146/5 -f 171/147/4 169/148/4 165/149/4 167/150/4 -f 180/151/2 181/152/2 183/153/2 182/154/2 -f 182/155/6 183/156/6 187/157/6 186/158/6 -f 186/159/1 187/160/1 185/161/1 184/162/1 -f 184/163/5 185/164/5 181/165/5 180/166/5 -f 187/167/4 183/168/4 181/169/4 185/170/4 -f 192/171/1 194/172/1 195/173/1 193/174/1 -f 194/175/5 198/176/5 199/177/5 195/178/5 -f 198/179/2 196/180/2 197/181/2 199/182/2 -f 196/183/6 192/184/6 193/185/6 197/186/6 -f 199/187/3 197/188/3 193/189/3 195/190/3 -f 204/191/2 205/192/2 207/193/2 206/194/2 -f 206/195/5 207/196/5 211/197/5 210/198/5 -f 210/199/1 211/200/1 209/201/1 208/202/1 -f 208/203/6 209/204/6 205/205/6 204/206/6 -f 211/207/3 207/208/3 205/209/3 209/210/3 -f 216/211/1 217/212/1 219/213/1 218/214/1 -f 218/215/6 219/216/6 223/217/6 222/218/6 -f 222/219/2 223/220/2 221/221/2 220/222/2 -f 220/223/5 221/224/5 217/225/5 216/226/5 -f 223/227/3 219/228/3 217/229/3 221/230/3 -f 227/231/2 229/232/2 230/233/2 228/234/2 -f 229/235/6 233/236/6 234/237/6 230/238/6 -f 233/239/1 231/240/1 232/241/1 234/242/1 -f 231/243/5 227/244/5 228/245/5 232/246/5 -f 234/247/3 232/248/3 228/249/3 230/250/3 +f 76/87/6 41/30/6 9/88/6 +f 74/89/5 40/33/5 75/90/5 +f 101/91/1 102/92/1 104/93/1 103/94/1 +f 103/95/5 104/96/5 108/97/5 107/98/5 +f 107/99/2 108/100/2 106/101/2 105/102/2 +f 105/103/6 106/104/6 102/105/6 101/106/6 +f 108/107/4 104/108/4 102/109/4 106/110/4 +f 116/111/2 118/112/2 119/113/2 117/114/2 +f 118/115/5 122/116/5 123/117/5 119/118/5 +f 122/119/1 120/120/1 121/121/1 123/122/1 +f 120/123/6 116/124/6 117/125/6 121/126/6 +f 123/127/4 121/128/4 117/129/4 119/130/4 +f 132/131/1 134/132/1 135/133/1 133/134/1 +f 134/135/6 138/136/6 139/137/6 135/138/6 +f 138/139/2 136/140/2 137/141/2 139/142/2 +f 136/143/5 132/144/5 133/145/5 137/146/5 +f 139/147/4 137/148/4 133/149/4 135/150/4 +f 148/151/2 149/152/2 151/153/2 150/154/2 +f 150/155/6 151/156/6 155/157/6 154/158/6 +f 154/159/1 155/160/1 153/161/1 152/162/1 +f 152/163/5 153/164/5 149/165/5 148/166/5 +f 155/167/4 151/168/4 149/169/4 153/170/4 +f 160/171/1 162/172/1 163/173/1 161/174/1 +f 162/175/5 166/176/5 167/177/5 163/178/5 +f 166/179/2 164/180/2 165/181/2 167/182/2 +f 164/183/6 160/184/6 161/185/6 165/186/6 +f 167/187/3 165/188/3 161/189/3 163/190/3 +f 172/191/2 173/192/2 175/193/2 174/194/2 +f 174/195/5 175/196/5 179/197/5 178/198/5 +f 178/199/1 179/200/1 177/201/1 176/202/1 +f 176/203/6 177/204/6 173/205/6 172/206/6 +f 179/207/3 175/208/3 173/209/3 177/210/3 +f 184/211/1 185/212/1 187/213/1 186/214/1 +f 186/215/6 187/216/6 191/217/6 190/218/6 +f 190/219/2 191/220/2 189/221/2 188/222/2 +f 188/223/5 189/224/5 185/225/5 184/226/5 +f 191/227/3 187/228/3 185/229/3 189/230/3 +f 195/231/2 197/232/2 198/233/2 196/234/2 +f 197/235/6 201/236/6 202/237/6 198/238/6 +f 201/239/1 199/240/1 200/241/1 202/242/1 +f 199/243/5 195/244/5 196/245/5 200/246/5 +f 202/247/3 200/248/3 196/249/3 198/250/3 s 1 f 8/251/6 2/252/6 1/253/6 7/254/6 f 2/252/2 4/255/2 3/256/2 1/253/2 @@ -931,10 +963,10 @@ f 17/263/6 11/264/6 10/265/6 16/266/6 f 11/264/8 13/267/8 12/268/8 10/265/8 f 13/269/5 15/270/5 14/271/5 12/272/5 f 15/270/10 17/273/10 16/274/10 14/271/10 -f 27/275/6 201/276/6 22/277/6 26/278/6 -f 201/276/3 24/279/3 23/280/3 22/277/3 -f 24/281/5 173/282/5 25/283/5 23/284/5 -f 173/282/4 27/285/4 26/286/4 25/283/4 +f 27/275/6 169/276/6 22/277/6 26/278/6 +f 169/276/3 24/279/3 23/280/3 22/277/3 +f 24/281/5 141/282/5 25/283/5 23/284/5 +f 141/282/4 27/285/4 26/286/4 25/283/4 f 36/287/6 30/288/6 29/289/6 35/290/6 f 30/288/9 32/291/9 31/292/9 29/289/9 f 32/293/5 34/294/5 33/295/5 31/296/5 @@ -947,10 +979,10 @@ f 57/311/6 51/312/6 50/313/6 56/314/6 f 51/312/10 53/315/10 52/316/10 50/313/10 f 53/317/5 55/318/5 54/319/5 52/320/5 f 55/318/8 57/321/8 56/322/8 54/319/8 -f 189/323/6 126/324/6 61/325/6 64/326/6 -f 126/324/4 157/327/4 62/328/4 61/325/4 -f 157/329/5 213/330/5 63/331/5 62/332/5 -f 213/330/3 189/333/3 64/334/3 63/331/3 +f 157/323/6 94/324/6 61/325/6 64/326/6 +f 94/324/4 125/327/4 62/328/4 61/325/4 +f 125/329/5 181/330/5 63/331/5 62/332/5 +f 181/330/3 157/333/3 64/334/3 63/331/3 f 73/335/6 67/336/6 66/337/6 72/338/6 f 67/336/7 69/339/7 68/340/7 66/337/7 f 69/341/5 71/342/5 70/343/5 68/344/5 @@ -967,67 +999,83 @@ f 87/377/4 85/378/4 89/379/4 91/380/4 f 92/381/1 88/382/1 87/383/1 91/384/1 f 90/385/5 92/386/5 91/380/5 89/379/5 f 86/387/3 88/388/3 92/389/3 90/390/3 -f 95/391/11 123/392/12 124/393/13 96/394/14 -f 121/395/5 93/396/5 96/397/15 124/398/16 -f 94/399/17 122/400/18 123/392/6 95/391/6 -f 93/401/19 121/402/20 122/400/21 94/399/22 -f 99/403/23 95/404/11 96/405/14 100/406/24 -f 93/407/5 97/408/5 100/409/25 96/410/15 -f 98/411/26 94/412/17 95/404/6 99/403/6 -f 97/413/27 93/414/19 94/412/22 98/411/28 -f 103/415/29 99/416/23 100/417/24 104/418/30 -f 97/419/5 101/420/5 104/421/31 100/422/25 -f 102/423/32 98/424/26 99/416/6 103/415/6 -f 101/425/33 97/426/27 98/424/28 102/423/34 -f 107/427/35 103/428/29 104/429/30 108/430/21 -f 101/431/5 105/432/5 108/433/36 104/434/31 -f 106/435/37 102/436/32 103/428/6 107/427/6 -f 105/437/38 101/438/33 102/436/34 106/435/13 -f 111/439/39 107/440/35 108/441/21 112/442/22 -f 105/443/5 109/444/5 112/445/40 108/446/36 -f 110/447/41 106/448/37 107/440/6 111/439/6 -f 109/449/42 105/450/38 106/448/13 110/447/14 -f 115/451/43 111/452/39 112/453/22 116/454/28 -f 109/455/5 113/456/5 116/457/44 112/458/40 -f 114/459/45 110/460/41 111/452/6 115/451/6 -f 113/461/46 109/462/42 110/460/14 114/459/24 -f 119/463/47 115/464/43 116/465/28 120/466/34 -f 113/467/5 117/468/5 120/469/48 116/470/44 -f 118/471/49 114/472/45 115/464/6 119/463/6 -f 117/473/50 113/474/46 114/472/24 118/471/30 -f 123/475/12 119/476/47 120/477/34 124/478/13 -f 117/479/5 121/480/5 124/481/16 120/482/48 -f 122/483/18 118/484/49 119/476/6 123/475/6 -f 121/485/20 117/486/50 118/484/30 122/483/21 -f 131/487/1 128/488/1 126/489/1 129/490/1 -f 132/491/6 127/492/6 128/488/6 131/487/6 -f 126/493/4 128/494/4 127/495/4 125/496/4 -f 146/497/2 144/498/2 27/499/2 143/500/2 -f 147/501/6 146/497/6 143/500/6 142/502/6 -f 27/503/4 141/504/4 142/505/4 143/506/4 -f 162/507/1 160/508/1 157/509/1 159/510/1 -f 163/511/5 162/507/5 159/510/5 158/512/5 -f 157/513/4 156/514/4 158/515/4 159/516/4 -f 178/517/2 175/518/2 173/519/2 176/520/2 -f 179/521/5 174/522/5 175/518/5 178/517/5 -f 173/523/4 175/524/4 174/525/4 172/526/4 -f 131/487/1 129/490/1 189/527/1 191/528/1 -f 132/491/6 131/487/6 191/528/6 190/529/6 -f 189/530/3 188/531/3 190/532/3 191/533/3 -f 146/497/2 203/534/2 201/535/2 144/498/2 -f 147/501/6 202/536/6 203/534/6 146/497/6 -f 201/537/3 203/538/3 202/539/3 200/540/3 -f 162/507/1 215/541/1 213/542/1 160/508/1 -f 163/511/5 214/543/5 215/541/5 162/507/5 -f 213/544/3 215/545/3 214/546/3 212/547/3 -f 178/517/2 176/520/2 24/548/2 226/549/2 -f 179/521/5 178/517/5 226/549/5 225/550/5 -f 24/551/3 224/552/3 225/553/3 226/554/3 -l 132 130 -l 129 130 +f 99/391/1 96/392/1 94/393/1 97/394/1 +f 100/395/6 95/396/6 96/392/6 99/391/6 +f 94/397/4 96/398/4 95/399/4 93/400/4 +f 114/401/2 112/402/2 27/403/2 111/404/2 +f 115/405/6 114/401/6 111/404/6 110/406/6 +f 27/407/4 109/408/4 110/409/4 111/410/4 +f 130/411/1 128/412/1 125/413/1 127/414/1 +f 131/415/5 130/411/5 127/414/5 126/416/5 +f 125/417/4 124/418/4 126/419/4 127/420/4 +f 146/421/2 143/422/2 141/423/2 144/424/2 +f 147/425/5 142/426/5 143/422/5 146/421/5 +f 141/427/4 143/428/4 142/429/4 140/430/4 +f 99/391/1 97/394/1 157/431/1 159/432/1 +f 100/395/6 99/391/6 159/432/6 158/433/6 +f 157/434/3 156/435/3 158/436/3 159/437/3 +f 114/401/2 171/438/2 169/439/2 112/402/2 +f 115/405/6 170/440/6 171/438/6 114/401/6 +f 169/441/3 171/442/3 170/443/3 168/444/3 +f 130/411/1 183/445/1 181/446/1 128/412/1 +f 131/415/5 182/447/5 183/445/5 130/411/5 +f 181/448/3 183/449/3 182/450/3 180/451/3 +f 146/421/2 144/424/2 24/452/2 194/453/2 +f 147/425/5 146/421/5 194/453/5 193/454/5 +f 24/455/3 192/456/3 193/457/3 194/458/3 +f 211/459/11 225/460/12 226/461/6 212/462/6 +f 235/463/13 236/464/14 225/460/15 211/459/16 +f 213/465/17 211/466/11 212/467/6 214/468/6 +f 237/469/18 235/470/13 211/466/16 213/465/19 +f 215/471/20 213/472/17 214/473/6 216/474/6 +f 238/475/21 237/476/18 213/472/19 215/471/22 +f 217/477/23 215/478/20 216/479/6 218/480/6 +f 239/481/24 238/482/21 215/478/22 217/477/25 +f 219/483/26 217/484/23 218/485/6 220/486/6 +f 240/487/27 239/488/24 217/484/25 219/483/28 +f 221/489/29 219/490/26 220/491/6 222/492/6 +f 241/493/30 240/494/27 219/490/28 221/489/31 +f 223/495/32 221/496/29 222/497/6 224/498/6 +f 242/499/33 241/500/30 221/496/31 223/495/34 +f 225/501/12 223/502/32 224/503/6 226/504/6 +f 236/505/14 242/506/33 223/502/34 225/501/15 +f 226/504/35 224/503/36 234/507/37 228/508/38 +f 224/498/36 222/497/39 233/509/40 234/510/37 +f 222/492/39 220/491/41 232/511/42 233/512/40 +f 220/486/41 218/485/43 231/513/44 232/514/42 +f 218/480/43 216/479/45 230/515/46 231/516/44 +f 216/474/45 214/473/47 229/517/48 230/518/46 +f 214/468/47 212/467/49 227/519/50 229/520/48 +f 212/462/49 226/461/35 228/521/38 227/522/50 +f 243/523/51 244/524/5 258/525/5 257/526/52 +f 235/463/13 243/523/16 257/526/15 236/464/14 +f 245/527/53 246/528/5 244/529/5 243/530/51 +f 237/469/18 245/527/19 243/530/16 235/470/13 +f 247/531/54 248/532/5 246/533/5 245/534/53 +f 238/475/21 247/531/22 245/534/19 237/476/18 +f 249/535/55 250/536/5 248/537/5 247/538/54 +f 239/481/24 249/535/25 247/538/22 238/482/21 +f 251/539/56 252/540/5 250/541/5 249/542/55 +f 240/487/27 251/539/28 249/542/25 239/488/24 +f 253/543/57 254/544/5 252/545/5 251/546/56 +f 241/493/30 253/543/31 251/546/28 240/494/27 +f 255/547/58 256/548/5 254/549/5 253/550/57 +f 242/499/33 255/547/34 253/550/31 241/500/30 +f 257/551/52 258/552/5 256/553/5 255/554/58 +f 236/505/14 257/551/15 255/554/34 242/506/33 +f 258/552/59 228/508/38 234/507/37 256/553/60 +f 256/548/60 234/510/37 233/509/40 254/549/61 +f 254/544/61 233/512/40 232/511/42 252/545/62 +f 252/540/62 232/514/42 231/513/44 250/541/63 +f 250/536/63 231/516/44 230/515/46 248/537/64 +f 248/532/64 230/518/46 229/517/48 246/533/65 +f 246/528/65 229/520/48 227/519/50 244/529/66 +f 244/524/66 227/522/50 228/521/38 258/525/59 +l 100 98 +l 97 98 +l 115 113 +l 112 113 +l 131 129 +l 128 129 l 147 145 l 144 145 -l 163 161 -l 160 161 -l 179 177 -l 176 177 diff --git a/src/main/resources/assets/create/ponder/empty_blaze_burner.nbt b/src/main/resources/assets/create/ponder/empty_blaze_burner.nbt index b134772cd16d3450c93f884924efce1d5ea4c0d8..bfb4789690902939736914fa61aa3e4da650e596 100644 GIT binary patch literal 491 zcmV-Qslte6Ks&bhYn3(5uf@fl4o{5QhCMM>Yn16Xr zE^09-fvd`LD7HN|AMpn^;jtD~Z`2pr;tE?Kl~i~B_Z*nqz;$iV?SES};vUyK|J{td zte3_3Loo)6PvYk-3R4|F&pulL@_Mi z3oA;P4JXhsv~|@=g|!h|8#?ok_uN$qJi1W+CXg@BWUH%n=K(ZSDHKi_WW%NqBh@(u zeiv{xESK8)4nz}&BAQbOvOXM540wdfDZEQj<~vQTx$lN*lX7B|ROWpR^m`c+k9Sb>D2zxS0RT hqdymq+76SF)^ literal 481 zcmV<70UrJziwFP!000000F9Kvj?*v@h9|aDnyk=LEl39VO9LH5d3f)3Y!U;{MsC5Vtokl4p^kYNHW@RI@D2qL8sLjF9y^3WlamCG6 zv}uIl?&6k>b@QtcNvLVZ?FZRScAw>s{<%)4`~2}fpY#5Hp6}=NeLv6FGHa#Q*GK)l z=y{A0+L+!wuZ9VXPn-bK*Wn5d1?n#}_V2;p3m(Q%!*Nz)T^;uvI-vYH(TU_~d+I@$Bx1a76aE5! zE|W=fd6diP#^Jd8tj3BaE;LrE;+W1mz0abWOS5Vq?dzd|5&^Uu7 zSh0TR*9EYtdPqy$xQvmwVoA$Sbaf^LTfYqC@D5r7zQ}2r`<)ULlcJ{$Th}L!TYsKh`+*}tZ;@#!OYA@xfP-6Tnn6ChuLr;mYb|9lNV4jMuQUv) z8D;68ky5aW!!!oygKQc@no$ zO91>A=~}ZNi^_V}k41Gb>id1>Uh%tsrP`&0Y~4~RHvB|{}!E7-KZbFE;$5Q|^QDBcVuGg3=TR)(aOjQ3H` zhG1Chp|{8NLO3O$kduj;Iji-b#zE}8WpNN*8-=@mjND@y9-8_N0^{B2ebzmN-IN-u z-EPf1rDp1Mbwu{Q!3CM4E5}yF@4b~{+w+d@DhjauNdZ9=2UHrZinqFT#HJ^M?phOI zyH;U?C_Y|^>vuodB$~HqH-Uy>5UCm3uq{Y=&ApQJU}<)BI(S{HfLsbI05dS$THQ1_ zGsA!QsV*H0=z=ux25R=Dw9cPeW}bjEW*FrW7DyH)l79~ol93{rh&yo+eODn z6H?{_F9{rb<3->uPEIDe_i>rGDrqRXoZ@+(!y2#RjVNw5v;S$$%Q8IW5lf{mTq>Vj zNXR#cZlcAb(WV=Lr0BoOtf~wbP6sn{IG=`=^B$=B@BGMiqh0jXxWz`yu>yd zYMW(^yUm8wHI4KE-7kT$QSzl?g1nYLIxCv-YUEXQI6WVIu%Hmn+W@`0I(JU?UPseZ zt?D(=y{KJ75-@mCeWHFN$kh`dJb#mvLhxL?f8 zrXzcExpx9Zu2LqgsM)3HjGuHGWn7VX+QW@ipt5sg`5#O-_!#eO^N8{RU*^;A(Ye7l zAyA^g7rvZI|Fn5a*huK%3Wp|r3yLMQLVtkWN`19?Na@KYzKZJO z3RSSuiH9c7pFB$txuCAqoho3Vr`dUzv)Hr_n|-;DpNw%qgWSvRxH+*;LJ1^{BDJ*s E1^oNExBvhE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/ponder/train_track/portal.nbt b/src/main/resources/assets/create/ponder/train_track/portal.nbt new file mode 100644 index 0000000000000000000000000000000000000000..89a02d9ca0419ea273dacca1c3e5ae80e462503e GIT binary patch literal 1251 zcmb2|=3oGW|3`10?YnIz!kX~v`lh-2)pVmuZl}LcJ8gD)(F?7N-G(Mc$HkPo+guKx z+~Xs^%K!4!Dc@e)kaD%!)9ojGz%cF4%SkqSmf3u8TDi09_9s7gua%dR-^ty4S-H+A z_V%S|yFy?6ajFWQ`N(;9f&Cxb@Qe4h?0E4>Kgct?c=c}WV?GK73lF&13j556NDylD zWc@so)5pz6;e>#iLUCK7SoYxh?_6(+{2dX~+D-N5`P^ zz!Ik7clt}^_U>QADa_%cVet2RxJ_bGqbG}+=$Uji14+Y11?L$JXCxs$>0~VhJAKB? z1$?IsL{c~o|AP6k7UEM#z{R~=nPO)E^r%x~C(Gx=T8_yaK3X&Qfx*@@1A8ce%$dOf z3@a3Kz(EfRx62cG+CMjfB+ofZfWikDJ;1=S1_mWi`g4KW2?0ciqqyk|3%1AvI<4mW z(}(xNPM+8)#be~74)prO14o!9bMQomD;X?zw}`l&bLh+UslLE8Q&TO-_btgT@mF!2 z&y0UH(}b7J|Gb&=@##v7`OksuhuxgQ+&%gJ%8utQCY;k(_o+X(Uad!8e!ipb{W-O2 zf-_D(XE+~WH@Rn4Yu77j>+sX_ePdrAnzpR&hn88eew|T!)!%h@UhXR09~S@KOMTX# zYx}lF?_IU^_x{Kg&(ptkYks*p^i%VhUG-v{D$(V{hbVt&5e@GdJ~YIgWx?&&U-#pD?dT!j^RVQZsb@_Soo=oZG->y}&#Z&hNehl26_cK54f3Wo@^;y*$2p`_{k&Eo9WX6OE@ST!EIFV_4@fA_0*2e$UEw9DqG+ICYc{q|$m%Zqcj vB$a==7kmEqI+xw2S7&`K_}zKsQ*7Sn@4GDT%U=DY|5d-p>B^;7Dhvz&dP80r literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/flap_display_front.png b/src/main/resources/assets/create/textures/block/flap_display_front.png index 88763675fba6223f2749d61336c4150c7ee7386b..8b3a52ea5bc82a0f0479a9aedb0d2fec4d4d11dc 100644 GIT binary patch delta 160 zcmaFFc$0C0W4&B}Pl&6Lk+G?%X;4sTLPD~&jjf4^skXMRmzTGOhNiZ*wtsEPbp{3o z&H|6fVg?4jLm0fn&}O1>Kxt7(TpZsa zp1H>9B@G75$`^RtHduNIOztpZPwEP?JbY%RtgNwQdRYkr!y8wP_~^X~!axHVJYD@< J);T3K0RRn;E-?TA delta 169 zcmcb~_=s_WW4%g%Pl#)JVq#=OL_$J>sfmTXos*}BhrhqSgoK2)wyueZskM!*ySs;d z-ZXUv1_sUokH}&M2EM}}%y>M1MG8>R-P6S}MB;LCf`C9kKthT@ff9$up~b9EVW=-ET+tQX~Gu`w`gwGG%I S>j5;9fx*+&&t;ucLK6TH(=hx1 diff --git a/src/main/resources/assets/create/textures/block/flap_display_inside.png b/src/main/resources/assets/create/textures/block/flap_display_inside.png new file mode 100644 index 0000000000000000000000000000000000000000..b02371d7b89c9c66c362525167140c08df72195a GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFns?*V(GQ0LNocS?Z+axfhKKH^E54rRMk=Oh44WcdcmNBZC z`002!HHLK?d8_P|N(zgeacUO(dw2a=6{noUEcS++&prFu%gk(22cMT0q6BAQ2 zGYcIZU2Sb`Ya3f_ZCx)fZ=g=QmCW;i6n{yOU+{kvz;NZxjDBOTGgP}j&jY0`J@u>Rts32zMBp8sfmwRWwX x_y6k-{rV}x|AsN-)o$hk%nC*vg{P)(P6RrD!PC{xWt~$(69E1MWX%8o delta 458 zcmV;*0X6=!0`&us83+ad001BJ|6!3KAb$yPNLh0L01m#|o$H?M;v45~fzjeI<&6F-WWB>pF07*qoM6N<$g4oB^ AIRF3v diff --git a/src/main/resources/assets/create/textures/block/flap_display_top.png b/src/main/resources/assets/create/textures/block/flap_display_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c0af457c12c169ef348efd34ae03218b9fd6dd64 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|&0G|+7Q&UqTBVz*tgM@_SprBAUH+KyUO&uLwGcyZqZEY_vZ=k{*#xLIk zDV~xbzu^A}z#w%0+&Q2)XMsm#F#`kNVGw3Kp1&dmC>ZGJ;uxY4+}a<>cR+!IRnt!V z!N2diQmV_Az5TPtKvBn~#8NJW`Oy=G6RBOZqRvlCy&~^4{eklX|0~=3ZXB|5l_~2m neXO}Ho}tvqqj1S(@6FOxvpH^^nQO2eXgGtXtDnm{r-UW|=pk0# literal 0 HcmV?d00001