From 85f4322e9238fddaa168a86959b8b6e4f96b5168 Mon Sep 17 00:00:00 2001 From: mmyddd Date: Fri, 1 May 2026 01:33:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=B0=86kjs=E7=9A=84AE=E6=80=9D=E7=B4=A2?= =?UTF-8?q?=E6=90=AC=E5=88=B0energy=E9=87=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/ctnhenergy/lang/en_ud.json | 140 ++++ .../assets/ctnhenergy/lang/en_us.json | 140 ++++ .../assets/ctnhenergy/lang/zh_cn.json | 140 ++++ .../mcmod/ctnhenergy/client/ClientProxy.java | 5 + .../client/ponder/CTNHEnergyPonderPlugin.java | 25 + .../ponder/CTNHEnergyPonderSceneBuilder.java | 50 ++ .../client/ponder/CTNHEnergyPonderScenes.java | 110 ++++ .../client/ponder/CTNHEnergyPonderTags.java | 63 ++ .../client/ponder/ae2/AnnihilationPlane.java | 110 ++++ .../client/ponder/ae2/BuddingQuartz.java | 158 +++++ .../client/ponder/ae2/CTNHAE2PondersLang.java | 610 ++++++++++++++++++ .../ctnhenergy/client/ponder/ae2/Cable.java | 92 +++ .../client/ponder/ae2/Controller.java | 70 ++ .../ponder/ae2/CraftingProcessUnit.java | 64 ++ .../client/ponder/ae2/CraftingSystem.java | 44 ++ .../client/ponder/ae2/FormationPlane.java | 76 +++ .../ctnhenergy/client/ponder/ae2/IOPort.java | 65 ++ .../client/ponder/ae2/ImportExportBus.java | 91 +++ .../client/ponder/ae2/Interface.java | 55 ++ .../client/ponder/ae2/MolecularAssembler.java | 46 ++ .../client/ponder/ae2/PatternProvider.java | 169 +++++ .../ponder/ae2/QuantumNetworkBridge.java | 94 +++ .../client/ponder/ae2/StorageBus.java | 91 +++ .../ponder/annihilation_plane/common.nbt | Bin 0 -> 1234 bytes .../ponder/annihilation_plane/filter.nbt | Bin 0 -> 1411 bytes .../ponder/budding_quartz/budding_quart.nbt | Bin 0 -> 232 bytes .../assets/ctnhenergy/ponder/cable/cable.nbt | Bin 0 -> 933 bytes .../ctnhenergy/ponder/cable/dense_cable.nbt | Bin 0 -> 2017 bytes .../ctnhenergy/ponder/cable/small_cable.nbt | Bin 0 -> 1014 bytes .../ponder/controller/controller.nbt | Bin 0 -> 4440 bytes .../ponder/crafting_process_unit/unit.nbt | Bin 0 -> 1606 bytes .../ponder/crafting_system/system.nbt | Bin 0 -> 1178 bytes .../ponder/formation_plane/common.nbt | Bin 0 -> 1166 bytes .../ponder/import_export_bus/common.nbt | Bin 0 -> 1322 bytes .../ponder/import_export_bus/transport.nbt | Bin 0 -> 1220 bytes .../ctnhenergy/ponder/interface/common.nbt | Bin 0 -> 1167 bytes .../ctnhenergy/ponder/io_port/io_port.nbt | Bin 0 -> 2354 bytes .../ctnhenergy/ponder/io_port/output.nbt | Bin 0 -> 1203 bytes .../ponder/molecular_assembler/common.nbt | Bin 0 -> 1274 bytes .../ponder/pattern_provider/common.nbt | Bin 0 -> 2092 bytes .../ponder/pattern_provider/interaction.nbt | Bin 0 -> 1122 bytes .../ponder/pattern_provider/parallel.nbt | Bin 0 -> 3226 bytes .../ponder/quantum_network_bridge/bridge.nbt | Bin 0 -> 2155 bytes .../ctnhenergy/ponder/storage_bus/common.nbt | Bin 0 -> 1251 bytes .../ponder/storage_bus/interface.nbt | Bin 0 -> 1464 bytes 45 files changed, 2508 insertions(+) create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderPlugin.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderSceneBuilder.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderScenes.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderTags.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AnnihilationPlane.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/BuddingQuartz.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CTNHAE2PondersLang.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Cable.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Controller.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingProcessUnit.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingSystem.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/FormationPlane.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/IOPort.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/ImportExportBus.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Interface.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/MolecularAssembler.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/PatternProvider.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/QuantumNetworkBridge.java create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/StorageBus.java create mode 100644 src/main/resources/assets/ctnhenergy/ponder/annihilation_plane/common.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/annihilation_plane/filter.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/budding_quartz/budding_quart.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/cable/cable.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/cable/dense_cable.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/cable/small_cable.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/controller/controller.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/crafting_process_unit/unit.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/crafting_system/system.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/formation_plane/common.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/import_export_bus/common.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/import_export_bus/transport.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/interface/common.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/io_port/io_port.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/io_port/output.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/molecular_assembler/common.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/pattern_provider/common.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/pattern_provider/interaction.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/pattern_provider/parallel.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/quantum_network_bridge/bridge.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/storage_bus/common.nbt create mode 100644 src/main/resources/assets/ctnhenergy/ponder/storage_bus/interface.nbt diff --git a/src/generated/resources/assets/ctnhenergy/lang/en_ud.json b/src/generated/resources/assets/ctnhenergy/lang/en_ud.json index 622d7e4..a60ee29 100644 --- a/src/generated/resources/assets/ctnhenergy/lang/en_ud.json +++ b/src/generated/resources/assets/ctnhenergy/lang/en_ud.json @@ -27,6 +27,146 @@ "ctnhenergy.jade.ae_eu.dynamo_voltage": "%s :ǝbɐʇןoΛ ʇndʇnO oɯɐuʎᗡ", "ctnhenergy.jade.ae_eu.network_voltage": "%s :ɹǝı⟘ ǝbɐʇןoΛ ʞɹoʍʇǝN", "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Ὁ", "eucell.ctnhenergy.discharge_disable": " pǝןqɐsıᗡ", "eucell.ctnhenergy.discharge_enable": "pǝןqɐuƎ", diff --git a/src/generated/resources/assets/ctnhenergy/lang/en_us.json b/src/generated/resources/assets/ctnhenergy/lang/en_us.json index b7a0bc6..432a990 100644 --- a/src/generated/resources/assets/ctnhenergy/lang/en_us.json +++ b/src/generated/resources/assets/ctnhenergy/lang/en_us.json @@ -27,6 +27,146 @@ "ctnhenergy.jade.ae_eu.dynamo_voltage": "Dynamo Output Voltage: %s", "ctnhenergy.jade.ae_eu.network_voltage": "Network Voltage Tier: %s", "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", "eucell.ctnhenergy.discharge_disable": "Disabled ", "eucell.ctnhenergy.discharge_enable": "Enabled", diff --git a/src/generated/resources/assets/ctnhenergy/lang/zh_cn.json b/src/generated/resources/assets/ctnhenergy/lang/zh_cn.json index 593cdf3..2468925 100644 --- a/src/generated/resources/assets/ctnhenergy/lang/zh_cn.json +++ b/src/generated/resources/assets/ctnhenergy/lang/zh_cn.json @@ -27,6 +27,146 @@ "ctnhenergy.jade.ae_eu.dynamo_voltage": "动力卡输出电压:%s", "ctnhenergy.jade.ae_eu.network_voltage": "网络电压等级:%s", "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": "量子超算", "eucell.ctnhenergy.discharge_disable": "已禁用", "eucell.ctnhenergy.discharge_enable": "已启用", 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 3e60ba5..ef8a426 100644 --- a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ClientProxy.java +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ClientProxy.java @@ -17,7 +17,9 @@ import com.wintercogs.ae2omnicells.common.blocks.OmniCraftingUnitBlock; import com.wintercogs.ae2omnicells.common.items.OmniCraftingBlockItem; import com.wintercogs.ae2omnicells.common.me.crafting.OmniCraftingFamily; +import net.createmod.ponder.foundation.PonderIndex; 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..20ae617 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderPlugin.java @@ -0,0 +1,25 @@ +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..68f4671 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderScenes.java @@ -0,0 +1,110 @@ +//代码来源于Create Delights,原作者为SSW,已获得授权 +package tech.luckyblock.mcmod.ctnhenergy.client.ponder; + +import appeng.api.ids.AEBlockIds; +import appeng.api.ids.AEPartIds; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.*; + +import net.createmod.ponder.api.registration.PonderSceneRegistrationHelper; +import net.minecraft.resources.ResourceLocation; + +import appeng.core.definitions.AEItems; + +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..973bfc9 --- /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 tech.luckyblock.mcmod.ctnhenergy.CTNHEnergy; + +import appeng.api.ids.AEBlockIds; +import appeng.api.ids.AEPartIds; +import appeng.core.definitions.AEItems; + +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/AnnihilationPlane.java b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AnnihilationPlane.java new file mode 100644 index 0000000..d85e1a7 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AnnihilationPlane.java @@ -0,0 +1,110 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + scene.title("annihilation_plane", AnnihilationPlaneHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(2, 1, 1, 3, 1, 2), Direction.DOWN); + scene.world().showSection(util.select().position(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); + scene.world().showSection(util.select().fromTo(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); + scene.title("annihilation_plane_filter", AnnihilationPlaneFilterHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.world().showSection(util.select().fromTo(0, 1, 0, 3, 1, 2), Direction.DOWN); + scene.world().showSection(util.select().position(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); + scene.world().hideSection(util.select().fromTo(0, 1, 2, 1, 1, 2), Direction.UP); + scene.idle(20); + scene.world().showSection(util.select().fromTo(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..23e201c --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/BuddingQuartz.java @@ -0,0 +1,158 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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..cc028ca --- /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 tech.vixhentx.mcmod.ctnhlib.langprovider.Lang; +import tech.vixhentx.mcmod.ctnhlib.langprovider.annotation.CN; +import tech.vixhentx.mcmod.ctnhlib.langprovider.annotation.EN; +import tech.vixhentx.mcmod.ctnhlib.langprovider.annotation.Key; + +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..cdda4b0 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Cable.java @@ -0,0 +1,92 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + scene.title("cable", CableHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(0, 1, 0, 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); + scene.world().showSection(util.select().fromTo(0, 1, 2, 4, 1, 2), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(CableText3.translate().getContents().toString()); + scene.idle(80); + scene.world().showSection(util.select().fromTo(0, 1, 3, 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); + scene.title("small_cable", SmallCableHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().position(0, 1, 0), Direction.DOWN); + scene.world().showSection(util.select().fromTo(0, 1, 1, 4, 1, 1), Direction.DOWN); + scene.world().showSection(util.select().fromTo(4, 1, 1, 4, 1, 4), Direction.DOWN); + scene.world().showSection(util.select().fromTo(4, 1, 4, 0, 1, 4), Direction.DOWN); + scene.overlay().showText(60) + .text(SmallCableText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.world().showSection(util.select().fromTo(0, 1, 2, 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); + scene.world().showSection(util.select().position(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); + 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); + scene.world().showSection(util.select().fromTo(0, 1, 0, 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..1d6d46a --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Controller.java @@ -0,0 +1,70 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + 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); + scene.world().showSection(util.select().fromTo(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++) { + scene.world().showSection(util.select().position(index + 2, 1, 1), Direction.WEST); + scene.world().showSection(util.select().position(1, 2 + index, 1), Direction.DOWN); + scene.world().showSection(util.select().position(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); + scene.world().showSection(util.select().position(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); + scene.world().showSection(util.select().fromTo(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); + scene.world().showSection(util.select().fromTo(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..969cce4 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingProcessUnit.java @@ -0,0 +1,64 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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..dd1f09d --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/CraftingSystem.java @@ -0,0 +1,44 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + scene.title("crafting_system", CraftingSystemHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(2, 1, 1, 2, 1, 3), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(40) + .text(CraftingSystemText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.world().showSection(util.select().fromTo(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); + scene.world().showSection(util.select().fromTo(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..a1d5e7a --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/FormationPlane.java @@ -0,0 +1,76 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + scene.title("formation_plane", FormationPlaneHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(0, 1, 0, 6, 1, 6), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(FormationPlaneText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.world().showSection(util.select().position(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..44cc9dc --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/IOPort.java @@ -0,0 +1,65 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + 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); + scene.world().showSection(util.select().fromTo(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); + scene.world().showSection(util.select().fromTo(0, 1, 0, 4, 1, 3), Direction.DOWN); + scene.overlay().showText(60) + .text(IOPortText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.world().hideSection(util.select().fromTo(0, 1, 0, 4, 1, 3), Direction.UP); + scene.idle(20); + scene.rotateCameraY(90); + scene.idle(20); + scene.world().showSection(util.select().fromTo(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); + scene.title("io_port_output", IOPortOutputHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(1, 1, 4, 3, 1, 4), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(IOPortOutputText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.world().showSection(util.select().fromTo(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..80e3323 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/ImportExportBus.java @@ -0,0 +1,91 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + scene.title("import_export_bus", ImportExportBusHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().position(4, 1, 3), Direction.DOWN); + scene.world().showSection(util.select().fromTo(2, 1, 4, 4, 1, 4), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(ImportExportBusText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.world().showSection(util.select().fromTo(1, 1, 2, 2, 1, 2), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().fromTo(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); + scene.world().showSection(util.select().position(4, 2, 3), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().position(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); + scene.world().showSection(util.select().position(4, 1, 2), Direction.NORTH); + scene.idle(10); + scene.world().showSection(util.select().position(2, 2, 2), Direction.DOWN); + scene.rotateCameraY(90); + scene.idle(40); + } + + public static void transport(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + scene.title("bus_transport", BusTransportHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(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); + scene.world().showSection(util.select().fromTo(4, 1, 0, 4, 1, 3), Direction.DOWN); + scene.world().showSection(util.select().fromTo(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..8ca93cd --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/Interface.java @@ -0,0 +1,55 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + scene.title("interface_common", InterfaceCommonHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(1, 1, 1, 1, 1, 3), Direction.DOWN); + scene.world().showSection(util.select().fromTo(1, 1, 2, 3, 1, 2), Direction.DOWN); + scene.idle(20); + scene.overlay().showText(60) + .text(InterfaceCommonText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(60); + scene.world().showSection(util.select().position(3, 2, 2), Direction.DOWN); + scene.markAsFinished(); + scene.idle(20); + scene.overlay().showText(60) + .text(InterfaceCommonText2.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(70); + scene.world().hideSection(util.select().position(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); + scene.world().showSection(util.select().position(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..edb83be --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/MolecularAssembler.java @@ -0,0 +1,46 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +import net.createmod.ponder.api.scene.SceneBuilder; +import net.createmod.ponder.api.scene.SceneBuildingUtil; +import net.minecraft.core.Direction; + +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); + scene.title("molecular_assembler", MolecularAssemblerHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(0, 1, 0, 3, 1, 0), Direction.DOWN); + scene.world().showSection(util.select().fromTo(2, 1, 1, 2, 2, 2), Direction.DOWN); + scene.world().showSection(util.select().position(1, 1, 1), Direction.DOWN); + scene.overlay().showText(60) + .text(MolecularAssemblerText1.translate().getContents().toString()); + scene.idle(80); + scene.world().showSection(util.select().position(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); + scene.world().showSection(util.select().fromTo(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..5b5d8e4 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/PatternProvider.java @@ -0,0 +1,169 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + 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); + scene.world().showSection(util.select().fromTo(1, 1, 0, 1, 1, 3), Direction.DOWN); + scene.idle(10); + for (int index = 0; index < 4; index++) { + scene.world().showSection(util.select().position(0, index, 4), Direction.DOWN); + scene.idle(5); + } + scene.world().showSection(util.select().fromTo(1, 1, 4, 1, 1, 5), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().position(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); + scene.world().showSection(util.select().fromTo(2, 1, 3, 2, 1, 5), Direction.DOWN); + scene.idle(20); + scene.world().showSection(util.select().position(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++) { + scene.world().showSection(util.select().fromTo(2 + index, 1, 3, 2 + index, 1, 5), Direction.DOWN); + scene.world().showSection(util.select().position(2 + index, 3, 4), Direction.DOWN); + scene.idle(5); + } + scene.idle(10); + scene.world().showSection(util.select().fromTo(2, 1, 0, 7, 1, 1), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().fromTo(1, 1, 6, 8, 1, 6), Direction.DOWN); + scene.world().showSection(util.select().fromTo(8, 1, 0, 8, 1, 6), Direction.DOWN); + scene.idle(10); + scene.rotateCameraY(90); + scene.idle(40); + scene.rotateCameraY(90); + scene.idle(40); + scene.world().showSection(util.select().fromTo(1, 2, 5, 7, 2, 6), Direction.DOWN); + } + + public static void interaction(SceneBuilder builder, SceneBuildingUtil util) { + CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); + scene.title("pattern_provider_interaction", PatternProviderInteractionHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(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..b54f7fa --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/QuantumNetworkBridge.java @@ -0,0 +1,94 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + 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) { + scene.world().showSection(util.select().position(i, j + 1, 0), Direction.DOWN); + scene.idle(5); + } + } + } + scene.idle(10); + scene.world().showSection(util.select().position(1, 2, 0), Direction.SOUTH); + scene.idle(20); + scene.idle(30); + scene.rotateCameraY(180); + scene.idle(30); + scene.world().showSection(util.select().fromTo(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) { + scene.world().showSection(util.select().position(i + 6, j + 1, 8), Direction.DOWN); + scene.idle(5); + } + } + } + scene.world().showSection(util.select().position(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); + scene.world().showSection(util.select().fromTo(4, 1, 5, 7, 1, 7), Direction.DOWN); + scene.idle(20); + scene.world().showSection(util.select().position(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..3e0eb39 --- /dev/null +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/StorageBus.java @@ -0,0 +1,91 @@ +package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; + +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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); + scene.title("storage_bus", StorageBusHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(1, 1, 1, 1, 1, 3), Direction.DOWN); + scene.overlay().showText(60) + .text(StorageBusText1.translate().getContents().toString()) + .attachKeyFrame(); + scene.idle(80); + scene.world().showSection(util.select().fromTo(2, 1, 2, 4, 1, 2), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().fromTo(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); + scene.title("storage_bus_interface", StorageBusInterfaceHeader.translate().getContents().toString()); + scene.showBasePlate(); + scene.idle(20); + scene.world().showSection(util.select().fromTo(1, 1, 1, 1, 1, 3), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().fromTo(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); + scene.world().showSection(util.select().fromTo(2, 1, 2, 3, 1, 2), Direction.DOWN); + scene.idle(10); + scene.world().showSection(util.select().position(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); + scene.world().showSection(util.select().position(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/resources/assets/ctnhenergy/ponder/annihilation_plane/common.nbt b/src/main/resources/assets/ctnhenergy/ponder/annihilation_plane/common.nbt new file mode 100644 index 0000000000000000000000000000000000000000..64ee6a22e8d724190fb95bf61ac1fbadac26b03e GIT binary patch literal 1234 zcmb2|=3oGW|66CCFS>0eaBTXI#U5UBCg0xmcBB4;UB0(|MJ%5?@0JhW+lkD<8(Ium zH!-BRRyN=Jb%IrMUCwEt4Zdo#CbCYJpLU;rcSPR`%>yhg=I>3}8{XM=`aZZ^~6)w@>a{W1CX`8`X;?TR^DstYIBtys`5*=};w*0<2*Fh`+*P+Z&n4-j|{Dj+dWz9mhsrpxzd}^H)vM*rrsq1>{S$wtPS9m@} zl2hgQ>4YiBi6QvpTlmK3Gi6`cACfGDpaJg zobP$iF8IfwN#5_n=49oJpm~-Djnyl}Sk5;+kTmUC;91DYG+m**M;3+k+>ly?EMfXkgsDeu~}x7ytBYGv>^Cz3EbE?7aOo zrNIq*a>C3+3gZHb1;2{s#LxG2xbwpI|APLb4);S8emmS=5MTD#YxjmvPw#6#J@k81 z(d>-nZO0$2-~F+4?X|7n_U(x}n|AD6d*%n8mMAvaO%t^ zpWPDnj~=kg{Ap=^U-&_mFYe)kRQvsc?AC(iQeU zNEYm;SytOIl&c=P!P0|JBVI z*T3;wmT`Ys_>bZ5+%Kui)@8|_K32|swRib}XWt5~ENoVbor;S69Y2MC?o+0DTh2!9 z?ua??dFe;HuzOF#SiXO$f4R1f$$zz)+{&iRHS*tGHLu;Q_ zzIT10`qtm8)yl2EMugUWS!DZOeC@`Arlo7|a`^S~-ii#3UpMEn*`AlvSU!~gczLw; z{9^z2Ki7PJvxRG;*y)N>XU%Kx%2x&y-oH25MbYc_jtv$;1}9%h^wi#y>~=qM=*p_q zU7Oa1_WZl}qP9GF^*7;)-wk`6?`o`{z4dL_w~ua`4rg{v{-59dVEUQ%=oF#5E27#L z?7n@zg6C2B)++_udiHKBdSw-}MttM`V;9V>`Ml`Z-gVi!b^F;}Z|c|Fn(KS7J)opW z+(}YAJmc4~qb9rFnQvI}aqY%{BX0J)!b0cRh1|&d73+R?{;v|*k1==8Jm2{4>DE=gTfAIPP9@*|%7&1`ch%2v&NjOzB6sQC*2cRZA4luvEx4|=!hY*# h!_^Gx{|hW?SNrS@la9Bu5S{!@KIz1#wdOJm3;>)%bUOe5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2daa1d437107ea5b824f980146367e026b4ba85d GIT binary patch literal 1411 zcmYj~dpHvc7{*zPt=t-tlWl1SC-=+AWiFYXFqd^2jg?uM@~9qG8FGz8wK|+eXj8G# znOoW9va-!x$u*>g{@Nm%bg}eQuL9~wynl~FmyXb-Z=J=7Gpq_U)eiWQl`*;H7b_U z?VK9`7*(EDtZmH+QTQVnDSIuAQRjI*Y|?(>mbiH5Y%uPVqo_SuE>Wc8hV~zVs-#i+ z+0kt-KAaSEgpieHe^nzxbK;UKBQ&#;ZiyZbhS4AsmTr2OO9;SeY$_3^Ip0ZgOFHM% zVUY>`G-ahP!0{oL`T{4z$=vp|)%m=vuNA81|KCq#1JKXdI?yr{z-e|EeU^M3D*0E* z$4zJnNY}L7c^(a7I2*P&=#w!Zh9*FqEp#xLLxU5r0J!@&x8GfuW^V%sb02>SW;mqS z7?IxqyBR{fhW%zh7;4-U#Mqc(Q@vYj795_&ZD#>}$|G4@2r$jr?N&e1%!&X;1$g!5 zK%$C)-MdoGdW}B?F?3TFW|F=D9<5PUspgp8Rxr;VrDHTb0VFW)cxyy~Q_WGm1|S{~ zmAhjau;wdliGxz7=ko&Zk=6~Ab;I}kVIb`KCi^n$-rEY|ZA0lGrbE8YQZ=Jae|LSE zg#Zbu-&|Dz0q{JR7+Gy^ZlcCTKbkVZld7M97;H9@uH{p5{zBwTm6~!hGGPL5SBAfh z1i}zcUP8EJOr0LsAjg>9R7Iwz@Hy^hND@a8i0g3hMy(0tds{l^Nm$GiuC6EI3cr!%46 z$G0RxQ4*S3GkB_saoI0kfIH5@Olmba8yj{kVpWX>>l3lQIk;w(f?o{Ca}TTc=k#09 zX?d@wy5gi==_PgkDm*_w|B}C(oA}Va(6D`THD0YlkM{ z$#(bVeBNF05=EFP$sX}L4nog7o-v8+TQT);*yemPRwAN}cHIoDkkCtKn6zjC`cQEJ z`w2E*O>gVVUCd+WtZm%Gmr5~U8EMU>)ll4hSDY|Fw)H}mx2jm=_Z6{Mw%7b>`*swp z6+$|!v#i4{E8AzwPT#cLlN|qH{!|w9_O0kb#Dbn^+hUJWdk@DhtcR%1BfqkEL@jD* zX%t@&1mA|spFI&sT)oem zU)dp|4DPk%_;<6HRoTxs%H1$pdKD*0E^W%l^r2x^P(|!z`yfPlQ z98-5vZq5v3f#DR$9k!0N^QV`7q$rE)TD4xe)eOFKiouB^-$}HZM4ZnRj+FZBlkm!l okRW;wieCO=A!HKd*~*Rd7x(xh{6TTW`81g4b~zaev_35ME!lhOTJ%q$Y0=TqdD?+&-!^4k>FLdX5WPO!CalOu z!S#Xk4@Cpv1+F@Gk1{p<Xej`kRfFE)&aADw(_ z`0ME9Ken9vXVWhINw+_gOtkrX VV`WJte@)y+{zS*BH4|7E7yy7PaQ*-Q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..aa7053e308c3d38677b4a44e38cc9e17780c827b GIT binary patch literal 933 zcmV;W16uqaiwFP!00000|LvOHZqq;zg=c?K@56}ay)o;lFAbWP~lV`6z=*rkA zqojuH(Swt5lmyqhZ-1EdfGra3KD2r;=x8I1y!%9*hLkj9hlV2RFhm{hsY7Z!Z`W}e zf~Z3gbr_-!_tc>X&Q9aw>@+^kPUGY3G(OI&@558aX?&cW#>d%de4L%e$C)EIJB^RC z)A%?$jgPa__&DcYwluWn9Ba~0goYtB9HD``^#GwE2n|JO7(&y;u*tL2_&gJYXM*rd z5S}T*Gevl&2+tJZnIb$hglC5E%n+U#!ZSm7<_OOm;h7^mbA)G(@C@!1p=s(t*5KJ` zntG5mcqRzXPSezbO`ZwDGeLN!2+tJZnIb$>glCHI%n+U#!ZSm7W(dy=;h7^mbA)G( z@XQgOd9CL@uy|}33}!-K$%!^eobTwv$*s~iBC?9!$0QBqrC8XJ`%KLjX>uzk^JJ_q zl7)=rWHgOLNMQI$=yy`aU-FH%NEfJ@z);Ay7l9Z@ax}iN6*~F*KF}~`Ko)tQtyW_& z3}zyZWu(6)H)dAwd+xS<5ZXX~o1M2D{QKV+e=ZP2^UTxOaw&R6UH4D6BG zMe2dNU(Wu6$g2RwH8S5$!F#hlvNYV2>+0&V185PGD4<6bl&H?9yQmcjilWwLXhVjU zW*j{isj0{5{&dwQ=>7@%Z=~D&Y{<{jn2EsIrsvlDiD1@dXG3Ml!d zhVGxC`w?%mv>{8+tFtHqYn!PncAFC^g58tL)`x(%(bk2p*V{vphn@Ss=aUQ2NABkb z!g|mt`8WvaW+ax_l?O`%yMvCx`?oHs0xD0D2tb>8*Rzg9B#n{TEl<1){Ii%#IGroI zYAUAYLdVH+l;0HvZtvN8ue(&mK`L!Yrx>mkLZuc!|7&V#rrDiVT^KCw@@bTWp#{;I zibzYlF;d~oj3Rk!S&%pDQX7D+<-vPl#CMr$%LHKfhr#KUP|;HS(xZ)C_N4j?&cY>t H{3QSYC)(Q1 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a87ab67afc27aa123f8fd892e0bfdd6e4545fb81 GIT binary patch literal 2017 zcmaJ>3s6(n7PU{Sh!A)p6(x~DKn$%U;S;2Q>Bu)N7{r31N)ikSSb`BEAOx^}NT3M9 z1B8?kwDQW6@Vmq+5RpRof081V5<$KKmGBWFH%i33OYFQ+%e*^l=AM1l*=y~+&&)AN z)7qf<)N_R=2txrolCLpY7xj@=>3iLCR}4xY*fWuMl;4-P+`cvOD7g&r7Y>e=TFQqFVNR`hrjdxM6FHn_xP`Heq_D_8JL+)aK zc0nI(?-Do69H3r`r5f~f?bfSHNb~k{I88XtL{~=oXl^J~6kKZBJfnX@V zdL{ajJxnD3ZtD*DmG7hXwtNnpDs%%RUjPzcK;lKTJULM%f*B#Xlw$a$tSBvyPSbaT zF&Zg3`d2T!;_mUU#`dYr9k z4UR>8X!$>Xaqn*KlmAoO2?qps4B>r)a`(YpWN6|yZL*TuHp1um`Ddz8k7)pgTR!Lg_W)&Qi7qXw-AGWEiHrT>{{0txG+kl+D zTh-TblrQ;*Q1R6_>ad7KwyFiZ5{$K%9#gFrh^xa&ZKM(QXi;GAK&h9a-rZmJ(<>rh z);T&CVc1E6PxS16vi zv!6k_V7;>kZ~`MJ9K~d!?6iLVv}IsWXbXes&I{KYKnWggY^4w4t!9I>bKUD7>sh$7 z?QReHA3qMp$I(1r?N!;_COjr^wEnf#T3p zTw{IJET$P2zYja~-M|<%1#u_>2udAGwBQ{6_sRn35kBieNlSXvDPTMfDTx_}`3n^t zH+vNJ>X-cox>M0Z{y%t3#RXZ5LITPeyv0E&dqFv}TBlY(6Qb3I&t^|0obh=9in#^0 z+q_Rog-t@OpWM(|4;CFo<2rE(>#c zLqNTHaLG`fsV`sIEpZBuC6H-E^@Qg)GYh*jaEZJ0*{<{Y^L7KYxp5^Y7-Y-Zh3-7*# zyge^ZTwjIXaT*O{sVrXqytRQmGkrBzWpP!ukQeVve?V@^UroAQMD3r;L(|sC9DkLC zj)n}mOK!?sBXQ>++RZjQ%#x%;SrvvpQpI+r4{H`GM|zOBH78L#59R3^yMnr+Hdnf4 zp~9=(4j(IC?7EzomGtn|*C5TiPdQnF^C6{Se8_1do_>~UFOpn~NUXoTP5Jc68wBq1t;&iFJ|Z-|utwli zR(4{0v&1lqo-0z6U(4+y9#CUPwWdvS+~?8CeC)Q4p6qi;KEAQ(bGG-~a`S||!XKXQ z?+L&6TMWM^qX2(~P}n{y5_HvK3I(bfh1z#S9fBK*woxW7Sw}p?G5k>thTRfemTWbL a{wgq@L^uPFGS0p5(U(YiBRO)zhW`Tcz|c4V literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f64a3d9d335a230d551d553df9ea3b33a3e6c03d GIT binary patch literal 1014 zcmb2|=3oGW|8HmA&b#d<(3Z|0q_Xo>Xx9(JOEOg-Qs;{7^y+5u(C-x8x=3uPN8|2k zYxX(bxAMNUc=F4qH#Rb=FJy4k{`CCA<^9H+mn;!HAh5*reo_!YCaL$xsy zN-)NA&e|p=qI+gV=4!`_ht6<-7zfSL+!E4Q()<#h!3i;zG{*!O;h8XvB@Im6JYmB$ z(f1BV)oG>ucQ_JGYkhRT5HDH1Fvwo&-%RmNyKwLNr8QY%aXT(ucD37>{xc}OO6qLT zR0E0q!Qc4TZr;DD*X|g@j+uv6UeZ7J$Vodr%<9wbt`y;;R=(1w-d4;M3$I}Edv>bs zLh$QPYaZ>h-&c5ax!TG;HE}zq^-}!}>NiWxS$ZDtJY_WZR{zh|+1K~jKiIbY)UIE} zHj&S=V_#?{e|UT-B74)5Jz@vrdcIc%9+x=eIp??UM&rsf_O0BJTeqjL7WRxiwr=A5 zsV6pnITYiz@&B5CCV{MXOVSVaZSu}bkC~D4)P7xI)km3iZ2AQsjQQ#gA6#$oLzaDg z!3QDs{SO|LzP#zHd33@2^p%?GpS;!cBdiQ{YtlF+bhsyrAIn`(w&i5!U#VBM*Ztm< zcl~>;y}4aOvrlzvytn<^EKSd;TOWE&;+^`XBW8F1vn^NuFV3z_&fk^g^*X4y+WO&_q`qt2)k|A5 z#Mv^^gU|okC&X=SVe{@t)r5Dx-e#3G?KQ{e++H^|_FQT1-xHnd*51E-R72|5)!3f8 zpHtQCa{{)1=B?k8ljV1RN`CpDu#)pZQQO^}E7LP(FWi1M@Z${KT8ZC364Up1E6J4| zS$I5TWtrdf|6Wx_3_s&^O>AO+Jk{5`a%S#Lop|@F^3xf<&wKZ6-Saxjua~DDZT+Sg zXn0R^ie?%6y&t#FaJbcr*9mofdLP7W5m|je>Fneqzwggpc_nMVq3Ovxt}Ejzxo>{H zdy?2ctzRdz8vKhtaGC$q YlI*P;FCNsh@1DxA zXp=TByHJ*(28bz^iXx_w;W1~J0l`fi$XXs=MqT27?HGa`Y>dGM{I++_CD8c#?*A2C zA^Y6V?{|KW@9*3zlaM{T&_BOYt*DqSt^Y;go1S=T?e!las`Z#Ze%7P9^Zd?<9P``n z_5b>KU(_3sCypHYar;E{dfMR9$ZWw`@~w1g_B=&vyT#mX3fYr3Ay*_37}o_FM|mIR z-0h1=zPh&(!V$M}21Swq^oV(&H z)kQcr8n=49Q~@=dSJXWtdH9<_RicGE7kcrI~j;#&!6Px2p z)(1a|%GhjsRNNeOH?b&-2d-Ko{2zR6g7q83iGLLaUAm$*Gs_WL@+>*)Q|5OBDaH?o zl*Ti09iJCA{`{9=#lgkUpUB&;$s;%Z0$jYam<%^p#|vgdQPZ+wV7Gr97`+9I z#~lH*Oi2e$Yd3G6k(QyeFKxwF9zUlAJ|hOYL0Ft~yT z@^C;6;{qBijCA-a%wQkP-~uH-8?NufY$bx2ML~7QKaEm>0c?B_T(G%QIG`C1#PjII z0f%L2Oi&mNP>YMb8+6667Z!)i9O!`SXt16KprUavdJx#O$EA`N?Q;zNFm^jJW(L}_ zz#fx{Xq$Js0F}Tzh6A$jKpGAhp%X`Hki(;&3!nfdj7Kf%ADYMng38z(Qlb2df{l6W+GOcQOdvYdPc0O9P}c*<5Jpb}=ljvk zfRE@I33RbtcQou4Jij+_{6f`ZJ2!xrJ5+rT2vv_Q5>!1FtmAWcfz@TgQ_vUhD^NPL z_h2R=TL&f9M;x9^j^Z?R1`kZd0i}2#83(lEfUCax*J1b%VYi@p@uJ6NXCBYNPeH=~!e-A1q9r|vAopU;T>%bmoWjM!KFMPCMLHMx3o_pxS z3Jb!A6&6GvR#?!x@dH%v=;Xcu8{yl7=5tS1h2x_WzN28rS&4H(<X? zs_{TPk8V>jT5?qN&2V76DQG@dzXj)}w^&e$D3#r;Qe<*mXrgf>XAd(H3(U*b)fvB4 z+2d}*<|~sjSCmbbB+8xici}XM0q=H;amZg66XL$)RTprIoB)82DnR;?=xmT|8JY~;q^dthE z=C#({*DEcG@VKO2o~OJwoRseNc#K9S+if>USx8Q*r9eZwy%5j(XPtF))NCGAB3e)A zSx&QGDi=AXN4vT{>yb-_5L3@=jz2?Rnq6a6DzpRe1N6o$}81}Ndnlg?6>Y~=2s&$ZOuI-}spo`22YvP?4~#$0sQ zhRf*KtFJr%V8QZ{4G~&a94*?Kk7N0ls{g>OW>r$MY*J!{Se)1#5^dqxC&%SQHhGHX z-zlsypK4>Vm64y}T^OS32{c=qh)+N^6SD%q`P2k31k(Gsi0wF%8Kh*ivK7#mu|) zDqGKT^TIT0Yw;|lKt;nwUGYFsp%iofQ0=tUf8Mscyl}ok zR^I8wR4I~f=nxCGEIiZHWU(R0iis3?FH_=07r59!T(H;btLAmk^bC%cFbpdM1;G3s zRG+!@a;5nBjtH;V5A<_jt4<4(CbEiZj1j$n1vjyr7s#2wyT9it zNj%bo2Dr-*nuCJxBBQ<4I_q>&Fi3eiHonlyTIsuvGHC*?x3Cbc_H7ej0n;$nZ@65Y zujYNUfQRU@9dtVK%cuUcBn<4!WO7W$XNvz>K+lq_y86^*Dd5)@Kt4}HF2LK!D&U_& z(MEEcwR4|zlqs6nz>%0AQpxDt187!2@chMB;o*3AxQJDPvPbol|vWK{a z(u_ebXn>bAGI%OsqK;3DsMJX*?sf1-T&)b=rXTO2J#L=#Q7COm6Tt1_l}Q(skF2Op z07IOABcnY`-GJGJhv(Et(l~g3cOF+HD>8uOCjA6@^?!6%ZaE>xiWQyVuT-nih?+YA-LX1IVTDz6=z+ z8wIbrZ>HXPr?H3J52&>IZ^=~;tA;f9unQ{lYSo1a{-Glv1neBGXzM^koZYQoYqUhNT!{U zbcIh~A{T&lSO8#EkU2niy;{O9e5MEU_n^(^z}R*x#e8E(IDV_pac2NCQyq(M2)nja z^9St2FjJct*F3t8J5_uUvcABhl)H>k=Ys3!l`N8~@`3mlhCv$8>4aUDNJE}_X+jN_cQzQEble6I*rYpGAV*>4I!}0R^Q#V z>mPsiSKPP_Xw$Q@XhtcR5OdscIn$Xt^2ori*greu?BJ~}`i6@GmPJm^Z3Ka-%`whm*^?2qslj;re)MfUoAa|%I&wiZN92<66}Ajo2=?Z9Y(&W;O1`I`~Et;-9`HiaU}Sm&Ps~nF@J9ry>I#l?KsEWvi4>H}{XUc+;^vZ8xq(()tku)2 zNp0nSzx54kw&PB9hKQ^4W|y+|ygj6H6%U$t96Wq>uC>>4ZK`YJY3;R4yelGjLL^uG z(35~`*jld)L-Vl2vSt z_*^$RDv8#q}mfrm4Wv8E)*;zee@tuC&@$%E+3nf2g zOk(Z0n~-_zKuO-ya>mw+1Z8J+2&iW$HMI$w#M<;6ILuLK0W`O#Tlm;fPManHcY#L- z(*D$bK38>2)TC#@%Ot*8`($1xL&!dkGlGpX1!qXY3CqTr!ZV;mq`(Z;Mi`;^N64hs z^hEWH=4I>ID*20D5`acXy-6n82$>W)#_Q!*IoOt(%7@D=+T{6%!zE3}&2Ua?*u8Ks z|Dfr9b8A8Yj)~nfqX>&fm*tXU_WBz%$L>;lTjtC4uEv!zeyVXXdFw+Zwbf@hEc$ZD-br$IRQQvJ)f;2~SDc^m zVCKwzg-!qMl_N$ypTbert8%51rXw zYd02LzZ7a(#G>!D*`<4D{=PYy&;LlQzovBK;{V3%S|;_GAKf>3Nxprg_W$T6JIxJz zJD2_1v}~9DvscNpem?y1BD3#S;;jp^Rgdn>k1NcnntyKB=C4~8t+~P!Tz|?hEVIqE z@X4~e?G9|``@e5GXuNCFGK~v-4?|vZt(|uC>Yb?g^Y33(Hh-`@vnTuIhSX*t72c+>=9Q{BaQLOh2_K@$&0Gmp{FXPrtbOR{u;*gW2MjmR+)( zQ>pxB;`94=e^01LcHx;0X++5T^l?%c`rX}l>3S0(9O+nZ$7ub<%o$S90&>ds)%@Bl@G; z9YV_b40+!7&TZYF+oS*LVeFo|&6D3gEX&Zpck&Ydaj`U`kB)5LHx<~u@LZ^NSxdLz zVQ>Gr?HT-O#n#IfOMkg{)a+UAH?jMBqo#5+xAVPyyZpCdi}uuS0behqK6AgeZuaYU zxBo7?y=&Xyi%V12|2|#xZdvBKH&)vlyzLK^UE-g*?WuGwLRY!Xm4F# zqbh6CFIVDrs^@>n-wzMp%U!s&qvFy#$3|=YJ$L36dIi79>@t>WTH!2MDzS*q|B9wx z!Q9ItojVt`DZC1Bk!@RXSh$o!Y5fY%r=q4S_bgJI8h&NTr>)&xglGimu!s)Q^ET)I*SzIk@Pj@<0=n2f@JY?)x zp~i8Z<>5>Po8Xr8t`E+FbsC5Goqu%B3gKVereLC}*Y+TZL$B|_BV^*ny3Kd?IU2&`!C5bJh*5rSM?6vNuot+0awnNZrHamd)UVj0JIk%u!CZQOnH)}JmkWD$2R z021y6g~-H_@D{c0*DvyfUwQJ)YSu%bEpgKyBa>PJF)RmNkqME5u7WWLg6H5-ffxiK zbMUBO42+RC3PQ25vdA+rtF?EZ8{Bqm($B%EDr^)l|(B0FWpWU|a zt+Tv5eQl;;&?XsOXV!cB-ZRg9c|O|Z;p&eu8M;%ewddr|5h(~Xk0=Tf`H&T88UFHS zfpU}WU-_cN?++?$@i@J4eNWllvWFW&izl31_T<>r?Y*m4Muqi1wRq6-D)sg2E4)V@ zulwk7eTUh#^ScdJOqF1N^o-45!tLF9UzVRn}UzrC81QZO_~7{d;EW z&Aujbpl-GOtl;tk{q=ieSkAiYPWcjNR&P(j9tnzTliXBy9 z7P(=!eYNFm-yF>Q@h3c0{+E2tf$eAQ6Ysv*ki3Pf_0Y?@SnmhzlVxf*%U+jQvEDk)47g_htb!k}A+f&WXiVytn M{(W&YM}~m`02yL8h5!Hn literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..af8a60cbc35603aa35d170df5a4bbf20c16d86a0 GIT binary patch literal 1322 zcmV+_1=ac=iwFP!00000|LvLIP9rxI#?OqMkc0)cDr)KVzChJWuF8hcA|Y5ow%ffL zITI%ttuvF_9zuA7zIE-HIDa7V973zAt42b=%$MWe`Hqk6Nm>9+pelLf1OV($&HPaN zy9o`R>O?18fqgZh-V<5;MYYU7{U(q}rretrF9J2Cndb9%Y|;cPnqZ42M8qM8IMfp- z*ueZWj?)B)I3XeqLBye+I3dDkr}6phG(Ml5#^)?-9tp(Lqy%Hn4QMQ93Yqj1ap934iU^Df;mL+ga{sj;2{W} z#drvfkC`BtDT0|Im??spB6z_4Mrf*fhg9%5O;zuZ3g!U8>@-!qQ^g!0m;(fJh+qy8 z%prm~L@sHgK4pmvpw`avRND}m4XwI)k;x%%vx#{wIZ4J7ncegL zIP0m?Y{FCCj|PGb1337VsrQ_xH^s#Q>rFY%*|>-Z@bi4cSaL&pI>^(MivZ}yNjKYc zpntkClX+r0G6nWPSG&}FTt07=G)K$);}KVS3&(1q=)&Or5mUFkuXL6c&bOeJW>SwD z&>G~AkF#i;^*OXIf4RQ7?L=o+SLQ}BR+Ob;2I2Kh3&LSaAehXTrbfyi^qt7`yj1sz z%9$}~Z<0;9G)V+-I8KyG(qVhVtbsO>BW2k8xiDADA@|NZ7iS-@x@C@sjQ@1XA0`GZ z>gB2d-^w|36lbZHnGmLA^%B!OhMJ3mWN05l0~6p~3^f}dp%A=-`Kt{4gS{SesdE+m zku#|uqgc+2Phtgr*EtlpQ4WexSWj?EZ#*vkUUzOW8Zq;$G)CQJxgOahy!JI=-{foN zfKIa1cw_5bQ^i}$;lH=T_XLZ-7`N_il&ApM^nCgBOj`3yl~>vWJKFQc+0$W4SGu!e z=e3>L_6^S+3+MA5D7Qg(^NnusZFg^8-s9gdUK?2;)H?OaNp>JK(`SGO(9tG%-K&oiGC z%y!#O?s;Tx$>A)Dxe!|(%UAIlU&C?4eNGVm%f}JNu{vj)uQ`s?SsZhvpmp0hJC8oy zUUoYTI5ZI?8}evSI0kP!zjtrX+TFAFSDonQ`s(v~FE`+uQfN*!kvYCd7Hc4%J9jTy z^p5Nta|4@o!<>aCGRb73XMgi-e$o0=u{$ny(@(tIO*bu1bjsIv#ev9^2mk8iD!pk} z{7<)%`{-r0m0DjzV(#-0vX)rW%pWGW*4*yT`wgJiY|PovN*1!+aBq!~+Ne$San&G9$hC`EAZNP-$jm11(T&NFNY$o$^k(l?cy+*an zm!o|*&!44zt}IV!1Zvo)qfkAYaG-(@^dkPVRSy$*UnIkkjs(9qB*BkMYu4KP6^u1$ z2S7v4i(WU6c1E}evR>IIyZ^G{TX)#q`RjJ668v>8Z=E$^K3ShKrJ!=om~HBuY4#hJ g%B+w82Y(VczGaD+vYCq3Zkcxa3%`1$06-l80NQq!tN;K2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f789c75c86004b513bc0aaaab22b045fbbd94ebb GIT binary patch literal 1220 zcmV;#1Uvg5iwFP!00000|LvLIZre5##*akWv7IGpv7+nUfb9i_T@AUan>bs5ASqmT zU9SX2rfp%eD3Ej<=MDC}Gy9o`M*vLlGKz1~tei^IqZ_~nm`b}V|GVZ3^gF($$VdeaebsBF;<89FRggA^4 zhnK|h)-d0V<1`*2j!%fg2yu8x9G~E`)0Fw_G-W=nlhiArp#xj zDf8KB%6#SopPi=6XQwIi*=fprcA7GubCx^I{sxUt(6ADXM~LGSc>FEml<_b^9PYRY z8cG~q;h|6H3%`QLX{!3mukgod%9uR@k4NC~2yOWUe|!RuPvCKyGJkvmGb1oF0y85p zGXgUsFmnPkCoppYGbb=}0yDU8f~IQhunK0UsTw=1g4rW5J5AO2s$%vC%pQT+Coua2 zW}m?96PSGhGb1oF0y85pGXgUsFmnPkCoppYGbb?fwahJG$)#;UE!FCJ#=uK6zoomx3A9@Pr2gK?C|P>X>*3`f$~4STrdy5w^X2D>9+y0UMqO7a3hXA`CEr~$3P z-6{Yi*6@qpPjY9A0}14@1$xfwd{Ky?2jX3qGWh95=kOs2fd$}iFspN z!R5p>;Cnr%2tt)ut>PH-trzVsLf^L&J=gAD-ihKemRYlyZT>eQDF)w#MGB@P&}8(g zG|wgdCt2v5u#352U)e|{m~u8A`82!8Wfrm^{2?P8#FOY6ow&-P2RY-q=g7O`qxKc+ zi#<+#HJ~oS5Qi+Zx}ElM@Tq&+>oi~=BWN*{!61sQ)bOJ7SFhVX>b2jUb%KlYv(KBm zumLZNn*x;t^4e+jwF=gWEW`t_JTvQn#Nb-FSGUW%zlTymyH{ydJ%IJ#JTtw=?4Zq!J%(!EWVk zVcEnp@Xs$ccL5edf|d0lR(7QpstW7CU>^NRjAx7HcaA$J?T=@@rM;xQ{&x0~U%LX= zug5QXS|ny5^^sC>Urm#FAD!g0!aU_gX^BXCP&-nS#AYF^7(V0?3$rfTX^-=W0B`3l zhFT)&;b4+kf_Z;TdurW#^ShI4{V65Jo?2q=?eTJt?L4K#*h*qe9PuKS*2?Tx)kXvO zxfn}$waCFFY8vD}yn?&>W^r{oiflfcAp(YUid7FV=hl0T$?5FJ+y?AUv3VV<;Slqx z4Mc1tZW{(7#M$O{{wM-fzT4O)v|BK^ouv}$+2j^4n7>$^D4}=bXgIP#EU$2e^nO_w zurdXcLb<8;OGmQZC9Y=ky-$A1>dAuq^}PQ@(w8RdkD?GB)~Y{ASKBNEm5t&`eJrf_ iQ)+{Y0>Ius3|@6b6i>y>1S^-Y9{&RzYhzXbAOHaJs#hNX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4a3b611582bc69ad88c6b17935e138830e5d7fd9 GIT binary patch literal 1167 zcmb2|=3oGW|7U01%~LiNIo@wSNiBGn)1oG>xFpRto4$1AZD(C_wJcOuzFgV7FeqF7 z+ljJC%kmG{<{xBze^B`Y-yR0>2HVcbYAVL=yVtm^((-%u{_*_(&wr>)=2^gfXQlN? z28Dmy583yhkA30sc53(~$C{FbwXrkqWlwJv|Ess*(hif%p9vR=;wpB|*y!v0F7pH* zuj`S-4vRf%d^Zp6kyOv*P~w9Lxc-=9QfjB}JNLY2@bltJSAOm}e%>Q-OgGH9|MG*&l^y;`9gc=!wKYBJ znIBxGYG$&{Uw$w>^MeJiTEQ|s8eJ3DG~&(&OB zGI`3EyqGol&W=Veri4kZPP#Go=id4?QQd!xZtNF)=k<+w-MVv^>cgk7hX!`Nc6xR_ zS-iLFG0%&D|JI^B_g>%SSeyFrTzEfFb35;lxxZ`m!&`P+^p@|k3iz}B z{(1lUzfTwa_<5Ya?)T&K`@PxT@89IKyKzhUF_Bv1tKGeEE0pG(Y&BmTP-?5q_RmFQ zwwGL(>i=ce*yEqQp3}FggCSlwY|XCeHj+JyGg*F=Kh@s+RCv7-q?I-cmUM1)A>Rj_bZ>KJr zaPRbw?!;@1|D1YMWY&Fquw~}6tNmRQ*2%41=a=vFnftgidy9aP<~7?0-#b5V&T#y8 zsqO9UAHmNy{nxF^oAE9^HKYBtgtUC>Y{MPeQ`v;1O0B23WN@55Y&(BnR@ZFf@5>Vl zqh~xc_;F9F;}C1hUnk!Dnz$35FEpP#%vznjms?cJboEnd&J9a@znU);dAfGHQps|T zw{I&_-?Vp!aNnJ-7iE9`r`6d{5_@EMWv9Q^D0Wo#{;{M&ZO@OmDDhj`2M+r4@U3sr YT9)+e(^l_=O8*(#o>Uj#6JuZi085}XU;qFB literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..14951b3e06e3a30fd8e1e2a4a7fa76dc221aa78b GIT binary patch literal 2354 zcmaKqdpy(oAIF_jqDJf2aapQ4opd@U!!+bFoRbnimm!@f8$xcm#T;hiw0@CGFU$ zrUC2_%D}#{&HEWrd)t)+0s}>(fZ|b zaEOKmO&ipPkI(_J@zd_mX8CX2pg6$yDxkKLoBfGiTFOstH1L@Q+YbjSTKDWpD?0?T zwd%jbs$mu)Q%#!GBBOOC-@A9VQAip7`kL%Z7UqB#)P-Z9_G&M!T6`vb=3=Kw9VyaF zf2!pY>l(B0sSQdQ^16@ecAj?$iAzN<>&OyyQ2U~n7W;Z89BADGZRq~w^LGHJN@iRP zAkj~b7@+vKC~*5I-a7;$d__w1a@*mhf%o3`TcF@Vz@O|;NH$dYX`THugYB)ycXBtK z_*db8Ppc71Wqs+FG*%#g-S|%uZUd&r1%-%@e|EM+ zzbmrGzi&QvdvRHYRIoW=Q}hlf*-|fg#!yr0cmw8aj{Be3{d>1elzI5THrGh&lC5FH z?QYy!51)45yw;U_d{M_o-C1G1Ld3*gIowxa){FUV+U~Bi5dcWa; zAN0&23PHjO$eo#yfM1k)pRC3Z{3|fn!h>ph^?8oVF~+v!%F^g{RaMKNqUMK;$}09V zX@9vzF)u~q*a>j8CAh5;Ji#f$>YMhQ9>@ab-#HP(3kS1w@{;20Cix@7@Ir@4e&cGX zSb2&+oE7_+>I+5*;aHfcA`)Rjp^g6}Ul9?p_efAAfbEag>#?MRCQOfwpEWl?OmG+Z zHb>i2rjeteQsxr85vQW6fbqz2zc3%Stsxw3W0GYG#`z399Q7c2$vZTY2Z9Vb2n-(K1MRWKDsblAkEk| z;m9rDRk9Ykdp9NOzGZH#!LeL%#Jto6d}i5yAdl5$7|~la{`iNnC|aCKd8H$vzuZM` zn`SXdHHiXei5|ll`yL)lYd9Nx@Zk5$#*^gN8MQTmCixZ7){Dt%^OS7S{T@#b7GV(V zH_5r5Mrj}=JeW~OPh(dZuC0iy>{V{K?_>x~Nw~9Nqr|@BuUxy*pAA5GlhsqNCC{1^vnE;@xsgoGvOT7<{8O2Vm)8~21 z74EM2+Bv_tFnx*`H@UWj8X>|f-to}c%SQvJNn^+J^O;kaoC%+^(u_<|wL5dsk>|O~ zVW1>WgZ>D#pa75gO@Y1e_D3+h?fRMAPD6T`rY-}m$;03kGK9`GJM<7Z;;GX+xeU*n ze9$-hwcj}(Ssh+^atAd(&nrxR6zp8j@AP0gNliTMTRf-@ofIwoOkEPA`(z``#5Sv! z-Z=^TAYPZwwYI4em#!8I0mP-+x>qqb)g91Bl7R7n9-XOnltBJ<2f&?>3#(DwXHx}g z7K057{ChVLMmkt}G=G`cB|!UKzYqC3(%hQ>!IhYZbdE{Q6;6#IDa}e02FQJ zLxp_`rL;BY~9O@>e%Ufs+k={hbd5dSpnI_qSYxIe=a8_7tmDxDqe}{g9n&L~h|Gmh zOJMJa@k2*9vaeW+jlR%aoqkhg-Gjj?lY}PN8NX<%L=c--1s!J-TEr`4vg>=R+jjq9 zV_4J!x8?hRFEO{a)vtYfb~(yWfYnK8igz=59au7y(RufASZp}vqROv~^sy&A#}99# zwbu=MLrhl0cjp}12dVIX&z|&DU!!&R-)P>b?M~tm!X<5zyF>C#$U0eA_>~ISF{1ls z7XL9Ygvh!CKlS0`VdJHzh~=@u+TQ5!#UJ&i)-1yK;1fWY!`d9DQ4yUOGrJf z$Ui5TyZ1Ru{vXWP#-ZkpYO`BaJOsFE76!u>`*JJ6+6jA)+}M2%nrt0miaa1kvYwFG zSEI;BC+cS#3pgjj-cNm4vJucdf^m*L(G`Dmy&1AKd}NYxAQl$IoFi|EXU;X3wUZu(L2RsMIjS;{4u-GdGrWPBXbE=IhgOn4@sgEQ^b5 z&%RnX3JX3u(qhpgpuVzGSh$97meu^`W#^tRSozs9<5kVNPl3YfKpI(C@rR5_sU5rT z-1CmX&x?Y>jX=FKl$nZM68bo83>(`8A8k0_5xiaB z?MArM15XYc&PMg0Jo9$lYG}Q_`<12Im13V2&u0XjH(WTc+>rh3x~h9eWduR`eSrGU z7&cm}860Oxb4y5r6Mh_LI2$b$4b)klwH)AiICsI#tIav=#TVYZa@^Kzsbl~&MD7j= zhNLJLOV8N%H8M-Sy9{=jzvP*pRNUMcAx$`cuI<;kBvzt+9aKRsJH^2gzX`ZKZNJO#P2YSQLwd%r#wxpnyEAyY`{XmfdqFf4>=jmw&Gxmp)gOozTqytt}jJW&hrl`k$*(U;cdV zn@^AaEaUy?5x#Zuq18JLjID&f-}|(Wz3lSNb$fae^!3*`lq*#jPCVynYb9O0ww3GH z6iZI-`+kL|GxL^iyku|V-|Dtn^TGC2G3>rt$5&Uc3QI1yFu!?Mw$Ftf9u9BIqBitv zUS0Hl=|w$V;cEp?ul)RUU*t6Z)sTD1YtMCQL~?F;DOve!=XSm+K!FcZ9I{w~CSrfZDUFuG^|NGJRdsC$I_RwAt zw*4&!&nJG!miQB}Bce-Vefq0Ik9*zBjRUL)tt6Q}vEM&s4%4;Xj_5yEy0Mvri|l{rT_z zc=4udYaN!SDIJb3Gg;rJ%U^Z6qI$*6(>sMCLXN&K%H%r9I-kQLYE{4CvULWm*AI9) z7XDaLaO+O$)BftKcbk{*j)}UH{QH#HOPxACpToa=7mJ=M=&L_*@yb% zf4%Vg>7uYS6Q^z|=XEm2?uQqde48m`{N~<^uTd)seAcvcsWUvfnd$hlXl0?5+)C$r z$3G_&ehYgzjeFIvg6gUdCiUlS{|863oAMQW;BP*xH~m$g{f?ZcV%M(Kd!E*PlP$`? F000BVO#uJ^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..02d768034449beeedfb9073fc494ff4818a119f8 GIT binary patch literal 1274 zcmVJ~iw=K)C0Yfshz=l2v zjKtVPWlA7ryV)P?uSdzI>?#s<=Vm~G#DHO1I`{DK@Lq~^G6om{GxBdi0ib*j?33tO`64@%-DWOMnLn-xS;w)VPFbgh)qNrhU{QS2PQ!9Py`S2@Q@bG zO&*6K2%Z4JLlHd8!xJEUb{L<}4&(FLVSGM2jL+wKK0G`QXB z$fbzvEj_)9Vv(jDTa;b9Xf2OQwX`B-A?7b&(>QUBm#*>FHQuWZQG8 zEGhkX`C)CwQE7&QmDDm3nnIXsnQ2+vZ6voDvs(y*jWHAsXWYCOi77HwW%k3(+oZ~1 zZl@}`Sy+Za)gD7IRrj-m!X%z?r9^5zWQ$^E?+qz@=dNAyYI=qQ4)Sazv`7enXLD(c zorQ}v2zKy)i8X!%hjC`F#D&b12{&a@b--37hKZ7SC(&-xh5Q`FcBHnGsFK`v@@$se z@F~-_#*mgwdsJ(YGa_hNi=IkukCJl--?oywH{AqSoM}NqIIhdk#50jB(z=r9k5?bR z+IQl7KUzPmU0+3}`Bd0)wiz#!{kATajxp_4%R$eW9x#<#HFro1S|#ol^qTVr%UR4U zpE*yY`4lC(+`OEeo_!)PxX2c&AU3SvQ>Yh!eFI-SMpK0Dpvgdt&V%j?>>;ir#;~M)%4MohK{F7-CB^T)a|jQ`MfsJi^WfUrJF0W0)k zOWRpVjqqpr!px#X>h&k%UQFe5Rz#^-+9Mr# zu^sIf$4UQKLKxm=dVX(c<+J;|d{jsG=CQ%YOfHq}zGULD1;RjO+8!Gn)%MwJC;sqf kUhqGKHl+_R`G>;MdoI%zzcbMnw`_9!3y6s!&bA={0Dwbeng9R* literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9ed866dd0eb59dd99f441c437217dcd8f7abf683 GIT binary patch literal 2092 zcmZ`)dpr|*8+VzIm`aG*ICT^u*W77MmOCNmASw-87;?!aCztGWT;`lv<}#98QZZug zQPP-OF_)Ps9ELIX!%*Hi=dbg=y}y5+=lMS0&-eR0&p$s%iU{A|Z+|Ga`>MQ~WHNTP zL`=q;FACJHXd7ZN6PKp#FEJohbaJTY!2^69ouyvgX?!~y-l=*%L#Fcw zE9^7r_A3iPqJYD$s`QnDyN#`8gZn41qpV%=_-(f_7i$Do+eGc2OL_UzcACR|V%cJ8 zdET@lDof=$|545$r69Rr!@7^*&J!1<6SusJ}HSD_lT`4p$4sI>J_~gjPor?t!2t z>55>Qc0#k`!JRyTEM9*qQLazSfH!U^ zTpVwVGWa~nOIUWE9I|30EqLNRPqRZ%frL%wvVd zN|}l2=CN{)@ZkJA+6UB%t^;Dj0WrUuNBn;Jk9P1x?*W4eDo{elC$9&k_kZ*N$n`ZD znr(k+&YkuVy+sCSdGKxp?IA1r9taLe{cX$h(crCmFv0((`dnJ(NpLB-8f)Yp(|Z5f zO72>`eUnox>IJoe5h5QK-LP*cAE3Z>qm$HaPVRzDez{g$=`~6yf48k&$e&TEKdzfjzL$-O*E><|wuA2{>VjBI`@h9$GICumY>7rkljjl4?^DCpN>3_;0uOCKno zE^GBdgpqGR&l>bNc1=?$cEbc+8&s4zJ?))tdcs8tsg77@6j1Ui0L-5_)8zNDvNvvS zJ|*C>8Mc@o>!a{Y&$TK2oia1f?5Z<&OaY1cg z!+MWqK7y$d7I8UBHr9@`!bd9M4a6e$QnI)yjC{c@Lr-MnyZd*1IjE$V5DrU#!~M!x z86T<{*Jt&%g!zpl3Em<%W{Jfn!i4@=@j=4zo?GyYwjPgQgoI|6beLcI{QGHjj{&bw zV{1#b?hm-X#Un*;RP@W2s3gv()wHSHylQ&<=Ir_PFV>C}0; zq}0=lQR{sR8PNxtQ zp@aVzf!iI6#~5xBw~K@tj?1*=aqXK8^usOS9Io*y{H}kc18Ztz5Iyyr!Jgv-E01^y zHG}(C7pZw@%evVlth-a?wa}6B+x;d#XWVfm`T54xRvT2^77M08xuQLI_(1Kwq7=dwMV5U z!bJAQ9s0(!%pq@dky`H9R<*T@Q5B?v z1V5yN-A#3#Fv&mCMp#(IjEduqD=b?&eYwme0pHTs1%E1PojYt%7_&&e4x!#&w)DH{ zo}hBIE~<%19{2VuCH4|rqe)XY28nqO3ni?nJEL65wB1WKtL-3%{blrD8C!N8*ejijHAw z8gHIu7nn~h?(KAYt*n>Ue%{~N{VZYo^(_XugIuQt)YeQ#jj;#E<}VxmekyhM!kvdL zV9z+9Tj20FzfzB@Ho_U+YgN+--5rv?Fp1IlDHPT^dFUg*l7Ph4YpeQog%AbZnRI!7 z|5x-ZsJ`kKV35a)SM1r5K<@Jj{il)w^OuL*UV5MVLvvv`hNHR1?w!qUIm^{Z{&RZK zxa>qN?cogXkGfD8``07+({hIzW#XP%yR{pF#kJ8Ey+JnYCkEX&+Gc_;PD(n{jMLtj zPbW+l&DDpD2}&i#8=WCpY1@nh3GCP6_)45>rR)1nfJED#1uyNzPfEy;adT>cObXSW zvDJLh{QZD3=(6+=Gco7ZdsAOk#AP6s&oP|(fH;zZic=1 zJSOg?{By`dYFHvW-UlsWq2bK2U{0h-eS2r`u91|*LrptBM>w0c@8E-Z00nurCx;tq zBqs1Pf4X@--eK~onaq~O3h8`LbQ46Z#bcP))2UHpLI14-*yqRKz9!z2o zzxg#OZ`%f*@GDQ!xK9_j`hqy(tUDH|9Thd*DLM6V*Q`4|rwR=lx*2159wae{Gw+Z% zaFkJxub{A@n>j}2!6T@t40?`;MNH1P*#M$zX9=|BU``77JBvx+_& z90!_QIRj*}&6&bLRFfHyO%`VdxfgCS6VSZ~lTR*=Nj~&;%kw8CEARBq+qrM!;Z8%# zou+wfv(`)ey->paH*9O3&%GI;w@tTKZOdBrZcpactDB4BRQOFz4d2A znB0luTJ2~0Y|X9z#5cTu6*fWtaPrwrudeL*t~q6O+Op0ayY}spn0P4Ddbf%5F~-1O zhidoSHts*M;_}~Jo8P~EyCGo0$qy4sudLeC@wO`jZW8d^&yJJrs=lZ}ofB)W{ z`@i@8|BBMu;=sD<%AYQ!6VL9e+Hg8z{->DGUmG_5n`u_>SS;fw_U+6`r+AZ~B=&#} z%x$(@MYpc)D|>37Qnvlw{*>!`UWREoOsn($9l!DQ%TJn|R*s>Mj2> z9~Mv3`Ew&&+xOm&ldIa_H-A2R>C3J5ZBymH%yKz;v-!}?w9TK5=gqa56RLJ+#^d=` z@hA2EOnVlc@Obe~ET*%#OO7uspQOI#8D_LlDHnJ>3} zy=neQ?_~0Q_Iba)R9{^^zx4Sb)s#={>gndEu1J?YKjrWDQ|&+Z|NP}PiZTog0Q(U; A5dZ)H literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8020e436722e4e70f3d673546d395f5935bd9079 GIT binary patch literal 3226 zcmaKq2{_c<9>*CX*%hXcB5U@wOp_ZLV{9Q4g(k-KTCxrq>pNtp>`P1$URkn5L)Ii? zNg`&fS+k9`X_&Fx>Gj@w-}^lGx&P<)Kj%E>`#Hbg_jjHn8h?`E&+mw2+wU{p&3m3l zn^~qeV-z-mAIaYalvcoA%^GGDOY2+S?U8T|AldN50G~?hGBAY~yd1Lg9k@6DB%oWF zLLUi&P)m3=<7b`|fFa$u8kwh+=6K20<>kXg-2iUo=edz;F#@SkrpDF3MY4iUPldXSQ z{kMbv&MtMN8c}MAIKyUS3@C&l{MZsMMwA*Nj2IzL=}jxWVuqx)E%5<$0T!8US$sf% zumM8pz>A|;G^zc^d*!UqD=b6Y9}!eDp3pOFpt#7q9Oi*=UT>?^%@WC(WLf3RjK2%z*tlI zcr1Sf$f1nIjtRI$6@l@WVCB(aKPq9*njnp8L#T7b|AoTjP`dv@eXIXMNnQ4@4LiAj zW^3W?K@5M@8Zksv=kirELC$~>djFY*r5GUepJlaBiHmJNqYV*~7Uy*mSe|Uo8_Iwo zo5^-?BdV^SqW5DZ8nwkl7dmzs6JqF1HVbr_8vlO0pfh&t$30`n4nS?($R#B!?Z;cG zM^J>`{ybS9fFZjBwR4!Y>5eoK=!d{UUG&GaPcOWx6za$JtCl~Iu2Qw=YRoPp#|Z7g zK9KJhaG>-{4W+BRzYJ)1?v@&E9xv#asQo?zq?2yoJm1{Mv~P5u+_Ar~Xd@pCGt25l zWiCbx`N@#5M(hfnBL5RkXsrtx-hqt`%zAK=4kyt$Zv}U~fq~~aIcrE%WzLXsx8#l|)U9!Z(R&-& zh3lrpr@%Yb5<*NMt(PWeSVMh8IdOJ|Usa!dH>+?OMi5*c&6(?bO9I$2CI zE3nNXTxUi1yr4z4PJTYlY@T|6iW57{)OaI{%jF3tB*he6EwpRa_;vVT-WCiiFU}9a zgF$4-dem2ki`8s$(Nx|yeB5QbxkiPMF08@zIVp0voeQ?B540-hB|X^4I%$H*;w9&W zXvWpvV&8Uo0)ft%Ep6<5$FoZkjXoVLpnjXgfE4w8B0{g%IaCVvu9FET9#*$vaYkUh zkm;+itHi};3<ND?E7`WMUnseD{%cRls7d}iBl|j!${s&_wyL{4aRC^a$?0^x*x4*& zP-B|qX>V%pjqX58sHOe8>i*$rlMmJ(Xvicr?c1o&j zG}WJc7fQ}C`CM%CdxpGQRiLAzhwOAs50PD`vCVj4$8R9F=4NW{o{keV_y23Z)pZPLF;-dLO{s&KjYnBwn>4lm*q*f^bDPr6rxQ5G2s zx$9F>Yc-j#P!bP|jlXRBEj-Io#tT#{@OGK;YpekMI6&&gV#ldx92=_u3In^a+?2ke z*P5*G*#0_pi0j>j3E479XU1{46A$o%>Gtht)P}<4+B4U@ylppSW31DEAH}(~pC-wL z_gTsW@*zLjZpPI+2HqEZ$7;2S*vbghXB|lYR8#1%x3rK*oC?o+|Dw$nEB{^SAP{Bl;{$WB8B?R>$_rx+dV2DdSXw->xvRV8VDvekMlA{=c{ z=?~7{pHGQxB^yhj%NOAMy*o7fe6I_tl{Mzna9t`=w~WiCKkBt<@%+;J zW53bXeCdC;J`vfhEa)z(h)WpsA6kG7? zjuPVy-eifpdU~54U8{M&+oR=gYL#t+$oZTSKkhDCk4jFRP_mf1)eTqEinZ5tnjxvE z_sQ>8BzG}-& zk;z^D=I$|prTY8IjH({E;qUimExK%@98#&&HDx8cd+;u|$7)6FVBtDs8oXC zU1Uc`o3Qc(q28XiTUKXZD_)-SXPm+V{Mg)ymL13S z#ugz?!aX59Z6FQbz~!oaP%=cNO{1DyThLnrqDN>jvN+k+Ns?dcQ;vzo-6Y+-vtuR*EN&8<-oN^wi@^f#semOUN(jyJd<4K2m!2)_WO#zgf=_LpeE!X`Ud z0A@J4Uf-H^5_vSG5j*l`K>E?6+7cl5#FeXi9l{3hV7%j+G2PrD2WH%yVyDhA7TFy_$PEDki}+bJ zz_i19)eIi|;Gn)NN^v}G+yA{U4MW&oy6S7VM>Zxjc%D9E3>HZ$Xz#RL-RFXKxey22 z3pfii&l7sUGDSWv(cXL^z}kx?M$5ra6%pqT4nLv3Jdx}C@#8HIP}?VoB2Mtq4LSEI zF}GKwN0ct>_MQ31y&nBf<(3?g_8eu7Z3cju1 z7F($O52cc}IxwJ^=J_8dnv#m=6tSiITcbq9iD?77w?)O<7rvbUpChK@( b3sR5+O{K=O`2*_i5o literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..888e9ba5c455be839afe7be81d8f1150a973f789 GIT binary patch literal 2155 zcmaJ-2~d+~8rB8HE)b|kh`1r6ARt1y!fA_JTp*O2Mlf6nmkB_S~w^dx18}?>+|A#1MGU+faYr5y&s8QwvHt}Q7pR!>F?ES z>PZEE3Vql*_Hq|455TrKL$5^-RCPGEgrDRK(dxKI6@^vjWu|#G5|v8lpo^}jTai_G zN*r;TkLHxQ_7?oQ1jgUg9Zmd2OS8IpKveV2@Aio-G5Bd?B_B1os3VjH$HaqUHo-BL zWjVYu-!>40P06|9!fvSKdk%i1EnEglM|i^$+H`>x3)Rb4U?MD}RW}r~-d@;yVP&J! z%rR=P)V#z))=MWL&(i8)$f|%=Idkk|~`xfKCk-um8_ZvcJL2SzB8ushxLWmAnmq4@N=OEZvy@3yy z`y*v}^+0DL8m{MEmQn2ieWKfN`oKiz^}LT#)&q)J_fJA>0iOhnnmiMsd=RXhng^Fw z#U9$jSzy$X;=!BO@|O3jz6T!3WZhSQ*uwPkEs`?-s-6(6@4mO1SzZHpDLKwJ-xWjU zIEcNSF8H9Ws-M(__@vBQg79SIIR5r9J?&fot>r#l-p?{Pu?vRof(=G%iaNVqwTE|U zFE&75h4R=<&w+^;u0Q4y-CsG?wR~)ZIZpcS2ABb$oA~E{Q#u8gDL{yZ#TJ-Ly#broe9a2pOA!Kfa=9RazSy$D05n?Q}R=XSiSc5~cXZ5sX1n5u!(^kcRX>cGA22}`z z33T}!<_q|zFqsBG7(fOHqq!S~vKuCIH;i^S@JRp&{LmLbZdekbo71Z$4$AkIyZ9S2 zey7DC_h9C!lqA8KAQw)c$~$j0fq`RB=Rqg2A2s)ll^HTOzh%Gfasc^mQLZ?xcUi53 zy2y1|V`Ot`8hd@<3g$6V;RY@We%nv@?i|xj~`?OyY(lFwgm|Y&zcU7`{YEsZdczm1k-@<`S*S z8iZROC)0B0$T%`6HRZufwvvj`4@&0rd|7C5MaIZQ_z-rJxEfBr8Nbz3zF;jO<7nPZ zeFTYZ&HC&(UrSP-yfjVU2uK)?o>QtEYDBjpJ;R5$IX^apIus0s%C2CR#qXa@^}nAQ?z8F7i$^wBocspeR?$@aizLTrWJIBELpO7Yd&Cg=ty49dFOI)G7mFhw z-OAT5l|_UZiR0k58AX_oi1nr5=#Otl7EQ{`FSS**dISrOx4rf`#Y=8M81N=0PxX_| zM%C!qjjfbkzw3QQvcAyPAJVH3a-8eZ)13Wc?s0S*InLZ+4OBt;XIN*c%1(-_dew?K zQoJ^wk!j4@X1obcd)XNnlZV9Jz8Pm%mE@Zz=@E{+O=>Dyo3QEJNyZ(1G}36hTG_MU zIEHL%Z^w0>csV{@^*YEzR7~=XG`4e4X!Ivxy=<5c+WKgpCx++^o@J-2FgI~=hBq;I zXX13Q)47-D=bQha{32vxzYP)~m2B{2$0bha_$!`z=EFYQVU(U@#!!CcT11gqaZOH? zY0cRZ8-@q04nI{5b0V#@bl)h2fh+LCeUpt7hAMM+ch-%i7;zHWQp$w>tV(#s^LUrJ zk2gjcinagJF%OwrBVg?e58939hd!&8{Ow~W;}jq zXABgfl8+m8vMr}ZY=--M$feKhLA~6x?n3Fvt)EcnY=$mZ(Q3O*-!diw3qs%D2)!Ht zqDFcMomZ%MeG|!AwIAL)I6lIWyo>(&1GYmJu zq>eQ-g)4bqSsEG}jAgO;@ushuyr8Y_XwkqG{om)TX6a8zM2~jS;p2kj#;P=>AkV|i z9IHx#XpEMvE?;Z*iY-DM4LagIH0>Fv$`@SMh&(2#%&cdWQRlYjXz3b}`94qG1EWP} RqW<<#c1@fj%eLCL??3xQH+%p9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c55c03f7867a45a8f84ab723d0807eeef2d644c5 GIT binary patch literal 1251 zcmV<91RVPxiwFP!00000|HYVVa~d}khL5BL1CHHv#?$&|xal?iRDwzB8Q0D@Zqt0) z5g}%*^y-|wH2~_6Sot6r0EBnNzmxD?hni4M zIw>rKR~@RIOn3jZ4gXKC4s5J#+-dn@P_d3XQS7lxL)J9p5e-GeVTd?MNgT3+c{@(j z5JVh`h{F(Zl9D(S;d9iK`5ZN6K1WTN&rwt6^Kv~(;zUiE&rwt6bJUdi95rP=CkUUT zrp)K4Df2mM%6yKRGM{snEoSGhZA($D0nIV`Nf;mAjCkW;Q!JHs?Abuk>`}&LR;fb1k{l)e$69jYA?CY<6 z%ml$q5X=<8OcBf!!Aud%6v508%nZTI5X=n0%n-~8f;mAjCkW;Q!JO=5ZU9pq=Rc*I zHlQM%7@a{eco7HR#KBK-@M9djjDzpu;M+L(Ar8KWFd7?uKW9M3d1p1CI+b?9GXhnu zGN}adztvxBGY~C4_BUgva^!cJirz?f?71EbC3Xf6MhyZ?6Z!f%I$li zkt7;^x-i+&xvc5mi(F6ZaOg`-Eo`;5yw{Ui z*qDeAazXWVpz3E6d7pOubbRzQ=h}78yj^|OlI8te<@X=EMn11=Y=>(Hh^A=tCl3$v zML{<%-(26^wo_l%HK_7#S6B;;+jjFJeSdp-*A6Y@wBZAhF4_g2xBs}iZMN>3uddqZ z&GprXO}lFFWzkn!rQ+Th-gUq}wBMoICRp%AuplP(OS65z{hvzU>FZ63_5Nooos_Kf zryEd*%B4Sj+G5>u-~Dk(bPeyj^X@Qk?&erO4A+(w_x#RqW&6Ukw9a~ZrV8&~=k-w7 zy-L8PAy8@QiE<%?;{$lYYI^q$xgQD%5p1S`# z81qaxC&IJaM$I3{`AERYY7SQES(-oIg}C)}wRJZ1mnVK@l}GR)qhiwoKj+3<<0ogr zBjZ|e)*)xU9s9iN>uY&zSnR#J3fbPXATO?Wygom(RW|Xqt`b(*kDiIQvK-EQ5|in{ z!24e5^UV5GhnXAW*}f{Ok*l7tp*j|2>5K62f;;}ZFg9GLz|mg}PHwr(W_)hbjZMB# N{{}jxC&Paj004j>a>W1u literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..441fce10e4550230e97ab59942656a5d86fc7179 GIT binary patch literal 1464 zcmZ9Gc{tPw7{{@O5z3(0XeYNYQ*Aa!V;#AM8Bv&&AGTUTj$z!n=aCxOVG`r0hes@O zA88!rj2MH#?zoM?7)&+pvt9kO+V`K&^Zh>0`+i<10nGPpzOFa{furWqz>2VteBq)t zecmH~5yLE$L|v!V+jL^H=8@G2AnlWy<_)s5(fw}@SlnYkMdeLkY+d_=%H4?gWUj%& ziw2Bjjff}2H`TfWtZ+~`6IK6pOcDLc=Z@6xiP5!|vs%=h=*+rZ+7zs{fE-J5Ja3M# z94zJ~X`pZ*DW4WwQ~89%HVD@Atc`uHx18!RmVlU9`)`T5@(>F_rY+tzMr0e5K|F$5 z-pSbicO8%@epQx?o5>NR8*P2Rc$h#_;s8!m)x=F*piM$H`F$dvstNmv#9KvE_>(SB zhOIciRPhNj{{nEISPNM}_mZGT!gQ}hwqD#N3;%g=pL`2hNmo?RBR27>mFv>Rxzd5- z8I(vXZ_W?jfHMOFF(QisD9e9eq43?%k>cR&@bD-7W)OHe5Zj>bdPF8@bK9GG-;Gk{NkmhD7BqNwCSB;mfks; z^KM^YS}v_jwVRD`9h((f$4?oyGKHBKI-=p`1xa+|#JJqk)%MGf*17$%P`a77WTu#ZF23Wi12;X7{dBSnobwp^mdvzIoKnttS0g$)xl=k zfx7Kg`1#So-s|aXO;5n#ZiqS*#%#8t!`8|!7pX5^th(}i-c&q^iW>+@uIP3T9#{SY z{d_Ex$SU?Dp-7GkSKov@^bg&uLk2%WayU|B9rlnBJ$)}J{XxwX$c%gDeT$l)7k`E! zx`p^|*N*fJrQ3_=B_duZcPfVuov|);;DET&-LzA9Xh_rw3}ncQ14fW}1l~k75h5K> zuAYyuc6fL>5Mo-{Ty{V0X^O?Z3Yt#p46ihXVLn40VhdqaOSjPHd%Q9`TowYOiJH)W zZjKzyE2A%!Q2&Wl&&IZtZ~{B2TyMc;Sb#P%LbsvOSu4jA+H4RNGDyfVMh_DAn}1HI zxfY%izct%E<4N0$qXy_*|1ucD%isL4h%Ag44T~HiOr3#7Qd~+^x2qlyQ6D(1^HqK# zyFX&(uQ8$=|~x@%1rslutovP zcEb;~9_`m_z~;VQn?IgK6mHxWgY$o8T(`%HY&n+~=jG+gV;MWq6$broWAQmb%W&$f z4++g?vRCR(gi7!x} zlhi64ks9RGq+@3B4CJatL~=h4P~As&Bpj2w41%9!J?KH?AR#Hlmpw@x2bkS9vd)L6 zTPPQ&R&Sy1KL@pm~zsI=OT(H4`wlq{H@9c%Gc`~U+1Z#Gx+Ut{dBA1?o-kX=1$ z=dZwzZ4$Bx+>PY6&mEL(yN7wm8idFV0=mwRN`<(*<#kf)JXvLxM{b`XG+e{xOm_A< z(I@pabgGv7fK&w4TnQ6$@mUeJD42dvyAE62H{qD*Qu@ke%rykOzV~acBgolhF@631 z7LZjoQ9r=T=(+&*&CjbY8k3k~t@>&4mppJypHN>n`f=(^PaO_jA91#H518vTv?eya clMM@3B;nvPs?EV&zi Date: Fri, 29 May 2026 01:58:28 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=80=9D=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ponder/ae2/AE2CablePonderHelper.java | 203 ++++++++++++++++++ .../client/ponder/ae2/AnnihilationPlane.java | 20 +- .../client/ponder/ae2/BuddingQuartz.java | 1 + .../client/ponder/ae2/CTNHAE2PondersLang.java | 6 +- .../ctnhenergy/client/ponder/ae2/Cable.java | 27 ++- .../client/ponder/ae2/Controller.java | 19 +- .../ponder/ae2/CraftingProcessUnit.java | 1 + .../client/ponder/ae2/CraftingSystem.java | 11 +- .../client/ponder/ae2/FormationPlane.java | 9 +- .../ctnhenergy/client/ponder/ae2/IOPort.java | 18 +- .../client/ponder/ae2/ImportExportBus.java | 28 +-- .../client/ponder/ae2/Interface.java | 15 +- .../client/ponder/ae2/MolecularAssembler.java | 15 +- .../client/ponder/ae2/PatternProvider.java | 32 +-- .../ponder/ae2/QuantumNetworkBridge.java | 19 +- .../client/ponder/ae2/StorageBus.java | 22 +- 16 files changed, 347 insertions(+), 99 deletions(-) create mode 100644 src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/ae2/AE2CablePonderHelper.java 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..a9b97f1 --- /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 appeng.blockentity.networking.CableBusBlockEntity; +import appeng.core.definitions.AEBlocks; +import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; + +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 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 index d85e1a7..afbab26 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -15,15 +16,17 @@ public class AnnihilationPlane { - private 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); - scene.world().showSection(util.select().fromTo(2, 1, 1, 3, 1, 2), Direction.DOWN); - scene.world().showSection(util.select().position(2, 2, 2), Direction.DOWN); + 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()) @@ -32,7 +35,7 @@ public static void annihilationPlane(SceneBuilder builder, SceneBuildingUtil uti 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); - scene.world().showSection(util.select().fromTo(0, 1, 2, 1, 1, 2), Direction.DOWN); + 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); @@ -56,10 +59,11 @@ public static void annihilationPlane(SceneBuilder builder, SceneBuildingUtil uti 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(); - scene.world().showSection(util.select().fromTo(0, 1, 0, 3, 1, 2), Direction.DOWN); - scene.world().showSection(util.select().position(2, 2, 2), Direction.DOWN); + 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); @@ -76,9 +80,9 @@ public static void filter(SceneBuilder builder, SceneBuildingUtil util) { .text(AnnihilationPlaneFilterText2.translate().getContents().toString()) .attachKeyFrame(); scene.idle(80); - scene.world().hideSection(util.select().fromTo(0, 1, 2, 1, 1, 2), Direction.UP); + cables.hideSectionAndDisconnect(0, 1, 2, 1, 1, 2, Direction.UP); scene.idle(20); - scene.world().showSection(util.select().fromTo(4, 1, 2, 5, 1, 2), Direction.DOWN); + cables.showSectionAndConnect(4, 1, 2, 5, 1, 2, Direction.DOWN); scene.idle(20); scene.overlay().showText(60) .text(AnnihilationPlaneFilterText3.translate().getContents().toString()) 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 index 23e201c..fb12148 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; 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 index cc028ca..02e80d5 100644 --- 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 @@ -1,9 +1,9 @@ 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; -import tech.vixhentx.mcmod.ctnhlib.langprovider.annotation.CN; -import tech.vixhentx.mcmod.ctnhlib.langprovider.annotation.EN; -import tech.vixhentx.mcmod.ctnhlib.langprovider.annotation.Key; public class CTNHAE2PondersLang { 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 index cdda4b0..b747834 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -11,14 +12,16 @@ public class Cable { - private 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); - scene.world().showSection(util.select().fromTo(0, 1, 0, 4, 1, 1), Direction.DOWN); + 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()) @@ -28,12 +31,12 @@ public static void cable(SceneBuilder builder, SceneBuildingUtil util) { .text(CableText2.translate().getContents().toString()) .attachKeyFrame(); scene.idle(80); - scene.world().showSection(util.select().fromTo(0, 1, 2, 4, 1, 2), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(0, 1, 3, 4, 1, 3), Direction.DOWN); + 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(); @@ -42,18 +45,19 @@ public static void cable(SceneBuilder builder, SceneBuildingUtil util) { 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); - scene.world().showSection(util.select().position(0, 1, 0), Direction.DOWN); - scene.world().showSection(util.select().fromTo(0, 1, 1, 4, 1, 1), Direction.DOWN); - scene.world().showSection(util.select().fromTo(4, 1, 1, 4, 1, 4), Direction.DOWN); - scene.world().showSection(util.select().fromTo(4, 1, 4, 0, 1, 4), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(0, 1, 2, 3, 1, 3), Direction.DOWN); + 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) @@ -61,7 +65,7 @@ public static void smallCable(SceneBuilder builder, SceneBuildingUtil util) { .pointAt(util.vector().blockSurface(util.grid().at(2, 1, 3), Direction.UP)) .attachKeyFrame(); scene.idle(80); - scene.world().showSection(util.select().position(3, 1, 0), Direction.DOWN); + 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); @@ -73,10 +77,11 @@ public static void smallCable(SceneBuilder builder, SceneBuildingUtil util) { 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); - scene.world().showSection(util.select().fromTo(0, 1, 0, 9, 1, 9), Direction.DOWN); + 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); 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 index 1d6d46a..c419c98 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -13,15 +14,17 @@ public class Controller { - private 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); - scene.world().showSection(util.select().fromTo(0, 1, 1, 1, 1, 1), Direction.DOWN); + cables.showSectionAndConnect(0, 1, 1, 1, 1, 1, Direction.DOWN); scene.idle(20); scene.overlay().showText(40) .text(ControllerText1.translate().getContents().toString()) @@ -34,9 +37,9 @@ public static void controller(SceneBuilder builder, SceneBuildingUtil util) { scene.overlay().showOutline(PonderPalette.GREEN, "energy", util.select().position(0, 1, 1), 60); scene.idle(80); for (int index = 0; index < 6; index++) { - scene.world().showSection(util.select().position(index + 2, 1, 1), Direction.WEST); - scene.world().showSection(util.select().position(1, 2 + index, 1), Direction.DOWN); - scene.world().showSection(util.select().position(1, 1, 2 + index), Direction.NORTH); + 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); @@ -45,7 +48,7 @@ public static void controller(SceneBuilder builder, SceneBuildingUtil util) { .attachKeyFrame(); scene.idle(60); scene.idle(30); - scene.world().showSection(util.select().position(8, 1, 1), Direction.DOWN); + cables.showSectionAndConnect(8, 1, 1, Direction.DOWN); scene.idle(20); scene.overlay().showText(60) .text(ControllerText4.translate().getContents().toString()) @@ -53,14 +56,14 @@ public static void controller(SceneBuilder builder, SceneBuildingUtil util) { scene.idle(60); scene.rotateCameraY(180); scene.idle(40); - scene.world().showSection(util.select().fromTo(3, 1, 3, 5, 1, 4), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(3, 1, 5, 8, 3, 7), Direction.DOWN); + cables.showSectionAndConnect(3, 1, 5, 8, 3, 7, Direction.DOWN); scene.idle(20); scene.overlay().showText(60) .text(ControllerText6.translate().getContents().toString()) 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 index 969cce4..d75b722 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; 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 index dd1f09d..a6d1110 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -11,20 +12,22 @@ public class CraftingSystem { - private 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); - scene.world().showSection(util.select().fromTo(2, 1, 1, 2, 1, 3), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(0, 1, 1, 1, 1, 3), Direction.DOWN); + cables.showSectionAndConnect(0, 1, 1, 1, 1, 3, Direction.DOWN); scene.idle(20); scene.overlay().showText(40) .text(CraftingSystemText2.translate().getContents().toString()) @@ -32,7 +35,7 @@ public static void system(SceneBuilder builder, SceneBuildingUtil util) { .attachKeyFrame(); scene.overlay().showOutline(PonderPalette.GREEN, "cpu", util.select().fromTo(0, 1, 1, 0, 1, 3), 40); scene.idle(60); - scene.world().showSection(util.select().fromTo(3, 1, 0, 4, 1, 2), Direction.DOWN); + cables.showSectionAndConnect(3, 1, 0, 4, 1, 2, Direction.DOWN); scene.idle(20); scene.overlay().showText(40) .text(CraftingSystemText3.translate().getContents().toString()) 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 index a1d5e7a..de01f6d 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -15,20 +16,22 @@ public class FormationPlane { - private 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); - scene.world().showSection(util.select().fromTo(0, 1, 0, 6, 1, 6), Direction.DOWN); + 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); - scene.world().showSection(util.select().position(3, 2, 1), Direction.DOWN); + cables.showSectionAndConnect(3, 2, 1, Direction.DOWN); scene.overlay().showText(60) .text(FormationPlaneText2.translate().getContents().toString()) .attachKeyFrame(); 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 index 44cc9dc..5c66618 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -11,14 +12,16 @@ public class IOPort { - private 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); - scene.world().showSection(util.select().fromTo(3, 1, 4, 5, 1, 4), Direction.DOWN); + 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) @@ -26,16 +29,16 @@ public static void ioPort(SceneBuilder builder, SceneBuildingUtil util) { .pointAt(util.vector().blockSurface(util.grid().at(4, 1, 4), Direction.UP)) .attachKeyFrame(); scene.idle(80); - scene.world().showSection(util.select().fromTo(0, 1, 0, 4, 1, 3), Direction.DOWN); + cables.showSectionAndConnect(0, 1, 0, 4, 1, 3, Direction.DOWN); scene.overlay().showText(60) .text(IOPortText2.translate().getContents().toString()) .attachKeyFrame(); scene.idle(60); - scene.world().hideSection(util.select().fromTo(0, 1, 0, 4, 1, 3), Direction.UP); + cables.hideSectionAndDisconnect(0, 1, 0, 4, 1, 3, Direction.UP); scene.idle(20); scene.rotateCameraY(90); scene.idle(20); - scene.world().showSection(util.select().fromTo(4, 1, 5, 6, 1, 8), Direction.DOWN); + cables.showSectionAndConnect(4, 1, 5, 6, 1, 8, Direction.DOWN); scene.idle(20); scene.overlay().showText(60) .text(IOPortText3.translate().getContents().toString()) @@ -45,16 +48,17 @@ public static void ioPort(SceneBuilder builder, SceneBuildingUtil util) { 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); - scene.world().showSection(util.select().fromTo(1, 1, 4, 3, 1, 4), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(2, 1, 3, 2, 1, 2), Direction.DOWN); + cables.showSectionAndConnect(2, 1, 3, 2, 1, 2, Direction.DOWN); scene.overlay().showText(60) .text(IOPortOutputText2.translate().getContents().toString()) .attachKeyFrame(); 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 index 80e3323..622f8ce 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -14,23 +15,25 @@ public class ImportExportBus { - private 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); - scene.world().showSection(util.select().position(4, 1, 3), Direction.DOWN); - scene.world().showSection(util.select().fromTo(2, 1, 4, 4, 1, 4), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(1, 1, 2, 2, 1, 2), Direction.DOWN); + cables.showSectionAndConnect(1, 1, 2, 2, 1, 2, Direction.DOWN); scene.idle(10); - scene.world().showSection(util.select().fromTo(1, 1, 3, 1, 1, 4), Direction.DOWN); + cables.showSectionAndConnect(1, 1, 3, 1, 1, 4, Direction.DOWN); scene.rotateCameraY(-90); scene.idle(40); scene.overlay().showText(60) @@ -48,9 +51,9 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { scene.idle(40); scene.rotateCameraY(90); scene.idle(30); - scene.world().showSection(util.select().position(4, 2, 3), Direction.DOWN); + cables.showSectionAndConnect(4, 2, 3, Direction.DOWN); scene.idle(10); - scene.world().showSection(util.select().position(1, 1, 1), Direction.NORTH); + cables.showSectionAndConnect(1, 1, 1, Direction.NORTH); scene.idle(30); scene.overlay().showText(60) .text(ImportExportBusText4.translate().getContents().toString()) @@ -65,27 +68,28 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { .rightClick() .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); scene.idle(40); - scene.world().showSection(util.select().position(4, 1, 2), Direction.NORTH); + cables.showSectionAndConnect(4, 1, 2, Direction.NORTH); scene.idle(10); - scene.world().showSection(util.select().position(2, 2, 2), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(0, 1, 0, 3, 1, 4), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(4, 1, 0, 4, 1, 3), Direction.DOWN); - scene.world().showSection(util.select().fromTo(1, 2, 0, 1, 2, 3), Direction.DOWN); + 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 index 8ca93cd..eeb86b3 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -13,28 +14,30 @@ public class Interface { - private 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); - scene.world().showSection(util.select().fromTo(1, 1, 1, 1, 1, 3), Direction.DOWN); - scene.world().showSection(util.select().fromTo(1, 1, 2, 3, 1, 2), Direction.DOWN); + 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); - scene.world().showSection(util.select().position(3, 2, 2), Direction.DOWN); + 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); - scene.world().hideSection(util.select().position(3, 2, 2), Direction.UP); + cables.hideSectionAndDisconnect(3, 2, 2, Direction.UP); scene.idle(20); scene.overlay().showText(40) .text(InterfaceCommonText3.translate().getContents().toString()) @@ -44,7 +47,7 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { .rightClick() .withItem(AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); scene.idle(40); - scene.world().showSection(util.select().position(3, 1, 1), Direction.SOUTH); + cables.showSectionAndConnect(3, 1, 1, Direction.SOUTH); scene.idle(20); scene.overlay().showText(60) .text(InterfaceCommonText4.translate().getContents().toString()) 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 index edb83be..d656e2e 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -10,20 +11,22 @@ public class MolecularAssembler { - private 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); - scene.world().showSection(util.select().fromTo(0, 1, 0, 3, 1, 0), Direction.DOWN); - scene.world().showSection(util.select().fromTo(2, 1, 1, 2, 2, 2), Direction.DOWN); - scene.world().showSection(util.select().position(1, 1, 1), Direction.DOWN); + 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); - scene.world().showSection(util.select().position(1, 1, 2), Direction.DOWN); + 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)) @@ -37,7 +40,7 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { .text(MolecularAssemblerText4.translate().getContents().toString()) .attachKeyFrame(); scene.idle(80); - scene.world().showSection(util.select().fromTo(0, 1, 1, 1, 2, 2), Direction.DOWN); + cables.showSectionAndConnect(0, 1, 1, 1, 2, 2, Direction.DOWN); scene.overlay().showText(60) .text(MolecularAssemblerText5.translate().getContents().toString()) .attachKeyFrame(); 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 index 5b5d8e4..d76886c 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -16,7 +17,8 @@ public class PatternProvider { - private PatternProvider() {} + private PatternProvider() { + } public static void common(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); @@ -74,18 +76,19 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { 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); - scene.world().showSection(util.select().fromTo(1, 1, 0, 1, 1, 3), Direction.DOWN); + cables.showSectionAndConnect(1, 1, 0, 1, 1, 3, Direction.DOWN); scene.idle(10); for (int index = 0; index < 4; index++) { - scene.world().showSection(util.select().position(0, index, 4), Direction.DOWN); + cables.showSectionAndConnect(0, index, 4, Direction.DOWN); scene.idle(5); } - scene.world().showSection(util.select().fromTo(1, 1, 4, 1, 1, 5), Direction.DOWN); + cables.showSectionAndConnect(1, 1, 4, 1, 1, 5, Direction.DOWN); scene.idle(10); - scene.world().showSection(util.select().position(1, 3, 4), Direction.DOWN); + cables.showSectionAndConnect(1, 3, 4, Direction.DOWN); scene.idle(40); scene.overlay().showText(60) .text(CraftingParallelText1.translate().getContents().toString()) @@ -107,9 +110,9 @@ public static void parallel(SceneBuilder builder, SceneBuildingUtil util) { scene.overlay().showText(60) .text(CraftingParallelText4.translate().getContents().toString()); scene.idle(60); - scene.world().showSection(util.select().fromTo(2, 1, 3, 2, 1, 5), Direction.DOWN); + cables.showSectionAndConnect(2, 1, 3, 2, 1, 5, Direction.DOWN); scene.idle(20); - scene.world().showSection(util.select().position(2, 3, 4), Direction.DOWN); + cables.showSectionAndConnect(2, 3, 4, Direction.DOWN); scene.overlay().showText(60) .text(CraftingParallelText5.translate().getContents().toString()) .attachKeyFrame(); @@ -126,29 +129,30 @@ public static void parallel(SceneBuilder builder, SceneBuildingUtil util) { .text(CraftingParallelText7.translate().getContents().toString()); scene.idle(20); for (int index = 1; index <= 5; index++) { - scene.world().showSection(util.select().fromTo(2 + index, 1, 3, 2 + index, 1, 5), Direction.DOWN); - scene.world().showSection(util.select().position(2 + index, 3, 4), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(2, 1, 0, 7, 1, 1), Direction.DOWN); + cables.showSectionAndConnect(2, 1, 0, 7, 1, 1, Direction.DOWN); scene.idle(10); - scene.world().showSection(util.select().fromTo(1, 1, 6, 8, 1, 6), Direction.DOWN); - scene.world().showSection(util.select().fromTo(8, 1, 0, 8, 1, 6), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(1, 2, 5, 7, 2, 6), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(1, 1, 0, 4, 1, 1), Direction.DOWN); + cables.showSectionAndConnect(1, 1, 0, 4, 1, 1, Direction.DOWN); scene.idle(20); scene.rotateCameraY(90); scene.idle(20); 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 index b54f7fa..b5865d2 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -14,10 +15,12 @@ public class QuantumNetworkBridge { - private 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); @@ -30,18 +33,18 @@ public static void bridge(SceneBuilder builder, SceneBuildingUtil util) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (i != 1 || j != 1) { - scene.world().showSection(util.select().position(i, j + 1, 0), Direction.DOWN); + cables.showSectionAndConnect(i, j + 1, 0, Direction.DOWN); scene.idle(5); } } } scene.idle(10); - scene.world().showSection(util.select().position(1, 2, 0), Direction.SOUTH); + cables.showSectionAndConnect(1, 2, 0, Direction.SOUTH); scene.idle(20); scene.idle(30); scene.rotateCameraY(180); scene.idle(30); - scene.world().showSection(util.select().fromTo(0, 1, 1, 3, 1, 3), Direction.DOWN); + 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); @@ -54,12 +57,12 @@ public static void bridge(SceneBuilder builder, SceneBuildingUtil util) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (i != 1 || j != 1) { - scene.world().showSection(util.select().position(i + 6, j + 1, 8), Direction.DOWN); + cables.showSectionAndConnect(i + 6, j + 1, 8, Direction.DOWN); scene.idle(5); } } } - scene.world().showSection(util.select().position(7, 2, 8), Direction.DOWN); + cables.showSectionAndConnect(7, 2, 8, Direction.DOWN); scene.overlay().showText(60) .text(QuantumNetworkBridgeText4.translate().getContents().toString()) .attachKeyFrame(); @@ -76,9 +79,9 @@ public static void bridge(SceneBuilder builder, SceneBuildingUtil util) { .rightClick() .withItem(AEItems.QUANTUM_ENTANGLED_SINGULARITY.asItem().getDefaultInstance()); scene.idle(60); - scene.world().showSection(util.select().fromTo(4, 1, 5, 7, 1, 7), Direction.DOWN); + cables.showSectionAndConnect(4, 1, 5, 7, 1, 7, Direction.DOWN); scene.idle(20); - scene.world().showSection(util.select().position(3, 2, 2), Direction.DOWN); + cables.showSectionAndConnect(3, 2, 2, Direction.DOWN); scene.idle(20); scene.rotateCameraY(90); scene.idle(30); 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 index 3e0eb39..e5aad65 100644 --- 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 @@ -1,3 +1,4 @@ +// 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; @@ -14,21 +15,23 @@ public class StorageBus { - private 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); - scene.world().showSection(util.select().fromTo(1, 1, 1, 1, 1, 3), Direction.DOWN); + cables.showSectionAndConnect(1, 1, 1, 1, 1, 3, Direction.DOWN); scene.overlay().showText(60) .text(StorageBusText1.translate().getContents().toString()) .attachKeyFrame(); scene.idle(80); - scene.world().showSection(util.select().fromTo(2, 1, 2, 4, 1, 2), Direction.DOWN); + cables.showSectionAndConnect(2, 1, 2, 4, 1, 2, Direction.DOWN); scene.idle(10); - scene.world().showSection(util.select().fromTo(4, 1, 3, 4, 2, 3), Direction.DOWN); + cables.showSectionAndConnect(4, 1, 3, 4, 2, 3, Direction.DOWN); scene.markAsFinished(); scene.idle(10); scene.rotateCameraY(-180); @@ -41,21 +44,22 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { 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); - scene.world().showSection(util.select().fromTo(1, 1, 1, 1, 1, 3), Direction.DOWN); + cables.showSectionAndConnect(1, 1, 1, 1, 1, 3, Direction.DOWN); scene.idle(10); - scene.world().showSection(util.select().fromTo(5, 1, 1, 5, 1, 4), Direction.DOWN); + 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); - scene.world().showSection(util.select().fromTo(2, 1, 2, 3, 1, 2), Direction.DOWN); + cables.showSectionAndConnect(2, 1, 2, 3, 1, 2, Direction.DOWN); scene.idle(10); - scene.world().showSection(util.select().position(4, 1, 2), Direction.DOWN); + 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) @@ -81,7 +85,7 @@ public static void interfaceInteraction(SceneBuilder builder, SceneBuildingUtil scene.idle(60); scene.markAsFinished(); scene.idle(30); - scene.world().showSection(util.select().position(5, 2, 4), Direction.DOWN); + 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() From 603e169d7b4b1b299ff0f28b478ee36d4937e015 Mon Sep 17 00:00:00 2001 From: mmyddd Date: Fri, 29 May 2026 01:59:07 +0800 Subject: [PATCH 3/3] fix: spotless --- .../mcmod/ctnhenergy/client/ClientProxy.java | 2 +- .../client/ponder/CTNHEnergyPonderPlugin.java | 1 + .../client/ponder/CTNHEnergyPonderScenes.java | 41 +++++++++---------- .../client/ponder/CTNHEnergyPonderTags.java | 2 +- .../ponder/ae2/AE2CablePonderHelper.java | 14 +++---- .../client/ponder/ae2/AnnihilationPlane.java | 21 +++++----- .../client/ponder/ae2/BuddingQuartz.java | 29 +++++++------ .../ctnhenergy/client/ponder/ae2/Cable.java | 7 ++-- .../client/ponder/ae2/Controller.java | 9 ++-- .../ponder/ae2/CraftingProcessUnit.java | 4 +- .../client/ponder/ae2/CraftingSystem.java | 7 ++-- .../client/ponder/ae2/FormationPlane.java | 18 ++++---- .../ctnhenergy/client/ponder/ae2/IOPort.java | 7 ++-- .../client/ponder/ae2/ImportExportBus.java | 12 +++--- .../client/ponder/ae2/Interface.java | 9 ++-- .../client/ponder/ae2/MolecularAssembler.java | 7 ++-- .../client/ponder/ae2/PatternProvider.java | 22 +++++----- .../ponder/ae2/QuantumNetworkBridge.java | 15 +++---- .../client/ponder/ae2/StorageBus.java | 12 +++--- .../mcmod/ctnhenergy/registry/CEItems.java | 2 +- 20 files changed, 120 insertions(+), 121 deletions(-) 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 9034cbd..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; @@ -20,7 +21,6 @@ import com.wintercogs.ae2omnicells.common.blocks.OmniCraftingUnitBlock; import com.wintercogs.ae2omnicells.common.items.OmniCraftingBlockItem; import com.wintercogs.ae2omnicells.common.me.crafting.OmniCraftingFamily; -import net.createmod.ponder.foundation.PonderIndex; import tech.luckyblock.mcmod.ctnhenergy.CTNHEnergy; import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderPlugin; import tech.luckyblock.mcmod.ctnhenergy.client.render.EUKeyRenderHandler; 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 index 20ae617..6723010 100644 --- a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderPlugin.java +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderPlugin.java @@ -4,6 +4,7 @@ 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 { 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 index 68f4671..83d7ca9 100644 --- a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderScenes.java +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderScenes.java @@ -1,14 +1,13 @@ -//代码来源于Create Delights,原作者为SSW,已获得授权 +// 代码来源于Create Delights,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder; -import appeng.api.ids.AEBlockIds; -import appeng.api.ids.AEPartIds; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2.*; - 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; @@ -26,11 +25,11 @@ public static void register(PonderSceneRegistrationHelper help // 赛特斯石英母岩 helper.forComponents( - AEBlockIds.FLAWLESS_BUDDING_QUARTZ, - AEBlockIds.FLAWED_BUDDING_QUARTZ, - AEBlockIds.CHIPPED_BUDDING_QUARTZ, - AEBlockIds.DAMAGED_BUDDING_QUARTZ, - AEItems.CERTUS_QUARTZ_CRYSTAL.id()) + 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); @@ -57,9 +56,9 @@ public static void register(PonderSceneRegistrationHelper help // 自动合成系统 helper.forComponents( - AEBlockIds.PATTERN_PROVIDER, - AEBlockIds.CRAFTING_UNIT, - AEBlockIds.MOLECULAR_ASSEMBLER) + AEBlockIds.PATTERN_PROVIDER, + AEBlockIds.CRAFTING_UNIT, + AEBlockIds.MOLECULAR_ASSEMBLER) .addStoryBoard("crafting_system/system", CraftingSystem::system, AEOriginal); // 成型面板 @@ -68,15 +67,15 @@ public static void register(PonderSceneRegistrationHelper help // 输入/输出总线 helper.forComponents( - AEPartIds.IMPORT_BUS, - AEPartIds.EXPORT_BUS) + 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) + AEBlockIds.INTERFACE, + AEPartIds.INTERFACE) .addStoryBoard("interface/common", Interface::common, AEOriginal); // IO端口 @@ -90,16 +89,16 @@ public static void register(PonderSceneRegistrationHelper help // 样板供应器 helper.forComponents( - AEBlockIds.PATTERN_PROVIDER, - AEPartIds.PATTERN_PROVIDER) + 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) + AEBlockIds.QUANTUM_RING, + AEBlockIds.QUANTUM_LINK) .addStoryBoard("quantum_network_bridge/bridge", QuantumNetworkBridge::bridge, 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 index 973bfc9..43636d6 100644 --- a/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderTags.java +++ b/src/main/java/tech/luckyblock/mcmod/ctnhenergy/client/ponder/CTNHEnergyPonderTags.java @@ -2,11 +2,11 @@ import net.createmod.ponder.api.registration.PonderTagRegistrationHelper; import net.minecraft.resources.ResourceLocation; -import tech.luckyblock.mcmod.ctnhenergy.CTNHEnergy; 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 { 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 index a9b97f1..9ba2087 100644 --- 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 @@ -1,9 +1,5 @@ package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import appeng.blockentity.networking.CableBusBlockEntity; -import appeng.core.definitions.AEBlocks; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - import net.createmod.ponder.api.scene.SceneBuildingUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -16,6 +12,10 @@ 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; @@ -160,8 +160,7 @@ private void connectCableBusAt(BlockPos pos, Set visibleSnapshot) { cableBus.setChanged(); cableBus.requestModelDataUpdate(); }); - scene.world().modifyBlockEntityNBT(util.select().position(pos), CableBusBlockEntity.class, tag -> { - }, true); + scene.world().modifyBlockEntityNBT(util.select().position(pos), CableBusBlockEntity.class, tag -> {}, true); } static void writeCableVisualConnections(CompoundTag tag, EnumSet connections) { @@ -190,7 +189,8 @@ private static boolean isConnectableNeighbor(Level level, BlockPos pos) { 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"); + return blockEntity != null && "ae2".equals(blockId.getNamespace()) && + blockEntity.saveWithoutMetadata().contains("proxy"); } private static boolean isCableBus(Level level, BlockPos pos) { 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 index afbab26..fbb1c6a 100644 --- 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 @@ -1,8 +1,6 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - import net.createmod.catnip.math.Pointing; import net.createmod.ponder.api.PonderPalette; import net.createmod.ponder.api.scene.SceneBuilder; @@ -11,13 +9,13 @@ 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() { - } + private AnnihilationPlane() {} public static void annihilationPlane(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); @@ -32,7 +30,8 @@ public static void annihilationPlane(SceneBuilder builder, SceneBuildingUtil uti .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().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); @@ -46,8 +45,7 @@ public static void annihilationPlane(SceneBuilder builder, SceneBuildingUtil uti 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() - ); + AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); scene.idle(10); scene.world().modifyEntity(item1, e -> e.kill()); scene.idle(20); @@ -65,7 +63,8 @@ public static void filter(SceneBuilder builder, SceneBuildingUtil util) { 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().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)); @@ -90,15 +89,15 @@ public static void filter(SceneBuilder builder, SceneBuildingUtil util) { .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) + 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() - ); + AEItems.CERTUS_QUARTZ_CRYSTAL.asItem().getDefaultInstance()); scene.idle(15); scene.world().modifyEntity(item1, e -> e.kill()); scene.idle(40); 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 index fb12148..b72e2c6 100644 --- 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 @@ -1,8 +1,6 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - import net.createmod.catnip.math.Pointing; import net.createmod.ponder.api.scene.SceneBuilder; import net.createmod.ponder.api.scene.SceneBuildingUtil; @@ -12,6 +10,7 @@ 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.*; @@ -25,7 +24,8 @@ public static void obtain(SceneBuilder builder, SceneBuildingUtil util) { 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().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) @@ -33,7 +33,7 @@ public static void obtain(SceneBuilder builder, SceneBuildingUtil util) { .pointAt(util.vector().blockSurface(util.grid().at(2, 1, 2), Direction.UP)); scene.idle(60); - var blocks = new BlockState[]{ + var blocks = new BlockState[] { AEBlocks.DAMAGED_BUDDING_QUARTZ.block().defaultBlockState(), AEBlocks.FLAWED_BUDDING_QUARTZ.block().defaultBlockState(), AEBlocks.QUARTZ_BLOCK.block().defaultBlockState(), @@ -44,7 +44,7 @@ public static void obtain(SceneBuilder builder, SceneBuildingUtil util) { AEBlocks.CHIPPED_BUDDING_QUARTZ.block().defaultBlockState(), AEBlocks.MYSTERIOUS_CUBE.block().defaultBlockState() }; - var positions = new BlockPos[]{ + var positions = new BlockPos[] { util.grid().at(1, 1, 1), util.grid().at(1, 1, 2), util.grid().at(1, 1, 3), @@ -77,14 +77,15 @@ public static void grow(SceneBuilder builder, SceneBuildingUtil util) { 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().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[]{ + var quartzStages = new BlockState[] { AEBlocks.SMALL_QUARTZ_BUD.block().defaultBlockState(), AEBlocks.MEDIUM_QUARTZ_BUD.block().defaultBlockState(), AEBlocks.LARGE_QUARTZ_BUD.block().defaultBlockState(), @@ -100,7 +101,7 @@ public static void grow(SceneBuilder builder, SceneBuildingUtil util) { .attachKeyFrame(); scene.world().showSection(util.select().position(2, 1, 1), Direction.NORTH); - var degradedStates = new BlockState[]{ + var degradedStates = new BlockState[] { AEBlocks.FLAWLESS_BUDDING_QUARTZ.block().defaultBlockState(), AEBlocks.FLAWED_BUDDING_QUARTZ.block().defaultBlockState(), AEBlocks.CHIPPED_BUDDING_QUARTZ.block().defaultBlockState(), @@ -114,7 +115,8 @@ public static void grow(SceneBuilder builder, SceneBuildingUtil util) { } scene.idle(20); scene.markAsFinished(); - scene.world().setBlocks(util.select().position(2, 1, 2), AEBlocks.FLAWLESS_BUDDING_QUARTZ.block().defaultBlockState(), false); + scene.world().setBlocks(util.select().position(2, 1, 2), + AEBlocks.FLAWLESS_BUDDING_QUARTZ.block().defaultBlockState(), false); BlockPos[] acceleratorPositions = { util.grid().at(3, 1, 2), @@ -122,7 +124,8 @@ public static void grow(SceneBuilder builder, SceneBuildingUtil util) { 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().setBlocks(util.select().position(pos), + AEBlocks.GROWTH_ACCELERATOR.block().defaultBlockState(), false); scene.world().showSection(util.select().position(pos), Direction.DOWN); } scene.overlay().showText(60) @@ -135,7 +138,8 @@ public static void repair(SceneBuilder builder, SceneBuildingUtil util) { 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().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) @@ -143,7 +147,8 @@ public static void repair(SceneBuilder builder, SceneBuildingUtil util) { 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) + 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); 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 index b747834..76b2d0d 100644 --- 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 @@ -1,19 +1,18 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - 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() { - } + private Cable() {} public static void cable(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); 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 index c419c98..8bea8af 100644 --- 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 @@ -1,28 +1,27 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - 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() { - } + 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.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); 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 index d75b722..405a703 100644 --- 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 @@ -1,13 +1,13 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - 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 { 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 index a6d1110..fd30b02 100644 --- 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 @@ -1,19 +1,18 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - 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() { - } + private CraftingSystem() {} public static void system(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); 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 index de01f6d..96487e0 100644 --- 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 @@ -1,8 +1,6 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - import net.createmod.catnip.math.Pointing; import net.createmod.ponder.api.PonderPalette; import net.createmod.ponder.api.scene.SceneBuilder; @@ -11,13 +9,13 @@ 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() { - } + private FormationPlane() {} public static void common(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); @@ -39,11 +37,11 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { 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() - ); + 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.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) @@ -59,8 +57,7 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { scene.world().createItemEntity( util.vector().of(2.5, 1.5, 1.75), util.vector().of(0, 0, 0), - AEBlocks.QUARTZ_BLOCK.asItem().getDefaultInstance() - ); + 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()) @@ -71,7 +68,8 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { .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) + 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 index 5c66618..6d82c0f 100644 --- 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 @@ -1,19 +1,18 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - 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() { - } + private IOPort() {} public static void ioPort(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); 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 index 622f8ce..be38068 100644 --- 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 @@ -1,8 +1,6 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - import net.createmod.catnip.math.Pointing; import net.createmod.ponder.api.PonderPalette; import net.createmod.ponder.api.scene.SceneBuilder; @@ -10,13 +8,13 @@ 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() { - } + private ImportExportBus() {} public static void common(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); @@ -45,7 +43,8 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { 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) + 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); @@ -64,7 +63,8 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { 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) + 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); 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 index eeb86b3..5d89518 100644 --- 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 @@ -1,21 +1,19 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - 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() { - } + private Interface() {} public static void common(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); @@ -43,7 +41,8 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { .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) + 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); 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 index d656e2e..d195ea9 100644 --- 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 @@ -1,18 +1,17 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - 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() { - } + private MolecularAssembler() {} public static void common(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); 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 index d76886c..279681c 100644 --- 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 @@ -1,8 +1,6 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - import net.createmod.catnip.math.Pointing; import net.createmod.ponder.api.PonderPalette; import net.createmod.ponder.api.scene.SceneBuilder; @@ -10,15 +8,14 @@ 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() { - } + private PatternProvider() {} public static void common(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); @@ -39,7 +36,8 @@ public static void common(SceneBuilder builder, SceneBuildingUtil util) { .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) + 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); @@ -102,7 +100,8 @@ public static void parallel(SceneBuilder builder, SceneBuildingUtil util) { .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) + 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(); @@ -117,7 +116,8 @@ public static void parallel(SceneBuilder builder, SceneBuildingUtil util) { .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) + 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); @@ -149,7 +149,8 @@ public static void parallel(SceneBuilder builder, SceneBuildingUtil util) { 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.title("pattern_provider_interaction", + PatternProviderInteractionHeader.translate().getContents().toString()); scene.showBasePlate(); scene.idle(20); cables.showSectionAndConnect(1, 1, 0, 4, 1, 1, Direction.DOWN); @@ -162,7 +163,8 @@ public static void interaction(SceneBuilder builder, SceneBuildingUtil util) { .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) + 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); 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 index b5865d2..c2f411d 100644 --- 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 @@ -1,8 +1,6 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - import net.createmod.catnip.math.Pointing; import net.createmod.ponder.api.PonderPalette; import net.createmod.ponder.api.scene.SceneBuilder; @@ -10,13 +8,13 @@ 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() { - } + private QuantumNetworkBridge() {} public static void bridge(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); @@ -69,13 +67,15 @@ public static void bridge(SceneBuilder builder, SceneBuildingUtil util) { 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) + 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) + 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); @@ -85,7 +85,8 @@ public static void bridge(SceneBuilder builder, SceneBuildingUtil util) { 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) + 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); 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 index e5aad65..f94e57f 100644 --- 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 @@ -1,8 +1,6 @@ // 代码来源于Create Delights's PonderJs,原作者为SSW,已获得授权 package tech.luckyblock.mcmod.ctnhenergy.client.ponder.ae2; -import tech.luckyblock.mcmod.ctnhenergy.client.ponder.CTNHEnergyPonderSceneBuilder; - import net.createmod.catnip.math.Pointing; import net.createmod.ponder.api.PonderPalette; import net.createmod.ponder.api.scene.SceneBuilder; @@ -10,13 +8,13 @@ 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() { - } + private StorageBus() {} public static void common(SceneBuilder builder, SceneBuildingUtil util) { CTNHEnergyPonderSceneBuilder scene = new CTNHEnergyPonderSceneBuilder(builder); @@ -61,7 +59,8 @@ public static void interfaceInteraction(SceneBuilder builder, SceneBuildingUtil 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().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)) @@ -87,7 +86,8 @@ public static void interfaceInteraction(SceneBuilder builder, SceneBuildingUtil 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) + 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;