diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 63087dd59..4c93571f0 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -402,19 +402,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 2b12f3cf99e498899207a8c4855210e7b5dc55cd assets/create/lang/en_ud.json -73cd8748a2a6277ec1ec1e4c0af4fe9cffbda8ce assets/create/lang/en_us.json -9777ac3724ec7d626437b12b67b533f6894afd29 assets/create/lang/unfinished/de_de.json -91e44b23201b2165b64837d9a8d0f3d5313a8058 assets/create/lang/unfinished/es_es.json -c859cb5f44c409adcdfa3de65642eb1f6c8fd5bc assets/create/lang/unfinished/es_mx.json -512e8b757d5a6b511a946f3cb56ce90653885f04 assets/create/lang/unfinished/fr_fr.json -af6c1fdea2304970eacaf8413e85fab5c0731918 assets/create/lang/unfinished/it_it.json -96063374af85f0f269b64262c319b3bde9623d45 assets/create/lang/unfinished/ja_jp.json -b5f1962be245e0042255d23c18de532f84a3b0fa assets/create/lang/unfinished/ko_kr.json -14b0b2b88be1d3d9d064f26a36b28e6762522809 assets/create/lang/unfinished/nl_nl.json -a8f5e1dcb5db76b2daffb056841fd0b785af5597 assets/create/lang/unfinished/pt_br.json -d06fb4feed18286366ed958044ab82d1bf2d15b8 assets/create/lang/unfinished/ru_ru.json -3498b6288bce0184992a2a4051c9416d76ad1a13 assets/create/lang/unfinished/zh_cn.json -8c26a0392f613db72705d56f46e8fdaa7e117dc6 assets/create/lang/unfinished/zh_tw.json +e371fd4fccf90c4ee6f2fbea91ea5d70e3d6c652 assets/create/lang/en_us.json +610a33e7074c3fb8e88370bed76549bfcfe0eddb assets/create/lang/unfinished/de_de.json +29339e0bf9743251639a2598d17f194cd406602c assets/create/lang/unfinished/es_es.json +e7138596de0babd4fc90a4b8ffb8fdea13088086 assets/create/lang/unfinished/es_mx.json +a95f57787534ae5d4920fe8e4825fe3012fdcd70 assets/create/lang/unfinished/fr_fr.json +7956b67df2d19a9f890f893c9d736516cc6e8629 assets/create/lang/unfinished/it_it.json +95394f8cc9d53397e030c46a9abef4fa4348e2ad assets/create/lang/unfinished/ja_jp.json +edcd5ffe8239f13cedbd63ab11c8334a38b90c90 assets/create/lang/unfinished/ko_kr.json +1749d2d020f02a2ccca4698d85bfdc4dcf849e3f assets/create/lang/unfinished/nl_nl.json +83c43209c295b3d3d85f7bebaa9a8ce7b79d47da assets/create/lang/unfinished/pt_br.json +a1a67295a2fe537080254fc8b353699d4d30989a assets/create/lang/unfinished/ru_ru.json +a525852b4f3aa0af52816e02e5cf4181de0c60c5 assets/create/lang/unfinished/zh_cn.json +51242fa9de9994103e9373e5c8dd6941438ec9a8 assets/create/lang/unfinished/zh_tw.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a 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 9aa47e056..5b572a2a7 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1907,6 +1907,26 @@ "create.ponder.brass_funnel.text_3": "Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "All shafts connected like this will rotate in the same direction", @@ -1996,6 +2016,11 @@ "create.ponder.fan_source.text_1": "Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "Funnel compatibility", "create.ponder.funnel_compat.text_1": "Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "Vertical Saws", 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 bf4699ed0..82ea9ce8f 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: 1350", + "_": "Missing Localizations: 1370", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 e4d4a4f6c..477c1075f 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: 381", + "_": "Missing Localizations: 401", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 7a61f13be..5b8a24ac5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1280", + "_": "Missing Localizations: 1300", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 19f3255d0..54fec9d1c 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: 1062", + "_": "Missing Localizations: 1082", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 a4706944c..8f188d3ce 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: 398", + "_": "Missing Localizations: 418", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 4549c93b4..6a407c0a5 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: 405", + "_": "Missing Localizations: 425", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 a1d30849c..735d654f7 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: 451", + "_": "Missing Localizations: 471", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 905e5b4c4..f3dbea0b4 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: 1549", + "_": "Missing Localizations: 1569", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 0f0960a19..659fc213b 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: 1615", + "_": "Missing Localizations: 1635", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 571fe933e..bbfb96413 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: 401", + "_": "Missing Localizations: 421", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 9d5f52646..68ae1cb13 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: 399", + "_": "Missing Localizations: 419", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", 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 b67952a4c..fff451d2d 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: 404", + "_": "Missing Localizations: 424", "_": "->------------------------] Game Elements [------------------------<-", @@ -1908,6 +1908,26 @@ "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", + "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", + "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", + "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + + "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", + "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", + "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", + "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + + "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", + "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", + "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", + "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", + "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", + "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", + "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", @@ -1997,6 +2017,11 @@ "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", + "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", + "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", + "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java index 82b2f4379..b9feddb16 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java @@ -83,6 +83,9 @@ public class PonderUI extends NavigatableSimiScreen { private ClipboardHelper clipboardHelper; private BlockPos copiedBlockPos; + private LerpedFloat finishingFlash; + private int finishingFlashWarmup = 0; + private LerpedFloat lazyIndex; private int index = 0; private PonderTag referredToByTag; @@ -133,6 +136,9 @@ public class PonderUI extends NavigatableSimiScreen { .startWithValue(0) .chase(1, .1f, Chaser.EXP); clipboardHelper = new ClipboardHelper(); + finishingFlash = LerpedFloat.linear() + .startWithValue(0) + .chase(0, .1f, Chaser.EXP); } @Override @@ -250,10 +256,22 @@ public class PonderUI extends NavigatableSimiScreen { if (skipCooling == 0) activeScene.tick(); } + lazyIndex.tickChaser(); fadeIn.tickChaser(); + finishingFlash.tickChaser(); progressBar.tick(); + if (activeScene.currentTime == activeScene.totalTime - 1) + finishingFlashWarmup = 30; + if (finishingFlashWarmup > 0) { + finishingFlashWarmup--; + if (finishingFlashWarmup == 0) { + finishingFlash.setValue(1); + finishingFlash.setValue(1); + } + } + if (!identifyMode) { float lazyIndexValue = lazyIndex.getValue(); if (Math.abs(lazyIndexValue - index) > 1 / 512f) @@ -389,10 +407,26 @@ public class PonderUI extends NavigatableSimiScreen { RenderSystem.pushMatrix(); RenderSystem.translated(story.basePlateOffsetX, 0, story.basePlateOffsetZ); RenderSystem.scaled(1, -1, 1); + + float flash = finishingFlash.getValue(partialTicks) * .9f; + float alpha = flash; + flash *= flash; + flash = ((flash * 2) - 1); + flash *= flash; + flash = 1 - flash; + for (int f = 0; f < 4; f++) { RenderSystem.translated(story.basePlateSize, 0, 0); RenderSystem.pushMatrix(); - RenderSystem.translated(0, 0, 1 / 1024f); + RenderSystem.translated(0, 0, -1 / 1024f); + if (flash > 0) { + RenderSystem.pushMatrix(); + RenderSystem.scaled(1, .5 + flash * .75, 1); + GuiUtils.drawGradientRect(0, 0, -1, -story.basePlateSize, 0, 0x00_c6ffc9, + ColorHelper.applyAlpha(0xaa_c6ffc9, alpha)); + RenderSystem.popMatrix(); + } + RenderSystem.translated(0, 0, 2 / 1024f); GuiUtils.drawGradientRect(0, 0, 0, -story.basePlateSize, 4, 0x66_000000, 0x00_000000); RenderSystem.popMatrix(); RenderSystem.rotatef(-90, 0, 1, 0); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java index 84fc8560a..92450e9d8 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java @@ -17,18 +17,23 @@ import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; import com.simibubi.create.foundation.ponder.content.PonderPalette; +import com.simibubi.create.foundation.ponder.elements.AnimatedSceneElement; import com.simibubi.create.foundation.ponder.elements.BeltItemElement; import com.simibubi.create.foundation.ponder.elements.EntityElement; import com.simibubi.create.foundation.ponder.elements.InputWindowElement; +import com.simibubi.create.foundation.ponder.elements.MinecartElement; +import com.simibubi.create.foundation.ponder.elements.MinecartElement.MinecartConstructor; import com.simibubi.create.foundation.ponder.elements.ParrotElement; import com.simibubi.create.foundation.ponder.elements.ParrotElement.ParrotPose; import com.simibubi.create.foundation.ponder.elements.ParrotElement.SpinOnComponentPose; import com.simibubi.create.foundation.ponder.elements.TextWindowElement; import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; +import com.simibubi.create.foundation.ponder.instructions.AnimateMinecartInstruction; import com.simibubi.create.foundation.ponder.instructions.AnimateParrotInstruction; import com.simibubi.create.foundation.ponder.instructions.AnimateTileEntityInstruction; import com.simibubi.create.foundation.ponder.instructions.AnimateWorldSectionInstruction; import com.simibubi.create.foundation.ponder.instructions.ChaseAABBInstruction; +import com.simibubi.create.foundation.ponder.instructions.CreateMinecartInstruction; import com.simibubi.create.foundation.ponder.instructions.CreateParrotInstruction; import com.simibubi.create.foundation.ponder.instructions.DelayInstruction; import com.simibubi.create.foundation.ponder.instructions.DisplayWorldSectionInstruction; @@ -328,12 +333,15 @@ public class SceneBuilder { } public void showCenteredScrollInput(BlockPos pos, Direction side, int duration) { + showScrollInput(scene.getSceneBuildingUtil().vector.blockSurface(pos, side), side, duration); + } + + public void showScrollInput(Vec3d location, Direction side, int duration) { Axis axis = side.getAxis(); float s = 1 / 16f; float q = 1 / 4f; Vec3d expands = new Vec3d(axis == Axis.X ? s : q, axis == Axis.Y ? s : q, axis == Axis.Z ? s : q); - addInstruction(new HighlightValueBoxInstruction(scene.getSceneBuildingUtil().vector.blockSurface(pos, side), - expands, duration)); + addInstruction(new HighlightValueBoxInstruction(location, expands, duration)); } public void showRepeaterScrollInput(BlockPos pos, int duration) { @@ -359,6 +367,10 @@ public class SceneBuilder { addInstruction(new OutlineSelectionInstruction(color, slot, selection, duration)); } + public void hideElement(ElementLink link, Direction direction) { + addInstruction(new FadeOutOfSceneInstruction<>(15, direction, link)); + } + } public class SpecialInstructions { @@ -402,6 +414,22 @@ public class SceneBuilder { addInstruction(AnimateParrotInstruction.move(link, offset, duration)); } + public ElementLink createCart(Vec3d location, float angle, MinecartConstructor type) { + ElementLink link = new ElementLink<>(MinecartElement.class); + MinecartElement cart = new MinecartElement(location, angle, type); + addInstruction(new CreateMinecartInstruction(10, Direction.DOWN, cart)); + addInstruction(scene -> scene.linkElement(cart, link)); + return link; + } + + public void rotateCart(ElementLink link, float yRotation, int duration) { + addInstruction(AnimateMinecartInstruction.rotate(link, yRotation, duration)); + } + + public void moveCart(ElementLink link, Vec3d offset, int duration) { + addInstruction(AnimateMinecartInstruction.move(link, offset, duration)); + } + } public class WorldInstructions { @@ -445,6 +473,13 @@ public class SceneBuilder { return instruction.createLink(scene); } + public ElementLink showIndependentSectionImmediately(Selection selection) { + DisplayWorldSectionInstruction instruction = + new DisplayWorldSectionInstruction(0, Direction.DOWN, selection, Optional.empty()); + addInstruction(instruction); + return instruction.createLink(scene); + } + public void hideSection(Selection selection, Direction fadeOutDirection) { WorldSectionElement worldSectionElement = new WorldSectionElement(selection); ElementLink elementLink = new ElementLink<>(WorldSectionElement.class); @@ -513,7 +548,7 @@ public class SceneBuilder { public void movePulley(BlockPos pos, float distance, int duration) { addInstruction(AnimateTileEntityInstruction.pulley(pos, distance, duration)); } - + public void moveDeployer(BlockPos pos, float distance, int duration) { addInstruction(AnimateTileEntityInstruction.deployer(pos, distance, duration)); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/CartAssemblerScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/CartAssemblerScenes.java new file mode 100644 index 000000000..037078293 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/CartAssemblerScenes.java @@ -0,0 +1,534 @@ +package com.simibubi.create.foundation.ponder.content; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssembleRailType; +import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock; +import com.simibubi.create.foundation.ponder.ElementLink; +import com.simibubi.create.foundation.ponder.SceneBuilder; +import com.simibubi.create.foundation.ponder.SceneBuildingUtil; +import com.simibubi.create.foundation.ponder.Selection; +import com.simibubi.create.foundation.ponder.elements.EntityElement; +import com.simibubi.create.foundation.ponder.elements.InputWindowElement; +import com.simibubi.create.foundation.ponder.elements.MinecartElement; +import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; +import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction.Emitter; +import com.simibubi.create.foundation.utility.Pointing; + +import net.minecraft.block.Blocks; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.minecart.ChestMinecartEntity; +import net.minecraft.entity.item.minecart.FurnaceMinecartEntity; +import net.minecraft.entity.item.minecart.MinecartEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.state.properties.RailShape; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public class CartAssemblerScenes { + + public static void anchor(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("cart_assembler", "Moving Structures using Cart Assemblers"); + scene.configureBasePlate(0, 0, 5); + scene.scaleSceneView(.9f); + scene.world.showSection(util.select.layer(0), Direction.UP); + scene.idle(5); + + BlockPos assemblerPos = util.grid.at(2, 1, 2); + scene.world.setBlock(assemblerPos, Blocks.RAIL.getDefaultState(), false); + for (int z = 0; z < 5; z++) { + scene.world.showSection(util.select.position(2, 1, z), Direction.DOWN); + scene.idle(2); + } + + BlockPos leverPos = util.grid.at(0, 1, 2); + Selection toggle = util.select.fromTo(assemblerPos, leverPos); + + scene.idle(10); + + scene.overlay + .showControls(new InputWindowElement(util.vector.centerOf(assemblerPos), Pointing.DOWN).rightClick() + .withItem(AllBlocks.CART_ASSEMBLER.asStack()), 30); + scene.idle(7); + scene.world.setBlock(assemblerPos, AllBlocks.CART_ASSEMBLER.getDefaultState() + .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.NORTH_SOUTH) + .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); + scene.idle(20); + scene.world.showSection(util.select.fromTo(0, 1, 2, 1, 1, 2), Direction.EAST); + scene.idle(20); + scene.world.toggleRedstonePower(toggle); + scene.effects.indicateRedstone(leverPos); + scene.idle(10); + + scene.overlay.showText(70) + .text("Powered Cart Assemblers mount attached structures to passing Minecarts") + .attachKeyFrame() + .pointAt(util.vector.topOf(assemblerPos)) + .placeNearTarget(); + scene.idle(80); + + ElementLink cart = + scene.special.createCart(util.vector.topOf(2, 0, 4), 90, MinecartEntity::new); + scene.world.showSection(util.select.position(assemblerPos.up()), Direction.DOWN); + scene.idle(10); + scene.special.moveCart(cart, util.vector.of(0, 0, -2), 20); + scene.idle(20); + ElementLink plank = + scene.world.makeSectionIndependent(util.select.position(assemblerPos.up())); + ElementLink anchor = + scene.world.showIndependentSectionImmediately(util.select.position(assemblerPos.east())); + scene.world.moveSection(anchor, util.vector.of(-1, 0, 0), 0); + scene.effects.indicateSuccess(assemblerPos); + scene.idle(1); + scene.world.moveSection(anchor, util.vector.of(0, 0, -2), 20); + scene.world.moveSection(plank, util.vector.of(0, 0, -2), 20); + scene.special.moveCart(cart, util.vector.of(0, 0, -2), 20); + scene.idle(20); + + scene.world.toggleRedstonePower(toggle); + scene.idle(10); + + scene.overlay.showText(70) + .text("Without a redstone signal, it disassembles passing cart contraptions back into blocks") + .colored(PonderPalette.RED) + .attachKeyFrame() + .pointAt(util.vector.topOf(assemblerPos)) + .placeNearTarget(); + scene.idle(80); + + scene.world.rotateSection(anchor, 0, 180, 0, 6); + scene.world.rotateSection(plank, 0, 180, 0, 6); + scene.idle(3); + + scene.world.moveSection(anchor, util.vector.of(0, 0, 2), 20); + scene.world.moveSection(plank, util.vector.of(0, 0, 2), 20); + scene.special.moveCart(cart, util.vector.of(0, 0, 2), 20); + scene.idle(21); + scene.world.moveSection(anchor, util.vector.of(0, -2, 0), 0); + scene.special.moveCart(cart, util.vector.of(0, 0, 2), 20); + scene.idle(30); + + scene.world.destroyBlock(assemblerPos.up()); + scene.idle(5); + ElementLink contraption = + scene.world.showIndependentSection(util.select.fromTo(1, 4, 2, 3, 3, 2), Direction.DOWN); + scene.world.moveSection(contraption, util.vector.of(0, -1, 0), 0); + scene.idle(10); + scene.world.showSectionAndMerge(util.select.position(3, 3, 1), Direction.SOUTH, contraption); + scene.idle(15); + scene.effects.superGlue(util.grid.at(3, 2, 1), Direction.SOUTH, true); + scene.overlay.showText(80) + .attachKeyFrame() + .sharedText("movement_anchors") + .pointAt(util.vector.blockSurface(util.grid.at(1, 3, 2), Direction.NORTH)) + .placeNearTarget(); + scene.idle(80); + scene.world.toggleRedstonePower(toggle); + scene.effects.indicateRedstone(leverPos); + + scene.special.moveCart(cart, util.vector.of(0, 0, -2), 20); + scene.idle(20); + scene.world.moveSection(anchor, util.vector.of(0, 2, 0), 0); + scene.idle(1); + scene.world.moveSection(anchor, util.vector.of(0, 0, -2), 20); + scene.world.moveSection(contraption, util.vector.of(0, 0, -2), 20); + scene.special.moveCart(cart, util.vector.of(0, 0, -2), 20); + scene.idle(25); + + Vec3d cartCenter = util.vector.centerOf(assemblerPos.north(2)); + scene.overlay.showControls(new InputWindowElement(cartCenter, Pointing.LEFT).rightClick() + .withWrench(), 40); + scene.idle(7); + scene.special.moveCart(cart, util.vector.of(0, -100, 4), 0); + scene.world.moveSection(anchor, util.vector.of(0, -100, 4), 0); + scene.world.moveSection(contraption, util.vector.of(0, -100, 4), 0); + ItemStack asStack = AllItems.MINECART_CONTRAPTION.asStack(); + ElementLink itemEntity = + scene.world.createItemEntity(cartCenter, util.vector.of(0, .1, 0), asStack); + scene.idle(40); + scene.overlay.showText(80) + .attachKeyFrame() + .text("Using a Wrench on the Minecart will let you carry the Contraption elsewhere") + .pointAt(cartCenter) + .placeNearTarget(); + scene.idle(80); + scene.world.modifyEntity(itemEntity, Entity::remove); + + scene.overlay.showControls(new InputWindowElement(cartCenter.add(0, 0, 4), Pointing.DOWN).rightClick() + .withItem(asStack), 20); + scene.idle(20); + scene.special.moveCart(cart, util.vector.of(0, 100.5, 0), 0); + scene.world.moveSection(anchor, util.vector.of(0, 100.5, 0), 0); + scene.world.moveSection(contraption, util.vector.of(0, 100.5, 0), 0); + scene.idle(1); + scene.special.moveCart(cart, util.vector.of(0, -.5, 0), 5); + scene.world.moveSection(anchor, util.vector.of(0, -.5, 0), 5); + scene.world.moveSection(contraption, util.vector.of(0, -.5, 0), 5); + } + + public static void modes(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("cart_assembler_modes", "Orientation Settings for Minecart Contraptions"); + scene.configureBasePlate(0, 0, 5); + scene.world.showSection(util.select.layer(0), Direction.UP); + scene.idle(5); + + for (int z = 0; z < 4; z++) { + scene.world.showSection(util.select.position(1, 1, z), Direction.DOWN); + scene.idle(2); + } + for (int x = 2; x < 5; x++) { + scene.world.showSection(util.select.position(x, 1, 3), Direction.DOWN); + scene.idle(2); + } + + BlockPos assemblerPos = util.grid.at(3, 1, 3); + scene.idle(5); + scene.world.setBlock(assemblerPos, AllBlocks.CART_ASSEMBLER.getDefaultState() + .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); + scene.idle(5); + scene.world.showSection(util.select.fromTo(3, 1, 1, 3, 1, 2), Direction.SOUTH); + ElementLink contraption = + scene.world.showIndependentSection(util.select.position(3, 2, 3), Direction.DOWN); + scene.idle(10); + scene.world.glueBlockOnto(util.grid.at(2, 2, 3), Direction.EAST, contraption); + scene.world.toggleRedstonePower(util.select.fromTo(3, 1, 1, 3, 1, 3)); + scene.effects.indicateRedstone(util.grid.at(3, 1, 1)); + scene.idle(10); + + ElementLink cart = + scene.special.createCart(util.vector.topOf(util.grid.at(4, 0, 3)), 0, MinecartEntity::new); + scene.idle(20); + scene.special.moveCart(cart, util.vector.of(-1, 0, 0), 10); + scene.idle(10); + ElementLink anchor = + scene.world.showIndependentSectionImmediately(util.select.position(assemblerPos.south())); + scene.world.moveSection(anchor, util.vector.of(0, 0, -1), 0); + scene.idle(1); + + scene.world.setKineticSpeed(util.select.position(2, 2, 3), 32); + scene.special.moveCart(cart, util.vector.of(-1.5, 0, 0), 15); + scene.world.moveSection(anchor, util.vector.of(-1.5, 0, 0), 15); + scene.world.moveSection(contraption, util.vector.of(-1.5, 0, 0), 15); + scene.idle(16); + scene.special.rotateCart(cart, -45, 2); + scene.special.moveCart(cart, util.vector.of(-.5, 0, -.5), 8); + scene.world.moveSection(anchor, util.vector.of(-.5, 0, -.5), 8); + scene.world.moveSection(contraption, util.vector.of(-.5, 0, -.5), 8); + scene.world.rotateSection(anchor, 0, -90, 0, 12); + scene.world.rotateSection(contraption, 0, -90, 0, 12); + scene.idle(9); + scene.special.rotateCart(cart, -45, 2); + scene.special.moveCart(cart, util.vector.of(0, 0, -1.5), 15); + scene.world.moveSection(anchor, util.vector.of(0, 0, -1.5), 15); + scene.world.moveSection(contraption, util.vector.of(0, 0, -1.5), 15); + scene.idle(15); + scene.world.setKineticSpeed(util.select.position(2, 2, 3), 0); + + scene.overlay.showText(80) + .attachKeyFrame() + .text("Cart Contraptions will rotate to face towards their carts' motion") + .pointAt(util.vector.of(1.5, 2.5, 0)) + .placeNearTarget(); + scene.idle(90); + + scene.world.hideIndependentSection(contraption, Direction.UP); + scene.world.hideIndependentSection(anchor, Direction.UP); + scene.overlay.hideElement(cart, Direction.UP); + scene.idle(25); + + Vec3d blockSurface = util.vector.blockSurface(assemblerPos, Direction.NORTH) + .add(0, 0, -2 / 16f); + scene.overlay.showScrollInput(blockSurface, Direction.NORTH, 60); + scene.overlay.showControls(new InputWindowElement(blockSurface, Pointing.DOWN).scroll() + .withWrench(), 60); + scene.idle(10); + scene.overlay.showText(60) + .pointAt(util.vector.of(3, 1.5, 3)) + .placeNearTarget() + .sharedText("behaviour_modify_wrench"); + scene.idle(70); + + contraption = scene.world.showIndependentSection(util.select.fromTo(3, 2, 3, 2, 2, 3), Direction.DOWN); + cart = scene.special.createCart(util.vector.topOf(util.grid.at(4, 0, 3)), 0, MinecartEntity::new); + scene.idle(10); + scene.special.moveCart(cart, util.vector.of(-1, 0, 0), 10); + scene.idle(10); + anchor = scene.world.showIndependentSectionImmediately(util.select.position(assemblerPos.south())); + scene.world.moveSection(anchor, util.vector.of(0, 0, -1), 0); + scene.idle(1); + + scene.world.setKineticSpeed(util.select.position(2, 2, 3), 32); + scene.special.moveCart(cart, util.vector.of(-1.5, 0, 0), 15); + scene.world.moveSection(anchor, util.vector.of(-1.5, 0, 0), 15); + scene.world.moveSection(contraption, util.vector.of(-1.5, 0, 0), 15); + scene.idle(16); + scene.special.rotateCart(cart, -45, 2); + scene.special.moveCart(cart, util.vector.of(-.5, 0, -.5), 8); + scene.world.moveSection(anchor, util.vector.of(-.5, 0, -.5), 8); + scene.world.moveSection(contraption, util.vector.of(-.5, 0, -.5), 8); + scene.idle(9); + scene.special.rotateCart(cart, -45, 2); + scene.special.moveCart(cart, util.vector.of(0, 0, -1.5), 15); + scene.world.moveSection(anchor, util.vector.of(0, 0, -1.5), 15); + scene.world.moveSection(contraption, util.vector.of(0, 0, -1.5), 15); + scene.idle(15); + scene.world.setKineticSpeed(util.select.position(2, 2, 3), 0); + + scene.overlay.showText(80) + .attachKeyFrame() + .text("If the Assembler is set to Lock Rotation, the contraptions' orientation will never change") + .pointAt(util.vector.of(0, 2.5, 1.5)) + .placeNearTarget(); + scene.idle(90); + } + + public static void dual(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("cart_assembler_dual", "Assembling Carriage Contraptions"); + scene.configureBasePlate(0, 0, 6); + scene.scaleSceneView(.9f); + scene.world.showSection(util.select.layer(0), Direction.UP); + scene.idle(5); + + for (int z = 0; z < 5; z++) { + scene.world.showSection(util.select.position(1, 1, z), Direction.DOWN); + scene.idle(2); + } + for (int x = 2; x < 6; x++) { + scene.world.showSection(util.select.position(x, 1, 4), Direction.DOWN); + scene.idle(2); + } + + BlockPos assembler1 = util.grid.at(2, 1, 4); + BlockPos assembler2 = util.grid.at(5, 1, 4); + Selection chassis = util.select.fromTo(5, 2, 4, 2, 2, 4); + + scene.idle(5); + scene.world.showSection(util.select.fromTo(2, 1, 3, 2, 1, 2), Direction.SOUTH); + scene.idle(5); + ElementLink cart = + scene.special.createCart(util.vector.topOf(assembler1.down()), 0, MinecartEntity::new); + ElementLink cart2 = + scene.special.createCart(util.vector.topOf(assembler2.down()), 0, ChestMinecartEntity::new); + scene.idle(15); + scene.world.setBlock(assembler1, AllBlocks.CART_ASSEMBLER.getDefaultState() + .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.CONTROLLER_RAIL), true); + scene.idle(5); + scene.world.setBlock(assembler2, AllBlocks.CART_ASSEMBLER.getDefaultState() + .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); + scene.idle(5); + + ElementLink contraption = scene.world.showIndependentSection(chassis, Direction.DOWN); + scene.idle(15); + scene.overlay.showOutline(PonderPalette.GREEN, new Object(), util.select.position(assembler2), 60); + scene.overlay.showSelectionWithText(util.select.position(assembler1), 60) + .colored(PonderPalette.GREEN) + .pointAt(util.vector.blockSurface(util.grid.at(2, 2, 4), Direction.NORTH)) + .placeNearTarget() + .text("Whenever two Cart Assembers share an attached structure...") + .attachKeyFrame(); + scene.idle(70); + + scene.overlay.showText(60) + .pointAt(util.vector.blockSurface(util.grid.at(2, 1, 4), Direction.NORTH)) + .placeNearTarget() + .text("Powering either of them will create a Carriage Contraption"); + scene.idle(70); + + scene.effects.indicateRedstone(util.grid.at(2, 1, 2)); + scene.world.toggleRedstonePower(util.select.fromTo(2, 1, 2, 2, 1, 4)); + ElementLink anchors = + scene.world.showIndependentSectionImmediately(util.select.fromTo(assembler1.south(), assembler2.south())); + scene.world.moveSection(anchors, util.vector.of(0, 0, -1), 0); + scene.world.configureCenterOfRotation(anchors, util.vector.centerOf(util.grid.at(2, 2, 5))); + scene.world.configureCenterOfRotation(contraption, util.vector.centerOf(util.grid.at(2, 2, 4))); + scene.idle(5); + + Vec3d m = util.vector.of(-0.5, 0, 0); + scene.special.moveCart(cart, m, 5); + scene.special.moveCart(cart2, m, 5); + scene.world.moveSection(contraption, m, 5); + scene.world.moveSection(anchors, m, 5); + scene.idle(5); + scene.special.rotateCart(cart, -45, 2); + scene.special.moveCart(cart2, util.vector.of(-.3, 0, 0), 8); + m = util.vector.of(-.5, 0, -.5); + scene.special.moveCart(cart, m, 8); + scene.world.moveSection(anchors, m, 8); + scene.world.moveSection(contraption, m, 8); + scene.world.rotateSection(anchors, 0, -10, 0, 8); + scene.world.rotateSection(contraption, 0, -10, 0, 8); + scene.idle(8); + scene.special.rotateCart(cart, -45, 2); + scene.special.moveCart(cart2, util.vector.of(-.4, 0, 0), 5); + m = util.vector.of(0, 0, -3.5); + scene.special.moveCart(cart, m, 25); + scene.world.moveSection(anchors, m, 25); + scene.world.moveSection(contraption, m, 25); + scene.world.rotateSection(anchors, 0, -33, 0, 10); + scene.world.rotateSection(contraption, 0, -33, 0, 10); + scene.idle(5); + scene.special.moveCart(cart2, util.vector.of(-0.8, 0, 0), 5); + scene.idle(5); + scene.special.moveCart(cart2, util.vector.of(-1.5, 0, 0), 9); + scene.world.rotateSection(anchors, 0, -42, 0, 9); + scene.world.rotateSection(contraption, 0, -42, 0, 9); + scene.idle(9); + m = util.vector.of(-.5, 0, -.5); + scene.special.moveCart(cart2, m, 2); + scene.special.rotateCart(cart2, -45, 2); + scene.world.rotateSection(anchors, 0, -5, 0, 5); + scene.world.rotateSection(contraption, 0, -5, 0, 5); + scene.idle(2); + scene.special.moveCart(cart2, util.vector.of(0, 0, -.5), 5); + scene.special.rotateCart(cart2, -45, 2); + scene.idle(10); + + scene.overlay.showText(70) + .attachKeyFrame() + .pointAt(util.vector.blockSurface(util.grid.at(1, 1, 3), Direction.WEST)) + .placeNearTarget() + .text("The carts will behave like those connected via Minecart Coupling"); + scene.idle(80); + + } + + public static void rails(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("cart_assembler_rails", "Other types of Minecarts and Rails"); + scene.configureBasePlate(0, 0, 6); + scene.scaleSceneView(.9f); + scene.world.showSection(util.select.layer(0), Direction.UP); + scene.idle(5); + + for (int x = 0; x < 6; x++) { + scene.world.showSection(util.select.position(x, 1, 3), Direction.DOWN); + scene.idle(2); + } + + BlockPos assembler = util.grid.at(3, 1, 3); + + Selection chassis = util.select.fromTo(4, 2, 3, 2, 2, 3); + + scene.idle(5); + scene.overlay.showText(70) + .attachKeyFrame() + .pointAt(util.vector.blockSurface(assembler, Direction.DOWN)) + .placeNearTarget() + .text("Cart Assemblers on Regular Tracks will not affect the passing carts' motion"); + scene.idle(10); + scene.world.setBlock(assembler, AllBlocks.CART_ASSEMBLER.getDefaultState() + .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); + scene.idle(70); + + ElementLink cart = scene.special.createCart(util.vector.topOf(assembler.east(2) + .down()), 0, MinecartEntity::new); + ElementLink anchor = + scene.world.showIndependentSection(util.select.position(assembler.south()), Direction.DOWN); + ElementLink contraption = + scene.world.showIndependentSection(util.select.position(assembler.south() + .up()), Direction.DOWN); + scene.world.moveSection(contraption, util.vector.of(2, 0, -1), 0); + scene.world.moveSection(anchor, util.vector.of(2, 0, -1), 0); + scene.idle(10); + scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 10); + scene.world.moveSection(anchor, util.vector.of(-2, 0, 0), 10); + scene.special.moveCart(cart, util.vector.of(-5, 0, 0), 25); + scene.idle(30); + scene.overlay.hideElement(cart, Direction.UP); + scene.world.hideIndependentSection(contraption, Direction.UP); + scene.world.moveSection(anchor, util.vector.of(0, -3, 0), 0); + scene.idle(30); + + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(assembler), Pointing.DOWN) + .withItem(new ItemStack(Items.POWERED_RAIL)), 50); + scene.idle(7); + scene.world.setBlock(assembler, AllBlocks.CART_ASSEMBLER.getDefaultState() + .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.POWERED_RAIL), true); + scene.overlay.showText(100) + .attachKeyFrame() + .pointAt(util.vector.topOf(assembler)) + .placeNearTarget() + .text("When on Powered or Controller Rail, the carts will be held in place until it's Powered"); + scene.idle(110); + + scene.world.hideIndependentSection(anchor, Direction.DOWN); + cart = scene.special.createCart(util.vector.topOf(assembler.east(2) + .down()), 0, MinecartEntity::new); + anchor = scene.world.showIndependentSection(util.select.position(assembler.south()), Direction.DOWN); + contraption = scene.world.showIndependentSection(util.select.position(assembler.south() + .up()), Direction.DOWN); + scene.world.moveSection(contraption, util.vector.of(2, 0, -1), 0); + scene.world.moveSection(anchor, util.vector.of(2, 0, -1), 0); + scene.idle(10); + scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 10); + scene.world.moveSection(anchor, util.vector.of(-2, 0, 0), 10); + scene.special.moveCart(cart, util.vector.of(-2, 0, 0), 10); + scene.world.showSection(util.select.fromTo(3, 1, 1, 3, 1, 2), Direction.SOUTH); + scene.idle(30); + + scene.world.toggleRedstonePower(util.select.fromTo(3, 1, 1, 3, 1, 3)); + scene.effects.indicateRedstone(util.grid.at(3, 1, 1)); + scene.idle(5); + + scene.world.moveSection(contraption, util.vector.of(-3, 0, 0), 15); + scene.world.moveSection(anchor, util.vector.of(-3, 0, 0), 15); + scene.special.moveCart(cart, util.vector.of(-3, 0, 0), 15); + + scene.idle(30); + scene.overlay.hideElement(cart, Direction.UP); + scene.world.hideIndependentSection(anchor, Direction.UP); + scene.world.hideIndependentSection(contraption, Direction.UP); + scene.idle(20); + + cart = scene.special.createCart(util.vector.topOf(assembler.east(2) + .down()), 0, FurnaceMinecartEntity::new); + scene.idle(10); + scene.overlay.showText(50) + .attachKeyFrame() + .pointAt(util.vector.topOf(assembler.east(2))) + .placeNearTarget() + .text("Other types of Minecarts can be used as the anchor"); + scene.idle(50); + contraption = scene.world.showIndependentSection(chassis, Direction.DOWN); + scene.idle(5); + scene.world.glueBlockOnto(assembler.up(2), Direction.DOWN, contraption); + scene.idle(15); + + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(assembler.up()), Pointing.UP) + .withItem(new ItemStack(Items.CHARCOAL)), 40); + scene.idle(7); + scene.overlay.showText(80) + .pointAt(util.vector.blockSurface(assembler.up(2), Direction.WEST)) + .placeNearTarget() + .text("Furnace Carts will keep themselves powered, pulling fuel from any attached inventories"); + scene.idle(85); + + Emitter smoke = Emitter.simple(ParticleTypes.LARGE_SMOKE, util.vector.of(0, 0, 0)); + + scene.special.moveCart(cart, util.vector.of(-5, 0, 0), 50); + scene.idle(20); + anchor = scene.world.showIndependentSectionImmediately(util.select.position(assembler.south())); + scene.world.moveSection(anchor, util.vector.of(0, 0, -1), 0); + scene.idle(1); + scene.world.setKineticSpeed(util.select.position(2, 2, 3), 32); + scene.world.moveSection(contraption, util.vector.of(-3, 0, 0), 30); + scene.world.moveSection(anchor, util.vector.of(-3, 0, 0), 30); + + Vec3d vec = util.vector.centerOf(assembler) + .add(.25, .25, -0.5); + for (int i = 0; i < 7; i++) { + scene.effects.emitParticles(vec = vec.add(-.5, 0, 0), smoke, 2, 1); + scene.idle(5); + } + + scene.world.setKineticSpeed(util.select.position(2, 2, 3), 0); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java index e2d9fcab8..2e6dfe173 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java @@ -1,7 +1,5 @@ package com.simibubi.create.foundation.ponder.content; -import java.io.File; - import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.crank.ValveHandleBlock; import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock; @@ -854,7 +852,16 @@ public class KineticsScenes { } public static void furnaceEngine(SceneBuilder scene, SceneBuildingUtil util) { - scene.title("furnace_engine", "Generating Rotational Force using the Furnace Engine"); + furnaceEngine(scene, util, false); + } + + public static void flywheel(SceneBuilder scene, SceneBuildingUtil util) { + furnaceEngine(scene, util, true); + } + + private static void furnaceEngine(SceneBuilder scene, SceneBuildingUtil util, boolean flywheel) { + scene.title(flywheel ? "flywheel" : "furnace_engine", + "Generating Rotational Force using the " + (flywheel ? "Flywheel" : "Furnace Engine")); scene.configureBasePlate(0, 0, 6); scene.world.showSection(util.select.layer(0), Direction.UP); @@ -871,11 +878,13 @@ public class KineticsScenes { scene.world.showSection(util.select.position(furnacePos.west(3)), Direction.EAST); scene.idle(10); + String text = flywheel ? "Flywheels are required for generating rotational force with the Furnace Engine" + : "Furnace Engines generate Rotational Force while their attached Furnace is running"; scene.overlay.showText(80) .attachKeyFrame() .placeNearTarget() - .pointAt(util.vector.topOf(furnacePos.west())) - .text("Furnace Engines generate Rotational Force while their attached Furnace is running"); + .pointAt(util.vector.topOf(furnacePos.west(flywheel ? 3 : 1))) + .text(text); scene.idle(90); scene.overlay.showControls( @@ -993,7 +1002,7 @@ public class KineticsScenes { scene.world.multiplyKineticSpeed(util.select.fromTo(1, 2, 1, 1, 2, 3), 4); scene.effects.rotationSpeedIndicator(cogPos); scene.idle(55); - + scene.overlay.showControls(input, 30); scene.idle(15); scene.world.multiplyKineticSpeed(util.select.fromTo(1, 2, 1, 1, 2, 3), -.05f); 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 d73c72246..fa3411878 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 @@ -70,8 +70,10 @@ public class PonderIndex { PonderRegistry.forComponents(AllBlocks.ENCASED_CHAIN_DRIVE, AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT) .addStoryBoard("chain_drive/gearshift", ChainDriveScenes::adjustableChainGearshift); - PonderRegistry.forComponents(AllBlocks.FURNACE_ENGINE, AllBlocks.FLYWHEEL) + PonderRegistry.forComponents(AllBlocks.FURNACE_ENGINE) .addStoryBoard("furnace_engine", KineticsScenes::furnaceEngine); + PonderRegistry.forComponents(AllBlocks.FLYWHEEL) + .addStoryBoard("furnace_engine", KineticsScenes::flywheel); PonderRegistry.forComponents(AllBlocks.ROTATION_SPEED_CONTROLLER) .addStoryBoard("speed_controller", KineticsScenes::speedController); @@ -142,6 +144,13 @@ public class PonderIndex { .addStoryBoard("gantry/direction", GantryScenes::direction) .addStoryBoard("gantry/subgantry", GantryScenes::subgantry); + // Cart Assembler + PonderRegistry.forComponents(AllBlocks.CART_ASSEMBLER) + .addStoryBoard("cart_assembler/anchor", CartAssemblerScenes::anchor, PonderTag.MOVEMENT_ANCHOR) + .addStoryBoard("cart_assembler/modes", CartAssemblerScenes::modes) + .addStoryBoard("cart_assembler/dual", CartAssemblerScenes::dual) + .addStoryBoard("cart_assembler/rails", CartAssemblerScenes::rails); + // Movement Actors PonderRegistry.forComponents(AllBlocks.PORTABLE_STORAGE_INTERFACE) .addStoryBoard("portable_interface/transfer", MovementActorScenes::psiTransfer, PonderTag.CONTRAPTION_ACTOR) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java new file mode 100644 index 000000000..e121895b9 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java @@ -0,0 +1,113 @@ +package com.simibubi.create.foundation.ponder.elements; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.foundation.ponder.PonderScene; +import com.simibubi.create.foundation.ponder.PonderWorld; +import com.simibubi.create.foundation.utility.MatrixStacker; +import com.simibubi.create.foundation.utility.animation.LerpedFloat; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class MinecartElement extends AnimatedSceneElement { + + private Vec3d location; + private LerpedFloat rotation; + private AbstractMinecartEntity entity; + private MinecartConstructor constructor; + private float initialRotation; + + public interface MinecartConstructor { + AbstractMinecartEntity create(World w, double x, double y, double z); + } + + public MinecartElement(Vec3d location, float rotation, MinecartConstructor constructor) { + initialRotation = rotation; + this.location = location.add(0, 1 / 16f, 0); + this.constructor = constructor; + this.rotation = LerpedFloat.angular() + .startWithValue(rotation); + } + + @Override + public void reset(PonderScene scene) { + super.reset(scene); + entity.setPos(0, 0, 0); + entity.prevPosX = 0; + entity.prevPosY = 0; + entity.prevPosZ = 0; + entity.lastTickPosX = 0; + entity.lastTickPosY = 0; + entity.lastTickPosZ = 0; + rotation.startWithValue(initialRotation); + } + + @Override + public void tick(PonderScene scene) { + super.tick(scene); + if (entity == null) + entity = constructor.create(scene.getWorld(), 0, 0, 0); + + entity.ticksExisted++; + entity.onGround = true; + entity.prevPosX = entity.getX(); + entity.prevPosY = entity.getY(); + entity.prevPosZ = entity.getZ(); + entity.lastTickPosX = entity.getX(); + entity.lastTickPosY = entity.getY(); + entity.lastTickPosZ = entity.getZ(); + } + + public void setPositionOffset(Vec3d position, boolean immediate) { + if (entity == null) + return; + entity.setPosition(position.x, position.y, position.z); + if (!immediate) + return; + entity.prevPosX = position.x; + entity.prevPosY = position.y; + entity.prevPosZ = position.z; + } + + public void setRotation(float angle, boolean immediate) { + if (entity == null) + return; + rotation.setValue(angle); + if (!immediate) + return; + rotation.startWithValue(angle); + } + + public Vec3d getPositionOffset() { + return entity != null ? entity.getPositionVec() : Vec3d.ZERO; + } + + public Vec3d getRotation() { + return new Vec3d(0, rotation.getValue(), 0); + } + + @Override + protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) { + EntityRendererManager entityrenderermanager = Minecraft.getInstance() + .getRenderManager(); + if (entity == null) + entity = constructor.create(world, 0, 0, 0); + + ms.push(); + ms.translate(location.x, location.y, location.z); + ms.translate(MathHelper.lerp(pt, entity.prevPosX, entity.getX()), + MathHelper.lerp(pt, entity.prevPosY, entity.getY()), MathHelper.lerp(pt, entity.prevPosZ, entity.getZ())); + + MatrixStacker.of(ms) + .rotateY(rotation.getValue(pt)); + + entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); + ms.pop(); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java index c2ea78695..99d8081aa 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java @@ -50,13 +50,17 @@ public class ParrotElement extends AnimatedSceneElement { entity.lastTickPosX = 0; entity.lastTickPosY = 0; entity.lastTickPosZ = 0; + entity.prevRotationPitch = entity.rotationPitch = 0; + entity.prevRotationYaw = entity.rotationYaw = 180; } @Override public void tick(PonderScene scene) { super.tick(scene); - if (entity == null) - return; + if (entity == null) { + entity = pose.create(scene.getWorld()); + entity.prevRotationYaw = entity.rotationYaw = 180; + } entity.ticksExisted++; entity.prevRotationYawHead = entity.rotationYawHead; @@ -112,8 +116,10 @@ public class ParrotElement extends AnimatedSceneElement { EntityRendererManager entityrenderermanager = Minecraft.getInstance() .getRenderManager(); - if (entity == null) + if (entity == null) { entity = pose.create(world); + entity.prevRotationYaw = entity.rotationYaw = 180; + } ms.push(); ms.translate(location.x, location.y, location.z); @@ -209,10 +215,13 @@ public class ParrotElement extends AnimatedSceneElement { double d1 = p_200602_2_.y - vec3d.y; double d2 = p_200602_2_.z - vec3d.z; double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); - entity.rotationPitch = + float targetPitch = MathHelper.wrapDegrees((float) -(MathHelper.atan2(d1, d3) * (double) (180F / (float) Math.PI))); - entity.rotationYaw = + float targetYaw = MathHelper.wrapDegrees((float) -(MathHelper.atan2(d2, d0) * (double) (180F / (float) Math.PI)) + 90); + + entity.rotationPitch = AngleHelper.angleLerp(.4f, entity.rotationPitch, targetPitch); + entity.rotationYaw = AngleHelper.angleLerp(.4f, entity.rotationYaw, targetYaw); } protected abstract Vec3d getFacedVec(PonderScene scene); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateElementInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateElementInstruction.java index 629f31085..d2352b082 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateElementInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateElementInstruction.java @@ -47,6 +47,7 @@ public class AnimateElementInstruction extends Tic if (element == null) return; if (remainingTicks == 0) { + setter.accept(element, target); setter.accept(element, target); return; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateMinecartInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateMinecartInstruction.java new file mode 100644 index 000000000..8c23c2db7 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateMinecartInstruction.java @@ -0,0 +1,28 @@ +package com.simibubi.create.foundation.ponder.instructions; + +import java.util.function.BiConsumer; +import java.util.function.Function; + +import com.simibubi.create.foundation.ponder.ElementLink; +import com.simibubi.create.foundation.ponder.elements.MinecartElement; + +import net.minecraft.util.math.Vec3d; + +public class AnimateMinecartInstruction extends AnimateElementInstruction { + + public static AnimateMinecartInstruction rotate(ElementLink link, float rotation, int ticks) { + return new AnimateMinecartInstruction(link, new Vec3d(0, rotation, 0), ticks, + (wse, v) -> wse.setRotation((float) v.y, ticks == 0), MinecartElement::getRotation); + } + + public static AnimateMinecartInstruction move(ElementLink link, Vec3d offset, int ticks) { + return new AnimateMinecartInstruction(link, offset, ticks, (wse, v) -> wse.setPositionOffset(v, ticks == 0), + MinecartElement::getPositionOffset); + } + + protected AnimateMinecartInstruction(ElementLink link, Vec3d totalDelta, int ticks, + BiConsumer setter, Function getter) { + super(link, totalDelta, ticks, setter, getter); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/CreateMinecartInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/CreateMinecartInstruction.java new file mode 100644 index 000000000..a6216f177 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/CreateMinecartInstruction.java @@ -0,0 +1,18 @@ +package com.simibubi.create.foundation.ponder.instructions; + +import com.simibubi.create.foundation.ponder.elements.MinecartElement; + +import net.minecraft.util.Direction; + +public class CreateMinecartInstruction extends FadeIntoSceneInstruction { + + public CreateMinecartInstruction(int fadeInTicks, Direction fadeInFrom, MinecartElement element) { + super(fadeInTicks, fadeInFrom, element); + } + + @Override + protected Class getElementClass() { + return MinecartElement.class; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeIntoSceneInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeIntoSceneInstruction.java index bad0f79b9..bb184144e 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeIntoSceneInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeIntoSceneInstruction.java @@ -23,6 +23,7 @@ public abstract class FadeIntoSceneInstruction e protected void firstTick(PonderScene scene) { super.firstTick(scene); scene.addElement(element); + element.setVisible(true); element.setFade(0); element.setFadeVec(new Vec3d(fadeInFrom.getDirectionVec()).scale(.5f)); if (elementLink != null) @@ -32,10 +33,13 @@ public abstract class FadeIntoSceneInstruction e @Override public void tick(PonderScene scene) { super.tick(scene); - float fade = (remainingTicks / (float) totalTicks); + float fade = totalTicks == 0 ? 1 : (remainingTicks / (float) totalTicks); element.setFade(1 - fade * fade); - if (remainingTicks == 0) + if (remainingTicks == 0) { + if (totalTicks == 0) + element.setFade(1); element.setFade(1); + } } public ElementLink createLink(PonderScene scene) { diff --git a/src/main/resources/ponder/cart_assembler/anchor.nbt b/src/main/resources/ponder/cart_assembler/anchor.nbt new file mode 100644 index 000000000..de8bc0bd1 Binary files /dev/null and b/src/main/resources/ponder/cart_assembler/anchor.nbt differ diff --git a/src/main/resources/ponder/cart_assembler/dual.nbt b/src/main/resources/ponder/cart_assembler/dual.nbt new file mode 100644 index 000000000..b7110b581 Binary files /dev/null and b/src/main/resources/ponder/cart_assembler/dual.nbt differ diff --git a/src/main/resources/ponder/cart_assembler/modes.nbt b/src/main/resources/ponder/cart_assembler/modes.nbt new file mode 100644 index 000000000..a287d78be Binary files /dev/null and b/src/main/resources/ponder/cart_assembler/modes.nbt differ diff --git a/src/main/resources/ponder/cart_assembler/rails.nbt b/src/main/resources/ponder/cart_assembler/rails.nbt new file mode 100644 index 000000000..783075672 Binary files /dev/null and b/src/main/resources/ponder/cart_assembler/rails.nbt differ