go teach them

- Ponder scenes for portable storage interface
- More work on tags
- Fixed tag screen on small resolution
This commit is contained in:
simibubi 2021-03-05 20:54:41 +01:00
parent e2c50663a5
commit 83a641c3b8
27 changed files with 840 additions and 215 deletions

View File

@ -401,19 +401,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
2384c6457ecf24c7b38358179b8fa6eb93b9627a assets/create/lang/en_ud.json 2384c6457ecf24c7b38358179b8fa6eb93b9627a assets/create/lang/en_ud.json
52fd28525a66b08652bac2d1a4a5543956b47091 assets/create/lang/en_us.json 3df303c4115c5ebac291b8c62f844812706fc1a2 assets/create/lang/en_us.json
00751ce98f978b4568723ebeaa0350d77a380cd8 assets/create/lang/unfinished/de_de.json 7e3384a3417e42c6af669a1de71520f91917c173 assets/create/lang/unfinished/de_de.json
2d8c801b475cabc33c7d0f8f318ef9068a4b8cea assets/create/lang/unfinished/es_es.json 1b96fec34e10b77750ff9df5ab8ba7d70a781f8a assets/create/lang/unfinished/es_es.json
1b18ac809eda5655000a56190bd8be467062beab assets/create/lang/unfinished/es_mx.json 500288690ba8d9541f49f0e97e6e5d0fe03c5878 assets/create/lang/unfinished/es_mx.json
93340db6d63864fa23bf663954221b68d345a37f assets/create/lang/unfinished/fr_fr.json 71f5958650b1300534cb03a602449620d8cede48 assets/create/lang/unfinished/fr_fr.json
299731bb461adb0c55393fa9c1d814861b002ebd assets/create/lang/unfinished/it_it.json 305e0f563cf8548ab671a0468dbf98b5b429b7be assets/create/lang/unfinished/it_it.json
947363f4bcec709f398904ece57a5d66294dd6f8 assets/create/lang/unfinished/ja_jp.json 0476653ed29767f05370c56415224f6adf711cea assets/create/lang/unfinished/ja_jp.json
11798cdf3c66152fc736cdba465b795c0abac0b4 assets/create/lang/unfinished/ko_kr.json 284cc716b6ecb3be8b9686cea842dc1f80377104 assets/create/lang/unfinished/ko_kr.json
b30301ea195e3c08dc8d1fecfd9a546255ac75b8 assets/create/lang/unfinished/nl_nl.json 2113c093bddcda9161bdb7993545115097267c96 assets/create/lang/unfinished/nl_nl.json
feb0ab7a4c616447dd74e4cf808a003447cfdfe1 assets/create/lang/unfinished/pt_br.json d4418c9eab8786dc3167661896910093f1ec36ff assets/create/lang/unfinished/pt_br.json
d12dde0c45bbf29613ade488619b57949ee7068c assets/create/lang/unfinished/ru_ru.json 7d8050786296c33dc5b05f0a8bae7fe1e5f03d46 assets/create/lang/unfinished/ru_ru.json
b904d41c0cda0d56b1aa519a45a35800589445d5 assets/create/lang/unfinished/zh_cn.json 87aae73838184ee67353f57e1468c3d28f834172 assets/create/lang/unfinished/zh_cn.json
47e89b425362abb4241b4ffe73bfaa22fef0b6f0 assets/create/lang/unfinished/zh_tw.json 755792dde83c565808b5ade4c48db1cbb4792d49 assets/create/lang/unfinished/zh_tw.json
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json

View File

@ -1811,10 +1811,22 @@
"create.ponder.shared.movement_anchors": "With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "Sneak +", "create.ponder.shared.sneak_and": "Sneak +",
"create.ponder.shared.ctrl_and": "Ctrl +", "create.ponder.shared.ctrl_and": "Ctrl +",
"create.ponder.tag.arm_access": "Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "Kinetic Sources",
"create.ponder.tag.arm_access.description": "Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "Components which generate Rotational Force",
"create.ponder.tag.kinetics": "Kinetic Blocks", "create.ponder.tag.contraption_actor": "Contraption Actors",
"create.ponder.tag.kinetics.description": "Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "Item Transportation",
"create.ponder.tag.logistics.description": "Components which help moving items around",
"create.ponder.tag.movement_anchor": "Movement Anchors",
"create.ponder.tag.movement_anchor.description": "Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "Fluid Manipulators",
"create.ponder.tag.fluids.description": "Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "Andesite Funnels can only ever extract single items.",
@ -1872,8 +1884,17 @@
"create.ponder.shaft.scene_1.text_1": "Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "Using funnels", "create.ponder.andesite_funnel.scene_0.header": "Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1066", "_": "Missing Localizations: 1087",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 109", "_": "Missing Localizations: 130",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 996", "_": "Missing Localizations: 1017",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 778", "_": "Missing Localizations: 799",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 114", "_": "Missing Localizations: 135",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 121", "_": "Missing Localizations: 142",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 167", "_": "Missing Localizations: 188",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1265", "_": "Missing Localizations: 1286",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1331", "_": "Missing Localizations: 1352",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 117", "_": "Missing Localizations: 138",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 115", "_": "Missing Localizations: 136",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 120", "_": "Missing Localizations: 141",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -1812,10 +1812,22 @@
"create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.",
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms", "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks", "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force", "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
"create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel", "create.ponder.brass_funnel.scene_0.header": "UNLOCALIZED: The Brass Funnel",
"create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", "create.ponder.brass_funnel.scene_0.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.",
@ -1873,8 +1885,17 @@
"create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.", "create.ponder.shaft.scene_1.text_1": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
"create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange", "create.ponder.portable_storage_interface.scene_0.header": "UNLOCALIZED: Contraption Storage Exchange",
"create.ponder.portable_storage_interface.scene_0.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.",
"create.ponder.portable_storage_interface.scene_0.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.",
"create.ponder.portable_storage_interface.scene_0.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween",
"create.ponder.portable_storage_interface.scene_0.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection",
"create.ponder.portable_storage_interface.scene_0.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption",
"create.ponder.portable_storage_interface.scene_0.text_6": "UNLOCALIZED: Items can now be inserted...",
"create.ponder.portable_storage_interface.scene_0.text_7": "UNLOCALIZED: ...or extracted from the contraption",
"create.ponder.portable_storage_interface.scene_0.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way",
"create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control", "create.ponder.portable_storage_interface.scene_1.header": "UNLOCALIZED: Redstone Control",
"create.ponder.portable_storage_interface.scene_1.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging",
"create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels", "create.ponder.andesite_funnel.scene_0.header": "UNLOCALIZED: Using funnels",
"create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.andesite_funnel.scene_0.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",

View File

@ -55,8 +55,9 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
public void tick() { public void tick() {
super.tick(); super.tick();
boolean wasConnected = isConnected(); boolean wasConnected = isConnected();
int timeUnit = getTransferTimeout() / 2;
if (transferTimer > 0) { if (transferTimer > 0 && (!isVirtual() || transferTimer != timeUnit)) {
transferTimer--; transferTimer--;
if (transferTimer == 0 || powered) if (transferTimer == 0 || powered)
stopTransferring(); stopTransferring();
@ -67,7 +68,6 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
markDirty(); markDirty();
float progress = 0; float progress = 0;
int timeUnit = getTransferTimeout() / 2;
if (isConnected) if (isConnected)
progress = 1; progress = 1;
else if (transferTimer >= timeUnit * 3) else if (transferTimer >= timeUnit * 3)
@ -106,12 +106,13 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
powered = isBlockPowered; powered = isBlockPowered;
sendData(); sendData();
} }
public boolean isPowered() { public boolean isPowered() {
return powered; return powered;
} }
protected AxisAlignedBB cachedBoundingBox; protected AxisAlignedBB cachedBoundingBox;
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public AxisAlignedBB getRenderBoundingBox() { public AxisAlignedBB getRenderBoundingBox() {

View File

@ -25,7 +25,8 @@ import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity implements IBearingTileEntity, IDisplayAssemblyExceptions { public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity
implements IBearingTileEntity, IDisplayAssemblyExceptions {
protected ScrollOptionBehaviour<RotationMode> movementMode; protected ScrollOptionBehaviour<RotationMode> movementMode;
protected ControlledContraptionEntity movedContraption; protected ControlledContraptionEntity movedContraption;
@ -35,6 +36,8 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
protected float clientAngleDiff; protected float clientAngleDiff;
protected AssemblyException lastException; protected AssemblyException lastException;
private float prevAngle;
public MechanicalBearingTileEntity(TileEntityType<? extends MechanicalBearingTileEntity> type) { public MechanicalBearingTileEntity(TileEntityType<? extends MechanicalBearingTileEntity> type) {
super(type); super(type);
setLazyTickRate(3); setLazyTickRate(3);
@ -87,6 +90,8 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
@Override @Override
public float getInterpolatedAngle(float partialTicks) { public float getInterpolatedAngle(float partialTicks) {
if (isVirtual())
return MathHelper.lerp(partialTicks + .5f, prevAngle, angle);
if (movedContraption == null || movedContraption.isStalled() || !running) if (movedContraption == null || movedContraption.isStalled() || !running)
partialTicks = 0; partialTicks = 0;
return MathHelper.lerp(partialTicks, angle, angle + getAngularSpeed()); return MathHelper.lerp(partialTicks, angle, angle + getAngularSpeed());
@ -145,7 +150,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
AllTriggers.triggerForNearbyPlayers(AllTriggers.WINDMILL, world, pos, 5); AllTriggers.triggerForNearbyPlayers(AllTriggers.WINDMILL, world, pos, 5);
if (contraption.getSailBlocks() >= 16 * 8) if (contraption.getSailBlocks() >= 16 * 8)
AllTriggers.triggerForNearbyPlayers(AllTriggers.MAXED_WINDMILL, world, pos, 5); AllTriggers.triggerForNearbyPlayers(AllTriggers.MAXED_WINDMILL, world, pos, 5);
contraption.removeBlocksFromWorld(world, BlockPos.ZERO); contraption.removeBlocksFromWorld(world, BlockPos.ZERO);
movedContraption = ControlledContraptionEntity.create(world, this, contraption); movedContraption = ControlledContraptionEntity.create(world, this, contraption);
BlockPos anchor = pos.offset(direction); BlockPos anchor = pos.offset(direction);
@ -179,6 +184,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
public void tick() { public void tick() {
super.tick(); super.tick();
prevAngle = angle;
if (world.isRemote) if (world.isRemote)
clientAngleDiff /= 2; clientAngleDiff /= 2;
@ -291,7 +297,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
BlockState state = getBlockState(); BlockState state = getBlockState();
if (!(state.getBlock() instanceof BearingBlock)) if (!(state.getBlock() instanceof BearingBlock))
return false; return false;
BlockState attachedState = world.getBlockState(pos.offset(state.get(BearingBlock.FACING))); BlockState attachedState = world.getBlockState(pos.offset(state.get(BearingBlock.FACING)));
if (attachedState.getMaterial() if (attachedState.getMaterial()
.isReplaceable()) .isReplaceable())
@ -304,4 +310,9 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
public boolean shouldRenderAsTE() { public boolean shouldRenderAsTE() {
return true; return true;
} }
public void setAngle(float forcedAngle) {
angle = forcedAngle;
}
} }

View File

@ -1,10 +1,29 @@
package com.simibubi.create.foundation.ponder; package com.simibubi.create.foundation.ponder;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.zip.GZIPInputStream;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.simibubi.create.Create; import com.simibubi.create.Create;
import com.simibubi.create.foundation.ponder.PonderStoryBoardEntry.PonderStoryBoard; import com.simibubi.create.foundation.ponder.PonderStoryBoardEntry.PonderStoryBoard;
import com.simibubi.create.foundation.ponder.content.*; import com.simibubi.create.foundation.ponder.content.PonderChapter;
import com.simibubi.create.foundation.ponder.content.PonderChapterRegistry;
import com.simibubi.create.foundation.ponder.content.PonderIndex;
import com.simibubi.create.foundation.ponder.content.PonderTag;
import com.simibubi.create.foundation.ponder.content.PonderTagRegistry;
import com.simibubi.create.foundation.ponder.content.SharedText;
import com.tterrag.registrate.util.entry.ItemProviderEntry; import com.tterrag.registrate.util.entry.ItemProviderEntry;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.CompressedStreamTools;
@ -14,14 +33,6 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.gen.feature.template.PlacementSettings; import net.minecraft.world.gen.feature.template.PlacementSettings;
import net.minecraft.world.gen.feature.template.Template; import net.minecraft.world.gen.feature.template.Template;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.function.Consumer;
import java.util.zip.GZIPInputStream;
public class PonderRegistry { public class PonderRegistry {
public static final PonderTagRegistry tags = new PonderTagRegistry(); public static final PonderTagRegistry tags = new PonderTagRegistry();
@ -60,9 +71,8 @@ public class PonderRegistry {
public static List<PonderScene> compile(List<PonderStoryBoardEntry> entries) { public static List<PonderScene> compile(List<PonderStoryBoardEntry> entries) {
if (PonderIndex.EDITOR_MODE) { if (PonderIndex.EDITOR_MODE) {
//PonderLocalization.shared.clear(); PonderLocalization.shared.clear();
//PonderLocalization.specific.clear(); SharedText.gatherText();
//SharedText.gatherText();
} }
List<PonderScene> scenes = new ArrayList<>(); List<PonderScene> scenes = new ArrayList<>();

View File

@ -21,6 +21,7 @@ import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
import com.simibubi.create.foundation.ponder.elements.ParrotElement; import com.simibubi.create.foundation.ponder.elements.ParrotElement;
import com.simibubi.create.foundation.ponder.elements.TextWindowElement; import com.simibubi.create.foundation.ponder.elements.TextWindowElement;
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
import com.simibubi.create.foundation.ponder.instructions.AnimateTileEntityInstruction;
import com.simibubi.create.foundation.ponder.instructions.AnimateWorldSectionInstruction; import com.simibubi.create.foundation.ponder.instructions.AnimateWorldSectionInstruction;
import com.simibubi.create.foundation.ponder.instructions.ChaseAABBInstruction; import com.simibubi.create.foundation.ponder.instructions.ChaseAABBInstruction;
import com.simibubi.create.foundation.ponder.instructions.CreateParrotInstruction; import com.simibubi.create.foundation.ponder.instructions.CreateParrotInstruction;
@ -373,10 +374,23 @@ public class SceneBuilder {
AnimateWorldSectionInstruction.rotate(link, new Vec3d(xRotation, yRotation, zRotation), duration)); AnimateWorldSectionInstruction.rotate(link, new Vec3d(xRotation, yRotation, zRotation), duration));
} }
public void configureCenterOfRotation(ElementLink<WorldSectionElement> link, Vec3d anchor) {
addInstruction(scene -> scene.resolve(link)
.setCenterOfRotation(anchor));
}
public void moveSection(ElementLink<WorldSectionElement> link, Vec3d offset, int duration) { public void moveSection(ElementLink<WorldSectionElement> link, Vec3d offset, int duration) {
addInstruction(AnimateWorldSectionInstruction.move(link, offset, duration)); addInstruction(AnimateWorldSectionInstruction.move(link, offset, duration));
} }
public void rotateBearing(BlockPos pos, float angle, int duration) {
addInstruction(AnimateTileEntityInstruction.bearing(pos, angle, duration));
}
public void movePulley(BlockPos pos, float distance, int duration) {
addInstruction(AnimateTileEntityInstruction.pulley(pos, distance, duration));
}
public void setBlocks(Selection selection, BlockState state, boolean spawnParticles) { public void setBlocks(Selection selection, BlockState state, boolean spawnParticles) {
addInstruction(new ReplaceBlocksInstruction(selection, $ -> state, true, spawnParticles)); addInstruction(new ReplaceBlocksInstruction(selection, $ -> state, true, spawnParticles));
} }

View File

@ -1,27 +1,189 @@
package com.simibubi.create.foundation.ponder.content; package com.simibubi.create.foundation.ponder.content;
import com.simibubi.create.AllItems;
import com.simibubi.create.content.contraptions.components.actors.PortableItemInterfaceTileEntity;
import com.simibubi.create.foundation.ponder.ElementLink;
import com.simibubi.create.foundation.ponder.SceneBuilder; import com.simibubi.create.foundation.ponder.SceneBuilder;
import com.simibubi.create.foundation.ponder.SceneBuildingUtil; 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.WorldSectionElement;
import com.simibubi.create.foundation.utility.Pointing;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
public class MovementActorScenes { public class MovementActorScenes {
public static void psiTransfer(SceneBuilder scene, SceneBuildingUtil util) { public static void psiTransfer(SceneBuilder scene, SceneBuildingUtil util) {
scene.title("Contraption Storage Exchange"); scene.title("Contraption Storage Exchange");
scene.configureBasePlate(0, 0, 6); scene.configureBasePlate(0, 0, 8);
scene.world.showSection(util.select.layer(0), Direction.UP); scene.world.showSection(util.select.layer(0), Direction.UP);
scene.idle(5); scene.idle(5);
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
BlockPos bearing = util.grid.at(5, 1, 2);
scene.world.showSection(util.select.position(bearing), Direction.DOWN);
scene.idle(5);
ElementLink<WorldSectionElement> contraption =
scene.world.showIndependentSection(util.select.fromTo(5, 2, 2, 6, 3, 2), Direction.DOWN);
scene.world.configureCenterOfRotation(contraption, util.vector.centerOf(bearing));
scene.idle(10);
scene.world.rotateBearing(bearing, 360, 70);
scene.world.rotateSection(contraption, 0, 360, 0, 70);
scene.overlay.showText(60)
.pointAt(util.vector.topOf(bearing.up(2)))
.colored(PonderPalette.RED)
.placeNearTarget()
.text("Inventories on moving contraptions cannot be accessed by players.");
scene.idle(70);
BlockPos psi = util.grid.at(4, 2, 2);
scene.world.showSectionAndMerge(util.select.position(psi), Direction.EAST, contraption);
scene.idle(13);
scene.effects.superGlue(psi, Direction.EAST, true);
scene.overlay.showText(80)
.pointAt(util.vector.topOf(psi))
.colored(PonderPalette.GREEN)
.placeNearTarget()
.text("This component can interact with storage without the need to stop the contraption.");
scene.idle(90);
BlockPos psi2 = psi.west(2);
scene.world.showSection(util.select.position(psi2), Direction.DOWN);
scene.overlay.showSelectionWithText(util.select.position(psi.west()), 50)
.colored(PonderPalette.RED)
.placeNearTarget()
.text("Place a second one with a gap of 1 or 2 blocks inbetween");
scene.idle(55);
scene.world.rotateBearing(bearing, 360, 60);
scene.world.rotateSection(contraption, 0, 360, 0, 60);
scene.idle(20);
scene.overlay.showText(40)
.placeNearTarget()
.pointAt(util.vector.of(3, 3, 2.5))
.text("Whenever they pass by each other, they will engage in a connection");
scene.idle(35);
Selection both = util.select.fromTo(2, 2, 2, 4, 2, 2);
Class<PortableItemInterfaceTileEntity> psiClass = PortableItemInterfaceTileEntity.class;
scene.world.modifyTileNBT(both, psiClass, nbt -> {
nbt.putFloat("Distance", 1);
nbt.putFloat("Timer", 40);
});
scene.idle(20);
scene.overlay.showOutline(PonderPalette.GREEN, psi, util.select.fromTo(5, 3, 2, 6, 3, 2), 80);
scene.idle(10);
scene.overlay.showSelectionWithText(util.select.position(psi2), 70)
.placeNearTarget()
.colored(PonderPalette.GREEN)
.text("While engaged, the stationary interface will represent ALL inventories on the contraption");
scene.idle(80);
BlockPos hopper = util.grid.at(2, 3, 2);
scene.world.showSection(util.select.position(hopper), Direction.DOWN);
scene.overlay.showText(70)
.placeNearTarget()
.pointAt(util.vector.topOf(hopper))
.text("Items can now be inserted...");
ItemStack itemStack = AllItems.COPPER_INGOT.asStack();
Vec3d entitySpawn = util.vector.topOf(hopper.up(3));
ElementLink<EntityElement> entity1 =
scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), itemStack);
scene.idle(10);
ElementLink<EntityElement> entity2 =
scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), itemStack);
scene.idle(10);
scene.world.modifyEntity(entity1, Entity::remove);
scene.idle(10);
scene.world.modifyEntity(entity2, Entity::remove);
scene.overlay
.showControls(new InputWindowElement(util.vector.topOf(6, 3, 2), Pointing.DOWN).withItem(itemStack), 40);
scene.idle(30);
scene.world.hideSection(util.select.position(hopper), Direction.UP);
scene.idle(15);
BlockPos beltPos = util.grid.at(1, 1, 2);
scene.world.showSection(util.select.fromTo(0, 1, 0, 1, 2, 6), Direction.DOWN);
scene.idle(10);
scene.world.createItemOnBelt(beltPos, Direction.EAST, itemStack.copy());
scene.overlay.showText(40)
.placeNearTarget()
.pointAt(util.vector.topOf(beltPos.up()))
.text("...or extracted from the contraption");
scene.idle(15);
scene.world.createItemOnBelt(beltPos, Direction.EAST, itemStack);
scene.idle(20);
scene.world.modifyEntities(ItemEntity.class, Entity::remove);
scene.idle(15);
scene.world.modifyEntities(ItemEntity.class, Entity::remove);
scene.overlay.showText(120)
.placeNearTarget()
.pointAt(util.vector.topOf(psi2))
.text("After no items have been exchanged for a while, the contraption will continue on its way");
scene.world.modifyTileNBT(both, psiClass, nbt -> nbt.putFloat("Timer", 9));
scene.idle(15);
scene.markAsFinished();
scene.world.rotateBearing(bearing, 270, 120);
scene.world.rotateSection(contraption, 0, 270, 0, 120);
} }
public static void psiRedstone(SceneBuilder scene, SceneBuildingUtil util) { public static void psiRedstone(SceneBuilder scene, SceneBuildingUtil util) {
scene.title("Redstone Control"); scene.title("Redstone Control");
scene.configureBasePlate(0, 0, 6); scene.configureBasePlate(0, 0, 6);
Class<PortableItemInterfaceTileEntity> psiClass = PortableItemInterfaceTileEntity.class;
Selection psis = util.select.fromTo(1, 1, 3, 1, 3, 3);
scene.world.modifyTileNBT(psis, psiClass, nbt -> {
nbt.putFloat("Distance", 1);
nbt.putFloat("Timer", 40);
});
scene.world.showSection(util.select.layer(0), Direction.UP); scene.world.showSection(util.select.layer(0), Direction.UP);
scene.idle(5); scene.idle(5);
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN); scene.world.showSection(util.select.layer(1), Direction.DOWN);
scene.idle(5);
ElementLink<WorldSectionElement> contraption =
scene.world.showIndependentSection(util.select.layersFrom(2), Direction.DOWN);
BlockPos bearing = util.grid.at(3, 1, 3);
scene.world.configureCenterOfRotation(contraption, util.vector.topOf(bearing));
scene.idle(20);
scene.world.modifyTileNBT(psis, psiClass, nbt -> nbt.putFloat("Timer", 9));
scene.idle(20);
scene.world.rotateBearing(bearing, 360 * 3 + 270, 240 + 60);
scene.world.rotateSection(contraption, 0, 360 * 3 + 270, 0, 240 + 60);
scene.idle(20);
scene.world.toggleRedstonePower(util.select.fromTo(1, 1, 1, 1, 1, 2));
scene.effects.indicateRedstone(util.grid.at(1, 1, 1));
scene.idle(10);
scene.overlay.showSelectionWithText(util.select.position(1, 1, 3), 120)
.colored(PonderPalette.RED)
.text("Redstone power will prevent the stationary interface from engaging");
scene.idle(20);
scene.markAsFinished();
} }
} }

View File

@ -5,7 +5,6 @@ import com.simibubi.create.AllItems;
import com.simibubi.create.foundation.ponder.PonderRegistry; import com.simibubi.create.foundation.ponder.PonderRegistry;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.item.Items;
public class PonderIndex { public class PonderIndex {
@ -17,10 +16,8 @@ public class PonderIndex {
// (!) Modifications inside storyboard methods only require re-opening the ui // (!) Modifications inside storyboard methods only require re-opening the ui
PonderRegistry.forComponents(AllBlocks.SHAFT) PonderRegistry.forComponents(AllBlocks.SHAFT)
.addStoryBoard("shaft/relay", KineticsScenes::shaftAsRelay, b -> b.highlightAllTags() .addStoryBoard("shaft/relay", KineticsScenes::shaftAsRelay)
.chapter(PonderChapter.of("basic_kinetics"))) .addStoryBoard("shaft/encasing", KineticsScenes::shaftsCanBeEncased);
.addStoryBoard("shaft/encasing", KineticsScenes::shaftsCanBeEncased,
b -> b.chapter(PonderChapter.of("encasing")));
// Funnels // Funnels
PonderRegistry.addStoryBoard(AllBlocks.BRASS_FUNNEL, "funnels/brass", FunnelScenes::brass); PonderRegistry.addStoryBoard(AllBlocks.BRASS_FUNNEL, "funnels/brass", FunnelScenes::brass);
@ -51,24 +48,102 @@ public class PonderIndex {
} }
public static void registerTags() { public static void registerTags() {
// Add items to tags here
PonderRegistry.tags.forItems(AllBlocks.SHAFT.getId()) PonderRegistry.tags.forTag(PonderTag.KINETIC_RELAYS)
.add(PonderTag.KINETICS); .add(AllBlocks.SHAFT)
.add(AllBlocks.COGWHEEL)
.add(AllBlocks.LARGE_COGWHEEL)
.add(AllItems.BELT_CONNECTOR)
.add(AllBlocks.ENCASED_CHAIN_DRIVE);
PonderRegistry.tags.forItems(AllBlocks.ANDESITE_FUNNEL.getId(), AllBlocks.BRASS_FUNNEL.getId()) PonderRegistry.tags.forTag(PonderTag.KINETIC_SOURCES)
.add(PonderTag.ARM_ACCESS) .add(AllBlocks.HAND_CRANK)
.add(PonderTag.ITEM_TRANSFER) .add(AllBlocks.COPPER_VALVE_HANDLE)
.add(PonderTag.REDSTONE_CONTROL); .add(AllBlocks.WATER_WHEEL)
.add(AllBlocks.ENCASED_FAN)
.add(AllBlocks.WINDMILL_BEARING)
.add(AllBlocks.FURNACE_ENGINE);
PonderRegistry.tags.forTag(PonderTag.REDSTONE_CONTROL) PonderRegistry.tags.forTag(PonderTag.KINETIC_APPLIANCES)
.add(Items.REDSTONE.getRegistryName()) .add(AllBlocks.MILLSTONE)
.add(Blocks.LEVER.getRegistryName()); .add(AllBlocks.TURNTABLE)
.add(AllBlocks.MECHANICAL_PRESS)
.add(AllBlocks.MECHANICAL_MIXER)
.add(AllBlocks.MECHANICAL_CRAFTER)
.add(AllBlocks.MECHANICAL_DRILL)
.add(AllBlocks.MECHANICAL_SAW)
.add(AllBlocks.MECHANICAL_PUMP)
.add(AllBlocks.MECHANICAL_ARM)
.add(AllBlocks.MECHANICAL_PISTON)
.add(AllBlocks.ROPE_PULLEY)
.add(AllBlocks.MECHANICAL_BEARING)
.add(AllBlocks.GANTRY_SHAFT)
.add(AllBlocks.GANTRY_CARRIAGE)
.add(AllBlocks.CLOCKWORK_BEARING)
.add(AllBlocks.CRUSHING_WHEEL);
PonderRegistry.tags.forTag(PonderTag.KINETICS) PonderRegistry.tags.forTag(PonderTag.FLUIDS)
.add(AllBlocks.COGWHEEL.getId()) .add(AllBlocks.FLUID_PIPE)
.add(AllBlocks.LARGE_COGWHEEL.getId()) .add(AllBlocks.MECHANICAL_PUMP)
.add(AllItems.BELT_CONNECTOR.getId()) .add(AllBlocks.FLUID_VALVE)
.add(AllBlocks.ENCASED_CHAIN_DRIVE.getId()); .add(AllBlocks.SMART_FLUID_PIPE)
.add(AllBlocks.FLUID_TANK)
.add(AllBlocks.ITEM_DRAIN)
.add(AllBlocks.HOSE_PULLEY);
PonderRegistry.tags.forTag(PonderTag.ARM_TARGETS)
.add(AllItems.BELT_CONNECTOR)
.add(AllBlocks.CHUTE)
.add(AllBlocks.DEPOT)
.add(AllBlocks.BASIN)
.add(AllBlocks.ANDESITE_FUNNEL)
.add(AllBlocks.BRASS_FUNNEL)
.add(AllBlocks.MECHANICAL_CRAFTER)
.add(AllBlocks.MILLSTONE)
.add(AllBlocks.DEPLOYER)
.add(AllBlocks.MECHANICAL_SAW)
.add(Blocks.COMPOSTER)
.add(AllBlocks.BLAZE_BURNER)
.add(Blocks.JUKEBOX)
.add(AllBlocks.CRUSHING_WHEEL);
PonderRegistry.tags.forTag(PonderTag.LOGISTICS)
.add(AllItems.BELT_CONNECTOR)
.add(AllBlocks.CHUTE)
.add(AllBlocks.SMART_CHUTE)
.add(AllBlocks.DEPOT)
.add(AllBlocks.MECHANICAL_ARM)
.add(AllBlocks.ANDESITE_FUNNEL)
.add(AllBlocks.BRASS_FUNNEL)
.add(AllBlocks.ANDESITE_TUNNEL)
.add(AllBlocks.BRASS_TUNNEL);
PonderRegistry.tags.forTag(PonderTag.MOVEMENT_ANCHOR)
.add(AllBlocks.MECHANICAL_PISTON)
.add(AllBlocks.WINDMILL_BEARING)
.add(AllBlocks.MECHANICAL_BEARING)
.add(AllBlocks.CLOCKWORK_BEARING)
.add(AllBlocks.ROPE_PULLEY)
.add(AllBlocks.GANTRY_CARRIAGE)
.add(AllBlocks.CART_ASSEMBLER);
PonderRegistry.tags.forTag(PonderTag.CONTRAPTION_ACTOR)
.add(AllBlocks.MECHANICAL_HARVESTER)
.add(AllBlocks.MECHANICAL_PLOUGH)
.add(AllBlocks.MECHANICAL_DRILL)
.add(AllBlocks.MECHANICAL_SAW)
.add(AllBlocks.DEPLOYER)
.add(AllBlocks.PORTABLE_STORAGE_INTERFACE)
.add(AllBlocks.PORTABLE_FLUID_INTERFACE)
.add(AllBlocks.MECHANICAL_BEARING)
.add(AllBlocks.ANDESITE_FUNNEL)
.add(AllBlocks.BRASS_FUNNEL)
.add(AllBlocks.SEATS[0])
.add(AllBlocks.REDSTONE_CONTACT)
.add(Blocks.BELL)
.add(Blocks.DISPENSER)
.add(Blocks.DROPPER);
} }

View File

@ -6,11 +6,11 @@ import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.gui.IScreenRenderable; import com.simibubi.create.foundation.gui.IScreenRenderable;
import com.simibubi.create.foundation.ponder.PonderLocalization; import com.simibubi.create.foundation.ponder.PonderLocalization;
import net.minecraft.block.Blocks;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.AbstractGui; import net.minecraft.client.gui.AbstractGui;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.util.IItemProvider;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -21,18 +21,41 @@ public class PonderTag implements IScreenRenderable {
public static final PonderTag public static final PonderTag
KINETICS = new PonderTag("kinetics").item(AllBlocks.COGWHEEL.get() KINETIC_RELAYS = new PonderTag("kinetic_relays").item(AllBlocks.COGWHEEL.get(), true, false)
.asItem(), true, false) .defaultLang("Kinetic Blocks", "Components which help relaying Rotational Force elsewhere"),
.defaultLang("Kinetic Blocks", "Components which help generating, relaying and making use of Rotational Force"),
FLUID_TRANSFER = new PonderTag("fluid_transfer").idAsIcon(), KINETIC_SOURCES = new PonderTag("kinetic_sources").item(AllBlocks.WATER_WHEEL.get(), true, false)
OPEN_INVENTORY = new PonderTag("open_inventory").item(AllBlocks.BASIN.get() .defaultLang("Kinetic Sources", "Components which generate Rotational Force"),
.asItem()),
ARM_ACCESS = new PonderTag("arm_access").item(AllBlocks.MECHANICAL_ARM.get() KINETIC_APPLIANCES = new PonderTag("kinetic_appliances").item(AllBlocks.MECHANICAL_PRESS.get(), true, false)
.asItem()) .defaultLang("Kinetic Appliances", "Components which make use of Rotational Force"),
FLUIDS = new PonderTag("fluids").item(AllBlocks.FLUID_PIPE.get(), true, false)
.defaultLang("Fluid Manipulators", "Components which help relaying and making use of Fluids"),
LOGISTICS = new PonderTag("logistics").item(Blocks.CHEST, true, false)
.defaultLang("Item Transportation", "Components which help moving items around"),
MOVEMENT_ANCHOR = new PonderTag("movement_anchor").item(AllBlocks.MECHANICAL_PISTON.get(), true, false)
.defaultLang("Movement Anchors",
"Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways"),
CONTRAPTION_ACTOR = new PonderTag("contraption_actor").item(AllBlocks.MECHANICAL_HARVESTER.get(), true, false)
.defaultLang("Contraption Actors",
"Components which expose special behaviour when attached to a moving contraption"),
// FLUID_TRANSFER = new PonderTag("fluid_transfer").idAsIcon(),
//
// OPEN_INVENTORY = new PonderTag("open_inventory").item(AllBlocks.BASIN.get()
// .asItem()),
//
// REDSTONE_CONTROL = new PonderTag("redstone_control").item(Items.REDSTONE, true, false),
//
// ITEM_TRANSFER = new PonderTag("item_transfer").idAsIcon(),
ARM_TARGETS = new PonderTag("arm_targets").item(AllBlocks.MECHANICAL_ARM.get())
.defaultLang("Targets for Mechanical Arms", .defaultLang("Targets for Mechanical Arms",
"Components which can be selected as inputs or outputs to the Mechanical Arm"), "Components which can be selected as inputs or outputs to the Mechanical Arm");
REDSTONE_CONTROL = new PonderTag("redstone_control").item(Items.REDSTONE, true, false),
ITEM_TRANSFER = new PonderTag("item_transfer").idAsIcon();
public static class Highlight { public static class Highlight {
public static final PonderTag ALL = new PonderTag("_all"); public static final PonderTag ALL = new PonderTag("_all");
@ -81,11 +104,11 @@ public class PonderTag implements IScreenRenderable {
return this; return this;
} }
public PonderTag item(Item item) { public PonderTag item(IItemProvider item) {
return this.item(item, true, true); return this.item(item, true, true);
} }
public PonderTag item(Item item, boolean useAsIcon, boolean useAsMainItem) { public PonderTag item(IItemProvider item, boolean useAsIcon, boolean useAsMainItem) {
if (useAsIcon) if (useAsIcon)
this.itemIcon = new ItemStack(item); this.itemIcon = new ItemStack(item);
if (useAsMainItem) if (useAsMainItem)

View File

@ -1,16 +1,19 @@
package com.simibubi.create.foundation.ponder.content; package com.simibubi.create.foundation.ponder.content;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
import com.simibubi.create.foundation.ponder.PonderRegistry;
import net.minecraft.util.ResourceLocation;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
import com.simibubi.create.foundation.ponder.PonderRegistry;
import com.tterrag.registrate.util.entry.ItemProviderEntry;
import net.minecraft.util.IItemProvider;
import net.minecraft.util.ResourceLocation;
public class PonderTagRegistry { public class PonderTagRegistry {
private final Multimap<ResourceLocation, PonderTag> tags; private final Multimap<ResourceLocation, PonderTag> tags;
@ -30,21 +33,19 @@ public class PonderTagRegistry {
} }
public Set<ResourceLocation> getItems(PonderTag tag) { public Set<ResourceLocation> getItems(PonderTag tag) {
return tags return tags.entries()
.entries() .stream()
.stream() .filter(e -> e.getValue() == tag)
.filter(e -> e.getValue() == tag) .map(Map.Entry::getKey)
.map(Map.Entry::getKey) .collect(ImmutableSet.toImmutableSet());
.collect(ImmutableSet.toImmutableSet());
} }
public Set<PonderChapter> getChapters(PonderTag tag) { public Set<PonderChapter> getChapters(PonderTag tag) {
return chapterTags return chapterTags.entries()
.entries() .stream()
.stream() .filter(e -> e.getValue() == tag)
.filter(e -> e.getValue() == tag) .map(Map.Entry::getKey)
.map(Map.Entry::getKey) .collect(ImmutableSet.toImmutableSet());
.collect(ImmutableSet.toImmutableSet());
} }
public void add(PonderTag tag, ResourceLocation item) { public void add(PonderTag tag, ResourceLocation item) {
@ -90,5 +91,14 @@ public class PonderTagRegistry {
PonderRegistry.tags.add(tag, item); PonderRegistry.tags.add(tag, item);
return this; return this;
} }
public TagBuilder add(IItemProvider item) {
return add(item.asItem()
.getRegistryName());
}
public TagBuilder add(ItemProviderEntry<?> entry) {
return add(entry.get());
}
} }
} }

View File

@ -34,13 +34,11 @@ public class PonderTagScreen extends AbstractSimiScreen {
protected final PonderTag tag; protected final PonderTag tag;
protected final List<Item> items; protected final List<Item> items;
private final double itemXmult = 0.5; private final double itemXmult = 0.5;
private final double itemYmult = 0.4;
protected Rectangle2d itemArea; protected Rectangle2d itemArea;
protected final List<PonderChapter> chapters; protected final List<PonderChapter> chapters;
private final double chapterXmult = 0.5; private final double chapterXmult = 0.5;
private final double chapterYmult = 0.75; private final double chapterYmult = 0.75;
protected Rectangle2d chapterArea; protected Rectangle2d chapterArea;
// private final double mainXmult = 0.5;
private final double mainYmult = 0.15; private final double mainYmult = 0.15;
private ItemStack hoveredItem = ItemStack.EMPTY; private ItemStack hoveredItem = ItemStack.EMPTY;
@ -76,7 +74,7 @@ public class PonderTagScreen extends AbstractSimiScreen {
LayoutHelper layout = LayoutHelper.centeredHorizontal(items.size(), rowCount, 28, 28, 8); LayoutHelper layout = LayoutHelper.centeredHorizontal(items.size(), rowCount, 28, 28, 8);
itemArea = layout.getArea(); itemArea = layout.getArea();
int itemCenterX = (int) (width * itemXmult); int itemCenterX = (int) (width * itemXmult);
int itemCenterY = (int) (height * itemYmult); int itemCenterY = getItemsY();
for (Item i : items) { for (Item i : items) {
PonderButton button = PonderButton button =
@ -92,6 +90,23 @@ public class PonderTagScreen extends AbstractSimiScreen {
layout.next(); layout.next();
} }
if (!tag.getMainItem()
.isEmpty()) {
PonderButton button =
new PonderButton(itemCenterX - layout.getTotalWidth() / 2 - 42, itemCenterY - 10, (mouseX, mouseY) -> {
if (!PonderRegistry.all.containsKey(tag.getMainItem()
.getItem()
.getRegistryName()))
return;
centerScalingOn(mouseX, mouseY);
ScreenOpener.transitionTo(PonderUI.of(tag.getMainItem()));
}).showing(tag.getMainItem());
button.fade(1);
// button.flash();
widgets.add(button);
}
// chapters // chapters
chapters.clear(); chapters.clear();
chapters.addAll(PonderRegistry.tags.getChapters(tag)); chapters.addAll(PonderRegistry.tags.getChapters(tag));
@ -137,48 +152,6 @@ public class PonderTagScreen extends AbstractSimiScreen {
renderChapters(mouseX, mouseY, partialTicks); renderChapters(mouseX, mouseY, partialTicks);
//
// int x = (int) (width * mainXmult);
// int y = (int) (height * mainYmult);
//
// RenderSystem.pushMatrix();
// RenderSystem.translated(x, y, 0);
// RenderSystem.translated(-150, 0, 0);
//
// if (!tag.getMainItem()
// .isEmpty()) {
// RenderSystem.translated(-25, 0, 0);
// PonderUI.renderBox(0, -10, 20, 20, false);
// RenderSystem.pushMatrix();
// RenderSystem.translated(-2, -12, 0);
// RenderSystem.scaled(1.5, 1.5, 1);
// GuiGameElement.of(tag.getMainItem())
// .render();
//
// RenderSystem.popMatrix();
//
// RenderSystem.translated(75, 0, 0);
//
// }
//
// RenderSystem.pushMatrix();
//// RenderSystem.scaled(1.5, 1.5, 1);
//
// // render icon & box
// PonderUI.renderBox(-8, -20, 40, 40, false);
// RenderSystem.translated(0, -10, 100);
// RenderSystem.scaled(1.5, 1.5, 1);
// tag.draw(this, 0, 0);
//
// RenderSystem.popMatrix();
//
// // tag name & description
// UIRenderHelper.streak(0, 36, 0, 39, 350, 0x101010);
// drawString(font, Lang.translate("ponder.tag." + tag.getId()), 41, -16, 0xffff_ffff);
// drawString(font, Lang.translate("ponder.tag." + tag.getId() + ".desc"), 41, -4, 0xffff_ffff);
//
// RenderSystem.popMatrix();
RenderSystem.pushMatrix(); RenderSystem.pushMatrix();
RenderSystem.translated(width / 2 - 120, height * mainYmult - 40, 0); RenderSystem.translated(width / 2 - 120, height * mainYmult - 40, 0);
@ -196,7 +169,6 @@ public class PonderTagScreen extends AbstractSimiScreen {
drawString(font, Lang.translate(PonderUI.PONDERING), x, y - 6, 0xffa3a3a3); drawString(font, Lang.translate(PonderUI.PONDERING), x, y - 6, 0xffa3a3a3);
y += 8; y += 8;
x += 0; x += 0;
// RenderSystem.translated(0, 3 * (indexDiff), 0);
RenderSystem.translated(x, y, 0); RenderSystem.translated(x, y, 0);
RenderSystem.translated(0, 0, 5); RenderSystem.translated(0, 0, 5);
font.drawString(title, 0, 0, 0xeeeeee); font.drawString(title, 0, 0, 0xeeeeee);
@ -212,7 +184,7 @@ public class PonderTagScreen extends AbstractSimiScreen {
RenderSystem.pushMatrix(); RenderSystem.pushMatrix();
int w = (int) (width * .45); int w = (int) (width * .45);
x = (width - w) / 2; x = (width - w) / 2;
y = (int) (height * itemYmult + itemArea.getHeight() + 20); y = getItemsY() - 10 + Math.max(itemArea.getHeight(), 48);
String desc = tag.getDescription(); String desc = tag.getDescription();
int h = font.getWordWrappedHeight(desc, w); int h = font.getWordWrappedHeight(desc, w);
@ -228,7 +200,7 @@ public class PonderTagScreen extends AbstractSimiScreen {
return; return;
int x = (int) (width * itemXmult); int x = (int) (width * itemXmult);
int y = (int) (height * itemYmult); int y = getItemsY();
String relatedTitle = Lang.translate(ASSOCIATED); String relatedTitle = Lang.translate(ASSOCIATED);
int stringWidth = font.getStringWidth(relatedTitle); int stringWidth = font.getStringWidth(relatedTitle);
@ -248,6 +220,10 @@ public class PonderTagScreen extends AbstractSimiScreen {
} }
public int getItemsY() {
return (int) (mainYmult * height + 85);
}
protected void renderChapters(int mouseX, int mouseY, float partialTicks) { protected void renderChapters(int mouseX, int mouseY, float partialTicks) {
if (chapters.isEmpty()) if (chapters.isEmpty())
return; return;

View File

@ -24,7 +24,7 @@ public class InputWindowElement extends AnimatedOverlayElement {
AllIcons icon; AllIcons icon;
ItemStack item = ItemStack.EMPTY; ItemStack item = ItemStack.EMPTY;
private Vec3d sceneSpace; private Vec3d sceneSpace;
public InputWindowElement clone() { public InputWindowElement clone() {
InputWindowElement inputWindowElement = new InputWindowElement(sceneSpace, direction); InputWindowElement inputWindowElement = new InputWindowElement(sceneSpace, direction);
inputWindowElement.key = key; inputWindowElement.key = key;
@ -129,7 +129,7 @@ public class InputWindowElement extends AnimatedOverlayElement {
if (hasItem) { if (hasItem) {
GuiGameElement.of(item) GuiGameElement.of(item)
.at(keyWidth + 24, 0) .at(keyWidth + (hasIcon ? 24 : 0), 0)
.scale(1.5) .scale(1.5)
.render(); .render();
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();

View File

@ -96,10 +96,13 @@ public class WorldSectionElement extends AnimatedSceneElement {
private void applyNewSelection(Selection selection) { private void applyNewSelection(Selection selection) {
this.section = selection; this.section = selection;
centerOfRotation = this.section.getCenter();
queueRedraw(); queueRedraw();
} }
public void setCenterOfRotation(Vec3d center) {
centerOfRotation = center;
}
@Override @Override
public void reset(PonderScene scene) { public void reset(PonderScene scene) {
super.reset(scene); super.reset(scene);
@ -189,6 +192,8 @@ public class WorldSectionElement extends AnimatedSceneElement {
float pt = AnimationTickHolder.getPartialTicks(); float pt = AnimationTickHolder.getPartialTicks();
in = in.subtract(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset)); in = in.subtract(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset));
if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO)) { if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO)) {
if (centerOfRotation == null)
centerOfRotation = section.getCenter();
in = in.subtract(centerOfRotation); in = in.subtract(centerOfRotation);
in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x), Axis.X); in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x), Axis.X);
in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z), Axis.Z); in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z), Axis.Z);
@ -201,13 +206,16 @@ public class WorldSectionElement extends AnimatedSceneElement {
public void transformMS(MatrixStack ms, float pt) { public void transformMS(MatrixStack ms, float pt) {
MatrixStacker.of(ms) MatrixStacker.of(ms)
.translate(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset)); .translate(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset));
if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO)) if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO)) {
if (centerOfRotation == null)
centerOfRotation = section.getCenter();
MatrixStacker.of(ms) MatrixStacker.of(ms)
.translate(centerOfRotation) .translate(centerOfRotation)
.rotateX(MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x)) .rotateX(MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x))
.rotateZ(MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z)) .rotateZ(MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z))
.rotateY(MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y)) .rotateY(MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y))
.translateBack(centerOfRotation); .translateBack(centerOfRotation);
}
} }
public void tick(PonderScene scene) { public void tick(PonderScene scene) {

View File

@ -0,0 +1,70 @@
package com.simibubi.create.foundation.ponder.instructions;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Function;
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
import com.simibubi.create.foundation.ponder.PonderScene;
import com.simibubi.create.foundation.ponder.PonderWorld;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
public class AnimateTileEntityInstruction extends TickingInstruction {
protected double deltaPerTick;
protected double totalDelta;
protected double target;
protected final BlockPos location;
private BiConsumer<PonderWorld, Float> setter;
private Function<PonderWorld, Float> getter;
public static AnimateTileEntityInstruction bearing(BlockPos location, float totalDelta, int ticks) {
return new AnimateTileEntityInstruction(location, totalDelta, ticks,
(w, f) -> castIfPresent(w, location, MechanicalBearingTileEntity.class).ifPresent(bte -> bte.setAngle(f)),
(w) -> castIfPresent(w, location, MechanicalBearingTileEntity.class).map(bte -> bte.getInterpolatedAngle(0))
.orElse(0f));
}
public static AnimateTileEntityInstruction pulley(BlockPos location, float totalDelta, int ticks) {
return new AnimateTileEntityInstruction(location, totalDelta, ticks,
(w, f) -> castIfPresent(w, location, PulleyTileEntity.class).ifPresent(pulley -> pulley.offset = f),
(w) -> castIfPresent(w, location, PulleyTileEntity.class).map(pulley -> pulley.offset)
.orElse(0f));
}
protected AnimateTileEntityInstruction(BlockPos location, float totalDelta, int ticks,
BiConsumer<PonderWorld, Float> setter, Function<PonderWorld, Float> getter) {
super(false, ticks);
this.location = location;
this.setter = setter;
this.getter = getter;
this.deltaPerTick = totalDelta * (1d / ticks);
this.totalDelta = totalDelta;
this.target = totalDelta;
}
@Override
protected final void firstTick(PonderScene scene) {
super.firstTick(scene);
target = getter.apply(scene.getWorld()) + totalDelta;
}
@Override
public void tick(PonderScene scene) {
super.tick(scene);
PonderWorld world = scene.getWorld();
setter.accept(world, (float) (remainingTicks == 0 ? target : getter.apply(world) + deltaPerTick));
}
private static <T> Optional<T> castIfPresent(PonderWorld world, BlockPos pos, Class<T> teType) {
TileEntity tileEntity = world.getTileEntity(pos);
if (teType.isInstance(tileEntity))
return Optional.of(teType.cast(tileEntity));
return Optional.empty();
}
}

View File

@ -21,12 +21,7 @@ public interface LayoutHelper {
default Rectangle2d getArea() { default Rectangle2d getArea() {
int lWidth = getTotalWidth(); int lWidth = getTotalWidth();
int lHeight = getTotalHeight(); int lHeight = getTotalHeight();
return new Rectangle2d( return new Rectangle2d(-lWidth / 2, -lHeight / 2, lWidth, lHeight);
-lWidth/2,
-lHeight/2,
lWidth,
lHeight
);
} }
class CenteredHorizontalLayoutHelper implements LayoutHelper { class CenteredHorizontalLayoutHelper implements LayoutHelper {
@ -77,7 +72,7 @@ public interface LayoutHelper {
public void next() { public void next() {
currentColumn++; currentColumn++;
if (currentColumn >= rowCounts[currentRow]) { if (currentColumn >= rowCounts[currentRow]) {
//nextRow // nextRow
if (++currentRow >= rows) { if (++currentRow >= rows) {
x = 0; x = 0;
y = 0; y = 0;
@ -96,10 +91,8 @@ public interface LayoutHelper {
private void init() { private void init() {
prepareX(); prepareX();
prepareY(); prepareY();
} }
private void prepareX() { private void prepareX() {
int rowWidth = rowCounts[currentRow] * width + (rowCounts[currentRow] - 1) * spacing; int rowWidth = rowCounts[currentRow] * width + (rowCounts[currentRow] - 1) * spacing;
x = -(rowWidth / 2); x = -(rowWidth / 2);
@ -120,7 +113,6 @@ public interface LayoutHelper {
return rows * height + (rows > 1 ? ((rows - 1) * spacing) : 0); return rows * height + (rows > 1 ? ((rows - 1) * spacing) : 0);
} }
} }
} }