mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-16 03:13:43 +01:00
Ponder on Tracks
- Ponder scenes for the Cart Assembler
This commit is contained in:
parent
cddc4a40f5
commit
f7f51d1988
29 changed files with 1162 additions and 43 deletions
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 <T extends AnimatedSceneElement> void hideElement(ElementLink<T> 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<MinecartElement> createCart(Vec3d location, float angle, MinecartConstructor type) {
|
||||
ElementLink<MinecartElement> 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<MinecartElement> link, float yRotation, int duration) {
|
||||
addInstruction(AnimateMinecartInstruction.rotate(link, yRotation, duration));
|
||||
}
|
||||
|
||||
public void moveCart(ElementLink<MinecartElement> 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<WorldSectionElement> 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<WorldSectionElement> 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));
|
||||
}
|
||||
|
|
|
@ -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<MinecartElement> 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<WorldSectionElement> plank =
|
||||
scene.world.makeSectionIndependent(util.select.position(assemblerPos.up()));
|
||||
ElementLink<WorldSectionElement> 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<WorldSectionElement> 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<EntityElement> 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<WorldSectionElement> 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<MinecartElement> 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<WorldSectionElement> 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<MinecartElement> cart =
|
||||
scene.special.createCart(util.vector.topOf(assembler1.down()), 0, MinecartEntity::new);
|
||||
ElementLink<MinecartElement> 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<WorldSectionElement> 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<WorldSectionElement> 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<MinecartElement> cart = scene.special.createCart(util.vector.topOf(assembler.east(2)
|
||||
.down()), 0, MinecartEntity::new);
|
||||
ElementLink<WorldSectionElement> anchor =
|
||||
scene.world.showIndependentSection(util.select.position(assembler.south()), Direction.DOWN);
|
||||
ElementLink<WorldSectionElement> 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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -47,6 +47,7 @@ public class AnimateElementInstruction<T extends PonderSceneElement> extends Tic
|
|||
if (element == null)
|
||||
return;
|
||||
if (remainingTicks == 0) {
|
||||
setter.accept(element, target);
|
||||
setter.accept(element, target);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -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<MinecartElement> {
|
||||
|
||||
public static AnimateMinecartInstruction rotate(ElementLink<MinecartElement> 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<MinecartElement> link, Vec3d offset, int ticks) {
|
||||
return new AnimateMinecartInstruction(link, offset, ticks, (wse, v) -> wse.setPositionOffset(v, ticks == 0),
|
||||
MinecartElement::getPositionOffset);
|
||||
}
|
||||
|
||||
protected AnimateMinecartInstruction(ElementLink<MinecartElement> link, Vec3d totalDelta, int ticks,
|
||||
BiConsumer<MinecartElement, Vec3d> setter, Function<MinecartElement, Vec3d> getter) {
|
||||
super(link, totalDelta, ticks, setter, getter);
|
||||
}
|
||||
|
||||
}
|
|
@ -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<MinecartElement> {
|
||||
|
||||
public CreateMinecartInstruction(int fadeInTicks, Direction fadeInFrom, MinecartElement element) {
|
||||
super(fadeInTicks, fadeInFrom, element);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<MinecartElement> getElementClass() {
|
||||
return MinecartElement.class;
|
||||
}
|
||||
|
||||
}
|
|
@ -23,6 +23,7 @@ public abstract class FadeIntoSceneInstruction<T extends AnimatedSceneElement> 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<T extends AnimatedSceneElement> 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<T> createLink(PonderScene scene) {
|
||||
|
|
BIN
src/main/resources/ponder/cart_assembler/anchor.nbt
Normal file
BIN
src/main/resources/ponder/cart_assembler/anchor.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/cart_assembler/dual.nbt
Normal file
BIN
src/main/resources/ponder/cart_assembler/dual.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/cart_assembler/modes.nbt
Normal file
BIN
src/main/resources/ponder/cart_assembler/modes.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/cart_assembler/rails.nbt
Normal file
BIN
src/main/resources/ponder/cart_assembler/rails.nbt
Normal file
Binary file not shown.
Loading…
Reference in a new issue