diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 1f3450836..17f3b565d 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -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 diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index d4d95363b..16a3c01d3 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index b1d288aac..89482bf57 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 539839eb7..8b7db4b71 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index fff507aad..c27b19cb8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 693fe889c..406cf0985 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 685be1ccf..2653a490a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index d2422e9a2..1571d0fc4 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 6f40bbe56..1ab559b35 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 8e529378e..c6280279d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 77c539d59..35409db99 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index af1d88bd4..a34ba2f18 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 3e91b0982..b8dbe1f27 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index d6e1b1599..d18975b6b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 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.", diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceTileEntity.java index d304af537..9ea1408a7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceTileEntity.java @@ -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() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java index 42460217a..e92e9ff22 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java @@ -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 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 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; + } + } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java index fe804fc53..e45f184b7 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java @@ -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 compile(List entries) { if (PonderIndex.EDITOR_MODE) { - //PonderLocalization.shared.clear(); - //PonderLocalization.specific.clear(); - //SharedText.gatherText(); + PonderLocalization.shared.clear(); + SharedText.gatherText(); } List scenes = new ArrayList<>(); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java index a2e165133..a27eb31a8 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java @@ -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 link, Vec3d anchor) { + addInstruction(scene -> scene.resolve(link) + .setCenterOfRotation(anchor)); + } + public void moveSection(ElementLink 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)); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/MovementActorScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/MovementActorScenes.java index 855b80413..e4d7aeb4a 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/MovementActorScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/MovementActorScenes.java @@ -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 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 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 entity1 = + scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), itemStack); + scene.idle(10); + ElementLink 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 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 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(); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java index ad9371231..5e9e35588 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java @@ -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); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java index 6e4679494..12357a5a6 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java @@ -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) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagRegistry.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagRegistry.java index 98f897a8c..9ff0a6763 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagRegistry.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagRegistry.java @@ -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 tags; @@ -30,21 +33,19 @@ public class PonderTagRegistry { } public Set 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 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()); + } } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java index 0fef32306..7d78287f2 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java @@ -34,13 +34,11 @@ public class PonderTagScreen extends AbstractSimiScreen { protected final PonderTag tag; protected final List items; private final double itemXmult = 0.5; - private final double itemYmult = 0.4; protected Rectangle2d itemArea; protected final List 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; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java index 2de36010f..0932b7443 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java @@ -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(); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java index 308b8dfc0..d1c169c3b 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java @@ -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) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateTileEntityInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateTileEntityInstruction.java new file mode 100644 index 000000000..99e1e8f2b --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateTileEntityInstruction.java @@ -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 setter; + private Function 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 setter, Function 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 Optional castIfPresent(PonderWorld world, BlockPos pos, Class teType) { + TileEntity tileEntity = world.getTileEntity(pos); + if (teType.isInstance(tileEntity)) + return Optional.of(teType.cast(tileEntity)); + return Optional.empty(); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/ui/LayoutHelper.java b/src/main/java/com/simibubi/create/foundation/ponder/ui/LayoutHelper.java index 97c472072..32ca1df1d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/ui/LayoutHelper.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/ui/LayoutHelper.java @@ -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); } - } }