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

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.sneak_and": "Sneak +",
"create.ponder.shared.ctrl_and": "Ctrl +",
"create.ponder.tag.arm_access": "Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "Kinetic Blocks",
"create.ponder.tag.kinetics.description": "Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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 [------------------------<-",
@ -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.sneak_and": "UNLOCALIZED: Sneak +",
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
"create.ponder.tag.arm_access": "UNLOCALIZED: Targets for Mechanical Arms",
"create.ponder.tag.arm_access.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
"create.ponder.tag.kinetics": "UNLOCALIZED: Kinetic Blocks",
"create.ponder.tag.kinetics.description": "UNLOCALIZED: Components which help generating, relaying and making use of Rotational Force",
"create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources",
"create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force",
"create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors",
"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.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.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.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.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() {
super.tick();
boolean wasConnected = isConnected();
int timeUnit = getTransferTimeout() / 2;
if (transferTimer > 0) {
if (transferTimer > 0 && (!isVirtual() || transferTimer != timeUnit)) {
transferTimer--;
if (transferTimer == 0 || powered)
stopTransferring();
@ -67,7 +68,6 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
markDirty();
float progress = 0;
int timeUnit = getTransferTimeout() / 2;
if (isConnected)
progress = 1;
else if (transferTimer >= timeUnit * 3)
@ -106,12 +106,13 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
powered = isBlockPowered;
sendData();
}
public boolean isPowered() {
return powered;
}
protected AxisAlignedBB cachedBoundingBox;
@Override
@OnlyIn(Dist.CLIENT)
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.MathHelper;
public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity implements IBearingTileEntity, IDisplayAssemblyExceptions {
public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity
implements IBearingTileEntity, IDisplayAssemblyExceptions {
protected ScrollOptionBehaviour<RotationMode> movementMode;
protected ControlledContraptionEntity movedContraption;
@ -35,6 +36,8 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
protected float clientAngleDiff;
protected AssemblyException lastException;
private float prevAngle;
public MechanicalBearingTileEntity(TileEntityType<? extends MechanicalBearingTileEntity> type) {
super(type);
setLazyTickRate(3);
@ -87,6 +90,8 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
@Override
public float getInterpolatedAngle(float partialTicks) {
if (isVirtual())
return MathHelper.lerp(partialTicks + .5f, prevAngle, angle);
if (movedContraption == null || movedContraption.isStalled() || !running)
partialTicks = 0;
return MathHelper.lerp(partialTicks, angle, angle + getAngularSpeed());
@ -145,7 +150,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
AllTriggers.triggerForNearbyPlayers(AllTriggers.WINDMILL, world, pos, 5);
if (contraption.getSailBlocks() >= 16 * 8)
AllTriggers.triggerForNearbyPlayers(AllTriggers.MAXED_WINDMILL, world, pos, 5);
contraption.removeBlocksFromWorld(world, BlockPos.ZERO);
movedContraption = ControlledContraptionEntity.create(world, this, contraption);
BlockPos anchor = pos.offset(direction);
@ -179,6 +184,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
public void tick() {
super.tick();
prevAngle = angle;
if (world.isRemote)
clientAngleDiff /= 2;
@ -291,7 +297,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
BlockState state = getBlockState();
if (!(state.getBlock() instanceof BearingBlock))
return false;
BlockState attachedState = world.getBlockState(pos.offset(state.get(BearingBlock.FACING)));
if (attachedState.getMaterial()
.isReplaceable())
@ -304,4 +310,9 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
public boolean shouldRenderAsTE() {
return true;
}
public void setAngle(float forcedAngle) {
angle = forcedAngle;
}
}

View File

@ -1,10 +1,29 @@
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.simibubi.create.Create;
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 net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundNBT;
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.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 static final PonderTagRegistry tags = new PonderTagRegistry();
@ -60,9 +71,8 @@ public class PonderRegistry {
public static List<PonderScene> compile(List<PonderStoryBoardEntry> entries) {
if (PonderIndex.EDITOR_MODE) {
//PonderLocalization.shared.clear();
//PonderLocalization.specific.clear();
//SharedText.gatherText();
PonderLocalization.shared.clear();
SharedText.gatherText();
}
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.TextWindowElement;
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.ChaseAABBInstruction;
import com.simibubi.create.foundation.ponder.instructions.CreateParrotInstruction;
@ -373,10 +374,23 @@ public class SceneBuilder {
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) {
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) {
addInstruction(new ReplaceBlocksInstruction(selection, $ -> state, true, spawnParticles));
}

View File

@ -1,27 +1,189 @@
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.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.math.BlockPos;
import net.minecraft.util.math.Vec3d;
public class MovementActorScenes {
public static void psiTransfer(SceneBuilder scene, SceneBuildingUtil util) {
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.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) {
scene.title("Redstone Control");
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.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 net.minecraft.block.Blocks;
import net.minecraft.item.Items;
public class PonderIndex {
@ -17,10 +16,8 @@ public class PonderIndex {
// (!) Modifications inside storyboard methods only require re-opening the ui
PonderRegistry.forComponents(AllBlocks.SHAFT)
.addStoryBoard("shaft/relay", KineticsScenes::shaftAsRelay, b -> b.highlightAllTags()
.chapter(PonderChapter.of("basic_kinetics")))
.addStoryBoard("shaft/encasing", KineticsScenes::shaftsCanBeEncased,
b -> b.chapter(PonderChapter.of("encasing")));
.addStoryBoard("shaft/relay", KineticsScenes::shaftAsRelay)
.addStoryBoard("shaft/encasing", KineticsScenes::shaftsCanBeEncased);
// Funnels
PonderRegistry.addStoryBoard(AllBlocks.BRASS_FUNNEL, "funnels/brass", FunnelScenes::brass);
@ -51,24 +48,102 @@ public class PonderIndex {
}
public static void registerTags() {
// Add items to tags here
PonderRegistry.tags.forItems(AllBlocks.SHAFT.getId())
.add(PonderTag.KINETICS);
PonderRegistry.tags.forTag(PonderTag.KINETIC_RELAYS)
.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())
.add(PonderTag.ARM_ACCESS)
.add(PonderTag.ITEM_TRANSFER)
.add(PonderTag.REDSTONE_CONTROL);
PonderRegistry.tags.forTag(PonderTag.KINETIC_SOURCES)
.add(AllBlocks.HAND_CRANK)
.add(AllBlocks.COPPER_VALVE_HANDLE)
.add(AllBlocks.WATER_WHEEL)
.add(AllBlocks.ENCASED_FAN)
.add(AllBlocks.WINDMILL_BEARING)
.add(AllBlocks.FURNACE_ENGINE);
PonderRegistry.tags.forTag(PonderTag.REDSTONE_CONTROL)
.add(Items.REDSTONE.getRegistryName())
.add(Blocks.LEVER.getRegistryName());
PonderRegistry.tags.forTag(PonderTag.KINETIC_APPLIANCES)
.add(AllBlocks.MILLSTONE)
.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)
.add(AllBlocks.COGWHEEL.getId())
.add(AllBlocks.LARGE_COGWHEEL.getId())
.add(AllItems.BELT_CONNECTOR.getId())
.add(AllBlocks.ENCASED_CHAIN_DRIVE.getId());
PonderRegistry.tags.forTag(PonderTag.FLUIDS)
.add(AllBlocks.FLUID_PIPE)
.add(AllBlocks.MECHANICAL_PUMP)
.add(AllBlocks.FLUID_VALVE)
.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.ponder.PonderLocalization;
import net.minecraft.block.Blocks;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.AbstractGui;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.IItemProvider;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@ -21,18 +21,41 @@ public class PonderTag implements IScreenRenderable {
public static final PonderTag
KINETICS = new PonderTag("kinetics").item(AllBlocks.COGWHEEL.get()
.asItem(), true, false)
.defaultLang("Kinetic Blocks", "Components which help generating, relaying and making use of Rotational Force"),
FLUID_TRANSFER = new PonderTag("fluid_transfer").idAsIcon(),
OPEN_INVENTORY = new PonderTag("open_inventory").item(AllBlocks.BASIN.get()
.asItem()),
ARM_ACCESS = new PonderTag("arm_access").item(AllBlocks.MECHANICAL_ARM.get()
.asItem())
KINETIC_RELAYS = new PonderTag("kinetic_relays").item(AllBlocks.COGWHEEL.get(), true, false)
.defaultLang("Kinetic Blocks", "Components which help relaying Rotational Force elsewhere"),
KINETIC_SOURCES = new PonderTag("kinetic_sources").item(AllBlocks.WATER_WHEEL.get(), true, false)
.defaultLang("Kinetic Sources", "Components which generate Rotational Force"),
KINETIC_APPLIANCES = new PonderTag("kinetic_appliances").item(AllBlocks.MECHANICAL_PRESS.get(), true, false)
.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",
"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();
"Components which can be selected as inputs or outputs to the Mechanical Arm");
public static class Highlight {
public static final PonderTag ALL = new PonderTag("_all");
@ -81,11 +104,11 @@ public class PonderTag implements IScreenRenderable {
return this;
}
public PonderTag item(Item item) {
public PonderTag item(IItemProvider item) {
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)
this.itemIcon = new ItemStack(item);
if (useAsMainItem)

View File

@ -1,16 +1,19 @@
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.Collection;
import java.util.Map;
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 {
private final Multimap<ResourceLocation, PonderTag> tags;
@ -30,21 +33,19 @@ public class PonderTagRegistry {
}
public Set<ResourceLocation> getItems(PonderTag tag) {
return tags
.entries()
.stream()
.filter(e -> e.getValue() == tag)
.map(Map.Entry::getKey)
.collect(ImmutableSet.toImmutableSet());
return tags.entries()
.stream()
.filter(e -> e.getValue() == tag)
.map(Map.Entry::getKey)
.collect(ImmutableSet.toImmutableSet());
}
public Set<PonderChapter> getChapters(PonderTag tag) {
return chapterTags
.entries()
.stream()
.filter(e -> e.getValue() == tag)
.map(Map.Entry::getKey)
.collect(ImmutableSet.toImmutableSet());
return chapterTags.entries()
.stream()
.filter(e -> e.getValue() == tag)
.map(Map.Entry::getKey)
.collect(ImmutableSet.toImmutableSet());
}
public void add(PonderTag tag, ResourceLocation item) {
@ -90,5 +91,14 @@ public class PonderTagRegistry {
PonderRegistry.tags.add(tag, item);
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 List<Item> items;
private final double itemXmult = 0.5;
private final double itemYmult = 0.4;
protected Rectangle2d itemArea;
protected final List<PonderChapter> chapters;
private final double chapterXmult = 0.5;
private final double chapterYmult = 0.75;
protected Rectangle2d chapterArea;
// private final double mainXmult = 0.5;
private final double mainYmult = 0.15;
private ItemStack hoveredItem = ItemStack.EMPTY;
@ -76,7 +74,7 @@ public class PonderTagScreen extends AbstractSimiScreen {
LayoutHelper layout = LayoutHelper.centeredHorizontal(items.size(), rowCount, 28, 28, 8);
itemArea = layout.getArea();
int itemCenterX = (int) (width * itemXmult);
int itemCenterY = (int) (height * itemYmult);
int itemCenterY = getItemsY();
for (Item i : items) {
PonderButton button =
@ -92,6 +90,23 @@ public class PonderTagScreen extends AbstractSimiScreen {
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.clear();
chapters.addAll(PonderRegistry.tags.getChapters(tag));
@ -137,48 +152,6 @@ public class PonderTagScreen extends AbstractSimiScreen {
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.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);
y += 8;
x += 0;
// RenderSystem.translated(0, 3 * (indexDiff), 0);
RenderSystem.translated(x, y, 0);
RenderSystem.translated(0, 0, 5);
font.drawString(title, 0, 0, 0xeeeeee);
@ -212,7 +184,7 @@ public class PonderTagScreen extends AbstractSimiScreen {
RenderSystem.pushMatrix();
int w = (int) (width * .45);
x = (width - w) / 2;
y = (int) (height * itemYmult + itemArea.getHeight() + 20);
y = getItemsY() - 10 + Math.max(itemArea.getHeight(), 48);
String desc = tag.getDescription();
int h = font.getWordWrappedHeight(desc, w);
@ -228,7 +200,7 @@ public class PonderTagScreen extends AbstractSimiScreen {
return;
int x = (int) (width * itemXmult);
int y = (int) (height * itemYmult);
int y = getItemsY();
String relatedTitle = Lang.translate(ASSOCIATED);
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) {
if (chapters.isEmpty())
return;

View File

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

View File

@ -96,10 +96,13 @@ public class WorldSectionElement extends AnimatedSceneElement {
private void applyNewSelection(Selection selection) {
this.section = selection;
centerOfRotation = this.section.getCenter();
queueRedraw();
}
public void setCenterOfRotation(Vec3d center) {
centerOfRotation = center;
}
@Override
public void reset(PonderScene scene) {
super.reset(scene);
@ -189,6 +192,8 @@ public class WorldSectionElement extends AnimatedSceneElement {
float pt = AnimationTickHolder.getPartialTicks();
in = in.subtract(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset));
if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO)) {
if (centerOfRotation == null)
centerOfRotation = section.getCenter();
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.z, animatedRotation.z), Axis.Z);
@ -201,13 +206,16 @@ public class WorldSectionElement extends AnimatedSceneElement {
public void transformMS(MatrixStack ms, float pt) {
MatrixStacker.of(ms)
.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)
.translate(centerOfRotation)
.rotateX(MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x))
.rotateZ(MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z))
.rotateY(MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y))
.translateBack(centerOfRotation);
}
}
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() {
int lWidth = getTotalWidth();
int lHeight = getTotalHeight();
return new Rectangle2d(
-lWidth/2,
-lHeight/2,
lWidth,
lHeight
);
return new Rectangle2d(-lWidth / 2, -lHeight / 2, lWidth, lHeight);
}
class CenteredHorizontalLayoutHelper implements LayoutHelper {
@ -77,7 +72,7 @@ public interface LayoutHelper {
public void next() {
currentColumn++;
if (currentColumn >= rowCounts[currentRow]) {
//nextRow
// nextRow
if (++currentRow >= rows) {
x = 0;
y = 0;
@ -96,10 +91,8 @@ public interface LayoutHelper {
private void init() {
prepareX();
prepareY();
}
private void prepareX() {
int rowWidth = rowCounts[currentRow] * width + (rowCounts[currentRow] - 1) * spacing;
x = -(rowWidth / 2);
@ -120,7 +113,6 @@ public interface LayoutHelper {
return rows * height + (rows > 1 ? ((rows - 1) * spacing) : 0);
}
}
}