diff --git a/src/generated/resources/assets/ctnhenergy/lang/en_ud.json b/src/generated/resources/assets/ctnhenergy/lang/en_ud.json index 44f7590..cfd5fdb 100644 --- a/src/generated/resources/assets/ctnhenergy/lang/en_ud.json +++ b/src/generated/resources/assets/ctnhenergy/lang/en_ud.json @@ -50,6 +50,147 @@ "ctnhenergy.powersubstationmachine.voltage_tier": " :ɹǝı⟘ ǝbɐʇןoΛ", "ctnhenergy.predicates.batteries": "ɹǝıʇ ǝɯɐs ǝɥʇ ǝq oʇ pǝǝu ʇou op sǝıɹǝʇʇɐᗺ", "ctnhenergy.predicates.crafting_storage": "ǝɯɐs ǝɥʇ ǝq oʇ pǝǝu ʇou op sǝbɐɹoʇs buıʇɟɐɹƆ", + "ctnhenergy.max_multiplier": "ɹǝıןdıʇןnɯ uɹǝʇʇɐd xɐɯ bıɟuoƆ", + "ctnhenergy.ponder.annihilation_plane.header": "ǝuɐןԀ uoıʇɐןıɥıuuⱯ ǝɥʇ buıs∩", + "ctnhenergy.ponder.annihilation_plane.text_1": ")ǝןqıssod ɟı( ʞɹoʍʇǝu ǝɥʇ oʇuı ʇı ɟo ʇuoɹɟ uı sɯǝʇı ɹo sʞɔoןq ʇɔǝןןoɔ ןןıʍ ǝuɐןd uoıʇɐןıɥıuuɐ ǝɥ⟘", + "ctnhenergy.ponder.annihilation_plane.title": "ǝuɐןԀ uoıʇɐןıɥıuuⱯ", + "ctnhenergy.ponder.annihilation_plane_filter.header": "ǝuɐןԀ uoıʇɐןıɥıuuⱯ ǝɥʇ ɥʇıʍ buıɹǝʇןıℲ", + "ctnhenergy.ponder.annihilation_plane_filter.text_1": "˙˙˙ʇı ɟo ʇuoɹɟ uı buıɥʇʎɹǝʌǝ sʇɔǝןןoɔ ǝuɐןd uoıʇɐןıɥıuuɐ ǝɥʇ ʇɐɥʇ puıɟ ןן,noʎ", + "ctnhenergy.ponder.annihilation_plane_filter.text_2": "sɯǝʇı uıɐʇɹǝɔ ʇdǝɔɔɐ ʎןuo oʇ ʞɹoʍʇǝu ɹnoʎ ǝɹnbıɟuoɔ uɐɔ noʎ", + "ctnhenergy.ponder.annihilation_plane_filter.text_3": "˙˙˙ɹǝʇןıɟ snq ǝbɐɹoʇs ǝɥʇ ǝɹnbıɟuoƆ", + "ctnhenergy.ponder.annihilation_plane_filter.text_4": "ǝuɐןd uoıʇɐןıɥıuuɐ ǝɥʇ ʎq uǝʞoɹq ǝq sʎɐʍןɐ ןןıʍ sdoɹp ʇnoɥʇıʍ sʞɔoןq ʇɐɥʇ ǝʇoN", + "ctnhenergy.ponder.annihilation_plane_filter.text_5": "ǝnssı sıɥʇ ǝʌןos dןǝɥ ʎɐɯ ɥɔno⟘ ʞןıS ɥʇıʍ ǝuɐןd uoıʇɐןıɥıuuɐ ǝɥʇ buıʇuɐɥɔuƎ", + "ctnhenergy.ponder.annihilation_plane_filter.title": "ɹǝʇןıℲ ǝuɐןԀ uoıʇɐןıɥıuuⱯ", + "ctnhenergy.ponder.budding_quartz_grow.header": "ɥʇʍoɹ⅁ zʇɹɐnὉ buıppnᗺ", + "ctnhenergy.ponder.budding_quartz_grow.text_1": "ǝɯıʇ ɹǝʌo sןɐʇsʎɹɔ sʍoɹb zʇɹɐnb buıppnᗺ", + "ctnhenergy.ponder.budding_quartz_grow.text_2": ")ssǝןʍɐןɟ ʇdǝɔxǝ( ɹǝıʇ ǝuo ǝpɐɹbǝp ʎɐɯ zʇɹɐnb buıppnq ǝɥʇ 'ɥʇʍoɹb buıɹnᗡ", + "ctnhenergy.ponder.budding_quartz_grow.text_3": ")ʞɔɐʇs ʎǝɥʇ( ɥʇʍoɹb dn pǝǝds oʇ sɹoʇɐɹǝןǝɔɔɐ ɥʇʍoɹb ǝɔɐןԀ", + "ctnhenergy.ponder.budding_quartz_grow.title": "zʇɹɐnὉ buıʍoɹ⅁", + "ctnhenergy.ponder.budding_quartz_obtain.header": "uoıʇɐɹǝuǝ⅁ zʇɹɐnὉ buıppnᗺ", + "ctnhenergy.ponder.budding_quartz_obtain.text_1": "ʞɔoןq zʇɹɐnb snʇɹǝɔ buıppnq ɐ sı sıɥ⟘", + "ctnhenergy.ponder.budding_quartz_obtain.text_2": "sǝʇıɹoǝʇǝɯ uı sǝqnɔ snoıɹǝʇsʎɯ ɥʇıʍ sɹɐǝddɐ zʇɹɐnb buıppnᗺ", + "ctnhenergy.ponder.budding_quartz_obtain.title": "zʇɹɐnὉ buıppnᗺ buıuıɐʇqO", + "ctnhenergy.ponder.budding_quartz_repair.header": "zʇɹɐnὉ buıppnᗺ buıɹıɐdǝᴚ", + "ctnhenergy.ponder.budding_quartz_repair.text_1": "¿ʞɔoןq zʇɹɐnb ɐ oʇ pǝpɐɹbǝp zʇɹɐnb buıppnq ɹnoʎ", + "ctnhenergy.ponder.budding_quartz_repair.text_2": "¡ʇı ǝpɐɹbdn oʇ ǝɔuɐɥɔ %0ϛ ɐ ɹoɟ ɹǝıʇ ǝɯɐs ǝɥʇ ɟo zʇɹɐnb buıppnq ɐ ɥʇıʍ ʞɔıןɔ-ʇɥbıᴚ", + "ctnhenergy.ponder.budding_quartz_repair.text_3": "¡ʎɐʍ sıɥʇ zʇɹɐnb buıppnq ssǝןʍɐןɟ uıɐʇqo uɐɔ noʎ", + "ctnhenergy.ponder.budding_quartz_repair.title": "zʇɹɐnὉ buıppnᗺ buıɹıɐdǝᴚ", + "ctnhenergy.ponder.bus_transport.header": "sǝsnᗺ ǝbɐɹoʇS ɥʇıʍ sɔıʇsıboꞀ snᗺ", + "ctnhenergy.ponder.bus_transport.text_1": "sɔıʇsıboן ǝןdɯıs ɹoɟ sǝsnq ǝbɐɹoʇs ɥʇıʍ sǝsnq ʇɹodxǝ/ʇɹodɯı ǝuıqɯoƆ", + "ctnhenergy.ponder.bus_transport.title": "sɔıʇsıboꞀ snᗺ", + "ctnhenergy.ponder.cable.header": "ƎⱯ uı sǝןqɐƆ", + "ctnhenergy.ponder.cable.text_1": "˙˙˙sǝןqɐɔ ƎⱯ ǝɹɐ ǝsǝɥ⟘", + "ctnhenergy.ponder.cable.text_2": "ɹǝɥʇo ɥɔɐǝ oʇ ʇɔǝuuoɔ uɐɔ ɹoןoɔ ǝɯɐs ǝɥʇ ɟo sǝןqɐɔ ןןⱯ", + "ctnhenergy.ponder.cable.text_3": "sǝןqɐɔ xınןɟ oʇ ʇɔǝuuoɔ uɐɔ ɹoןoɔ ʎuɐ ɟo sǝןqɐƆ", + "ctnhenergy.ponder.cable.text_4": "ɹǝɥʇo ɥɔɐǝ oʇ ʇɔǝuuoɔ ʇou ןןıʍ sɹoןoɔ ʇuǝɹǝɟɟıp ɟo sǝןqɐƆ", + "ctnhenergy.ponder.cable.title": "sǝןqɐƆ ƎⱯ", + "ctnhenergy.ponder.controller.header": "ʇuǝɯǝɔɐןԀ ɹǝןןoɹʇuoƆ ƎW", + "ctnhenergy.ponder.controller.text_1": "˙˙˙ɹǝןןoɹʇuoɔ ɐ sı sıɥ⟘", + "ctnhenergy.ponder.controller.text_2": "sʞɹoʍ osןɐ ɹǝʍod ,spoɯ ɹǝɥʇo 'ʞɹoʍ oʇ ɹǝʍod spǝǝu ɹǝןןoɹʇuoɔ ǝɥ⟘", + "ctnhenergy.ponder.controller.text_3": "uoısuǝɯıp ɥɔɐǝ uı sʞɔoןq ㄥ oʇ dn puǝʇxǝ uɐɔ ɹǝןןoɹʇuoɔ ǝɥ⟘", + "ctnhenergy.ponder.controller.text_4": "ʞɹoʍʇǝu ǝɥʇ pɐoןɹǝʌo ןןıʍ sʞɔoןq ㄥ buıpǝǝɔxƎ", + "ctnhenergy.ponder.controller.text_5": ")ʇɔǝuuoɔ ʇouuɐɔ( ɹǝɥʇo ɥɔɐǝ uǝǝʍʇǝq sןǝuuɐɥɔ ssɐd ʇouuɐɔ sɹǝןןoɹʇuoƆ", + "ctnhenergy.ponder.controller.text_6": "ǝdɐɥs ssoɹɔ ɐ uı pǝɔɐןd ǝq ʇouuɐɔ osןɐ sɹǝןןoɹʇuoƆ", + "ctnhenergy.ponder.controller.title": "ɹǝןןoɹʇuoƆ ƎW", + "ctnhenergy.ponder.crafting_parallel.header": "buıʇɟɐɹƆ oʇnⱯ ןǝןןɐɹɐԀ", + "ctnhenergy.ponder.crafting_parallel.text_1": "buıʇɟɐɹɔ ןǝןןɐɹɐd ʍoןןɐ sɹǝpıʌoɹd uɹǝʇʇɐd ǝןdıʇןnW", + "ctnhenergy.ponder.crafting_parallel.text_2": "sɹǝpıʌoɹd uɹǝʇʇɐd buıpnןɔuı 'suoıʇɐɹnbıɟuoɔ ʎןddɐ puɐ ʎdoɔ uɐɔ spɹɐɔ ʎɹoɯǝW", + "ctnhenergy.ponder.crafting_parallel.text_3": "˙˙˙pɹɐɔ ʎɹoɯǝɯ ɐ ɥʇıʍ ɹǝpıʌoɹd uɹǝʇʇɐd ǝɥʇ ʞɔıןɔ-ʇɥbıɹ-ʞɐǝuS", + "ctnhenergy.ponder.crafting_parallel.text_4": "pɹɐɔ ʎɹoɯǝɯ ǝɥʇ oʇ ɐʇɐp uɹǝʇʇɐd sʇı sǝʌɐs ɹǝpıʌoɹd uɹǝʇʇɐd ǝɥ⟘", + "ctnhenergy.ponder.crafting_parallel.text_5": "˙˙˙pɹɐɔ ʎɹoɯǝɯ ǝɥʇ ɥʇıʍ ɹǝpıʌoɹd uɹǝʇʇɐd ʇǝbɹɐʇ ǝɥʇ ʞɔıןɔ-ʇɥbıɹ uǝɥ⟘", + "ctnhenergy.ponder.crafting_parallel.text_6": "ʇǝbɹɐʇ ǝɥʇ oʇ suɹǝʇʇɐd pǝʌɐs ǝɥʇ sǝıdoɔ puɐ suɹǝʇʇɐd ʞuɐןq sǝɯnsuoɔ pɹɐɔ ʎɹoɯǝɯ ǝɥ⟘", + "ctnhenergy.ponder.crafting_parallel.text_7": "uoıʇɐzıןǝןןɐɹɐd pןınq oʇ ssǝɔoɹd sıɥʇ ʇɐǝdǝᴚ", + "ctnhenergy.ponder.crafting_parallel.title": "uoıʇɐzıןǝןןɐɹɐԀ buıʇɟɐɹƆ oʇnⱯ", + "ctnhenergy.ponder.crafting_process_unit.header": "∩ԀƆ ɐ buıpןınᗺ", + "ctnhenergy.ponder.crafting_process_unit.text_1": "˙˙˙sǝןnɹ uıɐʇɹǝɔ sɐɥ ∩ԀƆ ɐ buıpןınᗺ", + "ctnhenergy.ponder.crafting_process_unit.text_2": "pıoqnɔ ɹɐןnbuɐʇɔǝɹ ɐ ǝq ʇsnɯ ∩ԀƆ ǝɥ⟘", + "ctnhenergy.ponder.crafting_process_unit.text_3": "ʎןɹǝdoɹd ɯɹoɟ ʇou ןןıʍ ∩ԀƆ pıoqnɔ-uou Ɐ", + "ctnhenergy.ponder.crafting_process_unit.text_4": "ǝbɐɹoʇs buıʇɟɐɹɔ ǝuo ʇsɐǝן ʇɐ spǝǝu ∩ԀƆ ǝɥ⟘", + "ctnhenergy.ponder.crafting_process_unit.text_5": "sɹossǝɔoɹd-oɔ ɹo 'sǝbɐɹoʇs 'sɹoʇıuoɯ 'sʇıun buıʇɟɐɹɔ ǝq uɐɔ sʇɹɐd ɹǝɥʇO", + "ctnhenergy.ponder.crafting_process_unit.title": "ʇıu∩ buıssǝɔoɹԀ buıʇɟɐɹƆ", + "ctnhenergy.ponder.crafting_system.header": "ɯǝʇsʎS buıʇɟɐɹƆ oʇnⱯ ƎⱯ", + "ctnhenergy.ponder.crafting_system.text_1": "˙˙˙ɯǝʇsʎs buıʇɟɐɹɔ-oʇnɐ uɐ pןınq o⟘", + "ctnhenergy.ponder.crafting_system.text_2": "ʞɔoןqıʇןnɯ ∩ԀƆ ɐ pǝǝu noʎ", + "ctnhenergy.ponder.crafting_system.text_3": "ʇǝbɹɐʇ ʇndʇno ɥʇıʍ ɹǝpıʌoɹd uɹǝʇʇɐd ɐ puⱯ", + "ctnhenergy.ponder.crafting_system.title": "buıʇɟɐɹƆ oʇnⱯ", + "ctnhenergy.ponder.dense_cable.header": "ǝןqɐƆ pǝɹǝʌoƆ ǝsuǝᗡ", + "ctnhenergy.ponder.dense_cable.text_1": "sןǝuuɐɥɔ ᄅƐ ʎɹɹɐɔ uɐɔ sǝןqɐɔ ǝsuǝᗡ", + "ctnhenergy.ponder.dense_cable.text_2": ")sǝuıɥɔɐɯ ǝdʎʇ-ǝןqɐɔ 'sǝsnq 'sǝuɐןd( sǝuıɥɔɐɯ ʞɔoןq-ǝןbuıs oʇ ʇɔǝuuoɔ ʇouuɐɔ ʇı 'ɹǝʌǝʍoH", + "ctnhenergy.ponder.dense_cable.title": "ǝןqɐƆ ǝsuǝᗡ", + "ctnhenergy.ponder.formation_plane.header": "ǝuɐןԀ uoıʇɐɯɹoℲ ǝɥʇ buıs∩", + "ctnhenergy.ponder.formation_plane.text_1": "pןɹoʍ ǝɥʇ oʇuı sɯǝʇı ɹo sʞɔoןq sɐ sɯǝʇı ʞɹoʍʇǝu sʇndʇno ǝuɐןd uoıʇɐɯɹoɟ ǝɥ⟘", + "ctnhenergy.ponder.formation_plane.text_2": "˙˙˙ǝpoɯ ʞɔoןq uı sı ǝuɐןd uoıʇɐɯɹoɟ ǝɥʇ uǝɥM", + "ctnhenergy.ponder.formation_plane.text_3": "ʇı ɟo ʇuoɹɟ uı sʞɔoןq sǝɔɐןd ǝuɐןd uoıʇɐɯɹoɟ ǝɥ⟘", + "ctnhenergy.ponder.formation_plane.text_4": "˙˙˙ǝpoɯ ɯǝʇı uı sı ǝuɐןd uoıʇɐɯɹoɟ ǝɥʇ uǝɥM", + "ctnhenergy.ponder.formation_plane.text_5": "ʇı ɟo ʇuoɹɟ uı sǝıʇıʇuǝ sɐ sɯǝʇı sdoɹp ǝuɐןd uoıʇɐɯɹoɟ ǝɥ⟘", + "ctnhenergy.ponder.formation_plane.text_6": "sɯǝʇı ɔıɟıɔǝds ʇndʇno ʎןuo oʇ ɹǝʇןıɟ ǝuɐןd uoıʇɐɯɹoɟ ǝɥʇ ǝɹnbıɟuoƆ", + "ctnhenergy.ponder.formation_plane.title": "ǝuɐןԀ uoıʇɐɯɹoℲ", + "ctnhenergy.ponder.import_export_bus.header": "sǝsnᗺ ʇɹodxƎ puɐ ʇɹodɯI buıs∩", + "ctnhenergy.ponder.import_export_bus.text_1": "ʞɹoʍʇǝu ǝɥʇ ɯoɹɟ ʇɔɐɹʇxǝ puɐ ʇɹǝsuı ʎןʇɔǝɹıp sǝsnq ʇɹodxǝ puɐ ʇɹodɯI", + "ctnhenergy.ponder.import_export_bus.text_2": "ɹǝuıɐʇuoɔ ʇǝbɹɐʇ ɐ oʇ ʞɹoʍʇǝu ǝɥʇ ɯoɹɟ sɯǝʇı sʇndʇno snq ʇɹodxǝ ǝɥ⟘", + "ctnhenergy.ponder.import_export_bus.text_3": "˙˙˙ɹǝʇןıɟ snq ʇɹodxǝ ǝɥʇ ǝɹnbıɟuoƆ", + "ctnhenergy.ponder.import_export_bus.text_4": "ʞɹoʍʇǝu ǝɥʇ oʇuı ɹǝuıɐʇuoɔ ɐ ɯoɹɟ sɯǝʇı sʇnduı snq ʇɹodɯı ǝɥ⟘", + "ctnhenergy.ponder.import_export_bus.text_5": "˙˙˙ɹǝʇןıɟ snq ʇɹodɯı ǝɥʇ ǝɹnbıɟuoƆ", + "ctnhenergy.ponder.import_export_bus.title": "snᗺ ʇɹodxƎ/ʇɹodɯI", + "ctnhenergy.ponder.interface_common.header": "ǝɔɐɟɹǝʇuI ƎW ǝɥʇ buıs∩", + "ctnhenergy.ponder.interface_common.text_1": "pןɹoʍ ǝpısʇno ǝɥʇ oʇ uoıʇɔǝuuoɔ s,ʞɹoʍʇǝu ǝɥʇ sı ǝɔɐɟɹǝʇuı ƎW ǝɥ⟘", + "ctnhenergy.ponder.interface_common.text_2": "ǝɔɐɟɹǝʇuı ƎW ǝɥʇ ɐıʌ ʞɹoʍʇǝu ǝɥʇ oʇuı ʎןʇɔǝɹıp pǝʇɹǝsuı ǝq uɐɔ sɯǝʇI", + "ctnhenergy.ponder.interface_common.text_3": "sʇoןs ǝɔɐɟɹǝʇuı ƎW ǝɥʇ ǝɹnbıɟuoƆ", + "ctnhenergy.ponder.interface_common.text_4": "sʇoןs pǝɹnbıɟuoɔ sʇı ןןıɟ oʇ ʞɹoʍʇǝu ǝɥʇ ɯoɹɟ sɯǝʇı ʇsǝnbǝɹ ןןıʍ ʇI", + "ctnhenergy.ponder.interface_common.title": "ǝɔɐɟɹǝʇuI ƎW", + "ctnhenergy.ponder.io_port.header": "ʇɹoԀ OI ǝɥʇ buıs∩", + "ctnhenergy.ponder.io_port.text_1": "ʞɹoʍʇǝu ǝɥʇ puɐ sןןǝɔ ǝbɐɹoʇs uǝǝʍʇǝq sɯǝʇı ɹǝɟsuɐɹʇ uɐɔ ʇɹod OI ǝɥ⟘", + "ctnhenergy.ponder.io_port.text_2": "sןןǝɔ ǝbɐɹoʇs oʇuı sɯǝʇı ʞɹoʍʇǝu ʇɹodxǝ uɐɔ noʎ", + "ctnhenergy.ponder.io_port.text_3": "sǝʌıɹp uı sʇuǝʇuoɔ ןןǝɔ ǝbɐɹoʇs ǝzıuɐbɹo oʇ ʇɹod OI ǝɥʇ ǝs∩", + "ctnhenergy.ponder.io_port.title": "ʇɹoԀ OI", + "ctnhenergy.ponder.io_port_output.header": "ʇɹoԀ OI ɥʇıʍ ʇndʇnO ssɐW", + "ctnhenergy.ponder.io_port_output.text_1": "˙˙˙ʎןʞɔınb ʎɹǝʌ sɯǝʇı sɹǝɟsuɐɹʇ ʇɹod OI ǝɥ⟘", + "ctnhenergy.ponder.io_port_output.text_2": "sǝıʇıɹɐןnbuıs puɐ sןןɐq ɹǝʇʇɐɯ buıɔnpoɹd ɹoɟ ןɐǝpı ʇı buıʞɐW", + "ctnhenergy.ponder.io_port_output.title": "ʇndʇnO ʇɹoԀ OI", + "ctnhenergy.ponder.molecular_assembler.header": "ɹǝןqɯǝssⱯ ɹɐןnɔǝןoW ǝɥʇ buıs∩", + "ctnhenergy.ponder.molecular_assembler.text_1": "˙˙˙ɹǝןqɯǝssɐ ɹɐןnɔǝןoɯ ǝɥʇ ǝsn o⟘", + "ctnhenergy.ponder.molecular_assembler.text_2": "ɹǝpıʌoɹd uɹǝʇʇɐd ɐ oʇ ʇxǝu ʇı ǝɔɐןd oʇ pǝǝu noʎ", + "ctnhenergy.ponder.molecular_assembler.text_3": "sǝdıɔǝɹ ǝןqɐʇ buıɥʇıɯs puɐ 'ɹǝʇʇnɔǝuoʇs 'ǝןqɐʇ buıʇɟɐɹɔ ǝʇɐɯoʇnɐ uɐɔ ʇI", + "ctnhenergy.ponder.molecular_assembler.text_4": "˙˙˙ʞɹoʍʇǝu ǝɥʇ ɥbnoɹɥʇ ssɐd uɐɔ sɹǝןqɯǝssɐ ɹɐןnɔǝןoɯ puɐ sɹǝpıʌoɹd uɹǝʇʇɐd ɥʇoᗺ", + "ctnhenergy.ponder.molecular_assembler.text_5": "sıɥʇ ǝʞıן sǝɹnʇɔnɹʇs pןınq uɐɔ noʎ oS", + "ctnhenergy.ponder.molecular_assembler.title": "ɹǝןqɯǝssⱯ ɹɐןnɔǝןoW", + "ctnhenergy.ponder.pattern_provider.header": "ɹǝpıʌoɹԀ uɹǝʇʇɐԀ ǝɥʇ buıs∩", + "ctnhenergy.ponder.pattern_provider.text_1": "ɹǝpıʌoɹd uɹǝʇʇɐd ɐ sı sıɥ⟘", + "ctnhenergy.ponder.pattern_provider.text_2": "uoıʇɔǝɹıp s,ɹǝpıʌoɹd uɹǝʇʇɐd ǝɥʇ ǝbuɐɥɔ oʇ ɥɔuǝɹʍ ɐ ǝs∩", + "ctnhenergy.ponder.pattern_provider.text_3": "˙˙˙ʇsǝnbǝɹ buıʇɟɐɹɔ ɐ sǝnssı ʞɹoʍʇǝu ǝɥʇ uǝɥM", + "ctnhenergy.ponder.pattern_provider.text_4": "sɹǝuıɐʇuoɔ ʇuǝɔɐظpɐ oʇ sʇuǝıpǝɹbuı sʇndʇno ɹǝpıʌoɹd uɹǝʇʇɐd ǝɥ⟘", + "ctnhenergy.ponder.pattern_provider.text_5": "ʞɹoʍʇǝu ǝɥʇ oʇ sɯǝʇı buıuɹnʇǝɹ sǝɹınbǝɹ ʇɟɐɹɔ ɐ buıʇǝןdɯoƆ", + "ctnhenergy.ponder.pattern_provider.text_6": "ɯsıuɐɥɔǝɯ uɹnʇǝɹ ɐ pןınq oʇ pǝǝu noʎ oS", + "ctnhenergy.ponder.pattern_provider.title": "ɹǝpıʌoɹԀ uɹǝʇʇɐԀ", + "ctnhenergy.ponder.pattern_provider_interaction.header": "uoıʇɔɐɹǝʇuI ǝɔɐɟɹǝʇuI ƎW & ɹǝpıʌoɹԀ uɹǝʇʇɐԀ", + "ctnhenergy.ponder.pattern_provider_interaction.text_1": "˙˙˙ǝɔɐɟɹǝʇuı ƎW uɐ sǝɥɔnoʇ ɹǝpıʌoɹd uɹǝʇʇɐd ɐ uǝɥM", + "ctnhenergy.ponder.pattern_provider_interaction.text_2": "ʞɹoʍʇǝu s,ǝɔɐɟɹǝʇuı ǝɥʇ oʇuı sʇuǝıpǝɹbuı sʇnduı ʎןʇɔǝɹıp ɹǝpıʌoɹd uɹǝʇʇɐd ǝɥ⟘", + "ctnhenergy.ponder.pattern_provider_interaction.title": "uoıʇɔɐɹǝʇuI ǝɔɐɟɹǝʇuI & ɹǝpıʌoɹԀ", + "ctnhenergy.ponder.quantum_network_bridge.header": "sǝbpıɹᗺ ɯnʇuɐnὉ ɥʇıʍ sʞɹoʍʇǝN buıpuǝʇxƎ", + "ctnhenergy.ponder.quantum_network_bridge.text_1": "ʞɹoʍʇǝu ɹnoʎ puǝʇxǝ uɐɔ sǝbpıɹq ʞɹoʍʇǝu ɯnʇuɐnὉ", + "ctnhenergy.ponder.quantum_network_bridge.text_2": "ɹǝqɯɐɥɔ ʞuıן ɯnʇuɐnb Ɩ puɐ sbuıɹ ɯnʇuɐnb 8 sǝɹınbǝɹ buıɹ ɯnʇuɐnb Ɐ", + "ctnhenergy.ponder.quantum_network_bridge.text_3": "ɹǝqɯɐɥɔ ʞuıן ǝɥʇ punoɹɐ sʞɔoןq buıɹ ㄣ ǝɥʇ ɐıʌ ʞɹoʍʇǝu ɹnoʎ oʇ buıɹ ǝɥʇ ʇɔǝuuoƆ", + "ctnhenergy.ponder.quantum_network_bridge.text_4": "uoıʇɐɔoן ǝʇoɯǝɹ ǝɥʇ ʇɐ ǝɹnʇɔnɹʇs buıɹ ɹǝɥʇouɐ ǝɔɐןd - sɹıɐd uı pǝsn ǝɹɐ sbuıᴚ", + "ctnhenergy.ponder.quantum_network_bridge.text_5": "sbuıɹ ɥʇoq oʇuı )ɹıɐd ǝɯɐs ǝɥʇ ɯoɹɟ( sǝıʇıɹɐןnbuıs pǝןbuɐʇuǝ ɯnʇuɐnb ʇɹǝsuI", + "ctnhenergy.ponder.quantum_network_bridge.text_6": "ǝɔuɐʇsıp ɟo ssǝןpɹɐbǝɹ ʇ/ƎⱯ 00ㄣ pǝxıɟ ɐ sǝɯnsuoɔ sbuıɹ ɯnʇuɐnb ɟo ɹıɐd Ɐ", + "ctnhenergy.ponder.quantum_network_bridge.title": "ǝbpıɹᗺ ʞɹoʍʇǝN ɯnʇuɐnὉ", + "ctnhenergy.ponder.small_cable.header": "sǝןqɐƆ pǝɹǝʌoƆ puɐ ssɐן⅁", + "ctnhenergy.ponder.small_cable.text_1": "ǝɔuɐɹɐǝddɐ uı ɹǝɟɟıp ʎןuo sǝןqɐɔ xınןɟ puɐ ssɐן⅁", + "ctnhenergy.ponder.small_cable.text_2": "sןǝuuɐɥɔ 8 ʎɹɹɐɔ uɐɔ sǝןqɐɔ ǝsǝɥ⟘", + "ctnhenergy.ponder.small_cable.text_3": "pɐoןɹǝʌo ןןıʍ ʇı 'sǝɔıʌǝp buıɯnsuoɔ-ןǝuuɐɥɔ 8 uɐɥʇ ǝɹoɯ sɐɥ ʞɹoʍʇǝu ǝɥʇ uǝɥM", + "ctnhenergy.ponder.small_cable.title": "sǝןqɐƆ pǝɹǝʌoƆ & ssɐן⅁", + "ctnhenergy.ponder.storage_bus.header": "snᗺ ǝbɐɹoʇS ǝɥʇ buıs∩", + "ctnhenergy.ponder.storage_bus.text_1": "ʞɹoʍʇǝu ƎⱯ ǝɥʇ oʇuı ǝbɐɹoʇs ןɐuɹǝʇxǝ ǝʇɐɹbǝʇuı uɐɔ snq ǝbɐɹoʇs ǝɥ⟘", + "ctnhenergy.ponder.storage_bus.title": "snᗺ ǝbɐɹoʇS", + "ctnhenergy.ponder.storage_bus_interface.header": "uoıʇɔɐɹǝʇuI ǝɔɐɟɹǝʇuI ƎW & snᗺ ǝbɐɹoʇS", + "ctnhenergy.ponder.storage_bus_interface.text_1": "˙˙˙sʇuǝʇuoɔ s,ɹǝɥʇouɐ ssǝɔɔɐ oʇ ʞɹoʍʇǝu ǝuo ʇuɐʍ noʎ uǝɥM", + "ctnhenergy.ponder.storage_bus_interface.text_2": "ǝɔɐɟɹǝʇuı ƎW uɐ ʇsuıɐbɐ snq ǝbɐɹoʇs ɐ ǝɔɐןԀ", + "ctnhenergy.ponder.storage_bus_interface.text_3": "˙˙˙ǝpıs snq ǝbɐɹoʇs ǝɥʇ uo ʞɹoʍʇǝu ǝɥ⟘", + "ctnhenergy.ponder.storage_bus_interface.text_4": "ǝpıs ǝɔɐɟɹǝʇuı ƎW ǝɥʇ uo ʞɹoʍʇǝu ǝɥʇ ssǝɔɔɐ uɐƆ", + "ctnhenergy.ponder.storage_bus_interface.text_5": "ɐsɹǝʌ ǝɔıʌ ʇou ʇnᗺ", + "ctnhenergy.ponder.storage_bus_interface.title": "ǝɔɐɟɹǝʇuI & snᗺ ǝbɐɹoʇS", + "ctnhenergy.ponder.tag.ae_original": "ןɐuıbıɹO ƎⱯ", + "ctnhenergy.ponder.tag.ae_original.description": "sɹǝpuoԀ ןɐuıbıɹO ƎⱯ", "ctnhenergy.quantum_computer": "ɹǝʇndɯoɔɹǝdnS ɯnʇuɐnὉ", "ctnhenergy.quantumcomputermultiblockmachine.craft_ui": "I∩ buıʇɟɐɹƆ uǝdO", "ctnhenergy.quantumcomputermultiblockmachine.jiuzhang_tooltip.0": " :snʇɐʇS ʞɹoM", diff --git a/src/generated/resources/assets/ctnhenergy/lang/en_us.json b/src/generated/resources/assets/ctnhenergy/lang/en_us.json index a484328..b8e16dd 100644 --- a/src/generated/resources/assets/ctnhenergy/lang/en_us.json +++ b/src/generated/resources/assets/ctnhenergy/lang/en_us.json @@ -50,6 +50,147 @@ "ctnhenergy.powersubstationmachine.voltage_tier": "Voltage Tier: ", "ctnhenergy.predicates.batteries": "Batteries do not need to be the same tier", "ctnhenergy.predicates.crafting_storage": "Crafting storages do not need to be the same", + "ctnhenergy.max_multiplier": "Config max pattern multiplier", + "ctnhenergy.ponder.annihilation_plane.header": "Using the Annihilation Plane", + "ctnhenergy.ponder.annihilation_plane.text_1": "The annihilation plane will collect blocks or items in front of it into the network (if possible)", + "ctnhenergy.ponder.annihilation_plane.title": "Annihilation Plane", + "ctnhenergy.ponder.annihilation_plane_filter.header": "Filtering with the Annihilation Plane", + "ctnhenergy.ponder.annihilation_plane_filter.text_1": "You'll find that the annihilation plane collects everything in front of it...", + "ctnhenergy.ponder.annihilation_plane_filter.text_2": "You can configure your network to only accept certain items", + "ctnhenergy.ponder.annihilation_plane_filter.text_3": "Configure the storage bus filter...", + "ctnhenergy.ponder.annihilation_plane_filter.text_4": "Note that blocks without drops will always be broken by the annihilation plane", + "ctnhenergy.ponder.annihilation_plane_filter.text_5": "Enchanting the annihilation plane with Silk Touch may help solve this issue", + "ctnhenergy.ponder.annihilation_plane_filter.title": "Annihilation Plane Filter", + "ctnhenergy.ponder.budding_quartz_grow.header": "Budding Quartz Growth", + "ctnhenergy.ponder.budding_quartz_grow.text_1": "Budding quartz grows crystals over time", + "ctnhenergy.ponder.budding_quartz_grow.text_2": "During growth, the budding quartz may degrade one tier (except flawless)", + "ctnhenergy.ponder.budding_quartz_grow.text_3": "Place growth accelerators to speed up growth (they stack)", + "ctnhenergy.ponder.budding_quartz_grow.title": "Growing Quartz", + "ctnhenergy.ponder.budding_quartz_obtain.header": "Budding Quartz Generation", + "ctnhenergy.ponder.budding_quartz_obtain.text_1": "This is a budding certus quartz block", + "ctnhenergy.ponder.budding_quartz_obtain.text_2": "Budding quartz appears with mysterious cubes in meteorites", + "ctnhenergy.ponder.budding_quartz_obtain.title": "Obtaining Budding Quartz", + "ctnhenergy.ponder.budding_quartz_repair.header": "Repairing Budding Quartz", + "ctnhenergy.ponder.budding_quartz_repair.text_1": "Your budding quartz degraded to a quartz block?", + "ctnhenergy.ponder.budding_quartz_repair.text_2": "Right-click with a budding quartz of the same tier for a 50% chance to upgrade it!", + "ctnhenergy.ponder.budding_quartz_repair.text_3": "You can obtain flawless budding quartz this way!", + "ctnhenergy.ponder.budding_quartz_repair.title": "Repairing Budding Quartz", + "ctnhenergy.ponder.bus_transport.header": "Bus Logistics with Storage Buses", + "ctnhenergy.ponder.bus_transport.text_1": "Combine import/export buses with storage buses for simple logistics", + "ctnhenergy.ponder.bus_transport.title": "Bus Logistics", + "ctnhenergy.ponder.cable.header": "Cables in AE", + "ctnhenergy.ponder.cable.text_1": "These are AE cables...", + "ctnhenergy.ponder.cable.text_2": "All cables of the same color can connect to each other", + "ctnhenergy.ponder.cable.text_3": "Cables of any color can connect to fluix cables", + "ctnhenergy.ponder.cable.text_4": "Cables of different colors will not connect to each other", + "ctnhenergy.ponder.cable.title": "AE Cables", + "ctnhenergy.ponder.controller.header": "ME Controller Placement", + "ctnhenergy.ponder.controller.text_1": "This is a controller...", + "ctnhenergy.ponder.controller.text_2": "The controller needs power to work, other mods' power also works", + "ctnhenergy.ponder.controller.text_3": "The controller can extend up to 7 blocks in each dimension", + "ctnhenergy.ponder.controller.text_4": "Exceeding 7 blocks will overload the network", + "ctnhenergy.ponder.controller.text_5": "Controllers cannot pass channels between each other (cannot connect)", + "ctnhenergy.ponder.controller.text_6": "Controllers also cannot be placed in a cross shape", + "ctnhenergy.ponder.controller.title": "ME Controller", + "ctnhenergy.ponder.crafting_parallel.header": "Parallel Auto Crafting", + "ctnhenergy.ponder.crafting_parallel.text_1": "Multiple pattern providers allow parallel crafting", + "ctnhenergy.ponder.crafting_parallel.text_2": "Memory cards can copy and apply configurations, including pattern providers", + "ctnhenergy.ponder.crafting_parallel.text_3": "Sneak-right-click the pattern provider with a memory card...", + "ctnhenergy.ponder.crafting_parallel.text_4": "The pattern provider saves its pattern data to the memory card", + "ctnhenergy.ponder.crafting_parallel.text_5": "Then right-click the target pattern provider with the memory card...", + "ctnhenergy.ponder.crafting_parallel.text_6": "The memory card consumes blank patterns and copies the saved patterns to the target", + "ctnhenergy.ponder.crafting_parallel.text_7": "Repeat this process to build parallelization", + "ctnhenergy.ponder.crafting_parallel.title": "Auto Crafting Parallelization", + "ctnhenergy.ponder.crafting_process_unit.header": "Building a CPU", + "ctnhenergy.ponder.crafting_process_unit.text_1": "Building a CPU has certain rules...", + "ctnhenergy.ponder.crafting_process_unit.text_2": "The CPU must be a rectangular cuboid", + "ctnhenergy.ponder.crafting_process_unit.text_3": "A non-cuboid CPU will not form properly", + "ctnhenergy.ponder.crafting_process_unit.text_4": "The CPU needs at least one crafting storage", + "ctnhenergy.ponder.crafting_process_unit.text_5": "Other parts can be crafting units, monitors, storages, or co-processors", + "ctnhenergy.ponder.crafting_process_unit.title": "Crafting Processing Unit", + "ctnhenergy.ponder.crafting_system.header": "AE Auto Crafting System", + "ctnhenergy.ponder.crafting_system.text_1": "To build an auto-crafting system...", + "ctnhenergy.ponder.crafting_system.text_2": "You need a CPU multiblock", + "ctnhenergy.ponder.crafting_system.text_3": "And a pattern provider with output target", + "ctnhenergy.ponder.crafting_system.title": "Auto Crafting", + "ctnhenergy.ponder.dense_cable.header": "Dense Covered Cable", + "ctnhenergy.ponder.dense_cable.text_1": "Dense cables can carry 32 channels", + "ctnhenergy.ponder.dense_cable.text_2": "However, it cannot connect to single-block machines (planes, buses, cable-type machines)", + "ctnhenergy.ponder.dense_cable.title": "Dense Cable", + "ctnhenergy.ponder.formation_plane.header": "Using the Formation Plane", + "ctnhenergy.ponder.formation_plane.text_1": "The formation plane outputs network items as blocks or items into the world", + "ctnhenergy.ponder.formation_plane.text_2": "When the formation plane is in block mode...", + "ctnhenergy.ponder.formation_plane.text_3": "The formation plane places blocks in front of it", + "ctnhenergy.ponder.formation_plane.text_4": "When the formation plane is in item mode...", + "ctnhenergy.ponder.formation_plane.text_5": "The formation plane drops items as entities in front of it", + "ctnhenergy.ponder.formation_plane.text_6": "Configure the formation plane filter to only output specific items", + "ctnhenergy.ponder.formation_plane.title": "Formation Plane", + "ctnhenergy.ponder.import_export_bus.header": "Using Import and Export Buses", + "ctnhenergy.ponder.import_export_bus.text_1": "Import and export buses directly insert and extract from the network", + "ctnhenergy.ponder.import_export_bus.text_2": "The export bus outputs items from the network to a target container", + "ctnhenergy.ponder.import_export_bus.text_3": "Configure the export bus filter...", + "ctnhenergy.ponder.import_export_bus.text_4": "The import bus inputs items from a container into the network", + "ctnhenergy.ponder.import_export_bus.text_5": "Configure the import bus filter...", + "ctnhenergy.ponder.import_export_bus.title": "Import/Export Bus", + "ctnhenergy.ponder.interface_common.header": "Using the ME Interface", + "ctnhenergy.ponder.interface_common.text_1": "The ME interface is the network's connection to the outside world", + "ctnhenergy.ponder.interface_common.text_2": "Items can be inserted directly into the network via the ME interface", + "ctnhenergy.ponder.interface_common.text_3": "Configure the ME interface slots", + "ctnhenergy.ponder.interface_common.text_4": "It will request items from the network to fill its configured slots", + "ctnhenergy.ponder.interface_common.title": "ME Interface", + "ctnhenergy.ponder.io_port.header": "Using the IO Port", + "ctnhenergy.ponder.io_port.text_1": "The IO port can transfer items between storage cells and the network", + "ctnhenergy.ponder.io_port.text_2": "You can export network items into storage cells", + "ctnhenergy.ponder.io_port.text_3": "Use the IO port to organize storage cell contents in drives", + "ctnhenergy.ponder.io_port.title": "IO Port", + "ctnhenergy.ponder.io_port_output.header": "Mass Output with IO Port", + "ctnhenergy.ponder.io_port_output.text_1": "The IO port transfers items very quickly...", + "ctnhenergy.ponder.io_port_output.text_2": "Making it ideal for producing matter balls and singularities", + "ctnhenergy.ponder.io_port_output.title": "IO Port Output", + "ctnhenergy.ponder.molecular_assembler.header": "Using the Molecular Assembler", + "ctnhenergy.ponder.molecular_assembler.text_1": "To use the molecular assembler...", + "ctnhenergy.ponder.molecular_assembler.text_2": "You need to place it next to a pattern provider", + "ctnhenergy.ponder.molecular_assembler.text_3": "It can automate crafting table, stonecutter, and smithing table recipes", + "ctnhenergy.ponder.molecular_assembler.text_4": "Both pattern providers and molecular assemblers can pass through the network...", + "ctnhenergy.ponder.molecular_assembler.text_5": "So you can build structures like this", + "ctnhenergy.ponder.molecular_assembler.title": "Molecular Assembler", + "ctnhenergy.ponder.pattern_provider.header": "Using the Pattern Provider", + "ctnhenergy.ponder.pattern_provider.text_1": "This is a pattern provider", + "ctnhenergy.ponder.pattern_provider.text_2": "Use a wrench to change the pattern provider's direction", + "ctnhenergy.ponder.pattern_provider.text_3": "When the network issues a crafting request...", + "ctnhenergy.ponder.pattern_provider.text_4": "The pattern provider outputs ingredients to adjacent containers", + "ctnhenergy.ponder.pattern_provider.text_5": "Completing a craft requires returning items to the network", + "ctnhenergy.ponder.pattern_provider.text_6": "So you need to build a return mechanism", + "ctnhenergy.ponder.pattern_provider.title": "Pattern Provider", + "ctnhenergy.ponder.pattern_provider_interaction.header": "Pattern Provider & ME Interface Interaction", + "ctnhenergy.ponder.pattern_provider_interaction.text_1": "When a pattern provider touches an ME interface...", + "ctnhenergy.ponder.pattern_provider_interaction.text_2": "The pattern provider directly inputs ingredients into the interface's network", + "ctnhenergy.ponder.pattern_provider_interaction.title": "Provider & Interface Interaction", + "ctnhenergy.ponder.quantum_network_bridge.header": "Extending Networks with Quantum Bridges", + "ctnhenergy.ponder.quantum_network_bridge.text_1": "Quantum network bridges can extend your network", + "ctnhenergy.ponder.quantum_network_bridge.text_2": "A quantum ring requires 8 quantum rings and 1 quantum link chamber", + "ctnhenergy.ponder.quantum_network_bridge.text_3": "Connect the ring to your network via the 4 ring blocks around the link chamber", + "ctnhenergy.ponder.quantum_network_bridge.text_4": "Rings are used in pairs - place another ring structure at the remote location", + "ctnhenergy.ponder.quantum_network_bridge.text_5": "Insert quantum entangled singularities (from the same pair) into both rings", + "ctnhenergy.ponder.quantum_network_bridge.text_6": "A pair of quantum rings consumes a fixed 400 AE/t regardless of distance", + "ctnhenergy.ponder.quantum_network_bridge.title": "Quantum Network Bridge", + "ctnhenergy.ponder.small_cable.header": "Glass and Covered Cables", + "ctnhenergy.ponder.small_cable.text_1": "Glass and fluix cables only differ in appearance", + "ctnhenergy.ponder.small_cable.text_2": "These cables can carry 8 channels", + "ctnhenergy.ponder.small_cable.text_3": "When the network has more than 8 channel-consuming devices, it will overload", + "ctnhenergy.ponder.small_cable.title": "Glass & Covered Cables", + "ctnhenergy.ponder.storage_bus.header": "Using the Storage Bus", + "ctnhenergy.ponder.storage_bus.text_1": "The storage bus can integrate external storage into the AE network", + "ctnhenergy.ponder.storage_bus.title": "Storage Bus", + "ctnhenergy.ponder.storage_bus_interface.header": "Storage Bus & ME Interface Interaction", + "ctnhenergy.ponder.storage_bus_interface.text_1": "When you want one network to access another's contents...", + "ctnhenergy.ponder.storage_bus_interface.text_2": "Place a storage bus against an ME interface", + "ctnhenergy.ponder.storage_bus_interface.text_3": "The network on the storage bus side...", + "ctnhenergy.ponder.storage_bus_interface.text_4": "Can access the network on the ME interface side", + "ctnhenergy.ponder.storage_bus_interface.text_5": "But not vice versa", + "ctnhenergy.ponder.storage_bus_interface.title": "Storage Bus & Interface", + "ctnhenergy.ponder.tag.ae_original": "AE Original", + "ctnhenergy.ponder.tag.ae_original.description": "AE Original Ponders", "ctnhenergy.quantum_computer": "Quantum Supercomputer", "ctnhenergy.quantumcomputermultiblockmachine.craft_ui": "Open Crafting UI", "ctnhenergy.quantumcomputermultiblockmachine.jiuzhang_tooltip.0": "Work Status: ", diff --git a/src/generated/resources/assets/ctnhenergy/lang/zh_cn.json b/src/generated/resources/assets/ctnhenergy/lang/zh_cn.json index 09f1196..a06c2d7 100644 --- a/src/generated/resources/assets/ctnhenergy/lang/zh_cn.json +++ b/src/generated/resources/assets/ctnhenergy/lang/zh_cn.json @@ -61,6 +61,147 @@ "ctnhenergy.powersubstationmachine.voltage_tier": "电压等级:", "ctnhenergy.predicates.batteries": "可以使用不同种电池", "ctnhenergy.predicates.crafting_storage": "可以使用不同种合成存储器", + "ctnhenergy.max_multiplier": "设置样板自动翻倍最大倍数", + "ctnhenergy.ponder.annihilation_plane.header": "破坏面板的使用", + "ctnhenergy.ponder.annihilation_plane.text_1": "破坏面板会将其前面的方块或者掉落物收集到网络中(如果能的话)", + "ctnhenergy.ponder.annihilation_plane.title": "破坏面板", + "ctnhenergy.ponder.annihilation_plane_filter.header": "使破坏面板破坏/收集特定的物品", + "ctnhenergy.ponder.annihilation_plane_filter.text_1": "你会发现破坏面板会收集它前方的所有物品……", + "ctnhenergy.ponder.annihilation_plane_filter.text_2": "对此,你可以控制你的网络,使其只能容纳某些物品", + "ctnhenergy.ponder.annihilation_plane_filter.text_3": "配置存储总线的过滤……", + "ctnhenergy.ponder.annihilation_plane_filter.text_4": "需要注意的是,没有掉落物的方块无论怎样都会被破坏面板破坏", + "ctnhenergy.ponder.annihilation_plane_filter.text_5": "为破坏面板附魔精准采集可能可以为解决该问题提供思路", + "ctnhenergy.ponder.annihilation_plane_filter.title": "破坏面板过滤", + "ctnhenergy.ponder.budding_quartz_grow.header": "赛特斯石英母岩的生长", + "ctnhenergy.ponder.budding_quartz_grow.text_1": "赛特斯石英母岩会随着时间生长", + "ctnhenergy.ponder.budding_quartz_grow.text_2": "在生长过程中,赛特斯石英母岩有概率降低一个等级(除了无瑕母岩)", + "ctnhenergy.ponder.budding_quartz_grow.text_3": "放置催生器可加速母岩生长(催生器可叠加)", + "ctnhenergy.ponder.budding_quartz_grow.title": "母岩生长", + "ctnhenergy.ponder.budding_quartz_obtain.header": "赛特斯石英母岩的生成", + "ctnhenergy.ponder.budding_quartz_obtain.text_1": "这是一个赛特斯石英母岩", + "ctnhenergy.ponder.budding_quartz_obtain.text_2": "母岩会和神秘方块一起出现在陨石中", + "ctnhenergy.ponder.budding_quartz_obtain.title": "母岩获取", + "ctnhenergy.ponder.budding_quartz_repair.header": "赛特斯石英母岩的修复", + "ctnhenergy.ponder.budding_quartz_repair.text_1": "母岩退化到石英块了?", + "ctnhenergy.ponder.budding_quartz_repair.text_2": "手持与放置的相同等级的母岩右键右击它就有50%的概率生成一个更高级的母岩!", + "ctnhenergy.ponder.budding_quartz_repair.text_3": "使用该方法修复可以获取无瑕母岩!", + "ctnhenergy.ponder.budding_quartz_repair.title": "母岩修复", + "ctnhenergy.ponder.bus_transport.header": "使用输入/输出总线配合存储总线进行物流", + "ctnhenergy.ponder.bus_transport.text_1": "使用输入/输出总线配合存储总线可制作简易的物流", + "ctnhenergy.ponder.bus_transport.title": "总线物流", + "ctnhenergy.ponder.cable.header": "AE中的线缆", + "ctnhenergy.ponder.cable.text_1": "这些是AE的线缆……", + "ctnhenergy.ponder.cable.text_2": "所有同色的线缆都可以互相连接", + "ctnhenergy.ponder.cable.text_3": "所有颜色的线缆都可以和福鲁伊克斯线缆相连接", + "ctnhenergy.ponder.cable.text_4": "染色后不同颜色的线缆都不会连接", + "ctnhenergy.ponder.cable.title": "AE线缆", + "ctnhenergy.ponder.controller.header": "ME控制器的摆放方式……", + "ctnhenergy.ponder.controller.text_1": "这是一个控制器……", + "ctnhenergy.ponder.controller.text_2": "控制器需要接入能源才能工作,使用其他mod的能源也可", + "ctnhenergy.ponder.controller.text_3": "控制器每个维度都可延伸最多七格", + "ctnhenergy.ponder.controller.text_4": "超过七格整个网络就会过载", + "ctnhenergy.ponder.controller.text_5": "控制器之间不能传递频道(即不能连接)", + "ctnhenergy.ponder.controller.text_6": "控制器也不能摆成十字的状态", + "ctnhenergy.ponder.controller.title": "ME控制器", + "ctnhenergy.ponder.crafting_parallel.header": "自动合成的并行", + "ctnhenergy.ponder.crafting_parallel.text_1": "使用多个样板供应器可以做到多个机器的并行", + "ctnhenergy.ponder.crafting_parallel.text_2": "内存卡可以复制机器的配置以及将其中配置应用于机器,当然样板供应器也不例外", + "ctnhenergy.ponder.crafting_parallel.text_3": "使用内存卡shift右击样板供应器……", + "ctnhenergy.ponder.crafting_parallel.text_4": "样板供应器会将其中样板的信息也存入内存卡中", + "ctnhenergy.ponder.crafting_parallel.text_5": "然后再使用内存卡右击目标的样板供应器……", + "ctnhenergy.ponder.crafting_parallel.text_6": "内存卡会消耗物品栏中的空白样板,并依照其记录的样板复制到目标样板供应器中", + "ctnhenergy.ponder.crafting_parallel.text_7": "然后以此类推,建造并行", + "ctnhenergy.ponder.crafting_parallel.title": "自动并行", + "ctnhenergy.ponder.crafting_process_unit.header": "CPU的搭建", + "ctnhenergy.ponder.crafting_process_unit.text_1": "CPU的搭建有一定的规则……", + "ctnhenergy.ponder.crafting_process_unit.text_2": "CPU的形体必须得是长方体", + "ctnhenergy.ponder.crafting_process_unit.text_3": "不为长方体的CPU则不会显示以成型的状态", + "ctnhenergy.ponder.crafting_process_unit.text_4": "CPU结构内至少需要有一个合成存储器", + "ctnhenergy.ponder.crafting_process_unit.text_5": "其余部分则可使用合成单元,合成监控室,合成存储器,并行处理单元代替", + "ctnhenergy.ponder.crafting_process_unit.title": "CPU", + "ctnhenergy.ponder.crafting_system.header": "AE的自动合成系统", + "ctnhenergy.ponder.crafting_system.text_1": "要搭建一个自动合成系统……", + "ctnhenergy.ponder.crafting_system.text_2": "你需要一个CPU多方块", + "ctnhenergy.ponder.crafting_system.text_3": "还有样板供应器与输出对象", + "ctnhenergy.ponder.crafting_system.title": "自动合成", + "ctnhenergy.ponder.dense_cable.header": "致密包层线缆", + "ctnhenergy.ponder.dense_cable.text_1": "致密线缆能够传递32个频道", + "ctnhenergy.ponder.dense_cable.text_2": "但它并不能接入单格类机器(破坏/成型面板,输入/输出/存储总线,线缆内形式的机器)", + "ctnhenergy.ponder.dense_cable.title": "致密线缆", + "ctnhenergy.ponder.formation_plane.header": "成型面板的使用", + "ctnhenergy.ponder.formation_plane.text_1": "成型面板可以输入进网络的物料以掉落物或者方块形式输出到世界上", + "ctnhenergy.ponder.formation_plane.text_2": "当成型面板为方块模式时……", + "ctnhenergy.ponder.formation_plane.text_3": "成型面板会将方块放置在它的前面", + "ctnhenergy.ponder.formation_plane.text_4": "当成型面板为掉落物模式时……", + "ctnhenergy.ponder.formation_plane.text_5": "成型面板会将物品以掉落物形式丢弃在它的前面", + "ctnhenergy.ponder.formation_plane.text_6": "配置成型面板的过滤选项可使其只输出过滤内的物品", + "ctnhenergy.ponder.formation_plane.title": "成型面板", + "ctnhenergy.ponder.import_export_bus.header": "输入总线与输出总线的使用", + "ctnhenergy.ponder.import_export_bus.text_1": "输入总线和输出总线可对网络进行直接的存入和取出", + "ctnhenergy.ponder.import_export_bus.text_2": "输出总线可将网络中的物品输入到目标容器中", + "ctnhenergy.ponder.import_export_bus.text_3": "设置输出总线的过滤……", + "ctnhenergy.ponder.import_export_bus.text_4": "输入总线可将容器中的物品输入网络", + "ctnhenergy.ponder.import_export_bus.text_5": "设置输入总线的过滤……", + "ctnhenergy.ponder.import_export_bus.title": "总线使用", + "ctnhenergy.ponder.interface_common.header": "ME接口的使用", + "ctnhenergy.ponder.interface_common.text_1": "ME接口是网络与外界的接口", + "ctnhenergy.ponder.interface_common.text_2": "可以将物料直接从ME接口输入进网络", + "ctnhenergy.ponder.interface_common.text_3": "配置ME接口的槽位", + "ctnhenergy.ponder.interface_common.text_4": "它会将自身填充物料至你所设定的值", + "ctnhenergy.ponder.interface_common.title": "ME接口", + "ctnhenergy.ponder.io_port.header": "使用IO端口整理存储", + "ctnhenergy.ponder.io_port.text_1": "ME IO端口能够将其中的存储元件内的东西导入到网络,或者将网络内的存储内容导入元件", + "ctnhenergy.ponder.io_port.text_2": "你可以使用它将网络内的物品导出到存储元件", + "ctnhenergy.ponder.io_port.text_3": "使用ME IO端口来整理驱动器中存储元件的内容似乎也是一个不错的选择", + "ctnhenergy.ponder.io_port.title": "IO端口", + "ctnhenergy.ponder.io_port_output.header": "使用IO端口输出大量物品", + "ctnhenergy.ponder.io_port_output.text_1": "IO端口的输入与输出速度非常的快……", + "ctnhenergy.ponder.io_port_output.text_2": "因此你可以使用它来生产物质球和奇点", + "ctnhenergy.ponder.io_port_output.title": "IO端口输出", + "ctnhenergy.ponder.molecular_assembler.header": "分子装配室的使用", + "ctnhenergy.ponder.molecular_assembler.text_1": "要使用分子装配室……", + "ctnhenergy.ponder.molecular_assembler.text_2": "你需要将其与样板供应器放在一起", + "ctnhenergy.ponder.molecular_assembler.text_3": "分子装配室可以自动化工作台,切石机,锻造台的配方,且会把产物自动送回样板供应器", + "ctnhenergy.ponder.molecular_assembler.text_4": "样板供应器和分子装配室都可以传递网络……", + "ctnhenergy.ponder.molecular_assembler.text_5": "所以你可以搭建出类似这样的结构", + "ctnhenergy.ponder.molecular_assembler.title": "分子装配室", + "ctnhenergy.ponder.pattern_provider.header": "样板供应器的使用", + "ctnhenergy.ponder.pattern_provider.text_1": "这是一个样板供应器", + "ctnhenergy.ponder.pattern_provider.text_2": "使用扳手点击样板供应器可使其方向变为扳手点击的方向", + "ctnhenergy.ponder.pattern_provider.text_3": "当网络下达合成请求时……", + "ctnhenergy.ponder.pattern_provider.text_4": "样板供应器会将原料输出到临近的容器内", + "ctnhenergy.ponder.pattern_provider.text_5": "完成一次合成需要将物品返回网络", + "ctnhenergy.ponder.pattern_provider.text_6": "因此你需要搭建一个回流装置", + "ctnhenergy.ponder.pattern_provider.title": "样板供应器", + "ctnhenergy.ponder.pattern_provider_interaction.header": "样板供应器与ME接口的联动", + "ctnhenergy.ponder.pattern_provider_interaction.text_1": "当样板供应器与ME接口接触时……", + "ctnhenergy.ponder.pattern_provider_interaction.text_2": "样板供应器会直接将原料输入到ME接口所在的网络", + "ctnhenergy.ponder.pattern_provider_interaction.title": "样板供应器联动", + "ctnhenergy.ponder.quantum_network_bridge.header": "使用量子网桥将网络传递到远端", + "ctnhenergy.ponder.quantum_network_bridge.text_1": "量子网桥可用于网络的传输", + "ctnhenergy.ponder.quantum_network_bridge.text_2": "为了搭建一个量子环结构,你需要八个量子环和一个量子链接仓", + "ctnhenergy.ponder.quantum_network_bridge.text_3": "连接量子环和网络只能通过围绕量子连接仓的四个量子环方块", + "ctnhenergy.ponder.quantum_network_bridge.text_4": "量子环是成双成对使用的,你需要在你需要的远端也放置一个量子环结构", + "ctnhenergy.ponder.quantum_network_bridge.text_5": "使用量子环,你需要为两个量子环分别放入同时产生的量子缠绕态奇点", + "ctnhenergy.ponder.quantum_network_bridge.text_6": "一对量子环固定消耗400AE/t,且不随距离变化", + "ctnhenergy.ponder.quantum_network_bridge.title": "量子网桥", + "ctnhenergy.ponder.small_cable.header": "玻璃线缆与包层线缆", + "ctnhenergy.ponder.small_cable.text_1": "玻璃线缆与福鲁伊克斯线缆使用上仅有外观上的差距", + "ctnhenergy.ponder.small_cable.text_2": "该线缆能够传递八个频道", + "ctnhenergy.ponder.small_cable.text_3": "当网络中拥有超过八个消耗频道的机器时网络便会过载", + "ctnhenergy.ponder.small_cable.title": "玻璃/包层线缆", + "ctnhenergy.ponder.storage_bus.header": "存储总线的使用", + "ctnhenergy.ponder.storage_bus.text_1": "存储总线可以将外界的存储并入到AE网络中", + "ctnhenergy.ponder.storage_bus.title": "存储总线", + "ctnhenergy.ponder.storage_bus_interface.header": "存储总线与ME接口的互动", + "ctnhenergy.ponder.storage_bus_interface.text_1": "当你想要让一个网络能访问另一个的内容……", + "ctnhenergy.ponder.storage_bus_interface.text_2": "将存储总线与ME接口相贴", + "ctnhenergy.ponder.storage_bus_interface.text_3": "存储总线的一端的网络……", + "ctnhenergy.ponder.storage_bus_interface.text_4": "能够访问ME接口那一段的网络", + "ctnhenergy.ponder.storage_bus_interface.text_5": "反之则不可", + "ctnhenergy.ponder.storage_bus_interface.title": "存储总线与接口", + "ctnhenergy.ponder.tag.ae_original": "AE原版", + "ctnhenergy.ponder.tag.ae_original.description": "AE原版思索", "ctnhenergy.quantum_computer": "量子超算", "ctnhenergy.quantumcomputermultiblockmachine.craft_ui": "打开合成界面", "ctnhenergy.quantumcomputermultiblockmachine.jiuzhang_tooltip.0": "工作状态:", diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ClientProxy.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ClientProxy.java index 3179271..dfcb561 100644 --- a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ClientProxy.java +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ClientProxy.java @@ -1,5 +1,6 @@ package tech.luckyblock.mcmod.ctnhenergy.client; +import net.createmod.ponder.foundation.PonderIndex; import net.minecraft.ChatFormatting; import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.network.chat.Component; @@ -21,6 +22,7 @@ import com.wintercogs.ae2omnicells.common.items.OmniCraftingBlockItem; import com.wintercogs.ae2omnicells.common.me.crafting.OmniCraftingFamily; import tech.luckyblock.mcmod.ctnhenergy.CTNHEnergy; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderPlugin; import tech.luckyblock.mcmod.ctnhenergy.client.render.EUKeyRenderHandler; import tech.luckyblock.mcmod.ctnhenergy.common.CommonProxy; import tech.luckyblock.mcmod.ctnhenergy.common.me.key.EUKey; @@ -59,6 +61,9 @@ public static void initClientAE2(FMLClientSetupEvent event) { } public static void onClientSetup(FMLClientSetupEvent event) { + event.enqueueWork(() -> { + PonderIndex.addPlugin(new CTNHEnergyPonderPlugin()); + }); event.enqueueWork(() -> { // 注册内容类型谓词 ItemProperties.register( diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderPlugin.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderPlugin.java new file mode 100644 index 0000000..6723010 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderPlugin.java @@ -0,0 +1,26 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder; + +import net.createmod.ponder.api.registration.PonderPlugin; +import net.createmod.ponder.api.registration.PonderSceneRegistrationHelper; +import net.createmod.ponder.api.registration.PonderTagRegistrationHelper; +import net.minecraft.resources.ResourceLocation; + +import tech.luckyblock.mcmod.ctnhenergy.CTNHEnergy; + +public class CTNHEnergyPonderPlugin implements PonderPlugin { + + @Override + public String getModId() { + return CTNHEnergy.MODID; + } + + @Override + public void registerScenes(PonderSceneRegistrationHelper helper) { + CTNHEnergyPonderScenes.register(helper); + } + + @Override + public void registerTags(PonderTagRegistrationHelper helper) { + CTNHEnergyPonderTags.register(helper); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderSceneBuilder.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderSceneBuilder.java new file mode 100644 index 0000000..3c57d65 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderSceneBuilder.java @@ -0,0 +1,50 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder; + +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import com.simibubi.create.foundation.ponder.CreateSceneBuilder; + +public class CTNHEnergyPonderSceneBuilder extends CreateSceneBuilder { + + public CTNHEnergyPonderSceneBuilder(SceneBuilder builder) { + super(builder); + } + + public void init5x5(SceneBuildingUtil util) { + this.configureBasePlate(0, 0, 5); + this.scaleSceneView(0.9f); + this.world().showSection(util.select().layer(0), Direction.UP); + } + + public void init7x7(SceneBuildingUtil util) { + this.configureBasePlate(0, 0, 7); + this.scaleSceneView(0.75f); + this.world().showSection(util.select().layer(0), Direction.UP); + } + + public void init9x9(SceneBuildingUtil util) { + this.configureBasePlate(0, 0, 9); + this.scaleSceneView(0.6f); + this.world().showSection(util.select().layer(0), Direction.UP); + } + + public void initAll(SceneBuildingUtil util) { + this.configureBasePlate(0, 0, 32); + this.scaleSceneView(0.3f); + this.world().showSection(util.select().layer(0), Direction.UP); + } + + public void rotateAround(int duration) { + int time = duration / 4; + this.rotateCameraY(90); + this.idle(time); + this.rotateCameraY(90); + this.idle(time); + this.rotateCameraY(90); + this.idle(time); + this.rotateCameraY(90); + this.idle(time); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderScenes.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderScenes.java new file mode 100644 index 0000000..83d7ca9 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderScenes.java @@ -0,0 +1,109 @@ +// 代码来源于Create Delights,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder; + +import net.createmod.ponder.api.registration.PonderSceneRegistrationHelper; +import net.minecraft.resources.ResourceLocation; + +import appeng.api.ids.AEBlockIds; +import appeng.api.ids.AEPartIds; +import appeng.core.definitions.AEItems; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.*; + +import java.util.ArrayList; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderTags.AEOriginal; + +public final class CTNHEnergyPonderScenes { + + private CTNHEnergyPonderScenes() {} + + public static void register(PonderSceneRegistrationHelper helper) { + // 破坏面板 + helper.forComponents(AEPartIds.ANNIHILATION_PLANE) + .addStoryBoard("annihilation_plane/common", AnnihilationPlane::annihilationPlane, AEOriginal) + .addStoryBoard("annihilation_plane/filter", AnnihilationPlane::filter, AEOriginal); + + // 赛特斯石英母岩 + helper.forComponents( + AEBlockIds.FLAWLESS_BUDDING_QUARTZ, + AEBlockIds.FLAWED_BUDDING_QUARTZ, + AEBlockIds.CHIPPED_BUDDING_QUARTZ, + AEBlockIds.DAMAGED_BUDDING_QUARTZ, + AEItems.CERTUS_QUARTZ_CRYSTAL.id()) + .addStoryBoard("budding_quartz/budding_quart", BuddingQuartz::obtain, AEOriginal) + .addStoryBoard("budding_quartz/budding_quart", BuddingQuartz::grow, AEOriginal) + .addStoryBoard("budding_quartz/budding_quart", BuddingQuartz::repair, AEOriginal); + + // 线缆 + var cables = new ArrayList(); + cables.addAll(AEPartIds.CABLE_GLASS.values()); + cables.addAll(AEPartIds.CABLE_COVERED.values()); + cables.addAll(AEPartIds.CABLE_DENSE_COVERED.values()); + cables.addAll(AEPartIds.CABLE_SMART.values()); + cables.addAll(AEPartIds.CABLE_DENSE_SMART.values()); + helper.forComponents(cables.toArray(ResourceLocation[]::new)) + .addStoryBoard("cable/cable", Cable::cable, AEOriginal) + .addStoryBoard("cable/small_cable", Cable::smallCable, AEOriginal) + .addStoryBoard("cable/dense_cable", Cable::denseCable, AEOriginal); + + // ME控制器 + helper.forComponents(AEBlockIds.CONTROLLER) + .addStoryBoard("controller/controller", Controller::controller, AEOriginal); + + // 合成处理器 + helper.forComponents(AEBlockIds.CRAFTING_UNIT) + .addStoryBoard("crafting_process_unit/unit", CraftingProcessUnit::unit, AEOriginal); + + // 自动合成系统 + helper.forComponents( + AEBlockIds.PATTERN_PROVIDER, + AEBlockIds.CRAFTING_UNIT, + AEBlockIds.MOLECULAR_ASSEMBLER) + .addStoryBoard("crafting_system/system", CraftingSystem::system, AEOriginal); + + // 成型面板 + helper.forComponents(AEPartIds.FORMATION_PLANE) + .addStoryBoard("formation_plane/common", FormationPlane::common, AEOriginal); + + // 输入/输出总线 + helper.forComponents( + AEPartIds.IMPORT_BUS, + AEPartIds.EXPORT_BUS) + .addStoryBoard("import_export_bus/common", ImportExportBus::common, AEOriginal) + .addStoryBoard("import_export_bus/transport", ImportExportBus::transport, AEOriginal); + + // ME接口 + helper.forComponents( + AEBlockIds.INTERFACE, + AEPartIds.INTERFACE) + .addStoryBoard("interface/common", Interface::common, AEOriginal); + + // IO端口 + helper.forComponents(AEBlockIds.IO_PORT) + .addStoryBoard("io_port/io_port", IOPort::ioPort, AEOriginal) + .addStoryBoard("io_port/output", IOPort::output, AEOriginal); + + // 分子装配室 + helper.forComponents(AEBlockIds.MOLECULAR_ASSEMBLER) + .addStoryBoard("molecular_assembler/common", MolecularAssembler::common, AEOriginal); + + // 样板供应器 + helper.forComponents( + AEBlockIds.PATTERN_PROVIDER, + AEPartIds.PATTERN_PROVIDER) + .addStoryBoard("pattern_provider/common", PatternProvider::common, AEOriginal) + .addStoryBoard("pattern_provider/parallel", PatternProvider::parallel, AEOriginal) + .addStoryBoard("pattern_provider/interaction", PatternProvider::interaction, AEOriginal); + + // 量子网桥 + helper.forComponents( + AEBlockIds.QUANTUM_RING, + AEBlockIds.QUANTUM_LINK) + .addStoryBoard("quantum_network_bridge/bridge", QuantumNetworkBridge::bridge, AEOriginal); + + // 存储总线 + helper.forComponents(AEPartIds.STORAGE_BUS) + .addStoryBoard("storage_bus/common", StorageBus::common, AEOriginal) + .addStoryBoard("storage_bus/interface", StorageBus::interfaceInteraction, AEOriginal); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderTags.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderTags.java new file mode 100644 index 0000000..43636d6 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderTags.java @@ -0,0 +1,63 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder; + +import net.createmod.ponder.api.registration.PonderTagRegistrationHelper; +import net.minecraft.resources.ResourceLocation; + +import appeng.api.ids.AEBlockIds; +import appeng.api.ids.AEPartIds; +import appeng.core.definitions.AEItems; +import tech.luckyblock.mcmod.ctnhenergy.CTNHEnergy; + +public final class CTNHEnergyPonderTags { + + public static final ResourceLocation AEOriginal = ResourceLocation.tryBuild(CTNHEnergy.MODID, "ae_original"); + + public static void register(PonderTagRegistrationHelper helper) { + helper.registerTag(AEOriginal) + .addToIndex() + .item(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem(), true, false) + .register(); + + var aeTag = helper.addToTag(AEOriginal); + // 破坏面板 + aeTag.add(AEPartIds.ANNIHILATION_PLANE); + // 赛特斯石英母岩 + aeTag.add(AEBlockIds.FLAWLESS_BUDDING_QUARTZ); + aeTag.add(AEBlockIds.FLAWED_BUDDING_QUARTZ); + aeTag.add(AEBlockIds.CHIPPED_BUDDING_QUARTZ); + aeTag.add(AEBlockIds.DAMAGED_BUDDING_QUARTZ); + aeTag.add(AEItems.CERTUS_QUARTZ_CRYSTAL.id()); + // 线缆 (所有颜色) + for (var rl : AEPartIds.CABLE_GLASS.values()) aeTag.add(rl); + for (var rl : AEPartIds.CABLE_COVERED.values()) aeTag.add(rl); + for (var rl : AEPartIds.CABLE_DENSE_COVERED.values()) aeTag.add(rl); + for (var rl : AEPartIds.CABLE_SMART.values()) aeTag.add(rl); + for (var rl : AEPartIds.CABLE_DENSE_SMART.values()) aeTag.add(rl); + // ME控制器 + aeTag.add(AEBlockIds.CONTROLLER); + // 合成处理器 + aeTag.add(AEBlockIds.CRAFTING_UNIT); + // 成型面板 + aeTag.add(AEPartIds.FORMATION_PLANE); + // 输入/输出总线 + aeTag.add(AEPartIds.IMPORT_BUS); + aeTag.add(AEPartIds.EXPORT_BUS); + // ME接口 + aeTag.add(AEBlockIds.INTERFACE); + aeTag.add(AEPartIds.INTERFACE); + // IO端口 + aeTag.add(AEBlockIds.IO_PORT); + // 分子装配室 + aeTag.add(AEBlockIds.MOLECULAR_ASSEMBLER); + // 样板供应器 + aeTag.add(AEBlockIds.PATTERN_PROVIDER); + aeTag.add(AEPartIds.PATTERN_PROVIDER); + // 量子网桥 + aeTag.add(AEBlockIds.QUANTUM_RING); + aeTag.add(AEBlockIds.QUANTUM_LINK); + // 存储总线 + aeTag.add(AEPartIds.STORAGE_BUS); + } + + private CTNHEnergyPonderTags() {} +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AE2CablePonderHelper.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AE2CablePonderHelper.java new file mode 100644 index 0000000..9ba2087 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AE2CablePonderHelper.java @@ -0,0 +1,203 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.StringTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +import appeng.blockentity.networking.CableBusBlockEntity; +import appeng.core.definitions.AEBlocks; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; + +public final class AE2CablePonderHelper { + + private static final Direction[] CONNECTION_DIRECTIONS = Direction.values(); + private static final Set KNOWN_CONNECTABLE_AE2_BLOCKS = Set.of( + ae2("controller"), + ae2("drive"), + ae2("energy_acceptor"), + ae2("energy_cell"), + ae2("dense_energy_cell"), + ae2("creative_energy_cell"), + ae2("interface"), + ae2("io_port"), + ae2("pattern_provider"), + ae2("molecular_assembler"), + ae2("terminal"), + ae2("crafting_terminal"), + ae2("pattern_access_terminal"), + ae2("pattern_encoding_terminal"), + ae2("quantum_link"), + ae2("quantum_ring"), + ae2("quartz_fiber"), + ae2("crafting_unit"), + ae2("crafting_accelerator"), + ae2("crafting_monitor"), + ae2("1k_crafting_storage"), + ae2("4k_crafting_storage"), + ae2("16k_crafting_storage"), + ae2("64k_crafting_storage"), + ae2("256k_crafting_storage"), + ae2("crystal_resonance_generator")); + + private final CTNHEnergyPonderSceneBuilder scene; + private final SceneBuildingUtil util; + private final Set visiblePositions = new HashSet<>(); + + public AE2CablePonderHelper(CTNHEnergyPonderSceneBuilder scene, SceneBuildingUtil util) { + this.scene = scene; + this.util = util; + } + + public void showSectionAndConnect(int x, int y, int z, Direction direction) { + showSectionAndConnect(util.grid().at(x, y, z), direction); + } + + public void showSectionAndConnect(int x1, int y1, int z1, int x2, int y2, int z2, Direction direction) { + showSectionAndConnect(util.grid().at(x1, y1, z1), util.grid().at(x2, y2, z2), direction); + } + + public void hideSectionAndDisconnect(int x, int y, int z, Direction direction) { + hideSectionAndDisconnect(util.grid().at(x, y, z), direction); + } + + public void hideSectionAndDisconnect(int x1, int y1, int z1, int x2, int y2, int z2, Direction direction) { + hideSectionAndDisconnect(util.grid().at(x1, y1, z1), util.grid().at(x2, y2, z2), direction); + } + + public static void connectAllVisibleCableBuses(CTNHEnergyPonderSceneBuilder scene, SceneBuildingUtil util) { + new AE2CablePonderHelper(scene, util).markVisibleAndConnect(util.grid().at(0, 0, 0), util.grid().at(8, 17, 8)); + } + + public static void connectVisibleCableBuses(CTNHEnergyPonderSceneBuilder scene, SceneBuildingUtil util, + BlockPos from, BlockPos to) { + new AE2CablePonderHelper(scene, util).markVisibleAndConnect(from, to); + } + + public void showSectionAndConnect(BlockPos pos, Direction direction) { + scene.world().showSection(util.select().position(pos), direction); + markVisibleAndConnect(pos, pos); + } + + public void showSectionAndConnect(BlockPos from, BlockPos to, Direction direction) { + scene.world().showSection(util.select().fromTo(from, to), direction); + markVisibleAndConnect(from, to); + } + + public void hideSectionAndDisconnect(BlockPos pos, Direction direction) { + hideSectionAndDisconnect(pos, pos, direction); + } + + public void hideSectionAndDisconnect(BlockPos from, BlockPos to, Direction direction) { + scene.world().hideSection(util.select().fromTo(from, to), direction); + markHiddenAndConnect(from, to); + } + + public void markVisibleAndConnect(BlockPos from, BlockPos to) { + Set newlyVisible = new HashSet<>(); + BlockPos.betweenClosed(from, to).forEach(pos -> { + BlockPos immutablePos = pos.immutable(); + visiblePositions.add(immutablePos); + newlyVisible.add(immutablePos); + }); + updateConnectionsAround(newlyVisible); + } + + public void markHiddenAndConnect(BlockPos from, BlockPos to) { + Set newlyHidden = new HashSet<>(); + BlockPos.betweenClosed(from, to).forEach(pos -> { + BlockPos immutablePos = pos.immutable(); + visiblePositions.remove(immutablePos); + newlyHidden.add(immutablePos); + }); + updateConnectionsAround(newlyHidden); + } + + private void updateConnectionsAround(Set changedPositions) { + Set candidates = new HashSet<>(); + for (BlockPos pos : changedPositions) { + candidates.add(pos); + for (Direction direction : CONNECTION_DIRECTIONS) { + candidates.add(pos.relative(direction)); + } + } + + Set visibleSnapshot = Set.copyOf(visiblePositions); + for (BlockPos candidate : candidates) { + if (visibleSnapshot.contains(candidate)) { + connectCableBusAt(candidate, visibleSnapshot); + } + } + } + + private void connectCableBusAt(BlockPos pos, Set visibleSnapshot) { + scene.world().modifyBlockEntity(pos, CableBusBlockEntity.class, cableBus -> { + Level level = cableBus.getLevel(); + if (level == null || !isCableBus(level, pos)) return; + + EnumSet connections = EnumSet.noneOf(Direction.class); + for (Direction direction : CONNECTION_DIRECTIONS) { + BlockPos neighbor = pos.relative(direction); + if (visibleSnapshot.contains(neighbor) && isConnectableNeighbor(level, neighbor)) { + connections.add(direction); + } + } + + CompoundTag tag = cableBus.saveWithoutMetadata(); + writeCableVisualConnections(tag, connections); + cableBus.load(tag); + cableBus.setChanged(); + cableBus.requestModelDataUpdate(); + }); + scene.world().modifyBlockEntityNBT(util.select().position(pos), CableBusBlockEntity.class, tag -> {}, true); + } + + static void writeCableVisualConnections(CompoundTag tag, EnumSet connections) { + if (!tag.contains("cable")) return; + + CompoundTag cable = tag.getCompound("cable"); + if (!cable.contains("id")) return; + + CompoundTag visual = cable.getCompound("visual"); + ListTag connectionTags = new ListTag(); + for (Direction direction : CONNECTION_DIRECTIONS) { + if (connections.contains(direction)) { + connectionTags.add(StringTag.valueOf(direction.getSerializedName())); + } + } + visual.put("connections", connectionTags); + cable.put("visual", visual); + tag.put("cable", cable); + } + + private static boolean isConnectableNeighbor(Level level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + if (state.is(AEBlocks.CABLE_BUS.block())) return true; + + ResourceLocation blockId = BuiltInRegistries.BLOCK.getKey(state.getBlock()); + if (KNOWN_CONNECTABLE_AE2_BLOCKS.contains(blockId)) return true; + + BlockEntity blockEntity = level.getBlockEntity(pos); + return blockEntity != null && "ae2".equals(blockId.getNamespace()) && + blockEntity.saveWithoutMetadata().contains("proxy"); + } + + private static boolean isCableBus(Level level, BlockPos pos) { + return level.getBlockState(pos).is(AEBlocks.CABLE_BUS.block()); + } + + private static ResourceLocation ae2(String path) { + return ResourceLocation.tryBuild("ae2", path); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AnnihilationPlane.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AnnihilationPlane.java new file mode 100644 index 0000000..fbb1c6a --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AnnihilationPlane.java @@ -0,0 +1,113 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.catnip.math.Pointing; +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import appeng.core.definitions.AEBlocks; +import appeng.core.definitions.AEItems; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class AnnihilationPlane { + + private AnnihilationPlane() {} + + public static void annihilationPlane(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("annihilation_plane", AnnihilationPlaneHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(2, 1, 1, 3, 1, 2, Direction.DOWN); + cables.showSectionAndConnect(2, 2, 2, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(AnnihilationPlaneText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.world().setBlocks(util.select().position(2, 2, 1), AEBlocks.QUARTZ_CLUSTER.block().defaultBlockState(), + false); + scene.world().showSection(util.select().position(2, 2, 1), Direction.UP); + scene.idle(20); + cables.showSectionAndConnect(0, 1, 2, 1, 1, 2, Direction.DOWN); + scene.idle(20); + scene.world().destroyBlock(util.grid().at(2, 2, 1)); + scene.idle(20); + scene.overlay().showControls(util.vector().of(0.5, 2, 2.5), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(60); + var item1 = scene.world().createItemEntity( + util.vector().of(2.5, 5, 2.5), + util.vector().of(0, 0, 0), + AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(10); + scene.world().modifyEntity(item1, e -> e.kill()); + scene.idle(20); + scene.overlay().showControls(util.vector().of(0.5, 2, 2.5), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(60); + } + + public static void filter(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("annihilation_plane_filter", AnnihilationPlaneFilterHeader.translate().getContents().toString()); + scene.showBasePlate(); + cables.showSectionAndConnect(0, 1, 0, 3, 1, 2, Direction.DOWN); + cables.showSectionAndConnect(2, 2, 2, Direction.DOWN); + scene.idle(40); + scene.world().setBlocks(util.select().position(2, 2, 1), AEBlocks.SMALL_QUARTZ_BUD.block().defaultBlockState(), + false); + scene.world().showSection(util.select().position(2, 2, 1), Direction.UP); + scene.idle(20); + scene.world().destroyBlock(util.grid().at(2, 2, 1)); + scene.idle(40); + scene.overlay().showOutline(PonderPalette.RED, "collect_all", util.select().position(2, 2, 1), 60); + scene.overlay().showText(60) + .text(AnnihilationPlaneFilterText1.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 2, 1), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(AnnihilationPlaneFilterText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + cables.hideSectionAndDisconnect(0, 1, 2, 1, 1, 2, Direction.UP); + scene.idle(20); + cables.showSectionAndConnect(4, 1, 2, 5, 1, 2, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(AnnihilationPlaneFilterText3.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(4, 1, 2), Direction.UP)) + .attachKeyFrame(); + scene.overlay().showOutline(PonderPalette.GREEN, "storage_bus", util.select().fromTo(4, 1, 2, 5, 1, 2), 60); + scene.idle(80); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(4, 1, 2), Direction.DOWN), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(40); + var item1 = scene.world().createItemEntity( + util.vector().of(2.5, 5, 2.5), + util.vector().of(0, 0, 0), + AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(15); + scene.world().modifyEntity(item1, e -> e.kill()); + scene.idle(40); + scene.overlay().showText(60) + .text(AnnihilationPlaneFilterText4.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(AnnihilationPlaneFilterText5.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/BuddingQuartz.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/BuddingQuartz.java new file mode 100644 index 0000000..b72e2c6 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/BuddingQuartz.java @@ -0,0 +1,164 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.catnip.math.Pointing; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.state.BlockState; + +import appeng.core.definitions.AEBlocks; +import appeng.core.definitions.AEItems; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class BuddingQuartz { + + private BuddingQuartz() {} + + public static void obtain(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + scene.title("budding_quartz_obtain", BuddingQuartzObtainHeader.translate().getContents().toString()); + scene.configureBasePlate(0, 0, 5); + scene.showBasePlate(); + scene.idle(20); + scene.world().setBlocks(util.select().position(2, 1, 2), + AEBlocks.FLAWLESS_BUDDING_QUARTZ.block().defaultBlockState(), false); + scene.world().showSection(util.select().position(2, 1, 2), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(BuddingQuartzObtainText1.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 1, 2), Direction.UP)); + scene.idle(60); + + var blocks = new BlockState[] { + AEBlocks.DAMAGED_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.FLAWED_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.QUARTZ_BLOCK.block().defaultBlockState(), + AEBlocks.QUARTZ_BLOCK.block().defaultBlockState(), + AEBlocks.CHIPPED_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.FLAWED_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.DAMAGED_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.CHIPPED_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.MYSTERIOUS_CUBE.block().defaultBlockState() + }; + var positions = new BlockPos[] { + util.grid().at(1, 1, 1), + util.grid().at(1, 1, 2), + util.grid().at(1, 1, 3), + util.grid().at(2, 1, 1), + util.grid().at(2, 1, 3), + util.grid().at(3, 1, 1), + util.grid().at(3, 1, 2), + util.grid().at(3, 1, 3), + util.grid().at(2, 2, 2) + }; + + for (int i = 0; i < blocks.length; i++) { + scene.world().setBlocks(util.select().position(positions[i]), blocks[i], false); + scene.world().showSection(util.select().position(positions[i]), Direction.DOWN); + scene.idle(5); + } + scene.overlay().showText(60) + .text(BuddingQuartzObtainText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + + for (var pos : positions) { + scene.world().hideSection(util.select().position(pos), Direction.UP); + scene.idle(5); + } + } + + public static void grow(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + scene.title("budding_quartz_grow", BuddingQuartzGrowHeader.translate().getContents().toString()); + scene.configureBasePlate(0, 0, 5); + scene.showBasePlate(); + scene.world().setBlocks(util.select().position(2, 1, 2), + AEBlocks.FLAWED_BUDDING_QUARTZ.block().defaultBlockState(), false); + scene.world().showSection(util.select().position(2, 1, 2), Direction.DOWN); + scene.idle(10); + scene.overlay().showText(100) + .text(BuddingQuartzGrowText1.translate().getContents().toString()); + scene.idle(20); + + var quartzStages = new BlockState[] { + AEBlocks.SMALL_QUARTZ_BUD.block().defaultBlockState(), + AEBlocks.MEDIUM_QUARTZ_BUD.block().defaultBlockState(), + AEBlocks.LARGE_QUARTZ_BUD.block().defaultBlockState(), + AEBlocks.QUARTZ_CLUSTER.block().defaultBlockState() + }; + scene.world().showSection(util.select().position(2, 2, 2), Direction.UP); + for (var stage : quartzStages) { + scene.world().setBlocks(util.select().position(2, 2, 2), stage, false); + scene.idle(20); + } + scene.overlay().showText(100) + .text(BuddingQuartzGrowText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.world().showSection(util.select().position(2, 1, 1), Direction.NORTH); + + var degradedStates = new BlockState[] { + AEBlocks.FLAWLESS_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.FLAWED_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.CHIPPED_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.DAMAGED_BUDDING_QUARTZ.block().defaultBlockState(), + AEBlocks.QUARTZ_BLOCK.block().defaultBlockState() + }; + for (int i = 1; i < degradedStates.length; i++) { + scene.world().setBlocks(util.select().position(2, 1, 1), quartzStages[i - 1], false); + scene.world().setBlocks(util.select().position(2, 1, 2), degradedStates[i], false); + scene.idle(20); + } + scene.idle(20); + scene.markAsFinished(); + scene.world().setBlocks(util.select().position(2, 1, 2), + AEBlocks.FLAWLESS_BUDDING_QUARTZ.block().defaultBlockState(), false); + + BlockPos[] acceleratorPositions = { + util.grid().at(3, 1, 2), + util.grid().at(1, 1, 2), + util.grid().at(2, 1, 3) + }; + for (var pos : acceleratorPositions) { + scene.world().setBlocks(util.select().position(pos), + AEBlocks.GROWTH_ACCELERATOR.block().defaultBlockState(), false); + scene.world().showSection(util.select().position(pos), Direction.DOWN); + } + scene.overlay().showText(60) + .text(BuddingQuartzGrowText3.translate().getContents().toString()); + scene.idle(20); + } + + public static void repair(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + scene.title("budding_quartz_repair", BuddingQuartzRepairHeader.translate().getContents().toString()); + scene.configureBasePlate(0, 0, 5); + scene.showBasePlate(); + scene.world().setBlocks(util.select().position(2, 1, 2), AEBlocks.QUARTZ_BLOCK.block().defaultBlockState(), + false); + scene.world().showSection(util.select().position(2, 1, 2), Direction.DOWN); + scene.idle(10); + scene.overlay().showText(100) + .text(BuddingQuartzRepairText1.translate().getContents().toString()); + scene.idle(20); + scene.markAsFinished(); + scene.idle(20); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(2, 1, 2), Direction.UP), Pointing.DOWN, 20) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(60); + scene.overlay().showText(60) + .text(BuddingQuartzRepairText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.overlay().showText(60) + .text(BuddingQuartzRepairText3.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CTNHAE2PondersLang.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CTNHAE2PondersLang.java new file mode 100644 index 0000000..02e80d5 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CTNHAE2PondersLang.java @@ -0,0 +1,610 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import com.ctnhlang.CN; +import com.ctnhlang.EN; +import com.ctnhlang.Key; +import tech.vixhentx.mcmod.ctnhlib.langprovider.Lang; + +public class CTNHAE2PondersLang { + + // ==================== 破坏面板 ==================== + @Key("ponder.annihilation_plane.title") + @CN("破坏面板") + @EN("Annihilation Plane") + static Lang AnnihilationPlaneTitle; + @Key("ponder.annihilation_plane.header") + @CN("破坏面板的使用") + @EN("Using the Annihilation Plane") + static Lang AnnihilationPlaneHeader; + @Key("ponder.annihilation_plane.text_1") + @CN("破坏面板会将其前面的方块或者掉落物收集到网络中(如果能的话)") + @EN("The annihilation plane will collect blocks or items in front of it into the network (if possible)") + static Lang AnnihilationPlaneText1; + + @Key("ponder.annihilation_plane_filter.title") + @CN("破坏面板过滤") + @EN("Annihilation Plane Filter") + static Lang AnnihilationPlaneFilterTitle; + @Key("ponder.annihilation_plane_filter.header") + @CN("使破坏面板破坏/收集特定的物品") + @EN("Filtering with the Annihilation Plane") + static Lang AnnihilationPlaneFilterHeader; + @Key("ponder.annihilation_plane_filter.text_1") + @CN("你会发现破坏面板会收集它前方的所有物品……") + @EN("You'll find that the annihilation plane collects everything in front of it...") + static Lang AnnihilationPlaneFilterText1; + @Key("ponder.annihilation_plane_filter.text_2") + @CN("对此,你可以控制你的网络,使其只能容纳某些物品") + @EN("You can configure your network to only accept certain items") + static Lang AnnihilationPlaneFilterText2; + @Key("ponder.annihilation_plane_filter.text_3") + @CN("配置存储总线的过滤……") + @EN("Configure the storage bus filter...") + static Lang AnnihilationPlaneFilterText3; + @Key("ponder.annihilation_plane_filter.text_4") + @CN("需要注意的是,没有掉落物的方块无论怎样都会被破坏面板破坏") + @EN("Note that blocks without drops will always be broken by the annihilation plane") + static Lang AnnihilationPlaneFilterText4; + @Key("ponder.annihilation_plane_filter.text_5") + @CN("为破坏面板附魔精准采集可能可以为解决该问题提供思路") + @EN("Enchanting the annihilation plane with Silk Touch may help solve this issue") + static Lang AnnihilationPlaneFilterText5; + + // ==================== 赛特斯石英母岩 ==================== + @Key("ponder.budding_quartz_obtain.title") + @CN("母岩获取") + @EN("Obtaining Budding Quartz") + static Lang BuddingQuartzObtainTitle; + @Key("ponder.budding_quartz_obtain.header") + @CN("赛特斯石英母岩的生成") + @EN("Budding Quartz Generation") + static Lang BuddingQuartzObtainHeader; + @Key("ponder.budding_quartz_obtain.text_1") + @CN("这是一个赛特斯石英母岩") + @EN("This is a budding certus quartz block") + static Lang BuddingQuartzObtainText1; + @Key("ponder.budding_quartz_obtain.text_2") + @CN("母岩会和神秘方块一起出现在陨石中") + @EN("Budding quartz appears with mysterious cubes in meteorites") + static Lang BuddingQuartzObtainText2; + + @Key("ponder.budding_quartz_grow.title") + @CN("母岩生长") + @EN("Growing Quartz") + static Lang BuddingQuartzGrowTitle; + @Key("ponder.budding_quartz_grow.header") + @CN("赛特斯石英母岩的生长") + @EN("Budding Quartz Growth") + static Lang BuddingQuartzGrowHeader; + @Key("ponder.budding_quartz_grow.text_1") + @CN("赛特斯石英母岩会随着时间生长") + @EN("Budding quartz grows crystals over time") + static Lang BuddingQuartzGrowText1; + @Key("ponder.budding_quartz_grow.text_2") + @CN("在生长过程中,赛特斯石英母岩有概率降低一个等级(除了无瑕母岩)") + @EN("During growth, the budding quartz may degrade one tier (except flawless)") + static Lang BuddingQuartzGrowText2; + @Key("ponder.budding_quartz_grow.text_3") + @CN("放置催生器可加速母岩生长(催生器可叠加)") + @EN("Place growth accelerators to speed up growth (they stack)") + static Lang BuddingQuartzGrowText3; + + @Key("ponder.budding_quartz_repair.title") + @CN("母岩修复") + @EN("Repairing Budding Quartz") + static Lang BuddingQuartzRepairTitle; + @Key("ponder.budding_quartz_repair.header") + @CN("赛特斯石英母岩的修复") + @EN("Repairing Budding Quartz") + static Lang BuddingQuartzRepairHeader; + @Key("ponder.budding_quartz_repair.text_1") + @CN("母岩退化到石英块了?") + @EN("Your budding quartz degraded to a quartz block?") + static Lang BuddingQuartzRepairText1; + @Key("ponder.budding_quartz_repair.text_2") + @CN("手持与放置的相同等级的母岩右键右击它就有50%的概率生成一个更高级的母岩!") + @EN("Right-click with a budding quartz of the same tier for a 50% chance to upgrade it!") + static Lang BuddingQuartzRepairText2; + @Key("ponder.budding_quartz_repair.text_3") + @CN("使用该方法修复可以获取无瑕母岩!") + @EN("You can obtain flawless budding quartz this way!") + static Lang BuddingQuartzRepairText3; + + // ==================== 线缆 ==================== + @Key("ponder.cable.title") + @CN("AE线缆") + @EN("AE Cables") + static Lang CableTitle; + @Key("ponder.cable.header") + @CN("AE中的线缆") + @EN("Cables in AE") + static Lang CableHeader; + @Key("ponder.cable.text_1") + @CN("这些是AE的线缆……") + @EN("These are AE cables...") + static Lang CableText1; + @Key("ponder.cable.text_2") + @CN("所有同色的线缆都可以互相连接") + @EN("All cables of the same color can connect to each other") + static Lang CableText2; + @Key("ponder.cable.text_3") + @CN("所有颜色的线缆都可以和福鲁伊克斯线缆相连接") + @EN("Cables of any color can connect to fluix cables") + static Lang CableText3; + @Key("ponder.cable.text_4") + @CN("染色后不同颜色的线缆都不会连接") + @EN("Cables of different colors will not connect to each other") + static Lang CableText4; + + @Key("ponder.small_cable.title") + @CN("玻璃/包层线缆") + @EN("Glass & Covered Cables") + static Lang SmallCableTitle; + @Key("ponder.small_cable.header") + @CN("玻璃线缆与包层线缆") + @EN("Glass and Covered Cables") + static Lang SmallCableHeader; + @Key("ponder.small_cable.text_1") + @CN("玻璃线缆与福鲁伊克斯线缆使用上仅有外观上的差距") + @EN("Glass and fluix cables only differ in appearance") + static Lang SmallCableText1; + @Key("ponder.small_cable.text_2") + @CN("该线缆能够传递八个频道") + @EN("These cables can carry 8 channels") + static Lang SmallCableText2; + @Key("ponder.small_cable.text_3") + @CN("当网络中拥有超过八个消耗频道的机器时网络便会过载") + @EN("When the network has more than 8 channel-consuming devices, it will overload") + static Lang SmallCableText3; + + @Key("ponder.dense_cable.title") + @CN("致密线缆") + @EN("Dense Cable") + static Lang DenseCableTitle; + @Key("ponder.dense_cable.header") + @CN("致密包层线缆") + @EN("Dense Covered Cable") + static Lang DenseCableHeader; + @Key("ponder.dense_cable.text_1") + @CN("致密线缆能够传递32个频道") + @EN("Dense cables can carry 32 channels") + static Lang DenseCableText1; + @Key("ponder.dense_cable.text_2") + @CN("但它并不能接入单格类机器(破坏/成型面板,输入/输出/存储总线,线缆内形式的机器)") + @EN("However, it cannot connect to single-block machines (planes, buses, cable-type machines)") + static Lang DenseCableText2; + + // ==================== ME控制器 ==================== + @Key("ponder.controller.title") + @CN("ME控制器") + @EN("ME Controller") + static Lang ControllerTitle; + @Key("ponder.controller.header") + @CN("ME控制器的摆放方式……") + @EN("ME Controller Placement") + static Lang ControllerHeader; + @Key("ponder.controller.text_1") + @CN("这是一个控制器……") + @EN("This is a controller...") + static Lang ControllerText1; + @Key("ponder.controller.text_2") + @CN("控制器需要接入能源才能工作,使用其他mod的能源也可") + @EN("The controller needs power to work, other mods' power also works") + static Lang ControllerText2; + @Key("ponder.controller.text_3") + @CN("控制器每个维度都可延伸最多七格") + @EN("The controller can extend up to 7 blocks in each dimension") + static Lang ControllerText3; + @Key("ponder.controller.text_4") + @CN("超过七格整个网络就会过载") + @EN("Exceeding 7 blocks will overload the network") + static Lang ControllerText4; + @Key("ponder.controller.text_5") + @CN("控制器之间不能传递频道(即不能连接)") + @EN("Controllers cannot pass channels between each other (cannot connect)") + static Lang ControllerText5; + @Key("ponder.controller.text_6") + @CN("控制器也不能摆成十字的状态") + @EN("Controllers also cannot be placed in a cross shape") + static Lang ControllerText6; + + // ==================== 合成处理器 ==================== + @Key("ponder.crafting_process_unit.title") + @CN("CPU") + @EN("Crafting Processing Unit") + static Lang CraftingProcessUnitTitle; + @Key("ponder.crafting_process_unit.header") + @CN("CPU的搭建") + @EN("Building a CPU") + static Lang CraftingProcessUnitHeader; + @Key("ponder.crafting_process_unit.text_1") + @CN("CPU的搭建有一定的规则……") + @EN("Building a CPU has certain rules...") + static Lang CraftingProcessUnitText1; + @Key("ponder.crafting_process_unit.text_2") + @CN("CPU的形体必须得是长方体") + @EN("The CPU must be a rectangular cuboid") + static Lang CraftingProcessUnitText2; + @Key("ponder.crafting_process_unit.text_3") + @CN("不为长方体的CPU则不会显示以成型的状态") + @EN("A non-cuboid CPU will not form properly") + static Lang CraftingProcessUnitText3; + @Key("ponder.crafting_process_unit.text_4") + @CN("CPU结构内至少需要有一个合成存储器") + @EN("The CPU needs at least one crafting storage") + static Lang CraftingProcessUnitText4; + @Key("ponder.crafting_process_unit.text_5") + @CN("其余部分则可使用合成单元,合成监控室,合成存储器,并行处理单元代替") + @EN("Other parts can be crafting units, monitors, storages, or co-processors") + static Lang CraftingProcessUnitText5; + + // ==================== 自动合成系统 ==================== + @Key("ponder.crafting_system.title") + @CN("自动合成") + @EN("Auto Crafting") + static Lang CraftingSystemTitle; + @Key("ponder.crafting_system.header") + @CN("AE的自动合成系统") + @EN("AE Auto Crafting System") + static Lang CraftingSystemHeader; + @Key("ponder.crafting_system.text_1") + @CN("要搭建一个自动合成系统……") + @EN("To build an auto-crafting system...") + static Lang CraftingSystemText1; + @Key("ponder.crafting_system.text_2") + @CN("你需要一个CPU多方块") + @EN("You need a CPU multiblock") + static Lang CraftingSystemText2; + @Key("ponder.crafting_system.text_3") + @CN("还有样板供应器与输出对象") + @EN("And a pattern provider with output target") + static Lang CraftingSystemText3; + + // ==================== 成型面板 ==================== + @Key("ponder.formation_plane.title") + @CN("成型面板") + @EN("Formation Plane") + static Lang FormationPlaneTitle; + @Key("ponder.formation_plane.header") + @CN("成型面板的使用") + @EN("Using the Formation Plane") + static Lang FormationPlaneHeader; + @Key("ponder.formation_plane.text_1") + @CN("成型面板可以输入进网络的物料以掉落物或者方块形式输出到世界上") + @EN("The formation plane outputs network items as blocks or items into the world") + static Lang FormationPlaneText1; + @Key("ponder.formation_plane.text_2") + @CN("当成型面板为方块模式时……") + @EN("When the formation plane is in block mode...") + static Lang FormationPlaneText2; + @Key("ponder.formation_plane.text_3") + @CN("成型面板会将方块放置在它的前面") + @EN("The formation plane places blocks in front of it") + static Lang FormationPlaneText3; + @Key("ponder.formation_plane.text_4") + @CN("当成型面板为掉落物模式时……") + @EN("When the formation plane is in item mode...") + static Lang FormationPlaneText4; + @Key("ponder.formation_plane.text_5") + @CN("成型面板会将物品以掉落物形式丢弃在它的前面") + @EN("The formation plane drops items as entities in front of it") + static Lang FormationPlaneText5; + @Key("ponder.formation_plane.text_6") + @CN("配置成型面板的过滤选项可使其只输出过滤内的物品") + @EN("Configure the formation plane filter to only output specific items") + static Lang FormationPlaneText6; + + // ==================== 输入/输出总线 ==================== + @Key("ponder.import_export_bus.title") + @CN("总线使用") + @EN("Import/Export Bus") + static Lang ImportExportBusTitle; + @Key("ponder.import_export_bus.header") + @CN("输入总线与输出总线的使用") + @EN("Using Import and Export Buses") + static Lang ImportExportBusHeader; + @Key("ponder.import_export_bus.text_1") + @CN("输入总线和输出总线可对网络进行直接的存入和取出") + @EN("Import and export buses directly insert and extract from the network") + static Lang ImportExportBusText1; + @Key("ponder.import_export_bus.text_2") + @CN("输出总线可将网络中的物品输入到目标容器中") + @EN("The export bus outputs items from the network to a target container") + static Lang ImportExportBusText2; + @Key("ponder.import_export_bus.text_3") + @CN("设置输出总线的过滤……") + @EN("Configure the export bus filter...") + static Lang ImportExportBusText3; + @Key("ponder.import_export_bus.text_4") + @CN("输入总线可将容器中的物品输入网络") + @EN("The import bus inputs items from a container into the network") + static Lang ImportExportBusText4; + @Key("ponder.import_export_bus.text_5") + @CN("设置输入总线的过滤……") + @EN("Configure the import bus filter...") + static Lang ImportExportBusText5; + + @Key("ponder.bus_transport.title") + @CN("总线物流") + @EN("Bus Logistics") + static Lang BusTransportTitle; + @Key("ponder.bus_transport.header") + @CN("使用输入/输出总线配合存储总线进行物流") + @EN("Bus Logistics with Storage Buses") + static Lang BusTransportHeader; + @Key("ponder.bus_transport.text_1") + @CN("使用输入/输出总线配合存储总线可制作简易的物流") + @EN("Combine import/export buses with storage buses for simple logistics") + static Lang BusTransportText1; + + // ==================== ME接口 ==================== + @Key("ponder.interface_common.title") + @CN("ME接口") + @EN("ME Interface") + static Lang InterfaceCommonTitle; + @Key("ponder.interface_common.header") + @CN("ME接口的使用") + @EN("Using the ME Interface") + static Lang InterfaceCommonHeader; + @Key("ponder.interface_common.text_1") + @CN("ME接口是网络与外界的接口") + @EN("The ME interface is the network's connection to the outside world") + static Lang InterfaceCommonText1; + @Key("ponder.interface_common.text_2") + @CN("可以将物料直接从ME接口输入进网络") + @EN("Items can be inserted directly into the network via the ME interface") + static Lang InterfaceCommonText2; + @Key("ponder.interface_common.text_3") + @CN("配置ME接口的槽位") + @EN("Configure the ME interface slots") + static Lang InterfaceCommonText3; + @Key("ponder.interface_common.text_4") + @CN("它会将自身填充物料至你所设定的值") + @EN("It will request items from the network to fill its configured slots") + static Lang InterfaceCommonText4; + + // ==================== IO端口 ==================== + @Key("ponder.io_port.title") + @CN("IO端口") + @EN("IO Port") + static Lang IOPortTitle; + @Key("ponder.io_port.header") + @CN("使用IO端口整理存储") + @EN("Using the IO Port") + static Lang IOPortHeader; + @Key("ponder.io_port.text_1") + @CN("ME IO端口能够将其中的存储元件内的东西导入到网络,或者将网络内的存储内容导入元件") + @EN("The IO port can transfer items between storage cells and the network") + static Lang IOPortText1; + @Key("ponder.io_port.text_2") + @CN("你可以使用它将网络内的物品导出到存储元件") + @EN("You can export network items into storage cells") + static Lang IOPortText2; + @Key("ponder.io_port.text_3") + @CN("使用ME IO端口来整理驱动器中存储元件的内容似乎也是一个不错的选择") + @EN("Use the IO port to organize storage cell contents in drives") + static Lang IOPortText3; + + @Key("ponder.io_port_output.title") + @CN("IO端口输出") + @EN("IO Port Output") + static Lang IOPortOutputTitle; + @Key("ponder.io_port_output.header") + @CN("使用IO端口输出大量物品") + @EN("Mass Output with IO Port") + static Lang IOPortOutputHeader; + @Key("ponder.io_port_output.text_1") + @CN("IO端口的输入与输出速度非常的快……") + @EN("The IO port transfers items very quickly...") + static Lang IOPortOutputText1; + @Key("ponder.io_port_output.text_2") + @CN("因此你可以使用它来生产物质球和奇点") + @EN("Making it ideal for producing matter balls and singularities") + static Lang IOPortOutputText2; + + // ==================== 分子装配室 ==================== + @Key("ponder.molecular_assembler.title") + @CN("分子装配室") + @EN("Molecular Assembler") + static Lang MolecularAssemblerTitle; + @Key("ponder.molecular_assembler.header") + @CN("分子装配室的使用") + @EN("Using the Molecular Assembler") + static Lang MolecularAssemblerHeader; + @Key("ponder.molecular_assembler.text_1") + @CN("要使用分子装配室……") + @EN("To use the molecular assembler...") + static Lang MolecularAssemblerText1; + @Key("ponder.molecular_assembler.text_2") + @CN("你需要将其与样板供应器放在一起") + @EN("You need to place it next to a pattern provider") + static Lang MolecularAssemblerText2; + @Key("ponder.molecular_assembler.text_3") + @CN("分子装配室可以自动化工作台,切石机,锻造台的配方,且会把产物自动送回样板供应器") + @EN("It can automate crafting table, stonecutter, and smithing table recipes") + static Lang MolecularAssemblerText3; + @Key("ponder.molecular_assembler.text_4") + @CN("样板供应器和分子装配室都可以传递网络……") + @EN("Both pattern providers and molecular assemblers can pass through the network...") + static Lang MolecularAssemblerText4; + @Key("ponder.molecular_assembler.text_5") + @CN("所以你可以搭建出类似这样的结构") + @EN("So you can build structures like this") + static Lang MolecularAssemblerText5; + + // ==================== 样板供应器 ==================== + @Key("ponder.pattern_provider.title") + @CN("样板供应器") + @EN("Pattern Provider") + static Lang PatternProviderTitle; + @Key("ponder.pattern_provider.header") + @CN("样板供应器的使用") + @EN("Using the Pattern Provider") + static Lang PatternProviderHeader; + @Key("ponder.pattern_provider.text_1") + @CN("这是一个样板供应器") + @EN("This is a pattern provider") + static Lang PatternProviderText1; + @Key("ponder.pattern_provider.text_2") + @CN("使用扳手点击样板供应器可使其方向变为扳手点击的方向") + @EN("Use a wrench to change the pattern provider's direction") + static Lang PatternProviderText2; + @Key("ponder.pattern_provider.text_3") + @CN("当网络下达合成请求时……") + @EN("When the network issues a crafting request...") + static Lang PatternProviderText3; + @Key("ponder.pattern_provider.text_4") + @CN("样板供应器会将原料输出到临近的容器内") + @EN("The pattern provider outputs ingredients to adjacent containers") + static Lang PatternProviderText4; + @Key("ponder.pattern_provider.text_5") + @CN("完成一次合成需要将物品返回网络") + @EN("Completing a craft requires returning items to the network") + static Lang PatternProviderText5; + @Key("ponder.pattern_provider.text_6") + @CN("因此你需要搭建一个回流装置") + @EN("So you need to build a return mechanism") + static Lang PatternProviderText6; + + @Key("ponder.crafting_parallel.title") + @CN("自动并行") + @EN("Auto Crafting Parallelization") + static Lang CraftingParallelTitle; + @Key("ponder.crafting_parallel.header") + @CN("自动合成的并行") + @EN("Parallel Auto Crafting") + static Lang CraftingParallelHeader; + @Key("ponder.crafting_parallel.text_1") + @CN("使用多个样板供应器可以做到多个机器的并行") + @EN("Multiple pattern providers allow parallel crafting") + static Lang CraftingParallelText1; + @Key("ponder.crafting_parallel.text_2") + @CN("内存卡可以复制机器的配置以及将其中配置应用于机器,当然样板供应器也不例外") + @EN("Memory cards can copy and apply configurations, including pattern providers") + static Lang CraftingParallelText2; + @Key("ponder.crafting_parallel.text_3") + @CN("使用内存卡shift右击样板供应器……") + @EN("Sneak-right-click the pattern provider with a memory card...") + static Lang CraftingParallelText3; + @Key("ponder.crafting_parallel.text_4") + @CN("样板供应器会将其中样板的信息也存入内存卡中") + @EN("The pattern provider saves its pattern data to the memory card") + static Lang CraftingParallelText4; + @Key("ponder.crafting_parallel.text_5") + @CN("然后再使用内存卡右击目标的样板供应器……") + @EN("Then right-click the target pattern provider with the memory card...") + static Lang CraftingParallelText5; + @Key("ponder.crafting_parallel.text_6") + @CN("内存卡会消耗物品栏中的空白样板,并依照其记录的样板复制到目标样板供应器中") + @EN("The memory card consumes blank patterns and copies the saved patterns to the target") + static Lang CraftingParallelText6; + @Key("ponder.crafting_parallel.text_7") + @CN("然后以此类推,建造并行") + @EN("Repeat this process to build parallelization") + static Lang CraftingParallelText7; + + @Key("ponder.pattern_provider_interaction.title") + @CN("样板供应器联动") + @EN("Provider & Interface Interaction") + static Lang PatternProviderInteractionTitle; + @Key("ponder.pattern_provider_interaction.header") + @CN("样板供应器与ME接口的联动") + @EN("Pattern Provider & ME Interface Interaction") + static Lang PatternProviderInteractionHeader; + @Key("ponder.pattern_provider_interaction.text_1") + @CN("当样板供应器与ME接口接触时……") + @EN("When a pattern provider touches an ME interface...") + static Lang PatternProviderInteractionText1; + @Key("ponder.pattern_provider_interaction.text_2") + @CN("样板供应器会直接将原料输入到ME接口所在的网络") + @EN("The pattern provider directly inputs ingredients into the interface's network") + static Lang PatternProviderInteractionText2; + + // ==================== 量子网桥 ==================== + @Key("ponder.quantum_network_bridge.title") + @CN("量子网桥") + @EN("Quantum Network Bridge") + static Lang QuantumNetworkBridgeTitle; + @Key("ponder.quantum_network_bridge.header") + @CN("使用量子网桥将网络传递到远端") + @EN("Extending Networks with Quantum Bridges") + static Lang QuantumNetworkBridgeHeader; + @Key("ponder.quantum_network_bridge.text_1") + @CN("量子网桥可用于网络的传输") + @EN("Quantum network bridges can extend your network") + static Lang QuantumNetworkBridgeText1; + @Key("ponder.quantum_network_bridge.text_2") + @CN("为了搭建一个量子环结构,你需要八个量子环和一个量子链接仓") + @EN("A quantum ring requires 8 quantum rings and 1 quantum link chamber") + static Lang QuantumNetworkBridgeText2; + @Key("ponder.quantum_network_bridge.text_3") + @CN("连接量子环和网络只能通过围绕量子连接仓的四个量子环方块") + @EN("Connect the ring to your network via the 4 ring blocks around the link chamber") + static Lang QuantumNetworkBridgeText3; + @Key("ponder.quantum_network_bridge.text_4") + @CN("量子环是成双成对使用的,你需要在你需要的远端也放置一个量子环结构") + @EN("Rings are used in pairs - place another ring structure at the remote location") + static Lang QuantumNetworkBridgeText4; + @Key("ponder.quantum_network_bridge.text_5") + @CN("使用量子环,你需要为两个量子环分别放入同时产生的量子缠绕态奇点") + @EN("Insert quantum entangled singularities (from the same pair) into both rings") + static Lang QuantumNetworkBridgeText5; + @Key("ponder.quantum_network_bridge.text_6") + @CN("一对量子环固定消耗400AE/t,且不随距离变化") + @EN("A pair of quantum rings consumes a fixed 400 AE/t regardless of distance") + static Lang QuantumNetworkBridgeText6; + + // ==================== 存储总线 ==================== + @Key("ponder.storage_bus.title") + @CN("存储总线") + @EN("Storage Bus") + static Lang StorageBusTitle; + @Key("ponder.storage_bus.header") + @CN("存储总线的使用") + @EN("Using the Storage Bus") + static Lang StorageBusHeader; + @Key("ponder.storage_bus.text_1") + @CN("存储总线可以将外界的存储并入到AE网络中") + @EN("The storage bus can integrate external storage into the AE network") + static Lang StorageBusText1; + + @Key("ponder.storage_bus_interface.title") + @CN("存储总线与接口") + @EN("Storage Bus & Interface") + static Lang StorageBusInterfaceTitle; + @Key("ponder.storage_bus_interface.header") + @CN("存储总线与ME接口的互动") + @EN("Storage Bus & ME Interface Interaction") + static Lang StorageBusInterfaceHeader; + @Key("ponder.storage_bus_interface.text_1") + @CN("当你想要让一个网络能访问另一个的内容……") + @EN("When you want one network to access another's contents...") + static Lang StorageBusInterfaceText1; + @Key("ponder.storage_bus_interface.text_2") + @CN("将存储总线与ME接口相贴") + @EN("Place a storage bus against an ME interface") + static Lang StorageBusInterfaceText2; + @Key("ponder.storage_bus_interface.text_3") + @CN("存储总线的一端的网络……") + @EN("The network on the storage bus side...") + static Lang StorageBusInterfaceText3; + @Key("ponder.storage_bus_interface.text_4") + @CN("能够访问ME接口那一段的网络") + @EN("Can access the network on the ME interface side") + static Lang StorageBusInterfaceText4; + @Key("ponder.storage_bus_interface.text_5") + @CN("反之则不可") + @EN("But not vice versa") + static Lang StorageBusInterfaceText5; + + // ==================== Tag ==================== + @Key("ponder.tag.ae_original") + @CN("AE原版") + @EN("AE Original") + static Lang AeOriginalTag; + + @Key("ponder.tag.ae_original.description") + @CN("AE原版思索") + @EN("AE Original Ponders") + static Lang AeOriginalTagDescription; +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Cable.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Cable.java new file mode 100644 index 0000000..76b2d0d --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Cable.java @@ -0,0 +1,96 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class Cable { + + private Cable() {} + + public static void cable(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("cable", CableHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(util.grid().at(0, 1, 0), util.grid().at(4, 1, 1), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(CableText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(CableText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + cables.showSectionAndConnect(util.grid().at(0, 1, 2), util.grid().at(4, 1, 2), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(CableText3.translate().getContents().toString()); + scene.idle(80); + cables.showSectionAndConnect(util.grid().at(0, 1, 3), util.grid().at(4, 1, 3), Direction.DOWN); + scene.overlay().showText(60) + .text(CableText4.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + } + + public static void smallCable(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("small_cable", SmallCableHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(util.grid().at(0, 1, 0), Direction.DOWN); + cables.showSectionAndConnect(util.grid().at(0, 1, 1), util.grid().at(4, 1, 1), Direction.DOWN); + cables.showSectionAndConnect(util.grid().at(4, 1, 1), util.grid().at(4, 1, 4), Direction.DOWN); + cables.showSectionAndConnect(util.grid().at(4, 1, 4), util.grid().at(0, 1, 4), Direction.DOWN); + scene.overlay().showText(60) + .text(SmallCableText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + cables.showSectionAndConnect(util.grid().at(0, 1, 2), util.grid().at(3, 1, 3), Direction.DOWN); + scene.idle(20); + scene.overlay().showOutline(PonderPalette.GREEN, "channels", util.select().fromTo(0, 1, 2, 3, 1, 3), 60); + scene.overlay().showText(60) + .text(SmallCableText2.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 1, 3), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + cables.showSectionAndConnect(util.grid().at(3, 1, 0), Direction.DOWN); + scene.idle(20); + scene.overlay().showOutline(PonderPalette.RED, "overload", util.select().fromTo(0, 1, 2, 3, 1, 3), 60); + scene.overlay().showOutline(PonderPalette.RED, "extra", util.select().position(3, 1, 0), 60); + scene.overlay().showText(60) + .text(SmallCableText3.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + } + + public static void denseCable(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("dense_cable", DenseCableHeader.translate().getContents().toString()); + scene.world().showSection(util.select().fromTo(0, 0, 0, 9, 0, 9), Direction.UP); + scene.idle(20); + cables.showSectionAndConnect(util.grid().at(0, 1, 0), util.grid().at(9, 1, 9), Direction.DOWN); + scene.idle(20); + scene.rotateCameraY(180); + scene.idle(60); + scene.overlay().showText(60) + .text(DenseCableText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(DenseCableText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Controller.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Controller.java new file mode 100644 index 0000000..8bea8af --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Controller.java @@ -0,0 +1,72 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import appeng.core.definitions.AEBlocks; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class Controller { + + private Controller() {} + + public static void controller(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("controller", ControllerHeader.translate().getContents().toString()); + scene.world().showSection(util.select().fromTo(0, 0, 0, 9, 0, 9), Direction.UP); + scene.world().setBlocks(util.select().position(8, 1, 1), AEBlocks.CONTROLLER.block().defaultBlockState(), + false); + scene.idle(20); + cables.showSectionAndConnect(0, 1, 1, 1, 1, 1, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(40) + .text(ControllerText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.overlay().showText(60) + .text(ControllerText2.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(0, 1, 1), Direction.WEST)) + .attachKeyFrame(); + scene.overlay().showOutline(PonderPalette.GREEN, "energy", util.select().position(0, 1, 1), 60); + scene.idle(80); + for (int index = 0; index < 6; index++) { + cables.showSectionAndConnect(index + 2, 1, 1, Direction.WEST); + cables.showSectionAndConnect(1, 2 + index, 1, Direction.DOWN); + cables.showSectionAndConnect(1, 1, 2 + index, Direction.NORTH); + scene.idle(5); + } + scene.idle(10); + scene.overlay().showText(60) + .text(ControllerText3.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.idle(30); + cables.showSectionAndConnect(8, 1, 1, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(ControllerText4.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.rotateCameraY(180); + scene.idle(40); + cables.showSectionAndConnect(3, 1, 3, 5, 1, 4, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(ControllerText5.translate().getContents().toString()) + .attachKeyFrame(); + scene.overlay().showOutline(PonderPalette.RED, "no_connect", util.select().fromTo(3, 1, 3, 5, 1, 4), 60); + scene.idle(80); + cables.showSectionAndConnect(3, 1, 5, 8, 3, 7, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(ControllerText6.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingProcessUnit.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingProcessUnit.java new file mode 100644 index 0000000..405a703 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingProcessUnit.java @@ -0,0 +1,65 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class CraftingProcessUnit { + + private CraftingProcessUnit() {} + + public static void unit(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + scene.title("crafting_process_unit", CraftingProcessUnitHeader.translate().getContents().toString()); + scene.world().showSection(util.select().fromTo(0, 0, 0, 8, 0, 8), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(40) + .text(CraftingProcessUnitText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.world().showSection(util.select().position(1, 1, 1), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().fromTo(3, 1, 1, 4, 1, 1), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().fromTo(6, 1, 1, 7, 2, 1), Direction.DOWN); + scene.idle(10); + scene.overlay().showText(40) + .text(CraftingProcessUnitText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.rotateCameraY(90); + scene.idle(20); + scene.world().showSection(util.select().fromTo(1, 1, 3, 2, 2, 4), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().fromTo(4, 1, 3, 5, 1, 4), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().fromTo(7, 1, 3, 8, 2, 4), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(40) + .text(CraftingProcessUnitText3.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.world().showSection(util.select().fromTo(1, 1, 6, 2, 2, 7), Direction.DOWN); + scene.idle(20); + scene.overlay().showOutline(PonderPalette.RED, "need_storage", util.select().fromTo(1, 1, 6, 2, 2, 7), 40); + scene.overlay().showText(60) + .text(CraftingProcessUnitText4.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(1, 2, 7), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + scene.world().showSection(util.select().fromTo(4, 1, 6, 5, 2, 7), Direction.DOWN); + scene.idle(20); + scene.overlay().showOutline(PonderPalette.GREEN, "alternatives", util.select().fromTo(4, 1, 6, 5, 2, 7), 40); + scene.overlay().showText(60) + .text(CraftingProcessUnitText5.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(4, 2, 7), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingSystem.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingSystem.java new file mode 100644 index 0000000..fd30b02 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingSystem.java @@ -0,0 +1,46 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class CraftingSystem { + + private CraftingSystem() {} + + public static void system(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("crafting_system", CraftingSystemHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(2, 1, 1, 2, 1, 3, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(40) + .text(CraftingSystemText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + cables.showSectionAndConnect(0, 1, 1, 1, 1, 3, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(40) + .text(CraftingSystemText2.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(0, 1, 1), Direction.UP)) + .attachKeyFrame(); + scene.overlay().showOutline(PonderPalette.GREEN, "cpu", util.select().fromTo(0, 1, 1, 0, 1, 3), 40); + scene.idle(60); + cables.showSectionAndConnect(3, 1, 0, 4, 1, 2, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(40) + .text(CraftingSystemText3.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(4, 1, 0), Direction.UP)) + .attachKeyFrame(); + scene.overlay().showOutline(PonderPalette.GREEN, "provider", util.select().fromTo(4, 1, 0, 4, 1, 1), 40); + scene.idle(60); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/FormationPlane.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/FormationPlane.java new file mode 100644 index 0000000..96487e0 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/FormationPlane.java @@ -0,0 +1,77 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.catnip.math.Pointing; +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import appeng.core.definitions.AEBlocks; +import appeng.core.definitions.AEItems; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class FormationPlane { + + private FormationPlane() {} + + public static void common(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("formation_plane", FormationPlaneHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(0, 1, 0, 6, 1, 6, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(FormationPlaneText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + cables.showSectionAndConnect(3, 2, 1, Direction.DOWN); + scene.overlay().showText(60) + .text(FormationPlaneText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + var item1 = scene.world().createItemEntity( + util.vector().of(3.5, 5, 1.5), + util.vector().of(0, 0, 0), + AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(15); + scene.world().modifyEntity(item1, e -> e.kill()); + scene.world().setBlocks(util.select().position(2, 1, 1), AEBlocks.QUARTZ_BLOCK.block().defaultBlockState(), + false); + scene.idle(20); + scene.overlay().showOutline(PonderPalette.GREEN, "placed", util.select().position(2, 1, 1), 60); + scene.overlay().showText(60) + .text(FormationPlaneText3.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 1, 1), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + scene.world().hideSection(util.select().position(2, 1, 1), Direction.UP); + scene.overlay().showText(60) + .text(FormationPlaneText4.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.world().createItemEntity( + util.vector().of(2.5, 1.5, 1.75), + util.vector().of(0, 0, 0), + AEBlocks.QUARTZ_BLOCK.asItem().getDefaultInstance()); + scene.overlay().showOutline(PonderPalette.GREEN, "drop", util.select().position(2, 1, 1), 60); + scene.overlay().showText(60) + .text(FormationPlaneText5.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 1, 1), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(FormationPlaneText6.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(2, 1, 1), Direction.UP), Pointing.RIGHT, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(60); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/IOPort.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/IOPort.java new file mode 100644 index 0000000..6d82c0f --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/IOPort.java @@ -0,0 +1,68 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class IOPort { + + private IOPort() {} + + public static void ioPort(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("io_port", IOPortHeader.translate().getContents().toString()); + scene.world().showSection(util.select().fromTo(0, 0, 0, 9, 0, 9), Direction.UP); + scene.idle(20); + cables.showSectionAndConnect(3, 1, 4, 5, 1, 4, Direction.DOWN); + scene.idle(20); + scene.overlay().showOutline(PonderPalette.GREEN, "io_port", util.select().position(4, 1, 4), 60); + scene.overlay().showText(60) + .text(IOPortText1.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(4, 1, 4), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + cables.showSectionAndConnect(0, 1, 0, 4, 1, 3, Direction.DOWN); + scene.overlay().showText(60) + .text(IOPortText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + cables.hideSectionAndDisconnect(0, 1, 0, 4, 1, 3, Direction.UP); + scene.idle(20); + scene.rotateCameraY(90); + scene.idle(20); + cables.showSectionAndConnect(4, 1, 5, 6, 1, 8, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(IOPortText3.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + } + + public static void output(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("io_port_output", IOPortOutputHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(1, 1, 4, 3, 1, 4, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(IOPortOutputText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + cables.showSectionAndConnect(2, 1, 3, 2, 1, 2, Direction.DOWN); + scene.overlay().showText(60) + .text(IOPortOutputText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(20); + scene.rotateCameraY(180); + scene.idle(40); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/ImportExportBus.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/ImportExportBus.java new file mode 100644 index 0000000..be38068 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/ImportExportBus.java @@ -0,0 +1,95 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.catnip.math.Pointing; +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import appeng.core.definitions.AEItems; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class ImportExportBus { + + private ImportExportBus() {} + + public static void common(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("import_export_bus", ImportExportBusHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(4, 1, 3, Direction.DOWN); + cables.showSectionAndConnect(2, 1, 4, 4, 1, 4, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(ImportExportBusText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + cables.showSectionAndConnect(1, 1, 2, 2, 1, 2, Direction.DOWN); + scene.idle(10); + cables.showSectionAndConnect(1, 1, 3, 1, 1, 4, Direction.DOWN); + scene.rotateCameraY(-90); + scene.idle(40); + scene.overlay().showText(60) + .text(ImportExportBusText2.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(1, 1, 3), Direction.UP)) + .attachKeyFrame(); + scene.overlay().showOutline(PonderPalette.GREEN, "export_target", util.select().position(1, 1, 3), 60); + scene.idle(80); + scene.overlay().showText(60) + .text(ImportExportBusText3.translate().getContents().toString()); + scene.idle(60); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(1, 1, 3), Direction.UP), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(40); + scene.rotateCameraY(90); + scene.idle(30); + cables.showSectionAndConnect(4, 2, 3, Direction.DOWN); + scene.idle(10); + cables.showSectionAndConnect(1, 1, 1, Direction.NORTH); + scene.idle(30); + scene.overlay().showText(60) + .text(ImportExportBusText4.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 1, 3), Direction.UP)) + .attachKeyFrame(); + scene.overlay().showOutline(PonderPalette.GREEN, "import_source", util.select().position(2, 1, 3), 60); + scene.idle(80); + scene.overlay().showText(60) + .text(ImportExportBusText5.translate().getContents().toString()); + scene.idle(60); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(2, 1, 3), Direction.UP), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(40); + cables.showSectionAndConnect(4, 1, 2, Direction.NORTH); + scene.idle(10); + cables.showSectionAndConnect(2, 2, 2, Direction.DOWN); + scene.rotateCameraY(90); + scene.idle(40); + } + + public static void transport(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("bus_transport", BusTransportHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(0, 1, 0, 3, 1, 4, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(BusTransportText1.translate().getContents().toString()); + scene.idle(20); + scene.rotateCameraY(90); + scene.idle(60); + cables.showSectionAndConnect(4, 1, 0, 4, 1, 3, Direction.DOWN); + cables.showSectionAndConnect(1, 2, 0, 1, 2, 3, Direction.DOWN); + scene.idle(20); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Interface.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Interface.java new file mode 100644 index 0000000..5d89518 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Interface.java @@ -0,0 +1,57 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.catnip.math.Pointing; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import appeng.core.definitions.AEItems; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class Interface { + + private Interface() {} + + public static void common(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("interface_common", InterfaceCommonHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(1, 1, 1, 1, 1, 3, Direction.DOWN); + cables.showSectionAndConnect(1, 1, 2, 3, 1, 2, Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(InterfaceCommonText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + cables.showSectionAndConnect(3, 2, 2, Direction.DOWN); + scene.markAsFinished(); + scene.idle(20); + scene.overlay().showText(60) + .text(InterfaceCommonText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(70); + cables.hideSectionAndDisconnect(3, 2, 2, Direction.UP); + scene.idle(20); + scene.overlay().showText(40) + .text(InterfaceCommonText3.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(40); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(3, 1, 2), Direction.UP), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(40); + cables.showSectionAndConnect(3, 1, 1, Direction.SOUTH); + scene.idle(20); + scene.overlay().showText(60) + .text(InterfaceCommonText4.translate().getContents().toString()) + .attachKeyFrame(); + scene.world().flapFunnel(util.grid().at(3, 1, 1), true); + scene.idle(60); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/MolecularAssembler.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/MolecularAssembler.java new file mode 100644 index 0000000..d195ea9 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/MolecularAssembler.java @@ -0,0 +1,48 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class MolecularAssembler { + + private MolecularAssembler() {} + + public static void common(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("molecular_assembler", MolecularAssemblerHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(0, 1, 0, 3, 1, 0, Direction.DOWN); + cables.showSectionAndConnect(2, 1, 1, 2, 2, 2, Direction.DOWN); + cables.showSectionAndConnect(1, 1, 1, Direction.DOWN); + scene.overlay().showText(60) + .text(MolecularAssemblerText1.translate().getContents().toString()); + scene.idle(80); + cables.showSectionAndConnect(1, 1, 2, Direction.DOWN); + scene.overlay().showText(60) + .text(MolecularAssemblerText2.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(1, 1, 2), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(MolecularAssemblerText3.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(MolecularAssemblerText4.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + cables.showSectionAndConnect(0, 1, 1, 1, 2, 2, Direction.DOWN); + scene.overlay().showText(60) + .text(MolecularAssemblerText5.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/PatternProvider.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/PatternProvider.java new file mode 100644 index 0000000..279681c --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/PatternProvider.java @@ -0,0 +1,175 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.catnip.math.Pointing; +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import appeng.core.definitions.AEItems; +import com.simibubi.create.AllItems; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class PatternProvider { + + private PatternProvider() {} + + public static void common(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + scene.title("pattern_provider", PatternProviderHeader.translate().getContents().toString()); + scene.world().showSection(util.select().fromTo(0, 0, 0, 7, 0, 7), Direction.UP); + scene.showBasePlate(); + scene.idle(10); + scene.world().showSection(util.select().fromTo(4, 1, 0, 4, 1, 2), Direction.UP); + scene.idle(10); + scene.world().showSection(util.select().fromTo(1, 1, 3, 4, 1, 3), Direction.UP); + scene.idle(20); + scene.world().showSection(util.select().position(2, 2, 3), Direction.UP); + scene.idle(10); + scene.world().showSection(util.select().fromTo(4, 2, 1, 4, 3, 3), Direction.UP); + scene.idle(20); + scene.overlay().showText(40) + .text(PatternProviderText1.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 2, 3), Direction.UP)) + .attachKeyFrame(); + scene.idle(60); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(2, 2, 3), Direction.UP), Pointing.DOWN, 20) + .rightClick() + .withItem(AllItems.WRENCH.asItem().getDefaultInstance()); + scene.idle(20); + scene.overlay().showText(40) + .text(PatternProviderText2.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 2, 3), Direction.UP)) + .attachKeyFrame(); + scene.idle(60); + scene.overlay().showText(40) + .text(PatternProviderText3.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.overlay().showText(40) + .text(PatternProviderText4.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 1, 3), Direction.UP)) + .attachKeyFrame(); + scene.overlay().showOutline(PonderPalette.GREEN, "output", util.select().fromTo(2, 1, 3, 4, 1, 3), 40); + scene.idle(80); + scene.markAsFinished(); + scene.overlay().showText(40) + .text(PatternProviderText5.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 2, 3), Direction.UP)) + .attachKeyFrame(); + scene.idle(60); + scene.world().showSection(util.select().fromTo(5, 1, 3, 5, 1, 6), Direction.DOWN); + scene.world().showSection(util.select().fromTo(0, 1, 4, 6, 1, 7), Direction.DOWN); + scene.world().showSection(util.select().position(2, 2, 4), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(40) + .text(PatternProviderText6.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + } + + public static void parallel(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("crafting_parallel", CraftingParallelHeader.translate().getContents().toString()); + scene.world().showSection(util.select().fromTo(1, 0, 0, 8, 0, 8), Direction.UP); + scene.idle(20); + cables.showSectionAndConnect(1, 1, 0, 1, 1, 3, Direction.DOWN); + scene.idle(10); + for (int index = 0; index < 4; index++) { + cables.showSectionAndConnect(0, index, 4, Direction.DOWN); + scene.idle(5); + } + cables.showSectionAndConnect(1, 1, 4, 1, 1, 5, Direction.DOWN); + scene.idle(10); + cables.showSectionAndConnect(1, 3, 4, Direction.DOWN); + scene.idle(40); + scene.overlay().showText(60) + .text(CraftingParallelText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(CraftingParallelText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(CraftingParallelText3.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(20); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(1, 1, 3), Direction.UP), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.MEMORY_CARD.asItem().getDefaultInstance()) + .whileSneaking(); + scene.idle(60); + scene.overlay().showText(60) + .text(CraftingParallelText4.translate().getContents().toString()); + scene.idle(60); + cables.showSectionAndConnect(2, 1, 3, 2, 1, 5, Direction.DOWN); + scene.idle(20); + cables.showSectionAndConnect(2, 3, 4, Direction.DOWN); + scene.overlay().showText(60) + .text(CraftingParallelText5.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(40); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(2, 1, 3), Direction.UP), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.MEMORY_CARD.asItem().getDefaultInstance()); + scene.idle(20); + scene.overlay().showText(40) + .text(CraftingParallelText6.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.overlay().showText(80) + .text(CraftingParallelText7.translate().getContents().toString()); + scene.idle(20); + for (int index = 1; index <= 5; index++) { + cables.showSectionAndConnect(2 + index, 1, 3, 2 + index, 1, 5, Direction.DOWN); + cables.showSectionAndConnect(2 + index, 3, 4, Direction.DOWN); + scene.idle(5); + } + scene.idle(10); + cables.showSectionAndConnect(2, 1, 0, 7, 1, 1, Direction.DOWN); + scene.idle(10); + cables.showSectionAndConnect(1, 1, 6, 8, 1, 6, Direction.DOWN); + cables.showSectionAndConnect(8, 1, 0, 8, 1, 6, Direction.DOWN); + scene.idle(10); + scene.rotateCameraY(90); + scene.idle(40); + scene.rotateCameraY(90); + scene.idle(40); + cables.showSectionAndConnect(1, 2, 5, 7, 2, 6, Direction.DOWN); + } + + public static void interaction(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("pattern_provider_interaction", + PatternProviderInteractionHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(1, 1, 0, 4, 1, 1, Direction.DOWN); + scene.idle(20); + scene.rotateCameraY(90); + scene.idle(20); + scene.overlay().showOutline(PonderPalette.GREEN, "contact", util.select().fromTo(1, 1, 1, 2, 1, 1), 40); + scene.overlay().showText(40) + .text(PatternProviderInteractionText1.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(2, 1, 1), Direction.UP)) + .attachKeyFrame(); + scene.idle(60); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(1, 1, 1), Direction.UP), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(40); + scene.overlay().showText(40) + .text(PatternProviderInteractionText2.translate().getContents().toString()); + scene.idle(60); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/QuantumNetworkBridge.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/QuantumNetworkBridge.java new file mode 100644 index 0000000..c2f411d --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/QuantumNetworkBridge.java @@ -0,0 +1,98 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.catnip.math.Pointing; +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import appeng.core.definitions.AEItems; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class QuantumNetworkBridge { + + private QuantumNetworkBridge() {} + + public static void bridge(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("quantum_network_bridge", QuantumNetworkBridgeHeader.translate().getContents().toString()); + scene.world().showSection(util.select().fromTo(0, 0, 0, 9, 0, 9), Direction.UP); + scene.idle(20); + scene.overlay().showText(60) + .text(QuantumNetworkBridgeText1.translate().getContents().toString()); + scene.idle(80); + scene.overlay().showText(60) + .text(QuantumNetworkBridgeText2.translate().getContents().toString()) + .attachKeyFrame(); + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if (i != 1 || j != 1) { + cables.showSectionAndConnect(i, j + 1, 0, Direction.DOWN); + scene.idle(5); + } + } + } + scene.idle(10); + cables.showSectionAndConnect(1, 2, 0, Direction.SOUTH); + scene.idle(20); + scene.idle(30); + scene.rotateCameraY(180); + scene.idle(30); + cables.showSectionAndConnect(0, 1, 1, 3, 1, 3, Direction.DOWN); + scene.overlay().showOutline(PonderPalette.GREEN, "connect1", util.select().position(1, 1, 0), 60); + scene.overlay().showOutline(PonderPalette.GREEN, "connect2", util.select().position(0, 2, 0), 60); + scene.overlay().showOutline(PonderPalette.GREEN, "connect3", util.select().position(1, 3, 0), 60); + scene.overlay().showOutline(PonderPalette.GREEN, "connect4", util.select().position(2, 2, 0), 60); + scene.overlay().showText(60) + .text(QuantumNetworkBridgeText3.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(1, 2, 0), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if (i != 1 || j != 1) { + cables.showSectionAndConnect(i + 6, j + 1, 8, Direction.DOWN); + scene.idle(5); + } + } + } + cables.showSectionAndConnect(7, 2, 8, Direction.DOWN); + scene.overlay().showText(60) + .text(QuantumNetworkBridgeText4.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(QuantumNetworkBridgeText5.translate().getContents().toString()); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(7, 2, 8), Direction.WEST), Pointing.LEFT, 40) + .rightClick() + .withItem(AEItems.QUANTUM_ENTANGLED_SINGULARITY.asItem().getDefaultInstance()); + scene.idle(40); + scene.rotateCameraY(180); + scene.idle(30); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(1, 2, 0), Direction.WEST), Pointing.LEFT, 40) + .rightClick() + .withItem(AEItems.QUANTUM_ENTANGLED_SINGULARITY.asItem().getDefaultInstance()); + scene.idle(60); + cables.showSectionAndConnect(4, 1, 5, 7, 1, 7, Direction.DOWN); + scene.idle(20); + cables.showSectionAndConnect(3, 2, 2, Direction.DOWN); + scene.idle(20); + scene.rotateCameraY(90); + scene.idle(30); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(5, 1, 6), Direction.UP), Pointing.DOWN, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(60); + scene.overlay().showText(60) + .text(QuantumNetworkBridgeText6.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/StorageBus.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/StorageBus.java new file mode 100644 index 0000000..f94e57f --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/StorageBus.java @@ -0,0 +1,95 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import net.createmod.catnip.math.Pointing; +import net.createmod.ponder.api.PonderPalette; +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +import appeng.core.definitions.AEItems; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import static tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.CTNHAE2PondersLang.*; + +public class StorageBus { + + private StorageBus() {} + + public static void common(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("storage_bus", StorageBusHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(1, 1, 1, 1, 1, 3, Direction.DOWN); + scene.overlay().showText(60) + .text(StorageBusText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + cables.showSectionAndConnect(2, 1, 2, 4, 1, 2, Direction.DOWN); + scene.idle(10); + cables.showSectionAndConnect(4, 1, 3, 4, 2, 3, Direction.DOWN); + scene.markAsFinished(); + scene.idle(10); + scene.rotateCameraY(-180); + scene.idle(40); + scene.overlay().showControls(util.vector().blockSurface(util.grid().at(4, 1, 3), Direction.UP), Pointing.UP, 40) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(60); + } + + public static void interfaceInteraction(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + AE2CablePonderHelper cables = new AE2CablePonderHelper(scene, util); + scene.title("storage_bus_interface", StorageBusInterfaceHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + cables.showSectionAndConnect(1, 1, 1, 1, 1, 3, Direction.DOWN); + scene.idle(10); + cables.showSectionAndConnect(5, 1, 1, 5, 1, 4, Direction.DOWN); + scene.overlay().showText(60) + .text(StorageBusInterfaceText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.rotateCameraY(90); + scene.idle(30); + cables.showSectionAndConnect(2, 1, 2, 3, 1, 2, Direction.DOWN); + scene.idle(10); + cables.showSectionAndConnect(4, 1, 2, Direction.DOWN); + scene.idle(20); + scene.overlay().showOutline(PonderPalette.GREEN, "interface_contact", util.select().fromTo(3, 1, 2, 4, 1, 2), + 60); + scene.overlay().showText(60) + .text(StorageBusInterfaceText2.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(4, 1, 2), Direction.UP)) + .attachKeyFrame(); + scene.idle(60); + scene.overlay().showOutline(PonderPalette.GREEN, "storage_bus_side", util.select().position(3, 1, 2), 60); + scene.overlay().showText(60) + .text(StorageBusInterfaceText3.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(3, 1, 2), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showOutline(PonderPalette.GREEN, "interface_side", util.select().position(4, 1, 2), 60); + scene.overlay().showText(60) + .text(StorageBusInterfaceText4.translate().getContents().toString()) + .pointAt(util.vector().blockSurface(util.grid().at(4, 1, 2), Direction.UP)) + .attachKeyFrame(); + scene.idle(80); + scene.overlay().showText(60) + .text(StorageBusInterfaceText5.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.markAsFinished(); + scene.idle(30); + cables.showSectionAndConnect(5, 2, 4, Direction.DOWN); + scene.idle(20); + scene.overlay() + .showControls(util.vector().blockSurface(util.grid().at(5, 1, 4), Direction.UP), Pointing.DOWN, 60) + .rightClick() + .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); + scene.idle(60); + } +} diff --git a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/registry/CEItems.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/registry/CEItems.java index 1ed109e..921c0c1 100644 --- a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/registry/CEItems.java +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/registry/CEItems.java @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.api.item.IComponentItem; import com.gregtechceu.gtceu.api.item.component.IItemComponent; -import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import net.minecraft.world.item.Item; import net.minecraftforge.client.model.generators.ModelFile; @@ -12,6 +11,7 @@ import appeng.items.parts.PartItem; import appeng.items.parts.PartModelsHelper; import com.tterrag.registrate.util.entry.ItemEntry; +import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import com.tterrag.registrate.util.nullness.NonNullConsumer; import tech.luckyblock.mcmod.ctnhenergy.common.item.DynamoCardItem; import tech.luckyblock.mcmod.ctnhenergy.common.item.EUCellItem; diff --git a/src/main/resources/assets/ctnhenergy/ponder/annihilation_plane/common.nbt b/src/main/resources/assets/ctnhenergy/ponder/annihilation_plane/common.nbt new file mode 100644 index 0000000..64ee6a2 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/annihilation_plane/common.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/annihilation_plane/filter.nbt b/src/main/resources/assets/ctnhenergy/ponder/annihilation_plane/filter.nbt new file mode 100644 index 0000000..2daa1d4 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/annihilation_plane/filter.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/budding_quartz/budding_quart.nbt b/src/main/resources/assets/ctnhenergy/ponder/budding_quartz/budding_quart.nbt new file mode 100644 index 0000000..efea6dd Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/budding_quartz/budding_quart.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/cable/cable.nbt b/src/main/resources/assets/ctnhenergy/ponder/cable/cable.nbt new file mode 100644 index 0000000..aa7053e Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/cable/cable.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/cable/dense_cable.nbt b/src/main/resources/assets/ctnhenergy/ponder/cable/dense_cable.nbt new file mode 100644 index 0000000..a87ab67 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/cable/dense_cable.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/cable/small_cable.nbt b/src/main/resources/assets/ctnhenergy/ponder/cable/small_cable.nbt new file mode 100644 index 0000000..f64a3d9 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/cable/small_cable.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/controller/controller.nbt b/src/main/resources/assets/ctnhenergy/ponder/controller/controller.nbt new file mode 100644 index 0000000..91bd6ad Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/controller/controller.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/crafting_process_unit/unit.nbt b/src/main/resources/assets/ctnhenergy/ponder/crafting_process_unit/unit.nbt new file mode 100644 index 0000000..4dbde30 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/crafting_process_unit/unit.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/crafting_system/system.nbt b/src/main/resources/assets/ctnhenergy/ponder/crafting_system/system.nbt new file mode 100644 index 0000000..771a130 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/crafting_system/system.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/formation_plane/common.nbt b/src/main/resources/assets/ctnhenergy/ponder/formation_plane/common.nbt new file mode 100644 index 0000000..cf1df25 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/formation_plane/common.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/import_export_bus/common.nbt b/src/main/resources/assets/ctnhenergy/ponder/import_export_bus/common.nbt new file mode 100644 index 0000000..af8a60c Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/import_export_bus/common.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/import_export_bus/transport.nbt b/src/main/resources/assets/ctnhenergy/ponder/import_export_bus/transport.nbt new file mode 100644 index 0000000..f789c75 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/import_export_bus/transport.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/interface/common.nbt b/src/main/resources/assets/ctnhenergy/ponder/interface/common.nbt new file mode 100644 index 0000000..4a3b611 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/interface/common.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/io_port/io_port.nbt b/src/main/resources/assets/ctnhenergy/ponder/io_port/io_port.nbt new file mode 100644 index 0000000..14951b3 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/io_port/io_port.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/io_port/output.nbt b/src/main/resources/assets/ctnhenergy/ponder/io_port/output.nbt new file mode 100644 index 0000000..4b72553 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/io_port/output.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/molecular_assembler/common.nbt b/src/main/resources/assets/ctnhenergy/ponder/molecular_assembler/common.nbt new file mode 100644 index 0000000..02d7680 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/molecular_assembler/common.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/pattern_provider/common.nbt b/src/main/resources/assets/ctnhenergy/ponder/pattern_provider/common.nbt new file mode 100644 index 0000000..9ed866d Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/pattern_provider/common.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/pattern_provider/interaction.nbt b/src/main/resources/assets/ctnhenergy/ponder/pattern_provider/interaction.nbt new file mode 100644 index 0000000..a698fc4 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/pattern_provider/interaction.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/pattern_provider/parallel.nbt b/src/main/resources/assets/ctnhenergy/ponder/pattern_provider/parallel.nbt new file mode 100644 index 0000000..8020e43 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/pattern_provider/parallel.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/quantum_network_bridge/bridge.nbt b/src/main/resources/assets/ctnhenergy/ponder/quantum_network_bridge/bridge.nbt new file mode 100644 index 0000000..888e9ba Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/quantum_network_bridge/bridge.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/storage_bus/common.nbt b/src/main/resources/assets/ctnhenergy/ponder/storage_bus/common.nbt new file mode 100644 index 0000000..c55c03f Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/storage_bus/common.nbt differ diff --git a/src/main/resources/assets/ctnhenergy/ponder/storage_bus/interface.nbt b/src/main/resources/assets/ctnhenergy/ponder/storage_bus/interface.nbt new file mode 100644 index 0000000..441fce1 Binary files /dev/null and b/src/main/resources/assets/ctnhenergy/ponder/storage_bus/interface.nbt differ