diff --git a/src/generated/resources/assets/ctnhcore/lang/en_ud.json b/src/generated/resources/assets/ctnhcore/lang/en_ud.json index d66294b0..741c2507 100644 --- a/src/generated/resources/assets/ctnhcore/lang/en_ud.json +++ b/src/generated/resources/assets/ctnhcore/lang/en_ud.json @@ -616,13 +616,24 @@ "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip4": "˙uǝbʎxO ᗺɯ 00ϛ :ןɐıɹǝʇɐW buıunʇǝᴚ", "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip5": "˙I∩⅁ ǝuıɥɔɐɯ ǝɥʇ ǝǝS :ןɐıɹǝʇɐɯ ǝɔuɐuǝʇuıɐW", "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ʇuǝɯǝןǝ ɥʇɹɐǝ-ǝɹɐɹ ǝʇɐʇıdıɔǝɹd ʎןǝʌıʇɔǝןǝs oʇ ןoɹʇuoɔ Hd puɐ suoıʇɔɐǝɹ xopǝɹ sǝs∩", @@ -716,9 +727,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ıɥɔɐɯ ǝɥ⟘", @@ -905,10 +916,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Ǝ", @@ -1015,11 +1030,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 70181964..4dbb1bb5 100644 --- a/src/generated/resources/assets/ctnhcore/lang/en_us.json +++ b/src/generated/resources/assets/ctnhcore/lang/en_us.json @@ -616,13 +616,24 @@ "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip4": "Retuning Material: 500 mB Oxygen.", "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip5": "Maintenance material: See the machine GUI.", "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": "Uses redox reactions and pH control to selectively precipitate rare-earth elements.", @@ -716,9 +727,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", @@ -905,10 +916,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.", @@ -1015,11 +1030,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 6364e1d3..36986814 100644 --- a/src/generated/resources/assets/ctnhcore/lang/zh_cn.json +++ b/src/generated/resources/assets/ctnhcore/lang/zh_cn.json @@ -588,16 +588,18 @@ "ctnhcore.multiblocksa.blazeblastfurnacetooltip3": "允许一次性处理8个配方", "ctnhcore.multiblocksa.coketowertooltip0": "拥有强大的焦化产能来支撑你的木化产线!", "ctnhcore.multiblocksa.coketowertooltip1": "有着如同工业熔炉一般的速度", - "ctnhcore.multiblocksa.condensingdiscretetooltip1": "通过回流和冷却,将混合蒸气按沸点分离。", - "ctnhcore.multiblocksa.condensingdiscretetooltip2": "参数范围:回流比 5~50;中段冷量 20~80%。", - "ctnhcore.multiblocksa.condensingdiscretetooltip3": "校准后自动运行;材料不足或额度用尽时暂停。", - "ctnhcore.multiblocksa.condensingdiscretetooltip4": "调参原料:500 mB 盐水。", - "ctnhcore.multiblocksa.condensingdiscretetooltip5": "维护材料见机器 GUI 界面。", - "ctnhcore.multiblocksa.crystallizertooltip1": "控制冷却和过饱和度,使稀土沉淀结晶。", - "ctnhcore.multiblocksa.crystallizertooltip2": "参数范围:冷却速率 5~50;过饱和度 105~140%。", - "ctnhcore.multiblocksa.crystallizertooltip3": "校准后自动运行;材料不足或额度用尽时暂停。", - "ctnhcore.multiblocksa.crystallizertooltip4": "调参原料:1000 mB 盐水。", - "ctnhcore.multiblocksa.crystallizertooltip5": "维护材料见机器 GUI 界面。", + "ctnhcore.multiblocksa.condensingdiscretetooltip1": "§7通过回流与冷量分配在塔内建立温度梯度,把混合蒸气按沸点切成目标馏分,负责稀土蒸馏产物的分凝与溶剂回收;回流比决定分离精度,中段冷量决定梯度位置。", + "ctnhcore.multiblocksa.condensingdiscretetooltip2": "§b参数范围:§f回流比(×10)5~50(±8);中段冷量 20~80%(±10)", + "ctnhcore.multiblocksa.condensingdiscretetooltip3": "§e维持:§f每 120 次运行结算:回流泵 2×回流×120 EU;冷媒 0.5×冷量%×120 mB 润滑油", + "ctnhcore.multiblocksa.condensingdiscretetooltip4": "§e调参:§f每次调参需稳定 3 秒;稳定后需支付维护原料才能获得 120 次运行额度,期间不能开工", + "ctnhcore.multiblocksa.condensingdiscretetooltip5": "§a达标且额度充足自动启动;§c额度用尽或材料不足会暂停;§6运行时锁定", + "ctnhcore.multiblocksa.condensingdiscretetooltip6": "§d调参原料:§f每次调参消耗 500 mB 盐水", + "ctnhcore.multiblocksa.crystallizertooltip1": "§7控制冷却与过饱和度,让碳酸盐、草酸盐等稀土沉淀在稳定窗口内结晶,母液可回收循环;冷却过快会爆发细晶,过饱和度不足则不析出。", + "ctnhcore.multiblocksa.crystallizertooltip2": "§b参数范围:§f冷却速率(×10 K/min)5~50(±9);过饱和度 105~140%(±8)", + "ctnhcore.multiblocksa.crystallizertooltip3": "§e维持:§f每 120 次运行结算:冷媒 冷却÷10×120 mB 盐水 + 制冷 4×冷却×120 EU;搅拌 2×(过饱和-100)×120 EU", + "ctnhcore.multiblocksa.crystallizertooltip4": "§e调参:§f每次调参需稳定 3 秒;稳定后需支付维护原料才能获得 120 次运行额度,期间不能开工", + "ctnhcore.multiblocksa.crystallizertooltip5": "§a达标且额度充足自动启动;§c额度用尽或材料不足会暂停;§6运行时锁定", + "ctnhcore.multiblocksa.crystallizertooltip6": "§d调参原料:§f每次调参消耗 1000 mB 盐水", "ctnhcore.multiblocksa.decaypoolstooltip0": "衰变", "ctnhcore.multiblocksa.decaypoolstooltip1": "当电路板为0时为不通电状态---不启用世界加速", "ctnhcore.multiblocksa.decaypoolstooltip2": "当电路板为1时为通电状态---启用世界加速", @@ -610,20 +612,22 @@ "ctnhcore.multiblocksa.fermentingtanktooltip1": "发酵罐的生物生长机制:", "ctnhcore.multiblocksa.fermentingtanktooltip2": "当发酵罐温度处于§236§r至§238§r度之间时为最适生长温度,配方获得1.2倍效率,越偏离最适生长温度,配方效率越低,最低为三分之一", "ctnhcore.multiblocksa.fermentingtanktooltip3": "微生物的生长符合逻辑斯蒂方程,当输入仓内液体体积为容量的一半时,§2生长效率达到两倍§r,而满仓和空仓时生长效率最低,保底为20%", - "ctnhcore.multiblocksa.highpressurealkalidigestertooltip1": "在高压下使用氢氧化钠处理稀土矿物。", - "ctnhcore.multiblocksa.highpressurealkalidigestertooltip2": "参数范围:釜压 1200~2400 kPa;碱液浓度 20~50%。", - "ctnhcore.multiblocksa.highpressurealkalidigestertooltip3": "校准后自动运行;材料不足或额度用尽时暂停。", - "ctnhcore.multiblocksa.highpressurealkalidigestertooltip4": "调参原料:250 mB 氢氧化钠 + 500 mB 水。", - "ctnhcore.multiblocksa.highpressurealkalidigestertooltip5": "维护材料见机器 GUI 界面。", + "ctnhcore.multiblocksa.highpressurealkalidigestertooltip1": "§7用 NaOH 在高压下碱煮独居石,把难溶磷酸稀土转化为氢氧化物,供酸浸槽溶解成氯化稀土;釜压决定反应温度与分解速度,碱液浓度决定分解程度。", + "ctnhcore.multiblocksa.highpressurealkalidigestertooltip2": "§b参数范围:§f釜压 1200~2400 kPa(±250);碱液浓度 20~50%(±6)", + "ctnhcore.multiblocksa.highpressurealkalidigestertooltip3": "§e维持:§f每 120 次运行结算:蒸汽 压力÷20×120 EU;NaOH 浓度%÷5×120 mB", + "ctnhcore.multiblocksa.highpressurealkalidigestertooltip4": "§e调参:§f每次调参需稳定 3 秒;稳定后需支付维护原料才能获得 120 次运行额度,期间不能开工", + "ctnhcore.multiblocksa.highpressurealkalidigestertooltip5": "§a达标且额度充足自动启动;§c额度用尽或材料不足会暂停;§6运行时锁定", + "ctnhcore.multiblocksa.highpressurealkalidigestertooltip6": "§d调参原料:§f每次调参消耗 250 mB 氢氧化钠 + 500 mB 水", "ctnhcore.multiblocksa.industrialprimitiveblastfurnacetooltip0": "更强大的土高炉,你的炼钢好帮手", "ctnhcore.multiblocksa.industrialprimitiveblastfurnacetooltip1": "工业土高炉在持续运行配方时,会不断升温,而一旦中止,则会迅速冷却", "ctnhcore.multiblocksa.industrialprimitiveblastfurnacetooltip2": "温度越高,工业土高炉的并行数越高,最高为8并行", "ctnhcore.multiblocksa.industrialprimitiveblastfurnacetooltip3": "温度越高,工业土高炉的效率越高,最高为两倍效率", - "ctnhcore.multiblocksa.ionexchangertooltip1": "使用离子交换树脂分离稀土元素并去除杂质。", - "ctnhcore.multiblocksa.ionexchangertooltip2": "参数范围:柱流量 5~40 BV/h;洗脱液 pH 0.50~4.00。", - "ctnhcore.multiblocksa.ionexchangertooltip3": "校准后自动运行;材料不足或额度用尽时暂停。", - "ctnhcore.multiblocksa.ionexchangertooltip4": "调参原料:1000 mB 盐酸。", - "ctnhcore.multiblocksa.ionexchangertooltip5": "维护材料见机器 GUI 界面。", + "ctnhcore.multiblocksa.ionexchangertooltip1": "§7萃取之后的最终高纯精制:树脂先吸附目标离子,再用洗脱液分段洗出,分离相邻元素并去除微量杂质;柱流量决定交换效率,洗脱液 pH 决定洗脱顺序。", + "ctnhcore.multiblocksa.ionexchangertooltip2": "§b参数范围:§f柱流量(×10 BV/h)5~40(±7);洗脱液 pH(×100)50~400(±50)", + "ctnhcore.multiblocksa.ionexchangertooltip3": "§e维持:§f每 120 次运行结算:泵 8×流量×120 EU;盐酸 pH×100÷40×120 mB", + "ctnhcore.multiblocksa.ionexchangertooltip4": "§e调参:§f每次调参需稳定 3 秒;稳定后需支付维护原料才能获得 120 次运行额度,期间不能开工", + "ctnhcore.multiblocksa.ionexchangertooltip5": "§a达标且额度充足自动启动;§c额度用尽或材料不足会暂停;§6运行时锁定", + "ctnhcore.multiblocksa.ionexchangertooltip6": "§d调参原料:§f每次调参消耗 1000 mB 盐酸", "ctnhcore.multiblocksa.largebottletooltip0": "真是一个大罐子", "ctnhcore.multiblocksa.largebottletooltip1": "可以存储10000桶液体", "ctnhcore.multiblocksa.largebottletooltip2": "与大型发酵罐一起使用时,其中的液体会以§e100mb/s§r的速度消耗", @@ -651,26 +655,39 @@ "ctnhcore.multiblocksa.naqreactormk3tooltip2": "利用超能燃料进行发电,无镍等离子体时无法完全消耗燃料", "ctnhcore.multiblocksa.naqreactormk3tooltip3": "机器构型中必须有一个动力仓", "ctnhcore.multiblocksa.naqreactormk3tooltip4": "随着内核温度上升,发电效率增大", - "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip1": "在受控氧化气氛中焙烧稀土矿石和稀土盐。", - "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip2": "参数范围:过量氧系数 95~125%;滚筒转速 2~12 rpm。", - "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip3": "校准后自动运行;材料不足或额度用尽时暂停。", - "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip4": "调参原料:500 mB 氧气。", - "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip5": "维护材料见机器 GUI 界面。", + "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip1": "§7在受控氧化气氛中焙烧矿石与稀土盐:氟碳镧铈矿焙烧提铈,碳酸盐、草酸盐煅烧成稀土氧化物;过量氧系数决定氧化程度,滚筒转速控制翻动与停留时间。", + "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip2": "§b参数范围:§f过量氧系数 95~125%(±6);滚筒转速 2~12 rpm(±3)", + "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip3": "§e维持:§f每 120 次运行结算:氧气 (氧%-90)×120 mB;传动 32×转速×120 EU", + "ctnhcore.multiblocksa.oxidationroastingfurnacetooltip4": "§e调参:§f每次调参需稳定 3 秒;稳定后需支付维护原料才能获得 120 次运行额度,期间不能开工", + "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": "利用氧化还原反应和 pH 控制,选择性沉淀稀土元素。", - "ctnhcore.multiblocksa.reductionprecipitationtanktooltip2": "参数范围:氧化还原电位 -700~200 mV;槽液 pH 1.00~7.00。", - "ctnhcore.multiblocksa.reductionprecipitationtanktooltip3": "校准后自动运行;材料不足或额度用尽时暂停。", - "ctnhcore.multiblocksa.reductionprecipitationtanktooltip4": "调参原料:500 mB 硫酸。", - "ctnhcore.multiblocksa.reductionprecipitationtanktooltip5": "维护材料见机器 GUI 界面。", + "ctnhcore.multiblocksa.reductionprecipitationtanktooltip1": "§7利用铕、镱等稀土的可变价特性,把目标元素还原成低价后选择性沉淀,与其余稀土分离;氧化还原电位越负还原越强,槽液 pH 决定沉淀能否生成。", + "ctnhcore.multiblocksa.reductionprecipitationtanktooltip2": "§b参数范围:§f氧化还原电位 -700~200 mV(±120);槽液 pH(×100)100~700(±60)", + "ctnhcore.multiblocksa.reductionprecipitationtanktooltip3": "§e维持:§f每 120 次运行结算:电解 (200-电位)÷10×120 EU;酸/碱 |pH×100-400|÷20×120 mB", + "ctnhcore.multiblocksa.reductionprecipitationtanktooltip4": "§e调参:§f每次调参需稳定 3 秒;稳定后需支付维护原料才能获得 120 次运行额度,期间不能开工", + "ctnhcore.multiblocksa.reductionprecipitationtanktooltip5": "§a达标且额度充足自动启动;§c额度用尽或材料不足会暂停;§6运行时锁定", + "ctnhcore.multiblocksa.reductionprecipitationtanktooltip6": "§d调参原料:§f每次调参消耗 500 mB 硫酸", "ctnhcore.multiblocksa.sinteringkilntooltip0": "需要通入8192应力使其内部活塞压实待加工料", "ctnhcore.multiblocksa.slaughterhousetooltip0": "无情的杀戮机器", "ctnhcore.multiblocksa.slaughterhousetooltip1": "输入总线放入电动刷怪笼后,机器会自动输出对应怪物的战利品,可放入多个电动刷怪笼", @@ -678,11 +695,12 @@ "ctnhcore.multiblocksa.slaughterhousetooltip3": "怪物血量和护甲值越高,配方运行所需时间越长", "ctnhcore.multiblocksa.slaughterhousetooltip4": "武器的伤害和附魔会减少配方运行的时间", "ctnhcore.multiblocksa.slaughterhousetooltip5": "时运等附魔也能生效", - "ctnhcore.multiblocksa.solventextractiontowertooltip1": "利用水相和有机相的分配差异分离稀土元素。", - "ctnhcore.multiblocksa.solventextractiontowertooltip2": "参数范围:水相 pH 2.00~7.00;O/A 比 0.50~2.00。", - "ctnhcore.multiblocksa.solventextractiontowertooltip3": "校准后自动运行;材料不足或额度用尽时暂停。", - "ctnhcore.multiblocksa.solventextractiontowertooltip4": "调参原料:1000 mB 苯。", - "ctnhcore.multiblocksa.solventextractiontowertooltip5": "维护材料见机器 GUI 界面。", + "ctnhcore.multiblocksa.solventextractiontowertooltip1": "§7利用稀土在水相与有机相间的分配差异完成轻、中、重分组和单元素分离;水相 pH 决定各元素进入有机相的能力,O/A 比决定萃取容量,换元素需重新校准。", + "ctnhcore.multiblocksa.solventextractiontowertooltip2": "§b参数范围:§f水相 pH(×100)200~700(±60);O/A 比(×100)50~200(±30)", + "ctnhcore.multiblocksa.solventextractiontowertooltip3": "§e维持:§f每 120 次运行结算:酸/碱 |pH×100-450|÷25×120 mB;有机相 O/A×100÷20×120 mB", + "ctnhcore.multiblocksa.solventextractiontowertooltip4": "§e调参:§f每次调参需稳定 3 秒;稳定后需支付维护原料才能获得 120 次运行额度,期间不能开工", + "ctnhcore.multiblocksa.solventextractiontowertooltip5": "§a达标且额度充足自动启动;§c额度用尽或材料不足会暂停;§6运行时锁定", + "ctnhcore.multiblocksa.solventextractiontowertooltip6": "§d调参原料:§f每次调参消耗 1000 mB 苯(有机相)", "ctnhcore.multiblocksa.supercentrifuge": "超速离心", "ctnhcore.multiblocksa.supercentrifugeparallel": "普通离心机模式下会获得8并行", "ctnhcore.multiblocksa.superebftooltip0": "所有配方速度提高50%!", @@ -700,11 +718,12 @@ "ctnhcore.multiblocksa.underfloorheatingsystemtooltip1": "地暖系统依靠蒸汽供暖,占地一个区块,能对§a周围5*5的区块§r产生供暖,供暖只会在地暖上方十格内生效", "ctnhcore.multiblocksa.underfloorheatingsystemtooltip2": "铜砖瓦会生锈,生锈后地暖系统的供暖能力会减弱", "ctnhcore.multiblocksa.underfloorheatingsystemtooltip3": "可以调节速率,以降低供暖功率并减少蒸汽消耗,最低降至25%", - "ctnhcore.multiblocksa.vacuumsinteringtowertooltip1": "在真空和受控升温条件下烧结、蒸馏稀土材料。", - "ctnhcore.multiblocksa.vacuumsinteringtowertooltip2": "参数范围:真空压力 5~500 Pa;升温速率 5~80 K/min。", - "ctnhcore.multiblocksa.vacuumsinteringtowertooltip3": "校准后自动运行;材料不足或额度用尽时暂停。", - "ctnhcore.multiblocksa.vacuumsinteringtowertooltip4": "调参原料:500 mB 氮气。", - "ctnhcore.multiblocksa.vacuumsinteringtowertooltip5": "维护材料见机器 GUI 界面。", + "ctnhcore.multiblocksa.vacuumsinteringtowertooltip1": "§7在真空与受控升温下烧结稀土氟化物,并真空蒸馏 Sm、Eu、Tm、Yb 等易挥发稀土;真空越高蒸发脱气越彻底,升温速率决定烧结均匀性。", + "ctnhcore.multiblocksa.vacuumsinteringtowertooltip2": "§b参数范围:§f真空压力 5~500 Pa(±90);升温速率 5~80 K/min(±12)", + "ctnhcore.multiblocksa.vacuumsinteringtowertooltip3": "§e维持:§f每 120 次运行结算:真空泵 8×√(500÷压力)×120 EU;加热 6×升温×120 EU;氮气 500×120 mB", + "ctnhcore.multiblocksa.vacuumsinteringtowertooltip4": "§e调参:§f每次调参需稳定 3 秒;稳定后需支付维护原料才能获得 120 次运行额度,期间不能开工", + "ctnhcore.multiblocksa.vacuumsinteringtowertooltip5": "§a达标且额度充足自动启动;§c额度用尽或材料不足会暂停;§6运行时锁定", + "ctnhcore.multiblocksa.vacuumsinteringtowertooltip6": "§d调参原料:§f每次调参消耗 500 mB 氮气", "ctnhcore.multiblocksa.voidminertooltip0": "取天材,掘地精", "ctnhcore.multiblocksa.voidminertooltip1": "虚空采矿场自动生成并提取矿石", "ctnhcore.multiblocksa.voidminertooltip2": "如果你对矿物需求极大,虚空采矿机是必不可少的帮手", @@ -757,9 +776,9 @@ "ctnhcore.multiblocksb.lasersortertooltip8": "配方给出请求算力,如果配方没有给出则按照激光蚀刻模式的公式计算", "ctnhcore.multiblocksb.lasersortertooltip9": "输入的算力如果为基础请求算力的整数倍,则并行等同于⌊(输入的算力/基础请求算力)⌋的三次方", "ctnhcore.multiblocksb.nanogeneratortooltip0": "利用摩擦热的力量", - "ctnhcore.multiblocksb.nanogeneratortooltip1": "最大并行数:2048", - "ctnhcore.multiblocksb.nanogeneratortooltip2": "每有1并行数,总体发电量提升2%\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", @@ -956,10 +975,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": "首先放置装配线主方块。", @@ -1082,13 +1105,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": "访问轨道", @@ -1193,9 +1217,6 @@ "item.ctnhcore.biological_patch_transistor": "生物贴片晶体管", "item.ctnhcore.brick_mud": "砖泥", "item.ctnhcore.brick_preform": "砖胚", - "item.ctnhcore.bsc_chip": "BSC芯片", - "item.ctnhcore.bsc_wafer": "BSC晶圆", - "item.ctnhcore.bsc_wafer_rubber_masked": "橡胶掩膜的BSC晶圆", "item.ctnhcore.circuit_board_m_four": "中间产物-M4", "item.ctnhcore.circuit_board_m_one": "中间产物-M1", "item.ctnhcore.circuit_board_m_three": "中间产物-M3", @@ -1259,7 +1280,6 @@ "item.ctnhcore.high_quality_solid_fuel": "高品质固体燃料", "item.ctnhcore.inverter": "逆变器", "item.ctnhcore.lapotron_crystal_granule": "兰波顿水晶晶粒", - "item.ctnhcore.lpic_wafer_rubber_masked": "橡胶掩膜的LPIC晶圆", "item.ctnhcore.me_advanced_terminal": "GT-MBST-A v7.0.1", "item.ctnhcore.measurement_pv_cell": "测定光伏电池组", "item.ctnhcore.metallurgical_catalyst": "炼金催化剂", @@ -1289,14 +1309,12 @@ "item.ctnhcore.pv_terminal": "光伏绑定终端", "item.ctnhcore.quark_core": "夸克核心", "item.ctnhcore.radioactive_waste": "放射性废料", - "item.ctnhcore.ram_wafer_rubber_masked": "橡胶掩膜的RAM晶圆", "item.ctnhcore.refined_iron_ingot": "精炼铁方坯", "item.ctnhcore.research_dataset": "研究数据集", "item.ctnhcore.research_dataset_lm": "研究数据集:活体金属", "item.ctnhcore.resonance_crystal": "共振水晶", "item.ctnhcore.resonance_crystal_blank": "共振水晶粗胚", "item.ctnhcore.resonance_crystal_granule": "共振水晶晶粒", - "item.ctnhcore.rubber_masked_silicon_wafer": "橡胶掩膜的硅晶圆", "item.ctnhcore.rubber_powder": "预处理橡胶粉", "item.ctnhcore.scp_500": "SCP-500", "item.ctnhcore.scp_500_base": "SCP-500基底", @@ -1306,7 +1324,6 @@ "item.ctnhcore.space_fabric": "太空织物", "item.ctnhcore.special_plastic_circuit_board": "特种塑料电路基板", "item.ctnhcore.special_plastic_printed_circuit_board": "特种塑料印刷电路基板", - "item.ctnhcore.ssoc_wafer_rubber_masked": "橡胶掩膜的简易SoC晶圆", "item.ctnhcore.stone_process_catalyst": "石头粉处理催化剂", "item.ctnhcore.strongly_interacting_neutron_reflector": "强相互作用力反射板", "item.ctnhcore.t1_chip": "T1芯片", 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 c4d5a21e..71b2d887 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 efcee56a..e851f65a 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 94a71a16..b504e8c1 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 34624df2..ca4eadc0 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 @@ -72,14 +72,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; this.netHandler = attachTrait(new ProvidableNetTrait(this, this::getNeighbourNetTraits, this::canProvide, this::getStorage, this::checkAndConsume)); } @@ -137,7 +138,6 @@ public void onStructureInvalid() { @Override public void onStructureFormed() { super.onStructureFormed(); - updateBasicRate(); updateEnergyContainer(); updateFluidParts(); updateEfficiencyPara(); @@ -165,22 +165,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); - } /// //////////////////////////////// //////// 风电网络 //////// @@ -239,12 +223,14 @@ private int checkAndConsume(int amount) { 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() { @@ -354,4 +340,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 627e53f0..820f9ba0 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 52fecd9d..f30d60b4 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 @@ -33,6 +33,7 @@ import com.gregtechceu.gtceu.api.machine.multiblock.CoilWorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.multiblock.RecipeElectricMultiblockMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.pattern.FactoryBlockPattern; import com.gregtechceu.gtceu.api.pattern.Predicates; import com.gregtechceu.gtceu.api.pattern.TraceabilityPredicate; @@ -42,6 +43,7 @@ import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitiveWorkableMachine; import com.gregtechceu.gtceu.common.machine.trait.multiblock.CoilMachineTrait; import com.gregtechceu.gtceu.utils.FormattingUtil; +import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; @@ -822,8 +824,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; @@ -837,8 +839,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; @@ -852,8 +854,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; @@ -862,6 +864,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; @@ -1240,7 +1297,6 @@ public class MultiblocksA { public static void init(){} public static final MultiblockMachineDefinition UNDERFLOOR_HEATING_SYSTEM = REGISTRATE.multiblock("underfloor_heating_system", UnderfloorHeatingMachine::new) - .cnLangValue("地暖") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.UNDERFLOOR_HEATING_SYSTEM) .tooltips(underfloorHeatingSystemTooltip0.translate().withStyle(ChatFormatting.GRAY), @@ -1325,7 +1381,6 @@ public static void init(){} public static final MultiblockMachineDefinition ASTRONOMICAL_OBSERVATORY = REGISTRATE.multiblock("astronomical_observatory", AstronomicalMachine::new) - .cnLangValue("天文台") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.ASTRONOMICAL_OBSERVATORY) .tooltips(astronomicalTooltip0.translate().withStyle(ChatFormatting.GRAY), @@ -1357,14 +1412,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) { @@ -1391,14 +1443,32 @@ private static Lang photovoltaicPowerStationTooltip(String tier, int index) { } public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(String tier, int basicRate, - BlockEntry photovoltaicBlock, - String cnName) { - return REGISTRATE.multiblock("photovoltaic_power_station_" + tier, holder -> new PhotovoltaicPowerStationMachine(holder, basicRate)) - .cnLangValue(cnName) + 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) @@ -1432,12 +1502,11 @@ 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.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) - .cnLangValue("屠宰场") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.SLAUGHTER_HOUSE) .tooltips(slaughterHouseTooltip0.translate().withStyle(ChatFormatting.GRAY), @@ -1468,7 +1537,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .register(); public final static MultiblockMachineDefinition COKE_TOWER = REGISTRATE.multiblock("coke_tower", CoilWorkableElectricMultiblockMachine::new) - .cnLangValue("焦化塔") .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.PYROLYSE_RECIPES) .tooltips(cokeTowerTooltip0.translate().withStyle(ChatFormatting.GRAY), @@ -1504,7 +1572,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .register(); public final static MultiblockMachineDefinition BEDROCK_DRILLING_RIGS = REGISTRATE.multiblock("bedrock_drilling_rigs", CoilWorkableElectricMultiblockMachine::new) - .cnLangValue("基岩钻机") .rotationState(RotationState.ALL) .recipeType(CTNHRecipeTypes.BEDROCK_DRILLING_RIGS) .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH) @@ -1534,7 +1601,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin GTCEu.id("block/multiblock/implosion_compressor")) .register(); public final static MultiblockMachineDefinition NAQ_REACTOR_MK3 = REGISTRATE.multiblock("naq_reactor_mk3", NaqReactorMachine::new) - .cnLangValue("超级硅岩反应堆") .rotationState(RotationState.ALL) .recipeTypes(CTNHRecipeTypes.NAQ_MK1) .generator(true) @@ -1670,7 +1736,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .register(), GTValues.LuV, GTValues.ZPM, GTValues.UV); public final static MultiblockMachineDefinition SWEATSHOP = REGISTRATE.multiblock("sweat_shop", FactoryMachine::new) - .cnLangValue("§4血汗工厂") .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(GTRecipeTypes.CENTRIFUGE_RECIPES, GTRecipeTypes.LATHE_RECIPES, GTRecipeTypes.BENDER_RECIPES, GTRecipeTypes.MACERATOR_RECIPES, GTRecipeTypes.MIXER_RECIPES, GTRecipeTypes.EXTRACTOR_RECIPES, @@ -1702,8 +1767,7 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_solid_steel"), GTCEu.id("block/multiblock/vacuum_freezer")) .register(); - public final static MultiblockMachineDefinition PLASMA_CONDENSER = REGISTRATE.multiblock("plasma_condenser", RecipeElectricMultiblockMachine::new) - .cnLangValue("等离子冷凝器") + public final static MultiblockMachineDefinition PLASMA_CONDENSER = REGISTRATE.multiblock("plasma_condenser", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(CTNHRecipeTypes.PLASMA_CONDENSER_RECIPES) .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, OC_NON_PERFECT, BATCH_MODE) @@ -1743,7 +1807,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin public final static MultiblockMachineDefinition MEADOW = REGISTRATE.multiblock("meadow", MeadowMachine::new) - .cnLangValue("§6牧场") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.MEADOW) .recipeModifier(MeadowMachine::stressCrossParallel) @@ -1784,7 +1847,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .register(); public final static MultiblockMachineDefinition LARGE_BOTTLE = REGISTRATE.multiblock("large_bottle", holder -> new LargeBottleMachine(holder, 10000 * 1000, null)) - .cnLangValue("发酵瓶") .rotationState(RotationState.NON_Y_AXIS) .recipeType(DUMMY_RECIPES) .tooltips(largeBottleTooltip0.translate().withStyle(ChatFormatting.GRAY), @@ -1813,7 +1875,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_solid_steel"), GTCEu.id("block/multiblock/implosion_compressor")) .register(); public final static MultiblockMachineDefinition FERMENTING_TANK = REGISTRATE.multiblock("fermenting_tank", FermentingTankMachine::new) - .cnLangValue("发酵罐") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.FERMENTING) .tooltips(fermentingTankTooltip0.translate().withStyle(ChatFormatting.GRAY), @@ -1852,7 +1913,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .register(); public final static MultiblockMachineDefinition LARGE_FERMENTING_TANK = REGISTRATE.multiblock("large_fermenting_tank", LargeFermentingTankMachine::new) - .cnLangValue("大型发酵罐") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.FERMENTING) .tooltips(largeFermentingTankTooltip0.translate().withStyle(ChatFormatting.GRAY), @@ -1899,7 +1959,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_solid_steel"), GTCEu.id("block/multiblock/implosion_compressor")) .register(); public final static MultiblockMachineDefinition DIGESTION_TANK = REGISTRATE.multiblock("digestion_tank", DigestingTankMachine::new) - .cnLangValue("化粪池") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.DIGESTING) .tooltips(digestionTankTooltip0.translate().withStyle(ChatFormatting.GRAY), @@ -1924,7 +1983,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin .workableCasingModel(ResourceLocation.tryParse("minecraft:block/bricks"), GTCEu.id("block/multiblock/implosion_compressor")) .register(); public final static MultiblockMachineDefinition BLAZE_BLAST_FURNACE = REGISTRATE.multiblock("blaze_blast_furnace", BlazeBlastFurnaceMachine::new) - .cnLangValue("§c炽焱高炉") .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.BLAST_RECIPES) .recipeModifiers(BlazeBlastFurnaceMachine::recipeModifier, GTRecipeModifiers::ebfOverclock, BATCH_MODE) @@ -1956,7 +2014,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin // Come from GTCA public static final MultiblockMachineDefinition SUPER_EBF = REGISTRATE .multiblock("super_ebf", CoilWorkableElectricMultiblockMachine::new) - .cnLangValue("超级电力高炉") .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.BLAST_RECIPES) .recipeModifiers(PARALLEL_HATCH, (machine, group, recipe) -> { @@ -2003,7 +2060,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin //Come from GTCA public static final MultiblockMachineDefinition MEGA_OIL_CRACKING_UNIT = REGISTRATE .multiblock("mega_oil_cracking_unit", CoilWorkableElectricMultiblockMachine::new) - .cnLangValue("巨型原油裂解厂") .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.CRACKING_RECIPES) .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers::crackerOverclock, BATCH_MODE) @@ -2044,7 +2100,6 @@ public static MultiblockMachineDefinition registerPhotovoltaicPowerStation(Strin //Come from GTCA public static final MultiblockMachineDefinition MEGA_LCR = REGISTRATE .multiblock("mega_lcr", RecipeElectricMultiblockMachine::new) - .cnLangValue("巨型化学反应釜") .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(GTRecipeTypes.LARGE_CHEMICAL_RECIPES) .appearanceBlock(CASING_PTFE_INERT) @@ -2147,7 +2202,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, } public static final MultiblockMachineDefinition INDUSTRIAL_PRIMITIVE_BLAST_FURNACE = REGISTRATE.multiblock("industrial_primitive_blast_furnace", IndustrialPrimitiveBlastFurnaceMachine::new) - .cnLangValue("工业土高炉") .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.PRIMITIVE_BLAST_FURNACE_RECIPES) .appearanceBlock(CASING_PRIMITIVE_BRICKS) @@ -2175,7 +2229,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/solid/machine_primitive_bricks"), GTCEu.id("block/multiblock/steam_oven")) .register(); public static final MultiblockMachineDefinition VOID_MINER = REGISTRATE.multiblock("void_miner", VoidMinerProcessingMachine::new) - .cnLangValue("虚空采矿场") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.VOID_MINER) .appearanceBlock(GTBlocks.CASING_TUNGSTENSTEEL_ROBUST) @@ -2219,8 +2272,7 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_robust_tungstensteel"), GTCEu.id("block/multiblock/large_chemical_reactor")) .register(); - public static final MultiblockMachineDefinition SINTERING_KILN = REGISTRATE.multiblock("sintering_kiln", RecipeElectricMultiblockMachine::new) - .cnLangValue("烧结窑") + public static final MultiblockMachineDefinition SINTERING_KILN = REGISTRATE.multiblock("sintering_kiln", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.SINTERING_KILN) .tooltips(sinteringKilnTooltip0.translate().withStyle(ChatFormatting.GRAY)) @@ -2253,8 +2305,7 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, GTCEu.id("block/multiblock/generator/extreme_combustion_engine"), "无尽内燃引擎"); - public static final MultiblockMachineDefinition CHEMICAL_VAPOR_DEPOSITION_MACHINE = REGISTRATE.multiblock("chemical_vapor_deposition_machine", RecipeElectricMultiblockMachine::new) - .cnLangValue("化学气相沉积器") + public static final MultiblockMachineDefinition CHEMICAL_VAPOR_DEPOSITION_MACHINE = REGISTRATE.multiblock("chemical_vapor_deposition_machine", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.CHEMICAL_VAPOR_DEPOSITION) .recipeModifiers(OC_NON_PERFECT, BATCH_MODE) @@ -2276,7 +2327,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); public static final MultiblockMachineDefinition MARTIAL_MORALITY_EYE = REGISTRATE.multiblock("martial_morality_eye", MartialMoralityEyeMachine::new) - .cnLangValue("武德之眼") .allowExtendedFacing(false) .recipeType(CTNHRecipeTypes.MARTIAL_MORALITY_EYE) .appearanceBlock(CASING_BRONZE_BRICKS) @@ -2344,7 +2394,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); public static final MultiblockMachineDefinition ADVANCED_COKE_OVEN = REGISTRATE.multiblock("advanced_coke_oven", PrimitiveWorkableMachine::new) - .cnLangValue("高级焦炉") .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.COKE_OVEN_RECIPES) .recipeModifiers((machine, group, recipe) -> { @@ -2374,8 +2423,7 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(CTNHCore.id("block/high_grade_coke_oven_bricks"), GTCEu.id("block/machines/arc_furnace")) .register(); - public static final MultiblockMachineDefinition DIMENSIONAL_GAS_COLLECTION_CHAMBER = REGISTRATE.multiblock("dimensional_gas_collection_chamber", RecipeElectricMultiblockMachine::new) - .cnLangValue("维度集气室") + public static final MultiblockMachineDefinition DIMENSIONAL_GAS_COLLECTION_CHAMBER = REGISTRATE.multiblock("dimensional_gas_collection_chamber", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(CTNHRecipeTypes.DIMENSIONAL_GAS_COLLECTION) .recipeModifiers(OC_PERFECT_SUBTICK, BATCH_MODE) @@ -2406,7 +2454,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); public static final MultiblockMachineDefinition CONDENSING_DISCRETE = REGISTRATE.multiblock("condensing_discrete", holder -> new ProcessControlledCoilMultiblockMachine(holder, ProcessControlProfile.CONDENSING_DISCRETE)) - .cnLangValue("冷凝离散塔") .allowExtendedFacing(false) .recipeType(CTNHRecipeTypes.CONDENSING_DISCRETE) .tooltips(condensingDiscreteTooltip1.translate(), @@ -2440,7 +2487,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); public static final MultiblockMachineDefinition OXIDATION_ROASTING_FURNACE = REGISTRATE.multiblock("oxidation_roasting_furnace", holder -> new ProcessControlledCoilMultiblockMachine(holder, ProcessControlProfile.OXIDATION_ROASTING)) - .cnLangValue("氧化焙烧炉") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.OXIDATION_ROASTING) .tooltips(oxidationRoastingFurnaceTooltip1.translate(), @@ -2483,7 +2529,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); public static final MultiblockMachineDefinition HIGH_PRESSURE_ALKALI_DIGESTER = REGISTRATE.multiblock("high_pressure_alkali_digester", holder -> new ProcessControlledElectricMultiblockMachine(holder, ProcessControlProfile.HIGH_PRESSURE_ALKALI_DIGESTION)) - .cnLangValue("高压碱煮釜") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.HIGH_PRESSURE_ALKALI_DIGESTION) .tooltips(highPressureAlkaliDigesterTooltip1.translate(), @@ -2520,7 +2565,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); public static final MultiblockMachineDefinition SOLVENT_EXTRACTION_TOWER = REGISTRATE.multiblock("solvent_extraction_tower", holder -> new ProcessControlledElectricMultiblockMachine(holder, ProcessControlProfile.SOLVENT_EXTRACTION)) - .cnLangValue("溶剂萃取塔") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.SOLVENT_EXTRACTION) .tooltips(solventExtractionTowerTooltip1.translate(), @@ -2554,7 +2598,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); public static final MultiblockMachineDefinition REDUCTION_PRECIPITATION_TANK = REGISTRATE.multiblock("reduction_precipitation_tank", holder -> new ProcessControlledElectricMultiblockMachine(holder, ProcessControlProfile.REDUCTION_PRECIPITATION)) - .cnLangValue("还原沉淀槽") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.REDUCTION_PRECIPITATION) .tooltips(reductionPrecipitationTankTooltip1.translate(), @@ -2588,7 +2631,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); public static final MultiblockMachineDefinition ION_EXCHANGER = REGISTRATE.multiblock("ion_exchanger", holder -> new ProcessControlledCoilMultiblockMachine(holder, ProcessControlProfile.ION_EXCHANGE)) - .cnLangValue("离子交换机") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.ION_EXCHANGER) .tooltips(ionExchangerTooltip1.translate(), @@ -2618,8 +2660,7 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/gcym/corrosion_proof_casing"), GTCEu.id("block/multiblock/large_chemical_reactor")) .register(); - public static final MultiblockMachineDefinition LARGE_STEEL_FURNACE = REGISTRATE.multiblock("large_steel_furnace", RecipeElectricMultiblockMachine::new) - .cnLangValue("大型钢制熔炉") + public static final MultiblockMachineDefinition LARGE_STEEL_FURNACE = REGISTRATE.multiblock("large_steel_furnace", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.FURNACE_RECIPES) .recipeModifiers((machine, group, recipe) -> CTNHRecipeModifiers.accurateParallel(machine, group, recipe, 32), GTRecipeModifiers.OC_PERFECT_SUBTICK) @@ -2640,8 +2681,7 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/solid/machine_primitive_bricks"), GTCEu.id("block/multiblock/implosion_compressor")) .register(); - public static final MultiblockMachineDefinition LARGE_STEEL_ALLOY_FURNACE = REGISTRATE.multiblock("large_steel_alloy_furnace", RecipeElectricMultiblockMachine::new) - .cnLangValue("大型钢制合金炉") + public static final MultiblockMachineDefinition LARGE_STEEL_ALLOY_FURNACE = REGISTRATE.multiblock("large_steel_alloy_furnace", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.ALLOY_SMELTER_RECIPES) .recipeModifiers((machine, group, recipe) -> CTNHRecipeModifiers.accurateParallel(machine, group, recipe, 32), GTRecipeModifiers.OC_PERFECT_SUBTICK) @@ -2753,8 +2793,7 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, // .build()) // .workableCasingModel(CTNHCore.id("block/casings/osmiridium_casing"), GTCEu.id("block/multiblock/large_miner")) // .register(); - public static final MultiblockMachineDefinition DECAY_POOLS = REGISTRATE.multiblock("decay_pools_machine", RecipeElectricMultiblockMachine::new) - .cnLangValue("衰变罐") + public static final MultiblockMachineDefinition DECAY_POOLS = REGISTRATE.multiblock("decay_pools_machine", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(CTNHRecipeTypes.DECAY_POOLS) .appearanceBlock(GTBlocks.CASING_STAINLESS_CLEAN) @@ -2787,7 +2826,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_clean_stainless_steel"), GTCEu.id("block/multiblock/generator/large_steam_turbine")) .register(); public static final MultiblockMachineDefinition FUEL_REFINING_FACTORY = REGISTRATE.multiblock("fuel_refining_factory", CoilWorkableElectricMultiblockMachine::new) - .cnLangValue("燃料精炼厂") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.FUEL_REFINING) .recipeModifier(GTRecipeModifiers::ebfOverclock) @@ -2836,7 +2874,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_solid_steel"), GTCEu.id("block/multiblock/fusion_reactor")) .register(); public static final MultiblockMachineDefinition VACUUM_SINTERING_TOWER = REGISTRATE.multiblock("vacuum_sintering_tower", holder -> new ProcessControlledCoilMultiblockMachine(holder, ProcessControlProfile.VACUUM_SINTERING)) - .cnLangValue("真空烧结厂") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.VACUUM_SINTERING) .tooltips(vacuumSinteringTowerTooltip1.translate(), @@ -2879,7 +2916,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_stable_titanium"), GTCEu.id("block/multiblock/implosion_compressor")) .register(); public static final MultiblockMachineDefinition CRYSTALLIZER = REGISTRATE.multiblock("crystallizer", holder -> new ProcessControlledCoilMultiblockMachine(holder, ProcessControlProfile.CRYSTALLIZATION)) - .cnLangValue("结晶器") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.CRYSTALLIZER) .tooltips(crystallizerTooltip1.translate(), @@ -2918,7 +2954,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/gcym/high_temperature_smelting_casing"), GTCEu.id("block/multiblock/implosion_compressor")) .register(); public static final MultiblockMachineDefinition SEAWATER_DESALTING_FACTORY = REGISTRATE.multiblock("seawater_desalting_factory", CoilWorkableElectricMultiblockMachine::new) - .cnLangValue("海水晒盐工厂") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.DESALTING) .tooltips(desaltingFactoryTooltip0.translate().withStyle(ChatFormatting.GRAY), @@ -2952,7 +2987,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); public static final MultiblockMachineDefinition BIO_REACTOR = REGISTRATE.multiblock("bio_reactor", BioMachine::new) - .cnLangValue("生物反应器") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.BIO_REACTOR) .tooltips(bioReactorTooltip0.translate().withStyle(ChatFormatting.GRAY)) @@ -2975,8 +3009,7 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .register(); - public static final MultiblockMachineDefinition SUPER_CENTRIFUGE = REGISTRATE.multiblock("super_centrifuge", RecipeElectricMultiblockMachine::new) - .cnLangValue("超速离心机") + public static final MultiblockMachineDefinition SUPER_CENTRIFUGE = REGISTRATE.multiblock("super_centrifuge", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(GTRecipeTypes.CENTRIFUGE_RECIPES, CTNHRecipeTypes.DIFFERENTIAL_CENTRIFUGE_RECIPES) .appearanceBlock(CASING_TITANIUM_STABLE) @@ -3005,7 +3038,6 @@ public static MultiblockMachineDefinition registerChemicalGenerator(String name, .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_stable_titanium"), GTCEu.id("block/multiblock/implosion_compressor")) .register(); public static final MultiblockMachineDefinition ULTRASONIC_APPARATUS = REGISTRATE.multiblock("ultrasonic_apparatus", CoilWorkableElectricMultiblockMachine::new) - .cnLangValue("超声破碎仪") .rotationState(RotationState.NON_Y_AXIS) .recipeType(CTNHRecipeTypes.ULTRASONICATION_RECIPES) .appearanceBlock(CASING_STAINLESS_CLEAN) @@ -3028,4 +3060,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 18b858ee..2542460d 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 07ad96e2..ee0d5d13 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) @@ -105,4 +105,4 @@ public static MultiblockMachineDefinition register(String name, int tier, BlockE windArrayTooltip11.translate()) .register(); } -} +} \ No newline at end of file