From 4cf6b4efef78ce254c290bc0d70b31d0569f3f11 Mon Sep 17 00:00:00 2001 From: Li Silin <2667023708@qq.com> Date: Mon, 31 Aug 2026 22:18:00 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat&nerf:=E6=97=B6=E8=A3=85=E4=BA=86?= =?UTF-8?q?=E4=BB=A5=E4=B8=8B=E5=8F=91=E7=94=B5=E6=9C=BA=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=9A=20=E5=BA=94=E5=8A=9B=E5=8F=91=E7=94=B5=E6=9C=BA?= =?UTF-8?q?=EF=BC=9A=E6=9E=81=E5=A4=A7=E5=B9=85=E5=BA=A6=E9=99=8D=E4=BD=8E?= =?UTF-8?q?=E4=B8=8A=E9=99=90=EF=BC=8C=E4=BB=8EHV=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E6=AF=8F=E7=BA=A7=E5=8A=A8=E5=8A=9B=E8=88=B1=E5=87=8F=E5=B0=91?= =?UTF-8?q?10%=E6=95=88=E7=8E=87=20=E6=91=A9=E6=93=A6=E5=8F=91=E7=94=B5?= =?UTF-8?q?=EF=BC=9A=E5=A1=91=E6=96=99=E4=B8=8D=E5=86=8D=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E5=80=8D=E7=8E=87=E8=80=8C=E4=B8=94=E6=8F=90=E4=BE=9B=E5=B9=B6?= =?UTF-8?q?=E8=A1=8C=EF=BC=8C=E5=9F=BA=E7=A1=80=E5=B9=B6=E8=A1=8C=E6=9E=81?= =?UTF-8?q?=E4=BD=8E=EF=BC=8C=E9=99=8D=E4=BD=8E=E9=85=8D=E6=96=B9=E5=8F=91?= =?UTF-8?q?=E7=94=B5=E4=BA=A7=E9=87=8F=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=EF=BC=8C=E6=8F=90=E9=AB=98=E5=B9=B6=E8=A1=8C=E5=8F=91?= =?UTF-8?q?=E7=94=B5=E9=87=8F=20=E9=A3=8E=E5=8A=9B=EF=BC=9A=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E7=BB=B4=E5=BA=A6=E4=B9=98=E5=8C=BA=EF=BC=8C=E9=A3=8E?= =?UTF-8?q?=E5=8A=9B=E5=9F=BA=E7=A1=80=E6=95=88=E7=8E=87=E6=9E=81=E4=BD=8E?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=9F=AD=E7=BA=BF=E6=80=A7=E7=A9=BA?= =?UTF-8?q?=E9=97=B4=20=E5=85=89=E4=BC=8F=EF=BC=9A=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=85=89=E4=BC=8F=E7=9A=84=E6=96=B0=E7=BB=B4=E6=8A=A4=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=EF=BC=8C=E5=B0=86=E9=9C=87=E5=8A=A8=E5=85=89=E4=BC=8F?= =?UTF-8?q?=E9=98=B6=E6=AE=B5=E8=B0=83=E6=95=B4=E5=88=B0EV=E4=B8=AD?= =?UTF-8?q?=E6=9C=9F=EF=BC=8C=E5=A2=9E=E5=BC=BA=E5=85=89=E4=BC=8F=E6=95=B0?= =?UTF-8?q?=E5=80=BC=E5=92=8C=E7=BB=B4=E5=BA=A6=E6=95=B0=E5=80=BC=20?= =?UTF-8?q?=E6=B2=B9=EF=BC=9A=E5=B0=8F=E6=9C=BA=E5=99=A8=E6=94=B9=E4=B8=BA?= =?UTF-8?q?2A=E6=9C=BA=E5=99=A8=EF=BC=8C=E5=A2=9E=E5=A4=A7=20EV=20IV?= =?UTF-8?q?=E4=BA=A7=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/assets/ctnhcore/lang/en_ud.json | 32 ++- .../resources/assets/ctnhcore/lang/en_us.json | 32 ++- .../resources/assets/ctnhcore/lang/zh_cn.json | 36 ++- .../common/block/PhotovoltaicBlock.java | 53 ++++- .../NanoscaleTriboelectricGenerator.java | 43 ++-- .../PhotovoltaicPowerStationMachine.java | 207 ++++++++++++++++-- .../generator/WindPowerArrayMachine.java | 38 +--- .../ctnhcore/data/recipe/NanoRecipes.java | 32 +-- .../PhotovoltaicStationRecipes.java | 6 +- .../machines/multiblock/MultiblocksA.java | 109 +++++++-- .../machines/multiblock/MultiblocksB.java | 10 +- .../multiblock/WindPowerArrayRegister.java | 20 +- 12 files changed, 472 insertions(+), 146 deletions(-) diff --git a/src/generated/resources/assets/ctnhcore/lang/en_ud.json b/src/generated/resources/assets/ctnhcore/lang/en_ud.json index 97f6e9a09..fddd239f9 100644 --- a/src/generated/resources/assets/ctnhcore/lang/en_ud.json +++ b/src/generated/resources/assets/ctnhcore/lang/en_ud.json @@ -621,13 +621,24 @@ "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip5": "buıuunɹ ǝןıɥʍ pǝʞɔoן9§ ؛ʇno unɹ sǝıןddns ɹo ɐʇonb uǝɥʍ sǝsnɐdɔ§ ؛suıɐɯǝɹ ɐʇonb puɐ pǝʇɐɹqıןɐɔ ǝɔuo sʇɹɐʇSɐ§", "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip6": "uǝbʎxO ᗺɯ 00ϛ sǝɯnsuoɔ ǝunʇǝɹ ɥɔɐƎɟ§ :ןɐıɹǝʇɐW buıun⟘p§", "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip0": "uoıʇɐɹǝuǝ⅁ ɹǝʍoԀ ɹɐןoS ɔısɐᗺ", - "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip1": "ʇ/∩Ǝ ᄅƖϛ ɹ§:ʇndʇnO ǝsɐᗺǝ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip1": "ʇ/∩Ǝ ㄣᄅ0Ɩ ɹ§:ʇndʇnO ǝsɐᗺǝ§", "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip2": "pןɹoʍɹǝʌO ǝɥʇ uı uoou sʇɔǝןɟǝɹ ʇndʇno ǝsɐᗺ ˙suoısuǝɯıp ssoɹɔɐ sǝıɹɐʌ ʎɔuǝıɔıɟɟƎ ˙ǝɯıʇʎɐp buıɹnp ʎןuo sǝʇɐɹǝdO", "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip0": "uoıʇɐɹǝuǝ⅁ ɹǝʍoԀ ɹɐןoS pǝɔuɐʌpⱯ", - "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip1": "ʇ/∩Ǝ 8ㄣ0ᄅ ɹ§:ʇndʇnO ǝsɐᗺǝ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip1": "ʇ/∩Ǝ 960ㄣ ɹ§:ʇndʇnO ǝsɐᗺǝ§", "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip2": "pןɹoʍɹǝʌO ǝɥʇ uı uoou sʇɔǝןɟǝɹ ʇndʇno ǝsɐᗺ ˙suoısuǝɯıp ssoɹɔɐ sǝıɹɐʌ ʎɔuǝıɔıɟɟƎ ˙ǝɯıʇʎɐp buıɹnp ʎןuo sǝʇɐɹǝdO", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipctrlhint": "sɹǝıןdıʇןnɯ uoısuǝɯıp ʍǝıʌ oʇㄥ§ Ꞁᴚ⟘Ɔǝ§ pןoHㄥ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdamage": "pǝʍopɐɥs ǝןıɥʍ ɹo ʇɥbıu ʇɐ ǝbɐɯɐp ou ؛ɹǝıןdıʇןnɯ uoısuǝɯıp puɐ ʇɥbıןuns ɥʇıʍ sǝןɐɔs uoıʇɐpɐɹbǝᗡ ˙%0ϛ oʇ uʍop 'ʇndʇno ɹǝʍoן suɐǝɯ ǝbɐɯɐp ɹǝɥbıH ˙buıʇɐɹǝuǝb ǝןıɥʍ ǝpɐɹbǝp sןǝuɐԀɔ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdamagerate": "%s%% ɹ§:ǝʇɐᴚ uoıʇɐpɐɹbǝᗡǝ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionaether": "ᄅ×ɟ§ :)ʇıqɹo ˙ןɔuı( snuǝΛ / uooW / ɹǝɥʇǝⱯ ㄥ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionglacio": "9Ɩ×ɟ§ :)ʇıqɹo ˙ןɔuı( oıɔɐן⅁ ㄥ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionheader": ":sɹǝıןdıʇןnW uoısuǝɯıᗡq§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionmercury": "8×ɟ§ :)ʇıqɹo ˙ןɔuı( sɹɐW / ʎɹnɔɹǝW ㄥ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionnone": "ǝʇɐɹǝuǝb ʇouuɐɔ :suoısuǝɯıp ɹǝɥʇO ɔ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionoverworld": "Ɩ×ɟ§ :ɯıǝɥɟןⱯ / ʇsǝɹoℲ ʇɥbıןıʍ⟘ / pןɹoʍɹǝʌO ㄥ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltiprepair": "ǝbɐɯɐp %ϛ˙0 ʍoןǝq ɹıɐdǝɹ ʇouuɐƆ ˙%Ɩ sɹıɐdǝɹ ʇsnᗡ ǝuoʇsʍoן⅁ '%ϛ sɹıɐdǝɹ ʇsnᗡ ɯnıɹɐuunS :ʞɔıןɔ ɹǝd Ɩ buıɯnsuoɔ 'ןɐıɹǝʇɐɯ ɹıɐdǝɹ ɥʇıʍ ʞɔoןq ɔıɐʇןoʌoʇoɥd ɐ ɹo ɹǝןןoɹʇuoɔ ǝɥʇ ʞɔıןɔ-ʇɥbıᴚɐ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltiprepairsunnariumonly": "ǝbɐɯɐp %ϛ˙0 ʍoןǝq ɹıɐdǝɹ ʇouuɐƆ ˙ɐ§ɹǝıʇ sıɥʇ uo ʞɹoʍ ʇou sǝop ʇsnᗡ ǝuoʇsʍoן⅁ɔ§ ˙%ϛ ɹıɐdǝɹ oʇ ʞɔıןɔ ɹǝd Ɩ buıɯnsuoɔ 'ʇsnᗡ ɯnıɹɐuunS ɥʇıʍ ʞɔoןq ɔıɐʇןoʌoʇoɥd ɐ ɹo ɹǝןןoɹʇuoɔ ǝɥʇ ʞɔıןɔ-ʇɥbıᴚɐ§", "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip0": "uoıʇɐɹǝuǝ⅁ ɹǝʍoԀ ɹɐןoS ǝʇɐɯıʇן∩", - "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip1": "ʇ/∩Ǝ ᄅ6Ɩ8 ɹ§:ʇndʇnO ǝsɐᗺǝ§", + "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip1": "ʇ/∩Ǝ 9Ɛϛϛ9 ɹ§:ʇndʇnO ǝsɐᗺǝ§", "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip2": "pןɹoʍɹǝʌO ǝɥʇ uı uoou sʇɔǝןɟǝɹ ʇndʇno ǝsɐᗺ ˙suoısuǝɯıp ssoɹɔɐ sǝıɹɐʌ ʎɔuǝıɔıɟɟƎ ˙ǝɯıʇʎɐp buıɹnp ʎןuo sǝʇɐɹǝdO", "ctnhcore.multiblocksa.plasmacondensertooltip1": "ʍǝp puɐ ʇsoɹɟ oʇuı sǝsuǝpuoɔ ɹıɐ ǝsuǝp ǝɥ⟘", "ctnhcore.multiblocksa.reductionprecipitationtanktooltip1": "˙sɯɹoɟ ǝʇɐʇıdıɔǝɹd ǝɥʇ ɹǝɥʇǝɥʍ sǝpıɔǝp Hd ʞuɐʇ 'uoıʇɔnpǝɹ ɹǝbuoɹʇs suɐǝɯ ןɐıʇuǝʇod ǝʌıʇɐbǝu ǝɹoɯ ؛ɯnıqɹǝʇʇʎ puɐ ɯnıdoɹnǝ sɐ ɥɔns sɥʇɹɐǝ ǝɹɐɹ ǝʇɐʇıdıɔǝɹd ʎןǝʌıʇɔǝןǝs puɐ ǝɔnpǝɹ oʇ ǝɔuǝןɐʌ ǝןqɐıɹɐʌ sǝs∩ㄥ§", @@ -724,9 +735,9 @@ "ctnhcore.multiblocksb.lasersortertooltip8": "ɐןnɯɹoɟ buıɥɔʇƎ ɹǝsɐꞀ ǝɥʇ buısn ʇı ǝʇɐןnɔןɐɔ 'ʇou sǝop ʇı ɟı ؛uoıʇɐʇndɯoɔ pǝɹınbǝɹ ǝɥʇ sǝıɟıɔǝds ǝdıɔǝɹ ǝɥ⟘", "ctnhcore.multiblocksb.lasersortertooltip9": "Ɛ^)ʇuǝɯǝɹınbǝɹ ǝsɐq / uoıʇɐʇndɯoɔ ʇnduı(ɹooןɟ = ɯsıןǝןןɐɹɐd 'ʇuǝɯǝɹınbǝɹ ǝsɐq ǝɥʇ ɟo ǝןdıʇןnɯ ɹǝbǝʇuı uɐ sı uoıʇɐʇndɯoɔ ʇnduı ɟI", "ctnhcore.multiblocksb.nanogeneratortooltip0": "ʇɐǝɥ uoıʇɔıɹɟ ɟo ɹǝʍod ǝɥʇ ǝzıןıʇ∩", - "ctnhcore.multiblocksb.nanogeneratortooltip1": "8ㄣ0ᄅ :ʇunoɔ ןǝןןɐɹɐd ɯnɯıxɐW", - "ctnhcore.multiblocksb.nanogeneratortooltip2": ")ʇunoɔ ןǝןןɐɹɐd(ʇɹbs * ǝɯıʇ ǝdıɔǝɹ sı ǝɯıʇ uoıʇɐɹǝdo ןɐnʇɔⱯ\n%ㄣ ʎq sǝsɐǝɹɔuı uoıʇɐɹǝuǝb ɹǝʍod ןɐʇoʇ 'ssǝɔoɹd ןǝןןɐɹɐd ɥɔɐǝ ɹoℲ", - "ctnhcore.multiblocksb.nanogeneratortooltip3": "9ㄥϛ8ㄣ0Ɩ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ɹǝıןdıʇןnɯ xϛ :ʇǝǝɥS ǝןozɐpıɯızuǝqʎןoԀ\n0ㄥ0ƖƐƖ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ɹǝıןdıʇןnɯ x9˙ㄣ :ʇǝǝɥS ɹǝqqnᴚ ǝuǝıpɐʇnᗺ-ǝuǝɹʎʇS\nϛƐϛϛ9 / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ɹǝıןdıʇןnɯ xᄅ˙Ɛ :ʇǝǝɥS ƎℲ⟘Ԁ\n960ㄣ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ɹǝıןdıʇןnɯ xㄣ˙ᄅ :ʇǝǝɥS ɹǝqqnᴚ ǝuoɔıןıS\nㄣᄅ0Ɩ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ɹǝıןdıʇןnɯ x9˙Ɩ :ʇǝǝɥS ǝuǝןʎɥʇǝʎןoԀ\nᄅƖϛ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ɹǝıןdıʇןnɯ x0˙Ɩ :ʇǝǝɥS ɹǝqqnᴚ\nɹǝıןdıʇןnɯ x8˙0 :ןɐıɹǝʇɐɯ oN\npǝɯnsuoɔ ǝq osןɐ ʎɐɯ ןɐıɹǝʇɐɯ ɥɔɐǝ ʇnq 'ɹǝıןdıʇןnɯ ǝɥʇ sǝsɐǝɹɔuı ɹǝןןoɹʇuoɔ ǝɥʇ oʇuı sןɐıɹǝʇɐɯ ɔıɟıɔǝds buıʇɹǝsuI", + "ctnhcore.multiblocksb.nanogeneratortooltip1": "ᄅƐ :ʇunoɔ ןǝןןɐɹɐd ǝsɐᗺ", + "ctnhcore.multiblocksb.nanogeneratortooltip2": ")ʇunoɔ ןǝןןɐɹɐd(ʇɹbs * ǝɯıʇ ǝdıɔǝɹ sı ǝɯıʇ uoıʇɐɹǝdo ןɐnʇɔⱯ\n%Ɩ ʎq sǝsɐǝɹɔuı uoıʇɐɹǝuǝb ɹǝʍod ןɐʇoʇ 'ssǝɔoɹd ןǝןןɐɹɐd ɥɔɐǝ ɹoℲ", + "ctnhcore.multiblocksb.nanogeneratortooltip3": "0ㄣƖᄅ9ᄅ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ןǝןןɐɹɐd ㄣᄅ0Ɩ :ʇǝǝɥS ǝןozɐpıɯızuǝqʎןoԀ\n0ㄥ0ƖƐƖ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ןǝןןɐɹɐd 89ㄥ :ʇǝǝɥS ɹǝqqnᴚ ǝuǝıpɐʇnᗺ-ǝuǝɹʎʇS\n9Ɛϛϛ9 / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ןǝןןɐɹɐd ㄣ8Ɛ :ʇǝǝɥS ƎℲ⟘Ԁ\n8ㄣ0ᄅ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ןǝןןɐɹɐd ᄅ6Ɩ :ʇǝǝɥS ɹǝqqnᴚ ǝuoɔıןıS\nᄅƖϛ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ןǝןןɐɹɐd 96 :ʇǝǝɥS ǝuǝןʎɥʇǝʎןoԀ\n9ϛᄅ / ʇunoɔ ןǝןןɐɹɐd = ǝɔuɐɥɔ uoıʇdɯnsuoɔ 'ןǝןןɐɹɐd ㄣ9 :ʇǝǝɥS ɹǝqqnᴚ\nןǝןןɐɹɐd ᄅƐ :ןɐıɹǝʇɐɯ oN\npǝɯnsuoɔ ǝq osןɐ ʎɐɯ ןɐıɹǝʇɐɯ ɥɔɐǝ ʇnq 'ʇunoɔ ןǝןןɐɹɐd ǝsɐq ǝɥʇ sǝɔɐןdǝɹ ɹǝןןoɹʇuoɔ ǝɥʇ oʇuı sןɐıɹǝʇɐɯ ɔıɟıɔǝds buıʇɹǝsuI", "ctnhcore.multiblocksb.neuromatrixcompilertip0": "ɔıboן ןɐuoɹnǝu oʇuı uoıʇɔǝɟɹǝd ǝʇɐɯıʇןn ɹno buıןıdɯoɔ 'sǝʌןǝsɹno ǝɔuǝnbǝs ɔıʇǝuǝb ʎɹǝʌǝ ǝpoɔuǝ ʍou ןןıʍ ǝM ˙ʍoןs puɐ ʇuǝıɔıɟɟǝuı sı ǝɟıן pǝsɐq-uoqɹɐɔ ɟo uoıʇnןoʌǝ ןɐɹnʇɐu ǝɥʇ oʇ ʎןǝɹıʇuǝ sbuıǝq buıʌıן ɟo uoıʇnןoʌǝ ǝɥʇ buıʌɐǝꞀ", "ctnhcore.multiblocksb.neuromatrixcompilertip01": "pǝʞɔoןɔɹǝʌo ǝq ʇouuɐɔ puɐ ɔıboן ʇnduı ןɐɯɹou ǝsn ʇou sǝop ʇı 'sǝuıɥɔɐɯ ɹǝɥʇo ǝʞıןu∩ ˙sǝɔuǝnbǝs ןɐɹnǝu sǝןıdɯoɔ )ԀWƆ( ɹǝןıdɯoƆ xıɹʇɐW ןɐɹnǝN ǝɥ⟘", "ctnhcore.multiblocksb.neuromatrixcompilertip1": "ㄣ sı ʇɥbıɹ-ʞɔɐq puɐ 'Ɛ sı ʇɟǝן-ʞɔɐq 'ᄅ sı ʇɥbıɹ-ʇuoɹɟ 'Ɩ sı ɹǝןןoɹʇuoɔ ǝɥʇ ɟo ʇɟǝן-ʇuoɹɟ ǝɥʇ :sʍoןןoɟ sɐ pǝxıɟ ʎןʇuǝɹɹnɔ ǝɹɐ suoıbǝᴚ ˙)pǝʇuǝɯǝןdɯı ʇou( uoıbǝɹ pǝubıssɐ sʇı sʎɐןdsıp ɹǝqɯɐɥɔ ɥɔɐǝ 'buıpoɔuǝ ɹǝʇɟⱯ ˙ɹǝıʇ ǝɯɐs ǝɥʇ ǝq ʇsnɯ sɹǝqɯɐɥɔ ɥɔɹɐǝsǝɹ ןןɐ puɐ 'pǝʇǝןdɯoɔ sı ǝɹnʇɔnɹʇs ǝɥʇ uǝɥʍ pǝpoɔuǝ sı ɹǝqɯɐɥɔ ɥɔɐƎ ˙sɹǝqɯɐɥƆ ɥɔɹɐǝsǝᴚ xıɹʇɐW ןɐɹnǝN 9 ɟo sʇsısuoɔ ʇnduı ǝuıɥɔɐɯ ǝɥ⟘", @@ -913,10 +924,14 @@ "ctnhcore.ore_vein.zirkelite_vein": "uıǝΛ ǝʇıןǝʞɹıZ", "ctnhcore.photovoltaicdronestation.pvdroneinfot1": "%d :pǝıןddns ɹǝʍoԀ", "ctnhcore.photovoltaicdronestation.pvdroneinfot2": "ɟㄣ˙% :ǝɔuɐɥɔ uoıʇdɯnsuoɔ ǝuoɹᗡ", - "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfo1": "%s%% :ʎɔuǝıɔıɟɟƎ", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfo1": "%s%% :ʎɔuǝıɔıɟɟƎ ןɐuıℲ", "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfo2": "ʇ/∩Ǝ %s/%s :buıʇɐɹǝuǝ⅁", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfodamage": "%s%% :ǝbɐɯɐᗡ", "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfoinvalid": "pǝʍopɐɥS", "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfonight": "ʇɥbıu ʇⱯ", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationrepairglowstonerejected": "ʇsnᗡ ǝuoʇsʍoן⅁ ɥʇıʍ pǝɹıɐdǝɹ ǝq ʇouuɐɔ ןǝuɐd ɔıɐʇןoʌoʇoɥd sıɥ⟘", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationrepairmessage": "%s%% ʍou ǝbɐɯɐᗡ ˙pǝɹıɐdǝᴚ", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationrepairtoolow": "pǝpǝǝu ʇou ɹıɐdǝɹ '%s%% ʍoןǝq ǝbɐɯɐᗡ", "ctnhcore.ponder.assembly_line_building.header": "ǝuıꞀ ʎןqɯǝssⱯ ǝʇɐɯoʇnɐ oʇ ʍoH", "ctnhcore.ponder.assembly_line_building.text_1": "˙ɹǝןןoɹʇuoɔ ǝuıꞀ ʎןqɯǝssⱯ uɐ ǝɔɐןd 'ʇsɹıℲ", "ctnhcore.ponder.assembly_line_building.text_10": "˙ʇɔnpoɹd uıɐɯ ǝɥʇ ɹoɟ ʇıɐʍ oʇ ǝpoɯ ʞɔoן ɹǝpıʌoɹd uɹǝʇʇɐd ǝɥʇ ʇǝs uǝɥʇ 'uoʇʇnq ,+, ǝɥʇ ɥʇıʍ uɹǝʇʇɐd ʞɔıןɔ-ǝuo ǝɥʇ ǝpoɔuƎ", @@ -1023,11 +1038,12 @@ "ctnhcore.windpowerarrayregister.windarraytooltip2": ")ɥʇɹɐǝ uo(ㄥ§ ʇ/∩Ǝ %dǝ§ :uoıʇɔnpoɹԀ ɔısɐᗺ -ɟ§", "ctnhcore.windpowerarrayregister.windarraytooltip3": "ㄣx ɹǝpunɥ⟘ 'ᄅx ʎuıɐᴚǝ§ :ʇsooᗺ ɹǝɥʇɐǝM -ɟ§", "ctnhcore.windpowerarrayregister.windarraytooltip4": ")ㄣ9-9ϛᄅ( / )ㄣ9-9ϛᄅ '0 'ㄣ9-ʎ(dɯɐןƆǝ§ :ʇsooᗺ ǝpnʇıʇןⱯ -ɟ§", - "ctnhcore.windpowerarrayregister.windarraytooltip5": "])ǝzıSʇǝN(ᄅboן[*Ɛ˙0 ǝ§ :ʇsooᗺ ʞɹoʍʇǝN -ɟ§", + "ctnhcore.windpowerarrayregister.windarraytooltip5": ")0Ɩ-ǝzıs(ᄅboן×ᄅ˙0+ ssǝɔxǝ 'ǝzıs×ᄅ˙0 :0Ɩ≤ ǝ§ :ʇsooᗺ ʞɹoʍʇǝN -ɟ§", "ctnhcore.windpowerarrayregister.windarraytooltip6": "˙uoıʇɔnpoɹd ǝuıɯɹǝʇǝp oʇ pǝıןdıʇןnɯ ǝɹɐ sʇsooq ןןⱯɟ§", "ctnhcore.windpowerarrayregister.windarraytooltip7": "˙ʇuɐɔıɹqnꞀ ɟ§s/ᗺɯ %dǝ§ sǝɹınbǝᴚɟ§", "ctnhcore.windpowerarrayregister.windarraytooltip8": "------------------8§ʞɹoʍʇǝN puıMɐ§-----------------8§", "ctnhcore.windpowerarrayregister.windarraytooltip9": "˙ʞɹoʍʇǝN puıM ɐ ɯɹoɟ Ɩ =< ɟo ǝɔuɐʇsıp ɐ uıɥʇıʍ ǝɹnʇɔnɹʇs pǝubıןⱯɟ§", + "ctnhcore.windpowerarrayregister.windarraywaringtooltip": "ɟᄅ˙% ʎןuo sı ʎɔuǝıɔıɟɟǝ ǝsɐq s,ǝuıɥɔɐɯ puıʍ sıɥʇ os 'ʇndʇno uıɐʇsns oʇ sǝןbbnɹʇs ǝuıqɹnʇ ǝuoןɐpuɐʇs Ɐ", "ctnhcore.wpaacceleratorgui.wideacceleratorguielectric": "ǝuıןɯɐǝᗺ uoɹʇɔǝןƎ", "ctnhcore.wpaacceleratorgui.wideacceleratorguiname": "ǝuıןɯɐǝᗺ ssǝɔɔⱯ", "ctnhcore.wpaacceleratorgui.wideacceleratorguinu": "ǝuıןɯɐǝᗺ uoɹʇnǝN", diff --git a/src/generated/resources/assets/ctnhcore/lang/en_us.json b/src/generated/resources/assets/ctnhcore/lang/en_us.json index 370d7b368..d141614b4 100644 --- a/src/generated/resources/assets/ctnhcore/lang/en_us.json +++ b/src/generated/resources/assets/ctnhcore/lang/en_us.json @@ -621,13 +621,24 @@ "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip5": "§aStarts once calibrated and quota remains; §cpauses when quota or supplies run out; §6locked while running", "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip6": "§dTuning Material: §fEach retune consumes 500 mB Oxygen", "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip0": "Basic Solar Power Generation", - "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip1": "§eBase Output:§r 512 EU/t", + "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip1": "§eBase Output:§r 1024 EU/t", "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip2": "Operates only during daytime. Efficiency varies across dimensions. Base output reflects noon in the Overworld", "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip0": "Advanced Solar Power Generation", - "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip1": "§eBase Output:§r 2048 EU/t", + "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip1": "§eBase Output:§r 4096 EU/t", "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip2": "Operates only during daytime. Efficiency varies across dimensions. Base output reflects noon in the Overworld", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipctrlhint": "§7Hold §eCTRL §7to view dimension multipliers", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdamage": "§cPanels degrade while generating. Higher damage means lower output, down to 50%. Degradation scales with sunlight and dimension multiplier; no damage at night or while shadowed", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdamagerate": "§eDegradation Rate:§r %s%%", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionaether": "§7 Aether / Moon / Venus (incl. orbit): §f×2", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionglacio": "§7 Glacio (incl. orbit): §f×16", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionheader": "§bDimension Multipliers:", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionmercury": "§7 Mercury / Mars (incl. orbit): §f×8", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionnone": "§c Other dimensions: cannot generate", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionoverworld": "§7 Overworld / Twilight Forest / Alfheim: §f×1", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltiprepair": "§aRight-click the controller or a photovoltaic block with repair material, consuming 1 per click: Sunnarium Dust repairs 5%, Glowstone Dust repairs 1%. Cannot repair below 0.5% damage", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltiprepairsunnariumonly": "§aRight-click the controller or a photovoltaic block with Sunnarium Dust, consuming 1 per click to repair 5%. §cGlowstone Dust does not work on this tier§a. Cannot repair below 0.5% damage", "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip0": "Ultimate Solar Power Generation", - "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip1": "§eBase Output:§r 8192 EU/t", + "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip1": "§eBase Output:§r 65536 EU/t", "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip2": "Operates only during daytime. Efficiency varies across dimensions. Base output reflects noon in the Overworld", "ctnhcore.multiblocksa.plasmacondensertooltip1": "The dense air condenses into frost and dew", "ctnhcore.multiblocksa.reductionprecipitationtanktooltip1": "§7Uses variable valence to reduce and selectively precipitate rare earths such as europium and ytterbium; more negative potential means stronger reduction, tank pH decides whether the precipitate forms.", @@ -724,9 +735,9 @@ "ctnhcore.multiblocksb.lasersortertooltip8": "The recipe specifies the required computation; if it does not, calculate it using the Laser Etching formula", "ctnhcore.multiblocksb.lasersortertooltip9": "If input computation is an integer multiple of the base requirement, parallelism = floor(input computation / base requirement)^3", "ctnhcore.multiblocksb.nanogeneratortooltip0": "Utilize the power of friction heat", - "ctnhcore.multiblocksb.nanogeneratortooltip1": "Maximum parallel count: 2048", - "ctnhcore.multiblocksb.nanogeneratortooltip2": "For each parallel process, total power generation increases by 4%\nActual operation time is recipe time * sqrt(parallel count)", - "ctnhcore.multiblocksb.nanogeneratortooltip3": "Inserting specific materials into the controller increases the multiplier, but each material may also be consumed\nNo material: 0.8x multiplier\nRubber Sheet: 1.0x multiplier, consumption chance = parallel count / 512\nPolyethylene Sheet: 1.6x multiplier, consumption chance = parallel count / 1024\nSilicone Rubber Sheet: 2.4x multiplier, consumption chance = parallel count / 4096\nPTFE Sheet: 3.2x multiplier, consumption chance = parallel count / 65535\nStyrene-Butadiene Rubber Sheet: 4.6x multiplier, consumption chance = parallel count / 131070\nPolybenzimidazole Sheet: 5x multiplier, consumption chance = parallel count / 1048576", + "ctnhcore.multiblocksb.nanogeneratortooltip1": "Base parallel count: 32", + "ctnhcore.multiblocksb.nanogeneratortooltip2": "For each parallel process, total power generation increases by 1%\nActual operation time is recipe time * sqrt(parallel count)", + "ctnhcore.multiblocksb.nanogeneratortooltip3": "Inserting specific materials into the controller replaces the base parallel count, but each material may also be consumed\nNo material: 32 parallel\nRubber Sheet: 64 parallel, consumption chance = parallel count / 256\nPolyethylene Sheet: 96 parallel, consumption chance = parallel count / 512\nSilicone Rubber Sheet: 192 parallel, consumption chance = parallel count / 2048\nPTFE Sheet: 384 parallel, consumption chance = parallel count / 65536\nStyrene-Butadiene Rubber Sheet: 768 parallel, consumption chance = parallel count / 131070\nPolybenzimidazole Sheet: 1024 parallel, consumption chance = parallel count / 262140", "ctnhcore.multiblocksb.neuromatrixcompilertip0": "Leaving the evolution of living beings entirely to the natural evolution of carbon-based life is inefficient and slow. We will now encode every genetic sequence ourselves, compiling our ultimate perfection into neuronal logic", "ctnhcore.multiblocksb.neuromatrixcompilertip01": "The Neural Matrix Compiler (CMP) compiles neural sequences. Unlike other machines, it does not use normal input logic and cannot be overclocked", "ctnhcore.multiblocksb.neuromatrixcompilertip1": "The machine input consists of 6 Neural Matrix Research Chambers. Each chamber is encoded when the structure is completed, and all research chambers must be the same tier. After encoding, each chamber displays its assigned region (not implemented). Regions are currently fixed as follows: the front-left of the controller is 1, front-right is 2, back-left is 3, and back-right is 4", @@ -913,10 +924,14 @@ "ctnhcore.ore_vein.zirkelite_vein": "Zirkelite Vein", "ctnhcore.photovoltaicdronestation.pvdroneinfot1": "Power supplied: %d", "ctnhcore.photovoltaicdronestation.pvdroneinfot2": "Drone consumption chance: %.4f", - "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfo1": "Efficiency: %s%%", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfo1": "Final Efficiency: %s%%", "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfo2": "Generating: %s/%s EU/t", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfodamage": "Damage: %s%%", "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfoinvalid": "Shadowed", "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfonight": "At night", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationrepairglowstonerejected": "This photovoltaic panel cannot be repaired with Glowstone Dust", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationrepairmessage": "Repaired. Damage now %s%%", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationrepairtoolow": "Damage below %s%%, repair not needed", "ctnhcore.ponder.assembly_line_building.header": "How to automate Assembly Line", "ctnhcore.ponder.assembly_line_building.text_1": "First, place an Assembly Line controller.", "ctnhcore.ponder.assembly_line_building.text_10": "Encode the one-click pattern with the '+' button, then set the pattern provider lock mode to wait for the main product.", @@ -1023,11 +1038,12 @@ "ctnhcore.windpowerarrayregister.windarraytooltip2": "§f- Basic Production: §e%d EU/t §7(on earth)", "ctnhcore.windpowerarrayregister.windarraytooltip3": "§f- Weather Boost: §eRainy x2, Thunder x4", "ctnhcore.windpowerarrayregister.windarraytooltip4": "§f- Altitude Boost: §eClamp(Y-64, 0, 256-64) / (256-64)", - "ctnhcore.windpowerarrayregister.windarraytooltip5": "§f- Network Boost: §e 0.3*[log2(NetSize)]", + "ctnhcore.windpowerarrayregister.windarraytooltip5": "§f- Network Boost: §e ≤10: 0.2×size, excess +0.2×log2(size-10)", "ctnhcore.windpowerarrayregister.windarraytooltip6": "§fAll boosts are multiplied to determine production.", "ctnhcore.windpowerarrayregister.windarraytooltip7": "§fRequires §e%d mB/s§f Lubricant.", "ctnhcore.windpowerarrayregister.windarraytooltip8": "§8-----------------§aWind Network§8------------------", "ctnhcore.windpowerarrayregister.windarraytooltip9": "§fAligned structure within a distance of <= 1 form a Wind Network.", + "ctnhcore.windpowerarrayregister.windarraywaringtooltip": "A standalone turbine struggles to sustain output, so this wind machine's base efficiency is only %.2f", "ctnhcore.wpaacceleratorgui.wideacceleratorguielectric": "Electron Beamline", "ctnhcore.wpaacceleratorgui.wideacceleratorguiname": "Access Beamline", "ctnhcore.wpaacceleratorgui.wideacceleratorguinu": "Neutron Beamline", diff --git a/src/generated/resources/assets/ctnhcore/lang/zh_cn.json b/src/generated/resources/assets/ctnhcore/lang/zh_cn.json index 9c17841b0..f57b675a7 100644 --- a/src/generated/resources/assets/ctnhcore/lang/zh_cn.json +++ b/src/generated/resources/assets/ctnhcore/lang/zh_cn.json @@ -663,13 +663,24 @@ "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip5": "§a达标且额度充足自动启动;§c额度用尽或材料不足会暂停;§6运行时锁定", "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip6": "§d调参原料:§f每次调参消耗 500 mB 氧气", "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip0": "简易太阳能发电", - "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip1": "§e基础产能功率:§r512 EU/t", + "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip1": "§e基础产能功率:§r2048 EU/t", "ctnhcore.multiblocksa.photovoltaicpowerstationenergetictooltip2": "只在白天工作,不同维度会对太阳能发电的效率产生影响,基础产能功率为在主世界正午的功率", "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip0": "高效太阳能发电", - "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip1": "§e基础产能功率:§r2048 EU/t", + "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip1": "§e基础产能功率:§r8192 EU/t", "ctnhcore.multiblocksa.photovoltaicpowerstationpulsatingtooltip2": "只在白天工作,不同维度会对太阳能发电的效率产生影响,基础产能功率为在主世界正午的功率", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipctrlhint": "§7按住 §eCTRL §7查看各维度倍率", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdamage": "§c发电时光伏面板会逐渐损坏,损坏度越高产能越低,最低降至 50%;损坏速度随光照强度与维度倍率提升,夜晚与被遮挡时不损坏", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdamagerate": "§e损坏速度:§r%s%%", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionaether": "§7 以太 / 月球 / 金星(含轨道):§f×2", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionglacio": "§7 冰原(含轨道):§f×16", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionheader": "§b维度倍率:", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionmercury": "§7 水星 / 火星(含轨道):§f×8", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionnone": "§c 其他维度:无法发电", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltipdimensionoverworld": "§7 主世界 / 暮色森林 / 阿尔夫海姆:§f×1", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltiprepair": "§a手持修复材料右键控制器或光伏方块即可修复,每次消耗 1 个:阳光化合物粉修复 5%,萤石粉修复 1%;损坏度低于 0.5% 时无法修复", + "ctnhcore.multiblocksa.photovoltaicpowerstationtooltiprepairsunnariumonly": "§a手持阳光化合物粉右键控制器或光伏方块即可修复,每次消耗 1 个修复 5%;§c该等级无法使用萤石粉修复§a;损坏度低于 0.5% 时无法修复", "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip0": "究极太阳能发电", - "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip1": "§e基础产能功率:§r8192 EU/t", + "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip1": "§e基础产能功率:§r65536 EU/t", "ctnhcore.multiblocksa.photovoltaicpowerstationvibranttooltip2": "只在白天工作,不同维度会对太阳能发电的效率产生影响,基础产能功率为在主世界正午的功率", "ctnhcore.multiblocksa.plasmacondensertooltip1": "氤氲之气,凝为霜露", "ctnhcore.multiblocksa.reductionprecipitationtanktooltip1": "§7利用铕、镱等稀土的可变价特性,把目标元素还原成低价后选择性沉淀,与其余稀土分离;氧化还原电位越负还原越强,槽液 pH 决定沉淀能否生成。", @@ -766,9 +777,9 @@ "ctnhcore.multiblocksb.lasersortertooltip8": "配方给出请求算力,如果配方没有给出则按照激光蚀刻模式的公式计算", "ctnhcore.multiblocksb.lasersortertooltip9": "输入的算力如果为基础请求算力的整数倍,则并行等同于⌊(输入的算力/基础请求算力)⌋的三次方", "ctnhcore.multiblocksb.nanogeneratortooltip0": "利用摩擦热的力量", - "ctnhcore.multiblocksb.nanogeneratortooltip1": "最大并行数:2048", - "ctnhcore.multiblocksb.nanogeneratortooltip2": "每有1并行数,总体发电量提升4%\n实际运行时间为配方时间*sqrt(并行数)", - "ctnhcore.multiblocksb.nanogeneratortooltip3": "在控制器内放入特定材料可提升倍率,但也有概率消耗\n无材料:0.8倍率\n橡胶片:1.0倍率,并行数/512几率消耗\n聚乙烯片:1.6倍率,并行数/1024几率消耗\n硅橡胶片:2.4倍率,并行数/4096几率消耗\n聚四氟乙烯片:3.2倍率,并行数/65535几率消耗\n丁苯橡胶片:4.6倍率,并行数/131070几率消耗\n聚苯并咪唑片:5倍率,并行数/1048576几率消耗", + "ctnhcore.multiblocksb.nanogeneratortooltip1": "基础并行数:32", + "ctnhcore.multiblocksb.nanogeneratortooltip2": "每有1并行数,总体发电量提升1%\n实际运行时间为配方时间*sqrt(并行数)", + "ctnhcore.multiblocksb.nanogeneratortooltip3": "在控制器内放入特定材料可替代基础并行数,但也有概率消耗\n无材料:32并行\n橡胶片:64并行,并行数/256几率消耗\n聚乙烯片:96并行,并行数/512几率消耗\n硅橡胶片:192并行,并行数/2048几率消耗\n聚四氟乙烯片:384并行,并行数/65536几率消耗\n丁苯橡胶片:768并行,并行数/131070几率消耗\n聚苯并咪唑片:1024并行,并行数/262140几率消耗", "ctnhcore.multiblocksb.neuromatrixcompilertip0": "将生物的进化之道完全放任于碳基生物的自然演变是一种低效且缓慢的做法,现在我们将亲自编码每一个基因序列,将我们的至臻完美编译在神经元的逻辑之中", "ctnhcore.multiblocksb.neuromatrixcompilertip01": "神经矩阵编码器(CMP)是一台编译神经序列的机器,其不同于其他机器,不执行正常的输入逻辑,无法超频", "ctnhcore.multiblocksb.neuromatrixcompilertip1": "该机器的输入由6个神经矩阵研究舱室组成,每个舱室在结构完成时将被编码,所有研究舱室必须为同一等级,编码完成后,每个研究舱室将会显示他们所属的片区(并未实现)现在片区分配固定为:机器主方块左前方为1,右前方为2,左后方为3,右后方为4", @@ -965,10 +976,14 @@ "ctnhcore.photovoltaic_generator": "光伏发电", "ctnhcore.photovoltaicdronestation.pvdroneinfot1": "提供的能量:%d", "ctnhcore.photovoltaicdronestation.pvdroneinfot2": "无人机消耗概率:%.4f", - "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfo1": "发电效率:%s%%", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfo1": "最终效率:%s%%", "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfo2": "产能功率:%s/%s EU/t", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfodamage": "损坏度:%s%%", "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfoinvalid": "有方块阻挡", "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationinfonight": "光照过于微弱", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationrepairglowstonerejected": "该光伏面板无法使用萤石粉修复", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationrepairmessage": "已修复,当前损坏度:%s%%", + "ctnhcore.photovoltaicpowerstationmachine.photovoltaicpowerstationrepairtoolow": "损坏度低于 %s%%,无需修复", "ctnhcore.plasma_condenser": "等离子冷凝", "ctnhcore.ponder.assembly_line_building.header": "如何自动化装配线", "ctnhcore.ponder.assembly_line_building.text_1": "首先放置装配线主方块。", @@ -1091,13 +1106,14 @@ "ctnhcore.windpowerarrayregister.windarraytooltip10": "§f润滑油会从风力网络中抽取.", "ctnhcore.windpowerarrayregister.windarraytooltip11": "§5顺应风力网络的工作规律,以抵挡自然之力的摧残", "ctnhcore.windpowerarrayregister.windarraytooltip2": "§f- 基础发电功率: §e%d EU/t §7(地球)", - "ctnhcore.windpowerarrayregister.windarraytooltip3": "§f- 天气风力增益: §e雨天x2,雷雨x4", - "ctnhcore.windpowerarrayregister.windarraytooltip4": "§f- 高度增益: §e Clamp(Y-64, 0, 256-64) / (256-64)", - "ctnhcore.windpowerarrayregister.windarraytooltip5": "§f- 网络增益: §e 0.3*[log2(网络大小)]", + "ctnhcore.windpowerarrayregister.windarraytooltip3": "§f- 天气风力增益: §e雨天x1.5,雷雨x2", + "ctnhcore.windpowerarrayregister.windarraytooltip4": "§f- 高度增益: §e Clamp(Y-64, 0, 256-64) / (256-64),在256格高度取到最大2.0倍率", + "ctnhcore.windpowerarrayregister.windarraytooltip5": "§f- 网络增益: §e 大小≤10:0.2×网络大小,超出部分 +0.2×log2(网路大小-10)", "ctnhcore.windpowerarrayregister.windarraytooltip6": "§f增益乘算得到发电效率", "ctnhcore.windpowerarrayregister.windarraytooltip7": "§f需要§e%d mB/s§f 润滑油以维护机器运行", "ctnhcore.windpowerarrayregister.windarraytooltip8": "§8---------------§a风力网络§8-----------------", "ctnhcore.windpowerarrayregister.windarraytooltip9": "§f所有结构对齐且间距<=1的风力发电机阵列会组成风力网络", + "ctnhcore.windpowerarrayregister.windarraywaringtooltip": "独风力难支使得该风力机器基础效率仅为%.2f", "ctnhcore.wood_bionics": "§e林海树场", "ctnhcore.wpaacceleratorgui.wideacceleratorguielectric": "电子轨道", "ctnhcore.wpaacceleratorgui.wideacceleratorguiname": "访问轨道", diff --git a/src/main/java/io/github/cpearl0/ctnhcore/common/block/PhotovoltaicBlock.java b/src/main/java/io/github/cpearl0/ctnhcore/common/block/PhotovoltaicBlock.java index c4d5a21e0..71b2d887c 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/common/block/PhotovoltaicBlock.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/common/block/PhotovoltaicBlock.java @@ -1,16 +1,27 @@ package io.github.cpearl0.ctnhcore.common.block; import io.github.cpearl0.ctnhcore.common.block.blockdata.IPBData; +import io.github.cpearl0.ctnhcore.common.machine.multiblock.generator.PhotovoltaicPowerStationMachine; -import com.gregtechceu.gtceu.api.block.AppearanceBlock; +import com.gregtechceu.gtceu.api.pattern.MultiblockWorldSavedData; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; import net.minecraft.util.StringRepresentable; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -@SuppressWarnings("removal") -public class PhotovoltaicBlock extends AppearanceBlock { +public class PhotovoltaicBlock extends Block { public final IPBData data; @@ -23,6 +34,42 @@ public IPBData getData() { return this.data; } + /** + * 手持修复材料右键面板时,转交给所属的光伏发电站控制器处理。 + */ + @Override + @SuppressWarnings("deprecation") + public @NotNull InteractionResult use(@NotNull BlockState state, @NotNull Level level, @NotNull BlockPos pos, + @NotNull Player player, @NotNull InteractionHand hand, + @NotNull BlockHitResult hit) { + if (level.isClientSide) { + return super.use(state, level, pos, player, hand, hit); + } + var controller = findOwningPowerStation(level, pos); + if (controller != null) { + var result = controller.tryRepairByHand(player, hand); + if (result != InteractionResult.PASS) return result; + } + return super.use(state, level, pos, player, hand, hit); + } + + /** + * 通过多方块索引反查这个位置属于哪台光伏发电站。 + */ + @Nullable + private static PhotovoltaicPowerStationMachine findOwningPowerStation(Level level, BlockPos pos) { + if (!(level instanceof ServerLevel serverLevel)) return null; + + var mwsd = MultiblockWorldSavedData.getOrCreate(serverLevel); + for (var multiblockState : mwsd.getControllersInChunk(new ChunkPos(pos))) { + if (!multiblockState.isPosInCache(pos)) continue; + if (multiblockState.getController() instanceof PhotovoltaicPowerStationMachine machine) { + return machine; + } + } + return null; + } + public static enum PhotovoltaicType implements StringRepresentable, IPBData { ENERGETIC_PHOTOVOLTAIC_BLOCK(1, 1), diff --git a/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/NanoscaleTriboelectricGenerator.java b/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/NanoscaleTriboelectricGenerator.java index c95877f02..d987a1dc7 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/NanoscaleTriboelectricGenerator.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/NanoscaleTriboelectricGenerator.java @@ -37,9 +37,7 @@ public class NanoscaleTriboelectricGenerator extends RecipeElectricMultiblockMac @Persisted public final NotifiableItemStackHandler machineStorage; @Persisted - public int parallel = 2048; - @Persisted - public double effencicy = 1.0; + public int parallel = 32; @Persisted public boolean is_consume = false; @@ -126,40 +124,41 @@ public void consumeItem() { public static Component recipeModifier(MetaMachine machine, RecipeHandlerGroup group, GTRecipe recipe) { if (machine instanceof NanoscaleTriboelectricGenerator zmachine) { - // 定义材料效率配置(材料 -> {效率, 消耗概率分母}) - Map materialEfficiencyMap = Map.of( + // 定义材料并行配置(材料 -> {并行上限, 消耗概率分母}) + Map materialParallelMap = Map.of( GTMaterialItems.MATERIAL_ITEMS.get(TagPrefix.plate, GTMaterials.Rubber).get(), - new double[] { 1.0, 512 }, + new double[] { 64, 256 }, GTMaterialItems.MATERIAL_ITEMS.get(TagPrefix.plate, GTMaterials.Polyethylene).get(), - new double[] { 1.6, 1024 }, + new double[] { 96, 512 }, GTMaterialItems.MATERIAL_ITEMS.get(TagPrefix.plate, GTMaterials.SiliconeRubber).get(), - new double[] { 2.4, 4096 }, + new double[] { 192, 2048 }, GTMaterialItems.MATERIAL_ITEMS.get(TagPrefix.plate, GTMaterials.Polytetrafluoroethylene).get(), - new double[] { 3.2, 65536 }, + new double[] { 384, 65536 }, GTMaterialItems.MATERIAL_ITEMS.get(TagPrefix.plate, GTMaterials.StyreneButadieneRubber).get(), - new double[] { 4.6, 131070 }, + new double[] { 768, 131070 }, GTMaterialItems.MATERIAL_ITEMS.get(TagPrefix.plate, GTMaterials.Polybenzimidazole).get(), - new double[] { 5.0, 1048576 }); + new double[] {1024, 262140 }); - // 默认效率 0.8 - double efficiency = 0.8; - int maxParallel = eutgetParallelAmount(zmachine, recipe, 1024); + // 无材料时使用机器基础并行 + int parallelLimit = zmachine.parallel; Item storageItem = zmachine.getMachineStorageItem().getItem(); + double[] config = materialParallelMap.get(storageItem); - // 检查材料是否在配置中,并更新效率 - if (materialEfficiencyMap.containsKey(storageItem)) { - double[] config = materialEfficiencyMap.get(storageItem); - efficiency = config[0]; - if (Math.random() < (double) maxParallel / config[1]) { - zmachine.is_consume = true; - } + // 材料替代基础并行上限,并按并行数决定消耗概率 + if (config != null) { + parallelLimit = (int) config[0]; } + int maxParallel = eutgetParallelAmount(zmachine, recipe, parallelLimit); if (maxParallel <= 0) return RecipeModifier.DEFAULT_FAILURE; + if (config != null && Math.random() < (double) maxParallel / config[1]) { + zmachine.is_consume = true; + } + recipe.multiplyAllContents(maxParallel); recipe.multiplyDuration(Math.sqrt(maxParallel)); - recipe.multiplyEUt((1 + maxParallel * 0.02) * efficiency); + recipe.multiplyEUt(1 + maxParallel * 0.02); recipe.parallels *= maxParallel; return null; } diff --git a/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/PhotovoltaicPowerStationMachine.java b/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/PhotovoltaicPowerStationMachine.java index 94a71a16c..b504e8c12 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/PhotovoltaicPowerStationMachine.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/PhotovoltaicPowerStationMachine.java @@ -1,13 +1,18 @@ package io.github.cpearl0.ctnhcore.common.machine.multiblock.generator; +import io.github.cpearl0.ctnhcore.registry.material.CTNHMaterials; + import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.IWorkable; import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; +import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; +import com.gregtechceu.gtceu.api.machine.feature.IDropSaveMachine; import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; @@ -15,18 +20,28 @@ import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; +import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.*; +import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced; +import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; import com.aetherteam.aether.data.resources.registries.AetherDimensions; import com.ctnhlang.CN; @@ -43,10 +58,10 @@ import java.util.Objects; public class PhotovoltaicPowerStationMachine extends MultiblockControllerMachine implements IFancyUIMachine, - IDisplayUIMachine, IWorkable, IExplosionMachine { + IDisplayUIMachine, IWorkable, IExplosionMachine, IDropSaveMachine { - @CN("发电效率:%s%%") - @EN("Efficiency: %s%%") + @CN("最终效率:%s%%") + @EN("Final Efficiency: %s%%") public static Lang photovoltaicPowerStationInfo1; @CN("产能功率:%s/%s EU/t") @@ -61,13 +76,52 @@ public class PhotovoltaicPowerStationMachine extends MultiblockControllerMachine @EN("At night") public static Lang photovoltaicPowerStationInfoNight; + @CN("损坏度:%s%%") + @EN("Damage: %s%%") + public static Lang photovoltaicPowerStationInfoDamage; + + @CN("已修复,当前损坏度:%s%%") + @EN("Repaired. Damage now %s%%") + public static Lang photovoltaicPowerStationRepairMessage; + + @CN("损坏度低于 %s%%,无需修复") + @EN("Damage below %s%%, repair not needed") + public static Lang photovoltaicPowerStationRepairTooLow; + + @CN("该光伏面板无法使用萤石粉修复") + @EN("This photovoltaic panel cannot be repaired with Glowstone Dust") + public static Lang photovoltaicPowerStationRepairGlowstoneRejected; + // const public static final int START_TIME = 23000; public static final int END_TIME = 13000; + /** 每秒损坏度增量区间,实际增量再乘以维度倍率与当前光照强度 */ + private static final float DAMAGE_PER_SECOND_MIN = 0.0001f; + private static final float DAMAGE_PER_SECOND_RANGE = 0.0015f; + /** 满损坏时出力衰减到 50% */ + private static final double DAMAGE_MAX_PENALTY = 0.5; + private static final double DAMAGE_CURVE_K = 8.0; + private static final double DAMAGE_CURVE_MID = 0.5; + + /** 手持右键时单个材料的修复量 */ + private static final float REPAIR_GLOWSTONE = 0.01f; + private static final float REPAIR_SUNNARIUM = 0.05f; + /** 损坏度低于该值时不消耗材料,避免浪费 */ + private static final float REPAIR_MIN_DAMAGE = 0.005f; + public final int BASIC_RATE; + /** 损坏速度倍率,1.0 为基准;越低越耐用 */ + public final float damageRate; + /** 是否允许用萤石粉修复;高级面板只接受阳光化合物粉 */ + public final boolean allowGlowstoneRepair; private int rate_mul = 0; + /** 损坏度,0.0 ~ 1.0;结构解体后保留 */ + @Persisted + @DescSynced + private float damage = 0f; + private long lastOutputEnergy; // @Override @Getter @@ -75,9 +129,12 @@ public class PhotovoltaicPowerStationMachine extends MultiblockControllerMachine private boolean isWorkingEnabled = true; private EnergyContainerList energyContainer; - public PhotovoltaicPowerStationMachine(IMachineBlockEntity holder, int basicRate) { + public PhotovoltaicPowerStationMachine(IMachineBlockEntity holder, int basicRate, float damageRate, + boolean allowGlowstoneRepair) { super(holder); - BASIC_RATE = basicRate * 512; + BASIC_RATE = basicRate * 1024; + this.damageRate = damageRate; + this.allowGlowstoneRepair = allowGlowstoneRepair; } // 最好成型再用 @@ -139,27 +196,35 @@ public void onStructureFormed() { super.onStructureFormed(); updateEnergyContainer(); // 计算发电效率 - var dimension = getLevel().dimension(); + rate_mul = getDimensionMultiplier(getLevel().dimension()); + if (getLevel() instanceof ServerLevel serverLevel && rate_mul > 0) { + serverLevel.getServer().tell(new TickTask(0, this::updateTickSubscription)); + } + } + + /** + * 维度对太阳能发电的倍率,0 表示该维度无法发电。 + * CTRL 提示文本同样以此为准,避免两处数值漂移。 + */ + public static int getDimensionMultiplier(ResourceKey dimension) { var str = dimension.location().toString(); if (dimension == Level.OVERWORLD || str.equals("twilightforest:twilight_forest") || str.equals("mythicbotany:alfheim")) { - rate_mul = 1; + return 1; } else if (dimension == AetherDimensions.AETHER_LEVEL) { - rate_mul = 2; + return 2; } else if (dimension == Planet.MOON || dimension == Planet.MOON_ORBIT) { - rate_mul = 3; + return 2; } else if (dimension == Planet.VENUS || dimension == Planet.VENUS_ORBIT) { - rate_mul = 3; + return 2; } else if (dimension == Planet.MERCURY || dimension == Planet.MERCURY_ORBIT) { - rate_mul = 5; + return 8; } else if (dimension == Planet.MARS || dimension == Planet.MARS_ORBIT) { - rate_mul = 5; + return 8; } else if (dimension == Planet.GLACIO || dimension == Planet.GLACIO_ORBIT) { - rate_mul = 7; - } - if (getLevel() instanceof ServerLevel serverLevel && rate_mul > 0) { - serverLevel.getServer().tell(new TickTask(0, this::updateTickSubscription)); + return 16; } + return 0; } /// /////////////////////////////// @@ -190,9 +255,103 @@ public void tick() { } else return; // 计算发电功率 - lastOutputEnergy = (long) (Math.sin((double) time / (END_TIME + 24000 - START_TIME) * Math.PI) * BASIC_RATE * - rate_mul); + var sunFactor = Math.sin((double) time / (END_TIME + 24000 - START_TIME) * Math.PI); + lastOutputEnergy = (long) (sunFactor * BASIC_RATE * rate_mul * getDamageFactor()); energyContainer.changeEnergy(lastOutputEnergy); + + // 磨损随光照强度变化:正午最快,日出日落趋近于 0,夜晚不磨损 + if (getOffsetTimer() % 20 == 0) { + damage = Math.min(1f, damage + + (DAMAGE_PER_SECOND_MIN + (float) Math.random() * DAMAGE_PER_SECOND_RANGE) * rate_mul * + (float) sunFactor * damageRate); + markDirty(); + } + } + + /** + * 损坏度越高出力越低,最低衰减到 {@link #DAMAGE_MAX_PENALTY}。 + * sigmoid 保证低损坏几乎无感,中段平滑陡降,高损坏触底。 + */ + public double getDamageFactor() { + return 1.0 - DAMAGE_MAX_PENALTY * sigmoid(damage, DAMAGE_CURVE_K, DAMAGE_CURVE_MID); + } + + private static double sigmoid(double x, double k, double c) { + return 1.0 / (1.0 + Math.exp(-k * (x - c))); + } + + /** + * 手持修复材料右键控制器或结构内的光伏方块时消耗一个并修复。 + * 损坏度低于 {@link #REPAIR_MIN_DAMAGE} 时拒绝修复。 + */ + public InteractionResult tryRepairByHand(Player player, InteractionHand hand) { + var held = player.getItemInHand(hand); + if (held.isEmpty()) return InteractionResult.PASS; + + float repaired; + if (held.getItem() == ChemicalHelper.get(TagPrefix.dust, CTNHMaterials.Sunnarium).getItem()) { + repaired = REPAIR_SUNNARIUM; + } else if (held.getItem() == ChemicalHelper.get(TagPrefix.dust, GTMaterials.Glowstone).getItem()) { + if (!allowGlowstoneRepair) { + if (getLevel() != null && !getLevel().isClientSide) { + player.displayClientMessage( + photovoltaicPowerStationRepairGlowstoneRejected.translate().withStyle(ChatFormatting.RED), + true); + } + return InteractionResult.CONSUME; + } + repaired = REPAIR_GLOWSTONE; + } else { + return InteractionResult.PASS; + } + + if (getLevel() != null && getLevel().isClientSide) return InteractionResult.SUCCESS; + + // 损坏度过低时无法修复,材料保留在手上 + if (damage < REPAIR_MIN_DAMAGE) { + player.displayClientMessage(photovoltaicPowerStationRepairTooLow + .translate(String.format("%.2f", REPAIR_MIN_DAMAGE * 100f)), true); + return InteractionResult.CONSUME; + } + + if (!player.isCreative()) { + held.shrink(1); + } + damage = Math.max(0f, damage - repaired); + markDirty(); + player.displayClientMessage( + photovoltaicPowerStationRepairMessage.translate(String.format("%.2f", damage * 100f)), true); + return InteractionResult.SUCCESS; + } + + @Override + public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, + BlockHitResult hit) { + var result = tryRepairByHand(player, hand); + if (result != InteractionResult.PASS) return result; + return super.onUse(state, world, pos, player, hand, hit); + } + + /** 掉落物 NBT 中承载损坏度的键 */ + private static final String DAMAGE_TAG = "ctnh_photovoltaic_damage"; + + /** + * 破坏控制器时把损坏度写进掉落物,防止拆掉主方块重放来重置损坏度。 + * 只写损坏度而不调用默认实现,避免把 isFormed 之类的结构状态一并带进物品。 + */ + @Override + public void saveToItem(CompoundTag tag) { + if (damage > 0f) { + tag.putFloat(DAMAGE_TAG, damage); + } + } + + @Override + public void loadFromItem(CompoundTag tag) { + if (tag.contains(DAMAGE_TAG)) { + damage = tag.getFloat(DAMAGE_TAG); + markDirty(); + } } @Override @@ -284,9 +443,9 @@ public void addDisplayText(@NotNull List textList) { .addWorkingStatusLine(); if (valid == Status.VALID) { - // gtceu.multiblock.generation_eu + // 最终效率已包含日光衰减、维度倍率与损坏衰减 textList.add(photovoltaicPowerStationInfo1.translate( - String.format("%.1f", (lastOutputEnergy * 100f / BASIC_RATE)))); + String.format("%.1f", lastOutputEnergy * 100f / BASIC_RATE))); textList.add(photovoltaicPowerStationInfo2.translate( FormattingUtil.formatNumbers(lastOutputEnergy), voltageName)); } else { @@ -294,6 +453,12 @@ public void addDisplayText(@NotNull List textList) { photovoltaicPowerStationInfoNight; textList.add(statusText.translate().withStyle(ChatFormatting.RED)); } + + // 损坏度是玩家唯一需要主动干预的量,任何状态下都要可见 + var damageStyle = damage >= 0.8f ? ChatFormatting.RED : + damage >= 0.5f ? ChatFormatting.YELLOW : ChatFormatting.GRAY; + textList.add(photovoltaicPowerStationInfoDamage.translate(String.format("%.2f", damage * 100f)) + .withStyle(damageStyle)); } } @@ -314,4 +479,4 @@ public Widget createUIWidget() { public ModularUI createUI(Player entityPlayer) { return new ModularUI(198, 208, this, entityPlayer).widget(new FancyMachineUIWidget(this, 198, 208)); } -} +} \ No newline at end of file diff --git a/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/WindPowerArrayMachine.java b/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/WindPowerArrayMachine.java index d119508fe..65e31ed66 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/WindPowerArrayMachine.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/common/machine/multiblock/generator/WindPowerArrayMachine.java @@ -73,14 +73,15 @@ public class WindPowerArrayMachine extends MultiblockControllerMachine implement private EnergyContainerList energyContainer; private List fluidParts; - long basicRate; + private final long basicRate; + private final float baseEfficiency; final int fluidAmount; - public long bbasic_rate = 1; - public WindPowerArrayMachine(IMachineBlockEntity holder, int tier) { + public WindPowerArrayMachine(IMachineBlockEntity holder, int tier,float baseEfficiency) { super(holder); - this.bbasic_rate = GTValues.V[tier]; + this.basicRate = GTValues.V[tier]; this.fluidAmount = tier; + this.baseEfficiency=baseEfficiency; } //////////////////// @@ -140,7 +141,6 @@ public void onStructureInvalid() { @Override public void onStructureFormed() { super.onStructureFormed(); - updateBasicRate(); updateEnergyContainer(); updateFluidParts(); updateEfficiencyPara(); @@ -169,22 +169,6 @@ public void updateFluidParts() { .collect(Collectors.toList()); } - public static HashMap dimentionRate = new HashMap<>(); - static { - dimentionRate.put("minecraft:overworld", 1); - dimentionRate.put("minecraft:nether", 2); - dimentionRate.put("aether:the_aether", 2); - dimentionRate.put("minecraft:the_end", 4); - dimentionRate.put("ad_astra:mars", 0); - dimentionRate.put("ad_astra:venus", 16); - dimentionRate.put("ad_astra:mercury", 0); - } - - public void updateBasicRate() { - assert getLevel() != null; - var dimension = getLevel().dimension().location().toString(); - basicRate = bbasic_rate * (long) dimentionRate.getOrDefault(dimension, 0); - } /// //////////////////////////////// //////// 风电网络 //////// @@ -254,12 +238,14 @@ void quitNet() { private float getEfficiency() { assert getLevel() != null; - int weather_boost = 1; + float weather_boost = 1; if (getLevel().isRaining()) - weather_boost = 2; + weather_boost = 1.5f; if (getLevel().isThundering()) - weather_boost = 4; - return (1 + 0.3f * MathUtils.fastLog2(netHandler.getNetSize())) * weather_boost * altitude_boost; + weather_boost = 2; + float size = netHandler.getNetSize(); + return (baseEfficiency + (size < 10f ? 0.2F * size : 2.0F + 0.2F * MathUtils.fastLog2((long) (size - 10f)))) * weather_boost * altitude_boost; + } private void updateEfficiencyPara() { @@ -369,4 +355,4 @@ public static int getFluidStorageBrute(Fluid fluidType, List provider) { VanillaRecipeHelper.addShapedRecipe(provider, CTNHCore.id("crafttable/nanogenetor"), MultiblocksB.NANOGENERATOR.asStack(), "BAB", "ACA", "BAB", - 'A', CustomTags.MV_CIRCUITS, + 'A', CustomTags.EV_CIRCUITS, 'B', CTPPBlocks.STEEL_CASING.asStack(), 'C', GTBlocks.MACHINE_CASING_MV.asStack()); @@ -38,56 +38,56 @@ public static void init(Consumer provider) { CTNHRecipeTypes.NANO_GENERATOR.recipeBuilder(CTNHCore.id("stone2")) .inputItems(Items.STONE) .outputItems(ChemicalHelper.get(TagPrefix.dust, GTMaterials.Stone), 2) - .EUt(-2) - .duration(5) + .EUt(-1) + .duration(4) .save(provider); // Nano generator: netherrack -> netherrack_dust CTNHRecipeTypes.NANO_GENERATOR.recipeBuilder(CTNHCore.id("netherrack")) .inputItems(Items.NETHERRACK) .outputItems(ChemicalHelper.get(TagPrefix.dust, GTMaterials.Netherrack), 2) - .EUt(-3) - .duration(10) + .EUt(-2) + .duration(5) .save(provider); // Nano generator: moon_cobblestone -> moon_stone_dust CTNHRecipeTypes.NANO_GENERATOR.recipeBuilder(CTNHCore.id("moon_cobblestone")) .inputItems(ModBlocks.MOON_COBBLESTONE.get().asItem()) .outputItems(ChemicalHelper.get(TagPrefix.dust, Moonstone), 3) - .EUt(-6) - .duration(10) + .EUt(-4) + .duration(5) .save(provider); // Nano generator: venus_stone -> venus_stone_dust CTNHRecipeTypes.NANO_GENERATOR.recipeBuilder(CTNHCore.id("venus_stone")) .inputItems(ModBlocks.VENUS_STONE.get().asItem()) .outputItems(ChemicalHelper.get(TagPrefix.dust, Venusstone), 3) - .EUt(-16) - .duration(20) + .EUt(-8) + .duration(10) .save(provider); // Nano generator: mars_stone -> mars_stone_dust CTNHRecipeTypes.NANO_GENERATOR.recipeBuilder(CTNHCore.id("mars_stone")) .inputItems(ModBlocks.MARS_STONE.get().asItem()) .outputItems(ChemicalHelper.get(TagPrefix.dust, Marsstone), 2) - .EUt(-8) - .duration(15) + .EUt(-16) + .duration(8) .save(provider); // Nano generator: mercury_stone -> mercury_stone_dust CTNHRecipeTypes.NANO_GENERATOR.recipeBuilder(CTNHCore.id("mercury_stone")) .inputItems(ModBlocks.MERCURY_STONE.get().asItem()) .outputItems(ChemicalHelper.get(TagPrefix.dust, Mercurystone), 2) - .EUt(-16) - .duration(20) + .EUt(-24) + .duration(10) .save(provider); // Nano generator: glacio_stone -> glacio_stone_dust CTNHRecipeTypes.NANO_GENERATOR.recipeBuilder(CTNHCore.id("glacio_stone")) .inputItems(ModBlocks.GLACIO_STONE.get().asItem()) .outputItems(ChemicalHelper.get(TagPrefix.dust, Glaciostone), 2) - .EUt(-30) - .duration(20) + .EUt(-32) + .duration(10) .save(provider); } -} +} \ No newline at end of file diff --git a/src/main/java/io/github/cpearl0/ctnhcore/data/recipe/multiblock/PhotovoltaicStationRecipes.java b/src/main/java/io/github/cpearl0/ctnhcore/data/recipe/multiblock/PhotovoltaicStationRecipes.java index 627e53f09..820f9ba02 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/data/recipe/multiblock/PhotovoltaicStationRecipes.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/data/recipe/multiblock/PhotovoltaicStationRecipes.java @@ -53,9 +53,9 @@ public static void init(Consumer provider) { "BCB", "DED", 'A', ChemicalHelper.get(TagPrefix.plate, EnderIOMaterials.VibrantAlloy), - 'B', GTItems.ELECTRIC_MOTOR_HV.asStack(), + 'B', GTItems.ELECTRIC_MOTOR_EV.asStack(), 'C', CTNHBlocks.CASING_REFLECT_LIGHT.asStack(), 'D', GTItems.SMD_CAPACITOR.asStack(), - 'E', CustomTags.HV_CIRCUITS); + 'E', CustomTags.IV_CIRCUITS); } -} +} \ No newline at end of file diff --git a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksA.java b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksA.java index 21417861f..100136a98 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksA.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksA.java @@ -42,6 +42,7 @@ import com.gregtechceu.gtceu.common.machine.multiblock.electric.FusionReactorMachine; import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitiveWorkableMachine; import com.gregtechceu.gtceu.utils.FormattingUtil; +import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; @@ -850,8 +851,8 @@ public class MultiblocksA { public static Lang photovoltaicPowerStationEnergeticTooltip0; - @CN("§e基础产能功率:§r512 EU/t") - @EN("§eBase Output:§r 512 EU/t") + @CN("§e基础产能功率:§r2048 EU/t") + @EN("§eBase Output:§r 1024 EU/t") public static Lang photovoltaicPowerStationEnergeticTooltip1; @@ -865,8 +866,8 @@ public class MultiblocksA { public static Lang photovoltaicPowerStationPulsatingTooltip0; - @CN("§e基础产能功率:§r2048 EU/t") - @EN("§eBase Output:§r 2048 EU/t") + @CN("§e基础产能功率:§r8192 EU/t") + @EN("§eBase Output:§r 4096 EU/t") public static Lang photovoltaicPowerStationPulsatingTooltip1; @@ -880,8 +881,8 @@ public class MultiblocksA { public static Lang photovoltaicPowerStationVibrantTooltip0; - @CN("§e基础产能功率:§r8192 EU/t") - @EN("§eBase Output:§r 8192 EU/t") + @CN("§e基础产能功率:§r65536 EU/t") + @EN("§eBase Output:§r 65536 EU/t") public static Lang photovoltaicPowerStationVibrantTooltip1; @@ -890,6 +891,61 @@ public class MultiblocksA { public static Lang photovoltaicPowerStationVibrantTooltip2; + @CN("§c发电时光伏面板会逐渐损坏,损坏度越高产能越低,最低降至 50%;损坏速度随光照强度与维度倍率提升,夜晚与被遮挡时不损坏") + @EN("§cPanels degrade while generating. Higher damage means lower output, down to 50%. Degradation scales with sunlight and dimension multiplier; no damage at night or while shadowed") + public static Lang photovoltaicPowerStationTooltipDamage; + + + @CN("§a手持修复材料右键控制器或光伏方块即可修复,每次消耗 1 个:阳光化合物粉修复 5%,萤石粉修复 1%;损坏度低于 0.5% 时无法修复") + @EN("§aRight-click the controller or a photovoltaic block with repair material, consuming 1 per click: Sunnarium Dust repairs 5%, Glowstone Dust repairs 1%. Cannot repair below 0.5% damage") + public static Lang photovoltaicPowerStationTooltipRepair; + + + @CN("§a手持阳光化合物粉右键控制器或光伏方块即可修复,每次消耗 1 个修复 5%;§c该等级无法使用萤石粉修复§a;损坏度低于 0.5% 时无法修复") + @EN("§aRight-click the controller or a photovoltaic block with Sunnarium Dust, consuming 1 per click to repair 5%. §cGlowstone Dust does not work on this tier§a. Cannot repair below 0.5% damage") + public static Lang photovoltaicPowerStationTooltipRepairSunnariumOnly; + + + @CN("§e损坏速度:§r%s%%") + @EN("§eDegradation Rate:§r %s%%") + public static Lang photovoltaicPowerStationTooltipDamageRate; + + + @CN("§7按住 §eCTRL §7查看各维度倍率") + @EN("§7Hold §eCTRL §7to view dimension multipliers") + public static Lang photovoltaicPowerStationTooltipCtrlHint; + + + @CN("§b维度倍率:") + @EN("§bDimension Multipliers:") + public static Lang photovoltaicPowerStationTooltipDimensionHeader; + + + @CN("§7 主世界 / 暮色森林 / 阿尔夫海姆:§f×1") + @EN("§7 Overworld / Twilight Forest / Alfheim: §f×1") + public static Lang photovoltaicPowerStationTooltipDimensionOverworld; + + + @CN("§7 以太 / 月球 / 金星(含轨道):§f×2") + @EN("§7 Aether / Moon / Venus (incl. orbit): §f×2") + public static Lang photovoltaicPowerStationTooltipDimensionAether; + + + @CN("§7 水星 / 火星(含轨道):§f×8") + @EN("§7 Mercury / Mars (incl. orbit): §f×8") + public static Lang photovoltaicPowerStationTooltipDimensionMercury; + + + @CN("§7 冰原(含轨道):§f×16") + @EN("§7 Glacio (incl. orbit): §f×16") + public static Lang photovoltaicPowerStationTooltipDimensionGlacio; + + + @CN("§c 其他维度:无法发电") + @EN("§c Other dimensions: cannot generate") + public static Lang photovoltaicPowerStationTooltipDimensionNone; + + @CN("氤氲之气,凝为霜露") @EN("The dense air condenses into frost and dew") public static Lang plasmaCondenserTooltip1; @@ -1387,11 +1443,11 @@ public static void init(){} .register(); public static final MultiblockMachineDefinition PHOTOVOLTAIC_POWER_STATION_ENERGETIC = - registerPhotovoltaicPowerStation("energetic", 1, CTNHBlocks.ENERGETIC_PHOTOVOLTAIC_BLOCK); + registerPhotovoltaicPowerStation("energetic", 2, 1.0f, true, CTNHBlocks.ENERGETIC_PHOTOVOLTAIC_BLOCK); public static final MultiblockMachineDefinition PHOTOVOLTAIC_POWER_STATION_PULSATING = - registerPhotovoltaicPowerStation("pulsating", 4, CTNHBlocks.PULSATING_PHOTOVOLTAIC_BLOCK); + registerPhotovoltaicPowerStation("pulsating", 8, 0.75f, true, CTNHBlocks.PULSATING_PHOTOVOLTAIC_BLOCK); public static final MultiblockMachineDefinition PHOTOVOLTAIC_POWER_STATION_VIBRANT = - registerPhotovoltaicPowerStation("vibrant", 16, CTNHBlocks.VIBRANT_PHOTOVOLTAIC_BLOCK); + registerPhotovoltaicPowerStation("vibrant", 64, 0.25f, false, CTNHBlocks.VIBRANT_PHOTOVOLTAIC_BLOCK); private static Lang photovoltaicPowerStationTooltip(String tier, int index) { return switch (tier) { @@ -1417,12 +1473,33 @@ private static Lang photovoltaicPowerStationTooltip(String tier, int index) { }; } - public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(String tier, int basicRate, BlockEntry photovoltaicBlock) { - return REGISTRATE.multiblock("photovoltaic_power_station_" + tier, holder -> new PhotovoltaicPowerStationMachine(holder, basicRate)) + public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(String tier, int basicRate, + float damageRate, + boolean allowGlowstoneRepair, + BlockEntry photovoltaicBlock) { + return REGISTRATE.multiblock("photovoltaic_power_station_" + tier, + holder -> new PhotovoltaicPowerStationMachine(holder, basicRate, damageRate, allowGlowstoneRepair)) .rotationState(RotationState.NON_Y_AXIS) .tooltips(photovoltaicPowerStationTooltip(tier, 0).translate().withStyle(ChatFormatting.GRAY), photovoltaicPowerStationTooltip(tier, 1).translate(), - photovoltaicPowerStationTooltip(tier, 2).translate()) + photovoltaicPowerStationTooltip(tier, 2).translate(), + photovoltaicPowerStationTooltipDamage.translate(), + photovoltaicPowerStationTooltipDamageRate + .translate(String.format("%.0f", damageRate * 100f)), + allowGlowstoneRepair ? photovoltaicPowerStationTooltipRepair.translate() : + photovoltaicPowerStationTooltipRepairSunnariumOnly.translate()) + .tooltipBuilder((stack, components) -> { + if (!GTUtil.isCtrlDown()) { + components.add(photovoltaicPowerStationTooltipCtrlHint.translate()); + return; + } + components.add(photovoltaicPowerStationTooltipDimensionHeader.translate()); + components.add(photovoltaicPowerStationTooltipDimensionOverworld.translate()); + components.add(photovoltaicPowerStationTooltipDimensionAether.translate()); + components.add(photovoltaicPowerStationTooltipDimensionMercury.translate()); + components.add(photovoltaicPowerStationTooltipDimensionGlacio.translate()); + components.add(photovoltaicPowerStationTooltipDimensionNone.translate()); + }) .appearanceBlock(CTNHBlocks.CASING_REFLECT_LIGHT) .allowExtendedFacing(false) .allowFlip(false) @@ -1456,9 +1533,9 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .register(); } - public static final MultiblockMachineDefinition WIND_POWER_ARRAY = WindPowerArrayRegister.register("wind_power_array",1,CASING_STEEL_SOLID, GTMaterials.Steel,"machine_casing_solid_steel"); - public static final MultiblockMachineDefinition ADVANCED_WIND_POWER_ARRAY = WindPowerArrayRegister.register("advanced_wind_power_array",2,CASING_STAINLESS_CLEAN,GTMaterials.StainlessSteel,"machine_casing_clean_stainless_steel"); - public static final MultiblockMachineDefinition SUPER_WIND_POWER_ARRAY = WindPowerArrayRegister.register("super_wind_power_array",3,CASING_TUNGSTENSTEEL_ROBUST, TungstenSteel,"machine_casing_robust_tungstensteel"); + public static final MultiblockMachineDefinition WIND_POWER_ARRAY = WindPowerArrayRegister.register("wind_power_array",1,CASING_STEEL_SOLID, GTMaterials.Steel,"machine_casing_solid_steel",0.1f); + public static final MultiblockMachineDefinition ADVANCED_WIND_POWER_ARRAY = WindPowerArrayRegister.register("advanced_wind_power_array",2,CASING_STAINLESS_CLEAN,GTMaterials.StainlessSteel,"machine_casing_clean_stainless_steel",0.5f); + public static final MultiblockMachineDefinition SUPER_WIND_POWER_ARRAY = WindPowerArrayRegister.register("super_wind_power_array",3,CASING_TUNGSTENSTEEL_ROBUST, TungstenSteel,"machine_casing_robust_tungstensteel",1.0f); public static final MultiblockMachineDefinition SLAUGHTER_HOUSE = REGISTRATE.multiblock("slaughter_house", SlaughterHouseMachine::new) .rotationState(RotationState.NON_Y_AXIS) @@ -3020,4 +3097,4 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_clean_stainless_steel"), GTCEu.id("block/multiblock/implosion_compressor")) .register(); } -// spotless:on +// spotless:on \ No newline at end of file diff --git a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksB.java b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksB.java index d3adbefc6..615593021 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksB.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksB.java @@ -304,18 +304,18 @@ public class MultiblocksB { public static Lang nanoGeneratorTooltip0; - @CN("最大并行数:2048") - @EN("Maximum parallel count: 2048") + @CN("基础并行数:32") + @EN("Base parallel count: 32") public static Lang nanoGeneratorTooltip1; @CN("每有1并行数,总体发电量提升2%\n实际运行时间为配方时间*sqrt(并行数)") - @EN("For each parallel process, total power generation increases by 4%\nActual operation time is recipe time * sqrt(parallel count)") + @EN("For each parallel process, total power generation increases by 2%\nActual operation time is recipe time * sqrt(parallel count)") public static Lang nanoGeneratorTooltip2; - @CN("在控制器内放入特定材料可提升倍率,但也有概率消耗\n无材料:0.8倍率\n橡胶片:1.0倍率,并行数/512几率消耗\n聚乙烯片:1.6倍率,并行数/1024几率消耗\n硅橡胶片:2.4倍率,并行数/4096几率消耗\n聚四氟乙烯片:3.2倍率,并行数/65535几率消耗\n丁苯橡胶片:4.6倍率,并行数/131070几率消耗\n聚苯并咪唑片:5倍率,并行数/1048576几率消耗") - @EN("Inserting specific materials into the controller increases the multiplier, but each material may also be consumed\nNo material: 0.8x multiplier\nRubber Sheet: 1.0x multiplier, consumption chance = parallel count / 512\nPolyethylene Sheet: 1.6x multiplier, consumption chance = parallel count / 1024\nSilicone Rubber Sheet: 2.4x multiplier, consumption chance = parallel count / 4096\nPTFE Sheet: 3.2x multiplier, consumption chance = parallel count / 65535\nStyrene-Butadiene Rubber Sheet: 4.6x multiplier, consumption chance = parallel count / 131070\nPolybenzimidazole Sheet: 5x multiplier, consumption chance = parallel count / 1048576") + @CN("在控制器内放入特定材料可替代基础并行数,但也有概率消耗\n无材料:32并行\n橡胶片:64并行,并行数/256几率消耗\n聚乙烯片:96并行,并行数/512几率消耗\n硅橡胶片:192并行,并行数/2048几率消耗\n聚四氟乙烯片:384并行,并行数/65536几率消耗\n丁苯橡胶片:768并行,并行数/131070几率消耗\n聚苯并咪唑片:1024并行,并行数/262140几率消耗") + @EN("Inserting specific materials into the controller replaces the base parallel count, but each material may also be consumed\nNo material: 32 parallel\nRubber Sheet: 64 parallel, consumption chance = parallel count / 256\nPolyethylene Sheet: 96 parallel, consumption chance = parallel count / 512\nSilicone Rubber Sheet: 192 parallel, consumption chance = parallel count / 2048\nPTFE Sheet: 384 parallel, consumption chance = parallel count / 65536\nStyrene-Butadiene Rubber Sheet: 768 parallel, consumption chance = parallel count / 131070\nPolybenzimidazole Sheet: 1024 parallel, consumption chance = parallel count / 262140") public static Lang nanoGeneratorTooltip3; diff --git a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/WindPowerArrayRegister.java b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/WindPowerArrayRegister.java index 3b10a5a54..49545fb3b 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/WindPowerArrayRegister.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/WindPowerArrayRegister.java @@ -42,16 +42,16 @@ public class WindPowerArrayRegister { @EN("§f- Basic Production: §e%d EU/t §7(on earth)") public static Lang windArrayTooltip2; - @CN("§f- 天气风力增益: §e雨天x2,雷雨x4") + @CN("§f- 天气风力增益: §e雨天x1.5,雷雨x2") @EN("§f- Weather Boost: §eRainy x2, Thunder x4") public static Lang windArrayTooltip3; - @CN("§f- 高度增益: §e Clamp(Y-64, 0, 256-64) / (256-64)") + @CN("§f- 高度增益: §e Clamp(Y-64, 0, 256-64) / (256-64),在256格高度取到最大2.0倍率") @EN("§f- Altitude Boost: §eClamp(Y-64, 0, 256-64) / (256-64)") public static Lang windArrayTooltip4; - @CN("§f- 网络增益: §e 0.3*[log2(网络大小)]") - @EN("§f- Network Boost: §e 0.3*[log2(NetSize)]") + @CN("§f- 网络增益: §e 大小≤10:0.2×网络大小,超出部分 +0.2×log2(网路大小-10)") + @EN("§f- Network Boost: §e ≤10: 0.2×size, excess +0.2×log2(size-10)") public static Lang windArrayTooltip5; @CN("§f增益乘算得到发电效率") @@ -69,10 +69,13 @@ public class WindPowerArrayRegister { @CN("§f所有结构对齐且间距<=1的风力发电机阵列会组成风力网络") @EN("§fAligned structure within a distance of <= 1 form a Wind Network.") public static Lang windArrayTooltip9; + @CN("独风力难支使得该风力机器基础效率仅为%.2f") + @EN("A standalone turbine struggles to sustain output, so this wind machine's base efficiency is only %.2f") + public static Lang windArrayWaringTooltip; public static MultiblockMachineDefinition register(String name, int tier, BlockEntry casing, Material frame, - String renderCasing) { - return REGISTRATE.multiblock(name, holder -> new WindPowerArrayMachine(holder, tier)) + String renderCasing,float baseEfficiency) { + return REGISTRATE.multiblock(name, holder -> new WindPowerArrayMachine(holder, tier,baseEfficiency)) .rotationState(RotationState.NON_Y_AXIS) .appearanceBlock(casing) .pattern(definition -> FactoryBlockPattern.start() @@ -101,7 +104,8 @@ public static MultiblockMachineDefinition register(String name, int tier, BlockE windArrayTooltip8.translate(), windArrayTooltip9.translate(), windArrayTooltip10.translate(), - windArrayTooltip11.translate()) + windArrayTooltip11.translate(), + windArrayWaringTooltip.translate(baseEfficiency)) .register(); } -} +} \ No newline at end of file From 2f2996b7218684133344fbdd9839493b490553f2 Mon Sep 17 00:00:00 2001 From: Li Silin <2667023708@qq.com> Date: Mon, 14 Sep 2026 21:55:19 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat=EF=BC=9A=E6=8F=90=E4=BA=A4=E6=BC=8F?= =?UTF-8?q?=E6=8E=89=E7=9A=84=E5=B9=B6=E8=A1=8C=E9=AD=94=E5=8A=9B=E6=9C=BA?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../registry/machines/multiblock/MultiblocksA.java | 9 +++++---- .../machines/multiblock/WindPowerArrayRegister.java | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksA.java b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksA.java index ee3218436..f30d60b43 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksA.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/MultiblocksA.java @@ -1502,9 +1502,9 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .register(); } - public static final MultiblockMachineDefinition WIND_POWER_ARRAY = WindPowerArrayRegister.register("wind_power_array",1,CASING_STEEL_SOLID, GTMaterials.Steel,"machine_casing_solid_steel",0.1f); - public static final MultiblockMachineDefinition ADVANCED_WIND_POWER_ARRAY = WindPowerArrayRegister.register("advanced_wind_power_array",2,CASING_STAINLESS_CLEAN,GTMaterials.StainlessSteel,"machine_casing_clean_stainless_steel",0.5f); - public static final MultiblockMachineDefinition SUPER_WIND_POWER_ARRAY = WindPowerArrayRegister.register("super_wind_power_array",3,CASING_TUNGSTENSTEEL_ROBUST, TungstenSteel,"machine_casing_robust_tungstensteel",1.0f); + public static final MultiblockMachineDefinition WIND_POWER_ARRAY = WindPowerArrayRegister.register("wind_power_array",1,CASING_STEEL_SOLID, GTMaterials.Steel,"machine_casing_solid_steel","初级风力发电机",0.1f); + public static final MultiblockMachineDefinition ADVANCED_WIND_POWER_ARRAY = WindPowerArrayRegister.register("advanced_wind_power_array",2,CASING_STAINLESS_CLEAN,GTMaterials.StainlessSteel,"machine_casing_clean_stainless_steel","强化风力发电机",0.25f); + public static final MultiblockMachineDefinition SUPER_WIND_POWER_ARRAY = WindPowerArrayRegister.register("super_wind_power_array",3,CASING_TUNGSTENSTEEL_ROBUST, TungstenSteel,"machine_casing_robust_tungstensteel","高级强化风力发电机",0.75f); public static final MultiblockMachineDefinition SLAUGHTER_HOUSE = REGISTRATE.multiblock("slaughter_house", SlaughterHouseMachine::new) .rotationState(RotationState.NON_Y_AXIS) @@ -2302,7 +2302,8 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, "ultimate_combustion_engine", ZPM, CASING_NAQUADAH_BLOCK, CASING_NAQUADAH_GEARBOX, CASING_ULTIMATE_ENGINE_INTAKE, CTNHCore.id("block/casings/nq_casing"), - GTCEu.id("block/multiblock/generator/extreme_combustion_engine")); + GTCEu.id("block/multiblock/generator/extreme_combustion_engine"), + "无尽内燃引擎"); public static final MultiblockMachineDefinition CHEMICAL_VAPOR_DEPOSITION_MACHINE = REGISTRATE.multiblock("chemical_vapor_deposition_machine", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.NON_Y_AXIS) diff --git a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/WindPowerArrayRegister.java b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/WindPowerArrayRegister.java index 227f53d6c..ee0d5d13b 100644 --- a/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/WindPowerArrayRegister.java +++ b/src/main/java/io/github/cpearl0/ctnhcore/registry/machines/multiblock/WindPowerArrayRegister.java @@ -71,8 +71,8 @@ public class WindPowerArrayRegister { public static Lang windArrayTooltip9; public static MultiblockMachineDefinition register(String name, int tier, BlockEntry casing, Material frame, - String renderCasing, String cnName) { - return REGISTRATE.multiblock(name, holder -> new WindPowerArrayMachine(holder, tier)) + String renderCasing, String cnName,float baseEfficiency) { + return REGISTRATE.multiblock(name, holder -> new WindPowerArrayMachine(holder, tier,baseEfficiency)) .cnLangValue(cnName) .rotationState(RotationState.NON_Y_AXIS) .appearanceBlock(casing)