From a531df53cbe19ecbec08cb5d7b9d696dc7a5e48d Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 19 Nov 2023 19:49:08 -0500 Subject: [PATCH 1/8] Fix RegistryObject#get allocating on every call Credit to jaskarth for discovering this problem --- .../RegistryObjectMixin.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java new file mode 100644 index 00000000..ff40d1f4 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java @@ -0,0 +1,30 @@ +package org.embeddedt.modernfix.forge.mixin.perf.forge_registry_lambda; + +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.IForgeRegistryEntry; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(value = RegistryObject.class, remap = false) +public class RegistryObjectMixin> { + @Shadow private @Nullable T value; + + @Shadow @Final private ResourceLocation name; + + /** + * @author embeddedt + * @reason avoid lambda allocation on every call + */ + @Overwrite + public T get() { + T ret = this.value; + if(ret == null) { + throw new NullPointerException("Registry Object not present: " + this.name); + } + return ret; + } +} From 27167ea42cd4fd67ccf4be6a39cc3ecd589ffe4f Mon Sep 17 00:00:00 2001 From: notlin4 <121224522+notlin4@users.noreply.github.com> Date: Wed, 22 Nov 2023 01:05:45 +0800 Subject: [PATCH 2/8] Update zh_tw.json (#302) --- .../assets/modernfix/lang/zh_tw.json | 133 ++++++++++++++++-- 1 file changed, 122 insertions(+), 11 deletions(-) diff --git a/common/src/main/resources/assets/modernfix/lang/zh_tw.json b/common/src/main/resources/assets/modernfix/lang/zh_tw.json index 27e5f5d8..1a703c35 100644 --- a/common/src/main/resources/assets/modernfix/lang/zh_tw.json +++ b/common/src/main/resources/assets/modernfix/lang/zh_tw.json @@ -1,13 +1,124 @@ { - "key.modernfix": "ModernFix", - "key.modernfix.config": "開啟設定介面", - "modernfix.jei_load": "正在載入 JEI,這可能需要一點時間", - "modernfix.no_lazydfu": "沒有安裝 LazyDFU。如果 Minecraft 需要從舊版本更新遊戲資料,可能會出現明顯的延遲。", - "modernfix.config": "ModernFix 注入設定", - "modernfix.config.done_restart": "完成(需要重新啟動遊戲)", - "modernfix.option.on": "開啟", - "modernfix.option.off": "關閉", - "modernfix.config.not_default": "(已修改)", - "asynclocator.map.locating": "地圖(定位中...)", - "asynclocator.map.none": "地圖(未找到附近的特徵)" + "key.modernfix": "ModernFix", + "key.modernfix.config": "開啟設定畫面", + "modernfix.jei_load": "正在載入 JEI,這可能需要一點時間", + "modernfix.no_lazydfu": "未安裝 LazyDFU。如果 Minecraft 需要從舊版本更新遊戲資料,可能會出現明顯的卡頓。", + "modernfix.no_ferritecore": "未安裝 FerriteCore。記憶體使用量將會很高。", + "modernfix.connectedness_dynresoruces": "Connectedness 和 ModernFix 的動態資源選項不相容。請移除 Connectedness 或在 ModernFix 設定中停用動態資源。", + "modernfix.perf_mod_warning": "建議安裝這些模組,但警告可以在 ModernFix 設定中停用。", + "modernfix.config": "ModernFix 混合設定", + "modernfix.config.done_restart": "完成(需要重新啟動)", + "modernfix.config.wiki": "開啟 Wiki", + "modernfix.message.reload_config": "偵測到模組設定檔變更。為了防止載入尚未儲存的檔案,重新載入必須通過執行 /mfrc 指令來觸發。", + "modernfix.option.on": "開啟", + "modernfix.option.off": "關閉", + "modernfix.option.disabled": "已停用", + "modernfix.option.enabled": "已啟用", + "modernfix.option.mod_override": ",原因是裝了這些模組:[%s]", + "modernfix.config.not_default": "(已修改)", + "asynclocator.map.locating": "地圖(定位中...)", + "asynclocator.map.none": "地圖(在附近找不到相關地物)", + "modernfix.option.category.performance": "效能", + "modernfix.option.category.performance.description": "有助於提升遊戲內效能或啟動速度的功能", + "modernfix.option.category.bugfixes": "錯誤修復", + "modernfix.option.category.bugfixes.description": "修復主要錯誤,從而提升遊戲穩定性", + "modernfix.option.category.troubleshooting": "疑難排解和實用工具", + "modernfix.option.category.troubleshooting.description": "用於輔助診斷問題的功能", + "modernfix.option.category.expert_only": "僅限專家", + "modernfix.option.category.expert_only.description": "不要輕易修改,除非你知道自己究竟在做什麼", + "modernfix.option.name.mixin.perf.async_jei": "JEI 背景載入", + "modernfix.option.mixin.perf.async_jei": "僅限 1.16。**一項關鍵最佳化。**修改 JEI 以在背景執行緒上執行其重新載入,完全消除它對世界載入所增加的長時間等待時間。", + "modernfix.option.mixin.perf.async_locator": "僅限 1.16。將 Async Locator 模組的補丁倒退,以消除與 `/locate`、戰利品表生成等相關的伺服器凍結。", + "modernfix.option.mixin.perf.biome_zoomer": "僅限 1.16。微小的最佳化,使用 1.18 的邏輯來提升生態區縮放器的效能。", + "modernfix.option.mixin.perf.blast_search_trees": "所有版本。如果安裝了 REI 或 JEI,則停用用於創造性搜尋的原生搜尋樹的構建,而改為使用這些模組的搜尋實現。這在世界載入期間節省幾秒,可能還減少一些記憶體使用量(雖然我沒有測試)。", + "modernfix.option.mixin.perf.boost_worker_count": "僅限 1.16。移除對工作執行緒數量的硬上限,與 Mojang 在 1.18 中所做的相似。", + "modernfix.option.mixin.perf.cache_blockstate_cache_arrays": "所有版本。在每次初始化區塊狀態快取時避免建立新的列舉數組副本。這是一項微小的最佳化,但易於實現。", + "modernfix.option.mixin.perf.cache_model_materials": "所有版本。對 `RenderMaterial`(紋理)集合和模型返回的相依清單進行記錄,而不是需要在每次請求時重新計算它們。有助於加速模型載入和烘焙過程。", + "modernfix.option.mixin.perf.cache_strongholds": "所有版本。將生成的堡壘位置清單與世界一同儲存,而不是在每次世界載入時重新生成。在 1.16 上節省了一點時間,在 1.18 和 1.19 上節省了更多時間。", + "modernfix.option.mixin.perf.cache_upgraded_structures": "所有版本。許多模組發布過時的結構檔案,需要遊戲每次載入時使用 DFU 進行升級。這可能會相當慢。此補丁增加了邏輯,以儲存結構的升級版本,並在下一次載入時重複使用它。為處理模組變更結構檔案但未變更名稱的情況,將原始檔案的雜湊值與快取版本進行比較,如果它們不匹配,則結構將被再次升級。", + "modernfix.option.mixin.perf.compress_biome_container": "僅限 1.16。從 Hydrogen 借來的微小最佳化,試圖在可能的情況下節省生態區容器的空間。如果安裝了與之衝突的模組,如 BetterEnd 或 Chocolate,則會自動停用此功能。", + "modernfix.option.mixin.perf.datapack_reload_exceptions": "所有版本。透過不輸出資料包重新載入期間(如戰利品表、配方中缺少物品)某些常見拋出例外的堆疊追蹤,減少記錄檔洗版,可能稍微提高載入速度。仍然會輸出相同訊息。", + "modernfix.option.mixin.perf.dedicated_reload_executor": "所有版本。將資源包和資料包的重新載入移到專用的工作池,而不是使用預設的 `Worker-Main` 執行緒。這允許模組在執行時仍然有可能改善單人遊戲的效能,同時不會因為有限的執行緒數量而減慢啟動速度。", + "modernfix.option.mixin.perf.deduplicate_location": "所有版本,但預設停用以避免載入時間的影響。去除資源位置的命名空間和路徑的重複。這節省了記憶體,但也使構建新的 `ResourceLocation` 的成本增加了相當多。", + "modernfix.option.mixin.perf.dynamic_dfu": "所有版本。修改 DFU 初始化,使其在首次需要進行升級時發生。這聽起來類似於 LazyDFU,但實際上是不同實現,因為它避免載入 *任何* DFU 類、資料結構,而 LazyDFU 僅停用規則最佳化。基本上,此選項是 DataFixerSlayer 的更安全版本,因為它在需要時仍會載入 DFU。\n\n一般情況下,即使啟用此選項,您仍應繼續使用 LazyDFU,因為否則 DFU 規則最佳化將導致卡頓。", + "modernfix.option.mixin.perf.dynamic_resources": "所有版本。詳情請參閱 https://github.com/embeddedt/ModernFix/wiki/Dynamic-Resources-FAQ。", + "modernfix.option.mixin.perf.dynamic_sounds": "所有版本。允許遊戲卸載音效,而不是音效在載入後無限期存在。", + "modernfix.option.mixin.perf.dynamic_structure_manager": "所有版本。允許遊戲在生成結構檔案後卸載它們,而不是永久保持它們載入。", + "modernfix.option.mixin.perf.fast_registry_validation": "所有版本。Forge 在每次驗證註冊表時無謂地通過反射尋找一個方法。這個補丁簡單地快取了方法的返回值,因為它每次都是相同的。", + "modernfix.option.mixin.perf.faster_font_loading": "所有版本。最佳化字型渲染器以更快地載入字型,加速資源重新載入速度。", + "modernfix.option.mixin.perf.faster_item_rendering": "所有版本。避免在介面中繪製物品的側面。(是的,看起來原版似乎這樣做。)\n\n如果安裝了像 REI 或 JEI 這樣的模組且可見的物品足夠多,這可能會使低階顯示卡上的 FPS 提高三倍。預設停用,因為這是新功能且測試不多,但應該是安全的。最有可能的問題是物品在介面中完全看不見,或在世界中顯示為平面。", + "modernfix.option.mixin.perf.faster_texture_loading": "所有 1.19.4 之前的版本。避免兩次讀取紋理(第一次使用非常緩慢的代碼路徑),而是進行一次更快速的載入(類似於 1.19.3 以上)。", + "modernfix.option.mixin.perf.faster_texture_stitching": "所有版本。啟用遊戲使用由 SuperCoder79 為 1.7.10 上的 lwjgl3ify 原創的更快速的紋理拼接系統,可以在載入期間節省一些時間。極少數報告說這可能導致方塊或介面上出現奇怪的異常,這可能是 Sodium 的問題。", + "modernfix.option.mixin.perf.jeresources_startup": "僅限 1.16。最佳化 Just Enough Resources,避免不必要地為相同職業多次重新建立村民實體,在 JEI 啟動期間節省時間。", + "modernfix.option.mixin.perf.kubejs": "僅限 1.16。最佳化 KubeJS,避免不必要的 `ItemStack` 複製等,從而減少載入資料包所需的時間。", + "modernfix.option.mixin.perf.model_optimizations": "所有版本。實施最佳化以加速模型載入過程。", + "modernfix.option.mixin.perf.nbt_memory_usage": "所有版本。對於複合 NBT 標籤,使用一個更有效的背景地圖,去重鍵名,同時對於非常小的複合體使用陣列地圖。這減少了在記憶體中儲存許多複合標籤的開銷。", + "modernfix.option.mixin.perf.nuke_empty_chunk_sections": "僅限 1.16,受 Hydrogen 啟發。避免在記憶體中儲存充滿空氣的區塊部分,而是將它們標記為空的。", + "modernfix.option.mixin.perf.reduce_blockstate_cache_rebuilds": "所有版本。**一項關鍵最佳化。**較新的 Minecraft 版本(1.12 之後)實現了一個塊狀態快取系統,用於快取有關塊狀態的經常使用的資訊,例如它是否為實體,其碰撞形狀等。在原版中,重建此快取相當迅速(僅需一兩秒),但在安裝了許多模組的情況下,由於遊戲中存在許多塊狀態,所有這些塊狀態都必須重新構建其快取,這會變得相當慢。\n\n由於 Forge 會在幾乎可以確定在下一次重建之前不會使用資料的許多點上重建快取,這一問題在 Forge 上變得更為嚴重。這些點的示例包括在達到標題畫面之前(在「凍結資料」階段)以及在載入世界時(多次!)。\n\nModernFix 通過改為使快取重建變為惰性,解決了這個效能瓶頸。每個塊狀態在首次訪問資料時重建其快取。在任何時候當原版或 Forge 試圖為所有塊狀態重建快取時,這將被重新導向到僅使每個塊狀態上的快取失效。\n\n這應該不會在啟動後對 TPS 產生任何影響。", + "modernfix.option.mixin.perf.remove_biome_temperature_cache": "所有版本。刪除生態域溫度快取,就像現代版本的 Lithium 一樣。", + "modernfix.option.mixin.perf.resourcepacks": "所有版本。**一項關鍵最佳化。**在現代版本上啟動受到檔案系統訪問的極大制約。經常向資源包發送許多請求,以列舉資源或檢查給定資源是否存在,每一次都導致非常緩慢的檔案 API 調用。\n\nModernFix 完全消除了這裡的大部分制約,僅通過簡單地快取所有存在於模組提供和原版資源包中的資源的清單來實現。快取在資源重新載入時重新構建(除了原版資源,因為它們在遊戲執行時應該永遠不會改變)。\n\n對於這個補丁,目前沒有已知的相容性問題,除了 OptiFine(其 CTM 資源無法正確載入)。然而,我不建議在任何情況下使用 OptiFine,因為它本身會使啟動時間增加數分鐘,並且完全沒有與 ModernFix 測試過。", + "modernfix.option.mixin.perf.reuse_datapacks": "僅限 1.16。嘗試通過在可能的情況下跳過資料包重新載入來加速在單人世界之間切換。可能會導致與某些模組的相容性問題,但目前預設啟用。", + "modernfix.option.mixin.perf.rewrite_registry": "所有版本。**目前處於半殘狀態。**積極替換 Forge 註冊系統的一些內部部分為更快速的版本,但預設下在載入某些模組包時會導致凍結。預設停用,理由很明顯。", + "modernfix.option.mixin.perf.skip_first_datapack_reload": "僅限 1.16 和 1.19。**一項關鍵最佳化。**\n\n在 1.16 開發週期的中間,Forge 對遊戲進行了補丁,以在載入現有世界時重新載入資料包兩次,以解決生態 ID 位移的問題。不幸的是,資料包重新載入通常需要超過 30 秒,因此這極大地影響了世界載入時間。\n\nModernFix 進行了必要的變更,以避免這種重新載入,基於未完成的 Forge PR #8163。\n\n這一變更在 1.18 中被 Forge 刪除,但在 1.19 中又增加了 *相似的* 補丁,以解決在建立新的單人世界時未載入模組資料包的問題。幸運的是,在 1.19 中,這個問題僅局限於建立世界的畫面,現有的世界只需要再重新載入。但是,這仍然會在 1.19 中點擊「建立新世界」時使卡頓時間加倍,因此 ModernFix 再次進行了變更,以避免執行多餘的重新載入。", + "modernfix.option.mixin.perf.state_definition_construct": "所有版本。僅在安裝 FerriteCore 時啟用。利用 FerriteCore 對方塊狀態的處理,加快其建立速度。這有助於加速安裝了許多方塊狀態的模組(如家具模組)的啟動。", + "modernfix.option.mixin.perf.sync_executor_sleep": "所有版本。避免主執行緒在等待模組載入工作完成時閒置旋轉,消耗一個 CPU 核心的計算資源。", + "modernfix.option.mixin.perf.thread_priorities": "所有版本。調整工作執行緒和伺服器執行緒的優先順序,使其低於用戶端執行緒。這有助於提高在 CPU 核心較少的機器上的 FPS 穩定性,前提是使用的 Java 實現支持優先順序。", + "modernfix.option.mixin.perf.use_integrated_resources": "主要針對 1.16。對 JEResources 進行補丁,以在單人遊戲時使用集成伺服器的戰利品表資料,而不是無謂地重新載入戰利品表。在 JEI 啟動期間再節省幾秒。", + "modernfix.option.mixin.bugfix.concurrency": "此補丁修復了 Minecraft 和(或)Forge 內的與並發相關的問題。大多數都導致在載入過程中出現罕見且難以診斷的崩潰。", + "modernfix.option.mixin.bugfix.edge_chunk_not_saved": "此選項是 SuperCoder 的 Chunk Saving Fix 模組的移植(因為當時我不知道 Forge 已經有這個模組)。", + "modernfix.option.mixin.bugfix.mc218112": "此選項修復了在處理實體資料時發生的當一個異常抛出時可能發生的死鎖。原版在應該解鎖資料管理員時並未正確解鎖。這在錯誤追蹤器上被追蹤為 MC-218112,並且在 1.17 中由 Mojang 修復。", + "modernfix.option.mixin.bugfix.packet_leak": "**實驗性**,預設未啟用。嘗試修復在 1.16 上遊玩足夠長時間後發生的記憶體流失問題。", + "modernfix.option.mixin.bugfix.paper_chunk_patches": "1.18 及更新版本。**一項關鍵最佳化。**匯入來自 Paper 的修補程式,解決 1.17 版中區塊載入需要龐大記憶體並生成大量 `CompletableFuture` 實例的問題。現在 1.18+ 能夠像 1.16 一樣在僅使用 400MB 記憶體的情況下載入世界。", + "modernfix.option.mixin.bugfix.tf_cme_on_load": "修正了 Twilight Forest 在啟動時使用主執行緒進行非執行緒安全用戶端設定的問題,而非 FML 工作執行緒。", + "modernfix.option.mixin.feature.branding": "在標題畫面的品牌清單和 F3 畫面中新增 ModernFix。", + "modernfix.option.mixin.feature.direct_stack_trace": "通常為關閉狀態,可以啟用以強制在崩潰時將原始堆疊追蹤輸出到記錄檔中。偶爾,Minecraft 的崩潰報告系統無法正常運作,並提供完全無關的堆疊追蹤或報告。", + "modernfix.option.mixin.feature.measure_time": "使用幾個注入來測量世界載入時間、資料包重新載入時間、資源重新載入時間、啟動時間,並新增必要的鉤子以在所設定時啟用 Minecraft 未使用的資源重新載入的分析邏輯。", + "modernfix.option.mixin.feature.spam_thread_dump": "**僅供除錯使用。**每 60 秒將一個執行緒轉儲輸出到記錄檔中。這有助於診斷載入、遊戲過程中的無法解釋的凍結。", + "modernfix.option.mixin.bugfix.chunk_deadlock": "嘗試防止區塊系統死鎖,或在它們發生時在記錄檔中提供額外的除錯資訊。這些死鎖通常表現為伺服器無限凍結(如實體不移動),而用戶端繼續正常運作。", + "modernfix.option.mixin.bugfix.chunk_deadlock.valhesia": "修補了 Valhesia Structures 的程式碼,解決其導致頻繁的世界生成、區塊載入死鎖的問題。", + "modernfix.option.mixin.bugfix.cofh_core_crash": "修復了 CoFH Core 中的一個多執行緒問題,可能在啟動時導致罕見的崩潰。", + "modernfix.option.mixin.bugfix.ctm_resourceutil_cme": "修復了 ConnectedTexturesMod 中的一個多執行緒問題,可能在啟動時導致罕見的崩潰。", + "modernfix.option.mixin.bugfix.ender_dragon_leak": "修復了由終界龍保留對先前用戶端世界的引用而引起的記憶體流失。", + "modernfix.option.mixin.bugfix.entity_load_deadlock": "修復了 EntityJoinWorldEvent 或 EntityJoinLevelEvent 導致世界生成死鎖的多個問題,稍微延遲實體載入。然而,在遊戲中不應該引起任何明顯的行為變化。", + "modernfix.option.mixin.bugfix.fix_config_crashes": "修復了 Forge 設定有時在啟動遊戲時損壞的問題。", + "modernfix.option.mixin.bugfix.item_cache_flag": "修復了 MC-258939", + "modernfix.option.mixin.bugfix.preserve_early_window_pos": "當控制從 Forge 的早期載入轉交給 Minecraft 代碼時,使遊戲視窗保留其現有大小。修正了視窗在拖動後返回到螢幕中央的問題等。", + "modernfix.option.mixin.bugfix.refinedstorage.te_bug": "修復了 Refined Storage 外部儲存塊在載入時偶爾無法顯示抽屜內容等問題。是 Refined Storage PR #3435 的回溯版本,該版本僅應用於 1.18 及更高版本。", + "modernfix.option.mixin.bugfix.remove_block_chunkloading": "修復了 Forge 上的殭屍豬人永久保持 0, 0 區塊載入的問題。是 Forge PR #8583 的回溯版本。", + "modernfix.option.mixin.bugfix.starlight_emptiness": "修復了由於未初始化空白地圖而導致的偶爾 Starlight 崩潰。是 Starlight for 1.18.x 中相同修復的回溯版本。", + "modernfix.option.mixin.core": "ModernFix 正常運作所需的核心修補程式", + "modernfix.option.mixin.devenv": "在開發環境中執行時使用的修補程式,用於提高速度和(或)測試", + "modernfix.option.mixin.safety": "防止在啟動過程中崩潰的並行修補程式", + "modernfix.option.mixin.feature.integrated_server_watchdog": "將原版的看門狗增加到單人世界中,但僅輸出堆棧追蹤,而不是強制中止世界。此版本包含 Fullstack Watchdog 的功能,但後者在多人遊戲中仍然需要。", + "modernfix.option.mixin.feature.snapshot_easter_egg": "在快照版本執行時增加復活節彩蛋功能(不影響任何原版的視覺效果或行為)。", + "modernfix.option.mixin.feature.spark_profile_launch": "如果啟用,並安裝了相容版本的 Spark,整個啟動過程將被概述,直到標題畫面。", + "modernfix.option.mixin.feature.warn_missing_perf_mods": "在啟動時如果缺少其他被認為是基本且高度相容的效能模組,則顯示警告", + "modernfix.option.mixin.launch.class_search_cache": "使用一個更快的版本替換 Forge 的資源尋找器(用於尋找遊戲和模組代碼),加快啟動速度。", + "modernfix.option.mixin.perf.clear_fabric_mapping_tables": "通過清理 Fabric Loader 中多餘或很少被模組使用的映射資料結構,減少記憶體使用。出於相容性原因,預設情況下不啟用。", + "modernfix.option.mixin.perf.clear_mixin_classinfo": "在啟動完成後強制載入所有 mixin,然後清除 mixin 資料結構以消除大部分 Mixin 的記憶體使用。出於相容性原因,預設情況下不啟用。", + "modernfix.option.mixin.perf.deduplicate_wall_shapes": "使大多數牆塊共享相同的形狀對象,而不是每個牆塊都有自己的副本。在模組增加了大量牆塊時,可以大幅減少記憶體使用。", + "modernfix.option.mixin.perf.dynamic_resources.ae2": "用於動態資源的 AE2 相容性修補程式", + "modernfix.option.mixin.perf.dynamic_resources.ctm": "用於動態資源的 CTM 相容性修補程式", + "modernfix.option.mixin.perf.dynamic_resources.rs": "用於動態資源的 Refined Storage 相容性修補程式", + "modernfix.option.mixin.perf.dynamic_resources.supermartijncore": "用於動態資源的 SuperMartijn642CoreLib 相容性修補程式", + "modernfix.option.mixin.perf.dynamic_resources.diagonalfences": "用於動態資源的 Diagonal Fences 相容性修補程式", + "modernfix.option.mixin.perf.faster_advancements": "重寫了進度檢查邏輯,使其更快且在大型包中不引起 StackOverflowError。是 Fabric 中 Advancements Debug 的移植。", + "modernfix.option.mixin.perf.patchouli_deduplicate_books": "修正了 Patchouli 書籍儲存許多帶有 NBT 標籤的空物品,減少記憶體使用。", + "modernfix.option.mixin.perf.remove_spawn_chunks": "完全從遊戲中刪除生成區塊。它們不再被載入,與 Ksyxis 不同。", + "modernfix.option.mixin.perf.use_integrated_resources.jepb": "", + "modernfix.option.mixin.perf.use_integrated_resources.jeresources": "", + "modernfix.option.mixin.bugfix.blueprint_modif_memory_leak": "修復了 Blueprint 的 ObjectModificationManager 洩漏原版資源的問題,減少記憶體使用。儘管該修復是在 PR #195 中貢獻的,但尚未進行發布。", + "modernfix.option.mixin.bugfix.removed_dimensions": "修復了如果刪除了維度模組,遊戲將無法載入世界的問題。是 Forge PR #8959 的回溯版本。", + "modernfix.option.mixin.perf.compact_bit_storage": "修復了一些舊版伺服器(如 Hypixel)將空區塊發送為包含方塊的區塊而引起的記憶體浪費。在這些伺服器上顯著減少記憶體使用。", + "modernfix.option.mixin.perf.deduplicate_climate_parameters": "去重新的生態系統使用的氣候參數對象,可以節省約 2MB,但也會在資料包重新載入時略微降低速度。", + "modernfix.option.mixin.perf.dynamic_entity_renderers": "在首次看到實體時構建實體模型,而不是在啟動時。某些模組與此選項不相容,將導致 EntityRenderer 崩潰。", + "modernfix.option.mixin.perf.twilightforest.structure_spawn_fix": "修復了由於 Twilight Forest 世界生成非常低效地檢查結構而引起的卡頓。", + "modernfix.option.mixin.perf.fast_forge_dummies": "通過使用更快的代碼路徑加快 Forge 啟動期間的註冊表凍結速度。", + "modernfix.option.mixin.perf.tag_id_caching": "通過快取位置對象而不是每次重新建立時加快標籤條目的使用。", + "modernfix.option.mixin.feature.disable_unihex_font": "刪除 Unicode 字型,節省 10MB 但導致特殊字元不再繪製。", + "modernfix.option.mixin.bugfix.world_leaks": "減少不需要在切換維度後的舊用戶端世界的記憶體使用。這些通常在原版中進行垃圾回收,但模組有時會保留對它們的引用。", + "modernfix.option.mixin.perf.compact_mojang_registries": "(Fabric)實驗性選項,將註冊表的記憶體使用減少約 50%。在大多數模組包中,除非它們包含數百萬個方塊和物品,否則沒用。", + "modernfix.option.mixin.perf.dynamic_block_codecs": "避免為每個方塊(狀態)儲存編解碼器,而是在需要時動態生成並快取它。通常情況下,除非有數百萬個方塊、物品,否則不值得啟用。", + "modernfix.option.mixin.perf.faster_command_suggestions": "在輸入指令時有數十萬個建議時降低等待時間。", + "modernfix.option.mixin.perf.mojang_registry_size": "修復了導致方塊、物品的註冊數量與已註冊數量成比例地減慢的問題。這提高了啟動時間。" } From 6e3134161ad544fe79be5c0f0ce6bf861285448f Mon Sep 17 00:00:00 2001 From: TonimatasDEV Date: Tue, 21 Nov 2023 18:17:11 +0100 Subject: [PATCH 3/8] Forge 1.20.2 (#301) --- common/build.gradle | 2 +- .../forge/init/ModernFixClientForge.java | 19 ++++------ .../modernfix/forge/init/ModernFixForge.java | 3 +- .../forge/mixin/core/BootstrapMixin.java | 6 +-- .../forge/mixin/core/NetworkHooksMixin.java | 15 +++----- .../ForgeRegistryMixin.java | 32 ++++++++-------- .../modernfix/forge/packet/PacketHandler.java | 37 ++++++++----------- .../forge/ModernFixPlatformHooksImpl.java | 2 +- gradle.properties | 10 ++--- 9 files changed, 56 insertions(+), 70 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index 7f53ff75..a3e4f7ce 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -6,7 +6,7 @@ architectury { common(rootProject.enabled_platforms.split(",")) } -ext.jei_minecraft_version = "1.19.4" /* temporary, till 1.20 releases */ +ext.jei_minecraft_version = "1.20.2" /* temporary, till 1.20 releases */ dependencies { // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java index 1695d588..fa8ea134 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java @@ -11,7 +11,6 @@ import net.minecraftforge.client.event.CustomizeGuiOverlayEvent; import net.minecraftforge.client.event.RecipesUpdatedEvent; import net.minecraftforge.client.event.RegisterClientCommandsEvent; import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.client.gui.overlay.ForgeGui; import net.minecraftforge.client.settings.KeyConflictContext; import net.minecraftforge.event.TagsUpdatedEvent; import net.minecraftforge.event.TickEvent; @@ -19,12 +18,13 @@ import net.minecraftforge.event.level.LevelEvent; import net.minecraftforge.event.server.ServerStartedEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.*; +import net.minecraftforge.fml.ModLoader; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.ModLoadingStage; +import net.minecraftforge.fml.ModLoadingWarning; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import org.embeddedt.modernfix.ModernFixClient; -import org.embeddedt.modernfix.core.ModernFixMixinPlugin; import org.embeddedt.modernfix.forge.config.NightConfigFixer; import org.embeddedt.modernfix.screen.ModernFixConfigScreen; @@ -52,8 +52,7 @@ public class ModernFixClientForge { } private void onClientSetup(FMLClientSetupEvent event) { - if(false && ModernFixMixinPlugin.instance.isOptionEnabled("perf.dynamic_resources.ConnectednessCheck") - && ModList.get().isLoaded("connectedness")) { + if(false) { event.enqueueWork(() -> { ModLoader.get().addWarning(new ModLoadingWarning(ModLoadingContext.get().getActiveContainer().getModInfo(), ModLoadingStage.SIDED_SETUP, "modernfix.connectedness_dynresoruces")); }); @@ -80,7 +79,7 @@ public class ModernFixClientForge { @SubscribeEvent(priority = EventPriority.HIGHEST) public void onRenderOverlay(CustomizeGuiOverlayEvent.DebugText event) { - if(commonMod.brandingString != null && Minecraft.getInstance().options.renderDebug) { + if(commonMod.brandingString != null && Minecraft.getInstance().getDebugOverlay().showDebugScreen()) { if(brandingList.size() == 0) { brandingList.add(""); brandingList.add(commonMod.brandingString); @@ -103,10 +102,8 @@ public class ModernFixClientForge { @SubscribeEvent public void onDisconnect(LevelEvent.Unload event) { if(event.getLevel().isClientSide()) { - DebugScreenOverlay overlay = ObfuscationReflectionHelper.getPrivateValue(ForgeGui.class, (ForgeGui)Minecraft.getInstance().gui, "debugOverlay"); - if(overlay != null) { - Minecraft.getInstance().tell(overlay::clearChunkCache); - } + DebugScreenOverlay overlay = Minecraft.getInstance().getDebugOverlay(); + Minecraft.getInstance().tell(overlay::clearChunkCache); } } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java index d732d0d9..d9780012 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java @@ -19,7 +19,6 @@ import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.network.NetworkConstants; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegisterEvent; import net.minecraftforge.server.ServerLifecycleHooks; @@ -49,7 +48,7 @@ public class ModernFixForge { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::registerItems); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> MinecraftForge.EVENT_BUS.register(new ModernFixClientForge())); - ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true)); + ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> IExtensionPoint.DisplayTest.IGNORESERVERONLY, (a, b) -> true)); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModernFixConfig.COMMON_CONFIG); PacketHandler.register(); ModFileScanDataDeduplicator.deduplicate(); diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapMixin.java index 86f648d8..e8dabfad 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapMixin.java @@ -1,10 +1,10 @@ package org.embeddedt.modernfix.forge.mixin.core; import net.minecraft.server.Bootstrap; -import net.minecraftforge.network.NetworkConstants; -import org.slf4j.Logger; +import net.minecraftforge.network.NetworkInitialization; import org.embeddedt.modernfix.forge.load.ModWorkManagerQueue; import org.embeddedt.modernfix.util.TimeFormatter; +import org.slf4j.Logger; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -31,6 +31,6 @@ public class BootstrapMixin { /* for https://github.com/MinecraftForge/MinecraftForge/issues/9505 */ @Inject(method = "bootStrap", at = @At("RETURN")) private static void doClassloadHack(CallbackInfo ci) { - NetworkConstants.init(); + NetworkInitialization.init(); } } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java index 668870dd..b9e504be 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java @@ -1,22 +1,19 @@ package org.embeddedt.modernfix.forge.mixin.core; import net.minecraft.network.Connection; -import net.minecraftforge.network.NetworkHooks; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.network.ConnectionType; +import net.minecraftforge.network.NetworkContext; import org.embeddedt.modernfix.forge.packet.NetworkUtils; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(NetworkHooks.class) +@Mixin(ForgeHooks.class) public abstract class NetworkHooksMixin { - @Shadow public static boolean isVanillaConnection(Connection manager) { - throw new AssertionError(); - } - - @Inject(method = "handleClientLoginSuccess", at = @At("RETURN"), remap = false) + @Inject(method = "handleClientConfigurationComplete", at = @At("RETURN"), remap = false) private static void setVanillaGlobalFlag(Connection manager, CallbackInfo ci) { - NetworkUtils.isCurrentlyVanilla = isVanillaConnection(manager); + NetworkUtils.isCurrentlyVanilla = NetworkContext.get(manager).getType() == ConnectionType.VANILLA; } } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java index db3fc0c9..db49768f 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java @@ -1,6 +1,5 @@ package org.embeddedt.modernfix.forge.mixin.perf.fast_registry_validation; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import net.minecraftforge.registries.ForgeRegistry; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Marker; @@ -10,26 +9,25 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.lang.reflect.Method; -import java.util.*; +import java.util.BitSet; @Mixin(value = ForgeRegistry.class, remap = false) public class ForgeRegistryMixin { - private static Method bitSetTrimMethod = null; - private static boolean bitSetTrimMethodRetrieved = false; + //private static Method bitSetTrimMethod = null; + //private static boolean bitSetTrimMethodRetrieved = false; - /** - * Cache the result of findMethod instead of running it multiple times. - * Null checks are not required as the surrounding code handles it already. - */ - @Redirect(method = "validateContent", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/util/ObfuscationReflectionHelper;findMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;")) - private Method skipMultipleRemap(Class clz, String methodName, Class[] params) { - if(!bitSetTrimMethodRetrieved) { - bitSetTrimMethodRetrieved = true; - bitSetTrimMethod = ObfuscationReflectionHelper.findMethod(clz, methodName, params); - } - return bitSetTrimMethod; - } + ///** + // * Cache the result of findMethod instead of running it multiple times. + // * Null checks are not required as the surrounding code handles it already. + // */ + //@Redirect(method = "validateContent", at = @At(value = "HEAD")) + //private Method skipMultipleRemap(Class clz, String methodName, Class[] params) { + // if(!bitSetTrimMethodRetrieved) { + // bitSetTrimMethodRetrieved = true; + // bitSetTrimMethod = ObfuscationReflectionHelper.findMethod(BitSet.class, methodName, params); + // } + // return bitSetTrimMethod; + //} private int expectedNextBit = -1; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/packet/PacketHandler.java b/forge/src/main/java/org/embeddedt/modernfix/forge/packet/PacketHandler.java index e556618a..c6f50238 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/packet/PacketHandler.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/packet/PacketHandler.java @@ -1,35 +1,30 @@ package org.embeddedt.modernfix.forge.packet; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.network.NetworkEvent; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.simple.SimpleChannel; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.network.Channel; +import net.minecraftforge.network.ChannelBuilder; +import net.minecraftforge.network.SimpleChannel; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.packet.EntityIDSyncPacket; -import java.util.function.Supplier; - public class PacketHandler { - private static final String PROTOCOL_VERSION = "1"; - public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel( - new ResourceLocation(ModernFix.MODID, "main"), - () -> PROTOCOL_VERSION, - NetworkRegistry.acceptMissingOr(PROTOCOL_VERSION), - NetworkRegistry.acceptMissingOr(PROTOCOL_VERSION) - ); + private static final int PROTOCOL_VERSION = 1; + public static final SimpleChannel INSTANCE = ChannelBuilder + .named(new ResourceLocation(ModernFix.MODID, "main")) + .networkProtocolVersion(PROTOCOL_VERSION) + .serverAcceptedVersions(Channel.VersionTest.ACCEPT_MISSING.or(Channel.VersionTest.exact(PROTOCOL_VERSION))) + .clientAcceptedVersions(Channel.VersionTest.ACCEPT_MISSING.or(Channel.VersionTest.exact(PROTOCOL_VERSION))) + .simpleChannel(); public static void register() { - int id = 1; - INSTANCE.registerMessage(id++, EntityIDSyncPacket.class, EntityIDSyncPacket::serialize, EntityIDSyncPacket::deserialize, PacketHandler::handleSyncPacket); - } - - private static void handleSyncPacket(EntityIDSyncPacket packet, Supplier contextSupplier) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - contextSupplier.get().enqueueWork(() -> ModernFixClient.handleEntityIDSync(packet)); - contextSupplier.get().setPacketHandled(true); - }); + INSTANCE.messageBuilder(EntityIDSyncPacket.class).encoder(EntityIDSyncPacket::serialize).decoder(EntityIDSyncPacket::deserialize).consumerNetworkThread((msg, ctx) -> { + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { + ctx.enqueueWork(() -> ModernFixClient.handleEntityIDSync(msg)); + ctx.setPacketHandled(true); + }); + }).add(); } } diff --git a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java b/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java index 9131b046..e42c150e 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java +++ b/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java @@ -90,7 +90,7 @@ public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { } public void sendPacket(ServerPlayer player, Object packet) { - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), packet); + PacketHandler.INSTANCE.send(packet, PacketDistributor.PLAYER.with(player)); } public void injectPlatformSpecificHacks() { diff --git a/gradle.properties b/gradle.properties index 25d70633..d3b14649 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,12 +6,12 @@ mixinextras_version=0.2.0-beta.9 mod_id=modernfix minecraft_version=1.20.2 -enabled_platforms=fabric -forge_version=1.20.1-47.1.3 +enabled_platforms=fabric,forge +forge_version=1.20.2-48.0.40 # parchment_version=2023.07.09 refined_storage_version=4392788 -jei_version=13.1.0.2 -rei_version=11.0.597 +jei_version=16.0.0.28 +rei_version=13.0.678 ctm_version=1.20.1-1.1.8+4 kubejs_version=1902.6.0-build.142 rhino_version=1902.2.2-build.268 @@ -20,7 +20,7 @@ supported_minecraft_versions=1.20.2 fabric_loader_version=0.14.22 fabric_api_version=0.89.2+1.20.2 -continuity_version=3.0.0-beta.2+1.19.3 +continuity_version=3.0.0-beta.4+1.20.2 modmenu_version=7.0.0-beta.2 diagonal_fences_version=4558828 From 33609d234cac6e9cbec99ffcaccc581464d24d6b Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 21 Nov 2023 12:27:02 -0500 Subject: [PATCH 4/8] Completely remove BitSet trimming --- .../ForgeRegistryMixin.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java index db49768f..d0d6cbb2 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java @@ -13,22 +13,6 @@ import java.util.BitSet; @Mixin(value = ForgeRegistry.class, remap = false) public class ForgeRegistryMixin { - //private static Method bitSetTrimMethod = null; - //private static boolean bitSetTrimMethodRetrieved = false; - - ///** - // * Cache the result of findMethod instead of running it multiple times. - // * Null checks are not required as the surrounding code handles it already. - // */ - //@Redirect(method = "validateContent", at = @At(value = "HEAD")) - //private Method skipMultipleRemap(Class clz, String methodName, Class[] params) { - // if(!bitSetTrimMethodRetrieved) { - // bitSetTrimMethodRetrieved = true; - // bitSetTrimMethod = ObfuscationReflectionHelper.findMethod(BitSet.class, methodName, params); - // } - // return bitSetTrimMethod; - //} - private int expectedNextBit = -1; /** From 19ba30280c17c630a592f1804b79aa158650bc45 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 21 Nov 2023 12:37:30 -0500 Subject: [PATCH 5/8] Update Loom --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 7c87d822..78e5255d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.3-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.4-SNAPSHOT" apply false id "maven-publish" id 'com.matthewprenger.cursegradle' version '1.4.0' apply false id 'com.palantir.git-version' version '1.0.0' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 84a0b92f..db9a6b82 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From af8e23f41ac17e79d6ace2d14bfbdd2bdf1f2546 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 21 Nov 2023 12:37:35 -0500 Subject: [PATCH 6/8] Fix mixin target --- .../mixin/feature/direct_stack_trace/CrashReportMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/direct_stack_trace/CrashReportMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/direct_stack_trace/CrashReportMixin.java index 2841921c..18d184e3 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/direct_stack_trace/CrashReportMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/direct_stack_trace/CrashReportMixin.java @@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; public class CrashReportMixin { @Shadow @Final private Throwable exception; - @Inject(method = "addCategory(Ljava/lang/String;I)Lnet/minecraft/CrashReportCategory;", at = @At(value = "INVOKE", target = "Ljava/io/PrintStream;println(Ljava/lang/String;)V")) + @Inject(method = "addCategory(Ljava/lang/String;I)Lnet/minecraft/CrashReportCategory;", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;[Ljava/lang/Object;)V", remap = false)) private void dumpStacktrace(String s, int i, CallbackInfoReturnable cir) { new Exception("ModernFix crash stacktrace").printStackTrace(); if(this.exception != null) From ef6c14a61e8f65dadac8908189811ffeafd4f807 Mon Sep 17 00:00:00 2001 From: Bogdan <64613894+Asek3@users.noreply.github.com> Date: Wed, 22 Nov 2023 16:47:11 +0200 Subject: [PATCH 7/8] Create ru_ru.json (#303) --- .../assets/modernfix/lang/ru_ru.json | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 common/src/main/resources/assets/modernfix/lang/ru_ru.json diff --git a/common/src/main/resources/assets/modernfix/lang/ru_ru.json b/common/src/main/resources/assets/modernfix/lang/ru_ru.json new file mode 100644 index 00000000..7f6e2312 --- /dev/null +++ b/common/src/main/resources/assets/modernfix/lang/ru_ru.json @@ -0,0 +1,124 @@ +{ + "key.modernfix": "ModernFix", + "key.modernfix.config": "Открыть экран настройки", + "modernfix.jei_load": "Загрузка JEI, подождите немного", + "modernfix.no_lazydfu": "LazyDFU не установлен. Если игре нужно будет обновить информацию с более старых версий, могут возникнуть значительные лаги.", + "modernfix.no_ferritecore": "FerriteCore не установлен. Затраты ОЗУ будут высокими.", + "modernfix.connectedness_dynresoruces": "Connectedness и динамические ресурсы ModernFix'а не совместимы. Удалите Connectedness или выключите динамические ресурсы в конфиге ModernFix'а.", + "modernfix.perf_mod_warning": "Рекомендуем установить данные моды, однако предупреждения могут быть выключены в конфиге ModernFix'а.", + "modernfix.config": "Конфиг миксинов ModernFix", + "modernfix.config.done_restart": "Готово (рестарт необходим)", + "modernfix.config.wiki": "Открыть вики", + "modernfix.message.reload_config": "Были замечены изменения в конфиге мода. Чтобы предотвратить загрузку ещё несохранённых файлов, их загрузка может быть запущена командой /mfrc.", + "modernfix.option.on": "вкл", + "modernfix.option.off": "выкл", + "modernfix.option.disabled": "выключен", + "modernfix.option.enabled": "включён", + "modernfix.option.mod_override": " модами [%s]", + "modernfix.config.not_default": " (модифицировано)", + "asynclocator.map.locating": "Карта (Ищем...)", + "asynclocator.map.none": "Карта (Не было найдено ближайших структур)", + "modernfix.option.category.performance": "Производительность", + "modernfix.option.category.performance.description": "Фичи, которые улучшают производительность игры/запуска", + "modernfix.option.category.bugfixes": "Багфиксы", + "modernfix.option.category.bugfixes.description": "Багфиксы для улучшения стабильности игры", + "modernfix.option.category.troubleshooting": "Поиск ошибок/утилиты", + "modernfix.option.category.troubleshooting.description": "Фичи, необходимые для диагностирования проблем", + "modernfix.option.category.expert_only": "Только для экспертов", + "modernfix.option.category.expert_only.description": "Ничего не меняйте, если не знаете, что это!", + "modernfix.option.name.mixin.perf.async_jei": "Фоновая загрузка JEI", + "modernfix.option.mixin.perf.async_jei": "Только 1.16. **Ключевая оптимизация.** Патчит JEI для его загрузки в другом потоке, полностью искореняет долгую загрузку мира, вызываемую модом.", + "modernfix.option.mixin.perf.async_locator": "Только 1.16. Прямой бекпорт патчей мода Async Locator для искоренения фризов сервера, вызванных командой `/locate`, генерацией лут тейблов и т.д.", + "modernfix.option.mixin.perf.biome_zoomer": "Только 1.16. Небольшая оптимизация для исправления производительности поиска биомов, благодаря логике взятой с 1.18.", + "modernfix.option.mixin.perf.blast_search_trees": "Все версии. Если REI или JEI установлены, то ванильная ситема поиска заменяется на систему одного из этих модов. Это ускоряет загрузку мира и незначительно уменьшает потребление ОЗУ.", + "modernfix.option.mixin.perf.boost_worker_count": "Только 1.16. Удаляет жёсткое ограничение на количество рабочих потоков, как сделали Mojang'и 1.18.", + "modernfix.option.mixin.perf.cache_blockstate_cache_arrays": "Все версии. Избегает создания новых копий массивов enum'ов при каждой инициализации кэша блокстейтов. Небольшая оптимизация, но легко реализуемая.", + "modernfix.option.mixin.perf.cache_model_materials": "Все версии. Кэширует коллекцию `RenderMaterial` (текстур) и список зависимостей, которые возвращают модели, вместо их пересчёта при каждом запросе. Помогает ускорить процесс загрузки/запекания модели.", + "modernfix.option.mixin.perf.cache_strongholds": "Все версии. Сохраняет сгенерированный список позиций крепостей вместе с миром, вместо их регенерации при каждой загрузке мира. Экономит немного времени в 1.16 и значительно больше в 1.18 и 1.19.", + "modernfix.option.mixin.perf.cache_upgraded_structures": "Все версии. Многие моды хранят устаревшие файлы структур, что вынуждает игру их обновленять используя DFU при каждой загрузке. Это может быть довольно затратно. Этот патч добавляет логику сохранения обновлённой версии структуры и повторного использования её при следующей загрузке. Чтобы обработать случай, когда мод изменяет файл структуры, но не его имя, оригинальный хеш файла сравнивается с кешированной версией, и если они не совпадают, структура будет обновлена снова.", + "modernfix.option.mixin.perf.compress_biome_container": "Только 1.16. Небольшая оптимизация, взятая из Hydrogen, которая пытается экономить место в контейнере биомов когда это возможно. Автоматически отключается при установке конфликтующих модов, таких как BetterEnd или Chocolate.", + "modernfix.option.mixin.perf.datapack_reload_exceptions": "Все версии. Снижает спам логами и, возможно, немного ускоряет загрузку, не выводя стектрейсы для некоторых исключений во время перезагрузки датапака (например, отсутствие предметов в лут-таблицах/рецептах). Сообщение всё равно выводится.", + "modernfix.option.mixin.perf.dedicated_reload_executor": "Все версии. Перемещает перезагрузку ресурспаков и датапаков в выделенный пул рабочих потоков вместо использования стандартных потоков `Worker-Main`. Это позволяет моду SmoothBoot потенциально улучшить производительность в одиночной игре во время выполнения, не замедляя запуск из-за ограниченного количества потоков.", + "modernfix.option.mixin.perf.deduplicate_location": "Все версии, но по умолчанию отключено из-за влияния на время загрузки. Убирает дубликаты пространств имен и путей ресурсных местоположений. Это экономит ОЗУ, но также увеличивает стоимость создания нового `ResourceLocation`.", + "modernfix.option.mixin.perf.dynamic_dfu": "Все версии. Модифицирует инициализацию DFU, чтобы она происходила в первый раз, когда что-то нужно обновить. Это похоже на LazyDFU, но реализовано иначе, поскольку оно избегает загрузки *любых* классов/структур данных DFU, в то время как LazyDFU только отключает оптимизацию правил. В основном, это более безопасная версия DataFixerSlayer, поскольку она всё равно загружает DFU при необходимости.\n\nОбычно вы можете продолжать использовать LazyDFU даже с этой включённой опцией, так как в противном случае оптимизация правил DFU вызовет лаги.", + "modernfix.option.mixin.perf.dynamic_resources": "Все версии. См. https://github.com/embeddedt/ModernFix/wiki/Dynamic-Resources-FAQ.", + "modernfix.option.mixin.perf.dynamic_sounds": "Все версии. Позволяет игре выгружать звуки вместо хранения их после загрузки.", + "modernfix.option.mixin.perf.dynamic_structure_manager": "Все версии. Позволяет игре выгружать файлы структур после завершения их генерации, вместо их постоянной загрузки.", + "modernfix.option.mixin.perf.fast_registry_validation": "Все версии. Forge бессмысленно ищет метод с использованием рефлексии каждый раз, когда реестр проверяется. Этот патч просто кеширует возвращенное значение, поскольку оно будет одинаковым каждый раз.", + "modernfix.option.mixin.perf.faster_font_loading": "Все версии. Оптимизирует загрузку шрифтов для быстрой перезагрузки ресурсов.", + "modernfix.option.mixin.perf.faster_item_rendering": "Все версии. Избегает отображения боков предметов в GUI. (Да, ванила так делает.)\n\nЭто может утроить FPS с модом вроде REI/JEI на слабых GPU, если отображается много предметов. Отключено по умолчанию, так как опция новая и плохо протестирована, но должна быть безопасной. Самая вероятная проблема - предметы полностью невидимы в GUI или выглядят плоскими в мире.", + "modernfix.option.mixin.perf.faster_texture_loading": "Все версии до 1.19.4. Избегает чтения текстур дважды и вместо этого выполняет одну более быструю загрузку (аналогичную 1.19.3+).", + "modernfix.option.mixin.perf.faster_texture_stitching": "Все версии. Включает использование игрой более быстрой системы запекания текстур, изначально написанной SuperCoder79 для lwjgl3ify на 1.7.10, что может сэкономить некоторое время при загрузке. Иногда сообщалось о том, что это вызывает странные артефакты на блоках или в GUI, это может быть багом Sodium.", + "modernfix.option.mixin.perf.jeresources_startup": "Только 1.16. Оптимизирует Just Enough Resources, чтобы избежать бесполезного множественного создания объекта жителя для одной и той же профессии, что экономит время при запуске JEI.", + "modernfix.option.mixin.perf.kubejs": "Только 1.16. Оптимизации KubeJS для избегания бесполезного копирования `ItemStack`, и т. д., что сокращает время загрузки датапаков.", + "modernfix.option.mixin.perf.model_optimizations": "Все версии. Внедряет оптимизации для ускорения процесса загрузки модели.", + "modernfix.option.mixin.perf.nbt_memory_usage": "Все версии. Использует более эффективную коллекцию для тегов NBT, которая устраняет дубликаты имён ключей, а также использует массивное отображение для очень маленьких составных меток. Это уменьшает издержки на хранение многих тегов в памяти.", + "modernfix.option.mixin.perf.nuke_empty_chunk_sections": "Только 1.16, вдохновлено Hydrogen. Избегает хранения в памяти секций чанков, заполненных воздухом, вместо того чтобы помечать их как пустые.", + "modernfix.option.mixin.perf.reduce_blockstate_cache_rebuilds": "Все версии. **Ключевая оптимизация.** Новые версии Minecraft (после 1.12) реализовали систему кэширования блокстейтов, которая кэширует часто используемую информацию о данном стейте, такую как его твердость, коллизию и т. д. Перестройка этого кэша довольно быстра в ванильном варианте (занимает всего несколько секунд), но довольно медленна с множеством модов, так как в игре появляется много различных блокстейтов, и все они должны быть перестроены. Проблема усугубляется Forge, так как кэш перестраивается в больших местах, когда обновлённые данные почти наверняка не будут использоваться до следующего перестроения. Примеры включают в себя прямо перед достижением главного меню (во время этапа «Freezing data»), а также несколько (!) раз при загрузке мира.\n\nModernFix решает этот боттлнек в производительности, делая перестройку кэша ленивой. Каждый блокстейт перестраивает свой кэш в первый раз, когда данные будут доступны. В любой момент, когда ванильный или Forge попытаются перестроить кэши для всех блокстейтов, это перенаправляется на простую инвалидацию кэша на каждом состоянии блока вместо этого.\n\nЭто не должно оказывать влияния на TPS после завершения запуска.", + "modernfix.option.mixin.perf.remove_biome_temperature_cache": "Все версии. Удаляет кэш температуры биомов, как делает Lithium в современных версиях.", + "modernfix.option.mixin.perf.resourcepacks": "Все версии . **Ключевая оптимизация.** Запуск современных версий сильно нагружен доступом к файлам. Множество запросов часто вызываются по отношению к ресурспакам для хранения ресурсов или проверки существования данного ресурса, и каждый данный вызов является очень медленным из-за текущей системы файлов.\n\nModernFix полностью искореняет данный боттлнек путём простого кеширования всех ресурсов, существующих в предоставленных модами и ваниллой ресурспаках. Кеш перестраивается при перезагрузке ресурсов (кроме ванильных ресурсов, поскольку они никогда не должны перезагружаться в работающей игре).\n\nНе было найдено несовместимостей с этим патчей кроме OptiFine (его CTM ресурсы некорректно загружаюются). Однако я не рекомендую использовать OptiFine в любом случае, поскольку он добавляет несколько минут к времени загрузки игры сам по себе и не тестируеются с ModernFix'ом вообще.", + "modernfix.option.mixin.perf.reuse_datapacks": "Только 1.16. Пытается ускорить переход между синглплеерными мирами путём пропуска перезагрузки датапаков, когда это возможно. Может вызывать проблемы с совместимостью с некоторыми модами, однако сейчас включено по умолчанию.", + "modernfix.option.mixin.perf.rewrite_registry": "Все версии. **На сейчас полу-рабочее.** Агрессивно заменяет некоторые компоненты регистра форджа более быстрым аналогом, однако оно на данный момент вызывает фризы при загрузке некоторых модпаков. Выключено по умолчанию по очевидным причинам.", + "modernfix.option.mixin.perf.skip_first_datapack_reload": "Только 1.16 & 1.19. **Ключевая оптимизация.**\n\nВ середине цикла разработки на 1.16, Forge пропатчил игру, вынуждая её перезагружать дважды датапаки, при загрузке существующего мира, в надежде исправить сдвиг айди биомов. К сожалению, перезагрузка датапаков часто доходит вплоть до 30 секунд ожидания, что значительно замедляет загрузку мира.\n\nModernFix выполняет необходимые изменения для избежания этой перезагрузки, базированные на незаконченом форджевском PR #8163.\n\nЭто изменения было удалено форджами в 1.18, однако похожий патч был добавлен *опять* в 1.19 для исправления незагружающихся датапаков модов при создании синглплеерных миров. К счастью, ошибка была локализована к меню создания мира на 1.19, и существующие миры требуют только одну перезагрузку. Однако, это всё ещё удваивает продолжительность лагов при нажатии \"Создать новый мир\" на 1.19, и так ModernFix опять делает исправления, чтобы не вызывать перезагрузку дважды.", + "modernfix.option.mixin.perf.state_definition_construct": "Все версии. Включен только если FerriteCore установлен. Использует возможности FerriteCore'овской обработки стейтов для ускорения их создания. Помогает ускорить время загрузки клиента с модами, со множеством блокстейтов, например модами на мебель.", + "modernfix.option.mixin.perf.sync_executor_sleep": "Все версии. Избегает бездействия основного потока ЦП, у которого один поток находится в ожидании завершения загрузки модов.", + "modernfix.option.mixin.perf.thread_priorities": "Все версии. Выставляет приоритет рабочим потокам сервера ниже клиентских. Улучшает стабильность FPS на пк с несколькими ядрами на ЦП, при условии, что используемая версия Java поддерживает приоритеты.", + "modernfix.option.mixin.perf.use_integrated_resources": "В основном для 1.16. Патчит JEResources для использования информации о лут-тейблах с интегрированного сервера если играем в синглплеере, вместо бесполезной перезагрузки лут-тейблов. Сохраняет пару секунд при загрузке JEI.", + "modernfix.option.mixin.bugfix.concurrency": "Исправляет различные ошибки связанные с параллельностью в Minecraft и/или Forge. Большинство из них приводят к редким, трудно диагностируемым крашам во время загрузки.", + "modernfix.option.mixin.bugfix.edge_chunk_not_saved": "Эта опция является портом мода SuperCoder's Chunk Saving Fix (потому что я не знал, что в то время он уже был доступен на Forge).", + "modernfix.option.mixin.bugfix.mc218112": "Эта опция исправляет дедлок, возникающий если возникают ошибки при обработке информации об энтити. Ванилла некорректно разблокирует информацию об энтити, когда должна. Ошибка показана в MC-218112 на баг-трекере, и была пофикшена Mojang'ами в 1.17.", + "modernfix.option.mixin.bugfix.packet_leak": "**Экспериментально**, не включено по умолчания. Попытка исправить утечки ОЗУ, возникающие на 1.16 во время длительной игры 1.16.", + "modernfix.option.mixin.bugfix.paper_chunk_patches": "1.18 и новее. **Ключевая оптимизация.** Портирует патч из Paper который исправляет с 1.17 проблему необходимости большого количества ОЗУ и создания множества объектов `CompletableFuture`. 1.18+ теперь может загружать миры с 400MB ОЗУ, как это делалось на 1.16.", + "modernfix.option.mixin.bugfix.tf_cme_on_load": "Исправляет непотокобезопасную загрузку Twilight Forest'а, используя главный поток, а не поток FML", + "modernfix.option.mixin.feature.branding": "Добавляет упоминание ModernFix'а в главное меню, а так же в F3.", + "modernfix.option.mixin.feature.direct_stack_trace": "Обычно выключено, может быть включено, чтобы принудительно записывать необработанный стектрейс при краше. Иногда ванильная система крашев не работает должным образом и выдает совершенно нерелевантный стектрейс/репорт.", + "modernfix.option.mixin.feature.measure_time": "Использует пару инжектов для определения времени загрузки мира/датапака/перезагрузки ресурсов/загрузки клиента, и добавляет необходимые хуки для включения ванильной логики неиспользуемого профайлера, если он был настроен.", + "modernfix.option.mixin.feature.spam_thread_dump": "**Используется только для дебага.** Заставляет выводиться дамп потока в лог каждые 60 секунд. Это поможет диагностировать необъяснимые фризы при игре/загрузке.", + "modernfix.option.mixin.bugfix.chunk_deadlock": "Попытки исправить дедлоки в системе чанков, или предоставить дополнительную информацию в лог, когда они возникают. Эти дедлоки обычно проявляются когда сервер зависает на неопределённый срок (например энтити не двигаются), в то время как клиент работает нормально.", + "modernfix.option.mixin.bugfix.chunk_deadlock.valhesia": "Патчит Valhesia Structures для исправления дедлока при загрузке мира/чанков.", + "modernfix.option.mixin.bugfix.cofh_core_crash": "Исправляет проблемы с многопоточностью в CoFH Core которые могли вызывать редкие краши при запуске игры.", + "modernfix.option.mixin.bugfix.ctm_resourceutil_cme": "Исправляет проблемы с многопоточностью в ConnectedTexturesMod которые могли вызывать редкие краши при запуске игры.", + "modernfix.option.mixin.bugfix.ender_dragon_leak": "Исправляет утечку памяти в ванилле, вызываемой эндер-драконом, обращающимся к старому объекту мира клиента.", + "modernfix.option.mixin.bugfix.entity_load_deadlock": "Исправляет много ошибок в EntityJoinWorldEvent/EntityJoinLevelEvent вызывающих дедлок при генерации мира, немного отложив загрузку энтити. Не должно вызывать каких-либо заметных изменений в поведении игры.", + "modernfix.option.mixin.bugfix.fix_config_crashes": "Исправляет случайные ошибки с форджевскими конфигами.", + "modernfix.option.mixin.bugfix.item_cache_flag": "Исправляет MC-258939", + "modernfix.option.mixin.bugfix.preserve_early_window_pos": "Заставляет окно игры сохранять его размер, когда окно переходит из окна раннего загрузки Forge в окно Minecraft. Исправляет проблемы, когда окно возвращалось обратно в центр экрана после перетаскивания и т.д.", + "modernfix.option.mixin.bugfix.refinedstorage.te_bug": "Исправлены блоки внешнего хранилища из Refined Storage которые иногда не отображали содержимое of ящиков и т.д. при их загрузке. Прямой бекпорт PR'а Refined Storage #3435, который был применён на 1.18 и выше.", + "modernfix.option.mixin.bugfix.remove_block_chunkloading": "Исправляет ошибку, когда зомби-пиглин постоянно держит чанк 0, 0 загруженным на Forge. Бекпорт форджевского PR #8583.", + "modernfix.option.mixin.bugfix.starlight_emptiness": "Исправляет случайный Starlight краш из-за не инициализированных пустых коллекций. Прямой бекпорт такого же фикса в Starlight для 1.18.x.", + "modernfix.option.mixin.core": "Необходимые для работы ModernFix патчи", + "modernfix.option.mixin.devenv": "Патчи, применяемые в среде разработки, для оптимизации и/или дебага", + "modernfix.option.mixin.safety": "Исправляет краши при загрузке, связанные с потокобезопасностью", + "modernfix.option.mixin.feature.integrated_server_watchdog": "Добавляет ванильный вотчдог и в синглплеерные миры, но просто выводит стектрейс, а не принудительно уничтожает мир. Эта версия включает в себя функционал Fullstack Watchdog'а, но последний по-прежнему необходим для мультиплеера.", + "modernfix.option.mixin.feature.snapshot_easter_egg": "Добавляет пасхалки(не влияют на поведение игры/внешний вид), если запущено на снапшотах.", + "modernfix.option.mixin.feature.spark_profile_launch": "Если включено, и установлена совместимая версия Spark'а, вся загрузка вплоть до главного меню будет запрофайлена.", + "modernfix.option.mixin.feature.warn_missing_perf_mods": "Показывает предупреждение при запуске, если не установлены другие оптимизирующие моды, которые мы сочли полезными/совместимыми", + "modernfix.option.mixin.launch.class_search_cache": "Заменяет поисковик ресурсов Forge'а (используется для поиска кода игры и модов) значительно более быстрым аналогом, ускоряет запуск игры", + "modernfix.option.mixin.perf.clear_fabric_mapping_tables": "Уменьшает потребление ОЗУ путём очистки структуры маппингов в Fabric Loader которые являются лишними, либо не используются модами. Выключено по умолчанию по соображениям совместимости.", + "modernfix.option.mixin.perf.clear_mixin_classinfo": "Принудительно загружает все миксины после загрузки, после чего удаляет лишнюю о них информацию. Выключено по умолчанию по соображениям совместимости.", + "modernfix.option.mixin.perf.deduplicate_wall_shapes": "Заставляет большинство блоков-стен делить одинаковый объект их формы вместо создания копии каждому лично. Может существенно снизить потребление ОЗУ, когда в модах множество блоков-стен.", + "modernfix.option.mixin.perf.dynamic_resources.ae2": "Патч для AE2 для совместимости с динамическими ресурсами", + "modernfix.option.mixin.perf.dynamic_resources.ctm": "Патч для CTM для совместимости с динамическими ресурсами", + "modernfix.option.mixin.perf.dynamic_resources.rs": "Патч для Refined Storage для совместимости с динамическими ресурсами", + "modernfix.option.mixin.perf.dynamic_resources.supermartijncore": "Патч для SuperMartijn642CoreLib для совместимости с динамическими ресурсами", + "modernfix.option.mixin.perf.dynamic_resources.diagonalfences": "Патч для Diagonal Fences для совместимости с динамическими ресурсами", + "modernfix.option.mixin.perf.faster_advancements": "Ускоряет логику выполнения достижений и избегает ошибки StackOverflowError в больших паках. Порт Advancements Debug с Fabric'а.", + "modernfix.option.mixin.perf.patchouli_deduplicate_books": "Фикс книг из Patchouli, которые хранят множество пустых предметов с NBT. Снижает потребление ОЗУ.", + "modernfix.option.mixin.perf.remove_spawn_chunks": "Полностью удаляет чанки спавна из игры. Они отныне больше не загружаются, в отличии от того, что делает Ksyxis.", + "modernfix.option.mixin.perf.use_integrated_resources.jepb": "", + "modernfix.option.mixin.perf.use_integrated_resources.jeresources": "", + "modernfix.option.mixin.bugfix.blueprint_modif_memory_leak": "Исправляет утечку ванильных ресурсов из-за ObjectModificationManager Blueprint'а, уменьшает потребление ОЗУ. Несмотря на то, что исправление было внесено в PR #195 релиз ещё не сделан.", + "modernfix.option.mixin.bugfix.removed_dimensions": "Исправляет то, что игра не может загрузить миры с удалёнными измерениями. Бекпорт форджевского PR #8959.", + "modernfix.option.mixin.perf.compact_bit_storage": "Исправляет засорение ОЗУ на некоторых старых серверах (например Hypixel) отправляющих пустые чанки как имеющие блоки. Значительно уменьшает потребление ОЗУ на таких серверах.", + "modernfix.option.mixin.perf.deduplicate_climate_parameters": "Дедупликация объектов параметров климата, используемых новой системой биомов, может сохранить ~2MB, но также немного замедляет перезагрузку датапаков.", + "modernfix.option.mixin.perf.dynamic_entity_renderers": "Собирает модели энтити при первом их вызове при запуске. Может быть несовместимо с некоторыми моделями, от чего будут вызываться краши связанные с рендером данного энтити", + "modernfix.option.mixin.perf.twilightforest.structure_spawn_fix": "Исправляет лаги вызываемые проверкой структур при загрузке мира Twilight Forest'а, что было очень неэффективно", + "modernfix.option.mixin.perf.fast_forge_dummies": "Ускоряет заморозку регистра Forge во время запуска используя более оптимизированный код", + "modernfix.option.mixin.perf.tag_id_caching": "Ускоряет использование элементов тега путём кеширования объекта локации, вместо его пересоздания каждый раз", + "modernfix.option.mixin.feature.disable_unihex_font": "Удаляет шрифт юникода, сохраняет 10MB, но специальные символы больше не будут рендериться", + "modernfix.option.mixin.bugfix.world_leaks": "Уменьшает потребление ОЗУ старыми мирами клиента, более не являющимися необходимыми при смене измерения. Обычно сборщик мусора в ванилле со всем разбирается сам, но моды иногда могут вызывать их самостоятельно", + "modernfix.option.mixin.perf.compact_mojang_registries": "(Fabric) Экспериментальная опция, которая, грубо говоря, уменьшает потребление ОЗУ на 50%. Бесполезно для модпаков, только если они не имеют миллион блоков/предметов.", + "modernfix.option.mixin.perf.dynamic_block_codecs": "Избегает хранения кодека каждому блоку(стейту) и вместо этого генерирует и кеширует их только когда необходимо. В целом не стоит включения если у вас не миллион блоков/предметов.", + "modernfix.option.mixin.perf.faster_command_suggestions": "Исправляет лаги, при огромном количестве предложенных команд при печатании текста", + "modernfix.option.mixin.perf.mojang_registry_size": "Устранена проблема, из-за которой регистрация блоков/предметов замедлялась пропорционально их зарегистрированному количеству. Сокращает время запуска." +} From a1f3300a8ac9d92dba9aa8e2dfd938d803717406 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 23 Nov 2023 09:50:47 -0500 Subject: [PATCH 8/8] More ClientOnlyMixin Related: #297 --- .../common/mixin/bugfix/world_leaks/MinecraftMixin.java | 2 ++ .../modernfix/fabric/mixin/core/ClientPlayNetHandlerMixin.java | 2 ++ .../embeddedt/modernfix/fabric/mixin/core/MCMixin_Fabric.java | 2 ++ .../modernfix/fabric/mixin/feature/branding/GuiMixin.java | 2 ++ .../file_dialog_title/WorldGenSettingsComponentMixin.java | 2 ++ 5 files changed, 10 insertions(+) diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/world_leaks/MinecraftMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/world_leaks/MinecraftMixin.java index d3708ff8..876bbaa9 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/world_leaks/MinecraftMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/world_leaks/MinecraftMixin.java @@ -5,6 +5,7 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.lighting.LevelLightEngine; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.jetbrains.annotations.Nullable; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; @@ -16,6 +17,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.concurrent.atomic.AtomicReferenceArray; @Mixin(Minecraft.class) +@ClientOnlyMixin public class MinecraftMixin { @Shadow @Nullable public ClientLevel level; diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/ClientPlayNetHandlerMixin.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/ClientPlayNetHandlerMixin.java index cd825dcf..ec503e82 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/ClientPlayNetHandlerMixin.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/ClientPlayNetHandlerMixin.java @@ -2,12 +2,14 @@ package org.embeddedt.modernfix.fabric.mixin.core; import net.minecraft.client.multiplayer.ClientPacketListener; import org.embeddedt.modernfix.ModernFixClientFabric; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(value = ClientPacketListener.class, priority = 1500) +@ClientOnlyMixin public class ClientPlayNetHandlerMixin { @Inject(method = "handleUpdateRecipes", at = @At("RETURN")) private void signalRecipes(CallbackInfo ci) { diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MCMixin_Fabric.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MCMixin_Fabric.java index 2fb3ba16..15c003d1 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MCMixin_Fabric.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/core/MCMixin_Fabric.java @@ -2,12 +2,14 @@ package org.embeddedt.modernfix.fabric.mixin.core; import net.minecraft.client.Minecraft; import org.embeddedt.modernfix.ModernFixClient; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) +@ClientOnlyMixin public class MCMixin_Fabric { @Inject(method = "tick", at = @At("RETURN")) private void onRenderTickEnd(CallbackInfo ci) { diff --git a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/feature/branding/GuiMixin.java b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/feature/branding/GuiMixin.java index 64ac1037..47d3f1da 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/feature/branding/GuiMixin.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/fabric/mixin/feature/branding/GuiMixin.java @@ -2,6 +2,7 @@ package org.embeddedt.modernfix.fabric.mixin.feature.branding; import net.minecraft.client.gui.components.DebugScreenOverlay; import org.embeddedt.modernfix.ModernFixClientFabric; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; @@ -9,6 +10,7 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; import java.util.List; @Mixin(DebugScreenOverlay.class) +@ClientOnlyMixin public class GuiMixin { @ModifyVariable(method = "getSystemInformation", at = @At("STORE"), ordinal = 0, require = 0) private List addModernFix(List list) { diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/file_dialog_title/WorldGenSettingsComponentMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/file_dialog_title/WorldGenSettingsComponentMixin.java index c273d3eb..0f75f8b5 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/file_dialog_title/WorldGenSettingsComponentMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/file_dialog_title/WorldGenSettingsComponentMixin.java @@ -1,11 +1,13 @@ package org.embeddedt.modernfix.forge.mixin.bugfix.file_dialog_title; import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; @Mixin(WorldGenSettingsComponent.class) +@ClientOnlyMixin public class WorldGenSettingsComponentMixin { /** * @author embeddedt