<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>NkBe</title><description>nkbe.top</description><link>https://www.nkbe.top/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.16.8</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年10月6日 下午04:59:15</lastBuildDate><item><title>你好，這裡是 NkBe 的新站</title><link>https://www.nkbe.top/posts/hello/</link><guid isPermaLink="true">https://www.nkbe.top/posts/hello/</guid><description>個人站改用 Astro 重建，這是第一篇文章。</description><pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;這個站原本只是一頁導航，現在換成 Astro + Firefly 主題，之後會把專案紀錄和技術筆記寫在這裡。&lt;/p&gt;
&lt;p&gt;目前還在整理中，專案請先看 &lt;a href=&quot;/projects/&quot;&gt;專案頁&lt;/a&gt;。&lt;/p&gt;</content:encoded></item><item><title>一加內核開源，發現新增「和平精英」專項檢測</title><link>https://www.nkbe.top/posts/oplus-kernel-security-check/</link><guid isPermaLink="true">https://www.nkbe.top/posts/oplus-kernel-security-check/</guid><description>一加 Ace 6 Ultra 開源內核模組中新增 oplus_kernel_security_check.c，針對系統調用表與 ko 模組加載進行完整性檢測。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在一加開源的 Ace 6 Ultra（聯發科 MT6993）內核模組原始碼中，出現了一個新的檔案 &lt;code&gt;oplus_kernel_security_check.c&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;檔案頭部註釋說明，這是為了「和平精英」的需求進行的內核完整性檢測，作者署名為 cenjun，日期標註為 2025 年 12 月。&lt;/p&gt;
&lt;p&gt;它的思路並不複雜：&lt;strong&gt;不攔截，只記錄&lt;/strong&gt;。&lt;code&gt;ko&lt;/code&gt; 檔案照常載入，程序不會被終止，也沒有任何封禁動作，異常只會記錄為事件，等待用戶空間讀取。&lt;/p&gt;
&lt;hr /&gt;
&lt;section&gt;&lt;h2&gt;🔍 檢測了什麼&lt;a href=&quot;#-檢測了什麼&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. 系統調用表（Syscall Table）&lt;a href=&quot;#1-系統調用表syscall-table&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;開機時，為整個表記錄一份 SHA256 指紋，之後每小時重新計算一次。&lt;/li&gt;
&lt;li&gt;如果與初始值不符，就會記錄一條帶有時間戳記的事件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;限制&lt;/strong&gt;：只比較表中的函數指標，不檢查函數本體，因此 inline hook 是無法檢測到的。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. ko 模組載入（Kernel Module Loading）&lt;a href=&quot;#2-ko-模組載入kernel-module-loading&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;掛載在內核的 &lt;code&gt;load_module&lt;/code&gt; 上，每次載入一個 &lt;code&gt;ko&lt;/code&gt; 檔案，就會對其映像計算雜湊值，然後與名單進行比較：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不在名單中&lt;/strong&gt;：記錄為未知模組&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;雜湊值不匹配&lt;/strong&gt;：記錄為被篡改&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;雜湊值一致&lt;/strong&gt;：放行&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;名單由系統程序 &lt;code&gt;oplus_kohashpro&lt;/code&gt; 寫入，並且必須等待系統報告開機完成後，檢測才會啟動。每類事件最多保留 10 條，超出部分會丟棄最舊的。&lt;/p&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;⬆️ 對 root 用戶意味著什麼&lt;a href=&quot;#️-對-root-用戶意味著什麼&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;判定方式只有一條：&lt;strong&gt;是否在名單上&lt;/strong&gt;。即使是自己編譯、完全無害的 &lt;code&gt;ko&lt;/code&gt; 檔案，在它看來也與被篡改的 &lt;code&gt;ko&lt;/code&gt; 檔案沒有區別。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;KSU 的模組&lt;/strong&gt;：不經過 &lt;code&gt;load_module&lt;/code&gt;，不在檢測範圍內。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KernelSU 本體&lt;/strong&gt;：如果以 LKM 方式載入，它自己的 &lt;code&gt;ko&lt;/code&gt; 檔案會被記錄為未知模組（此項依程式碼邏輯推斷，尚未經實際設備驗證）。這也代表從理論上使用 GKI 或 Magisk 就能規避該項檢測。&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;不少 root 玩家表示，他們同樣反感作弊行為，也理解遊戲方維護公平環境的需要，只希望這類訊號僅作為參考，不要直接等同於作弊證據。&lt;/p&gt;&lt;/blockquote&gt;&lt;hr /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Note&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;以上內容均基於對公開原始碼的解讀。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;原始碼來源&lt;/strong&gt;：&lt;a href=&quot;https://github.com/OnePlusOSS/android_kernel_modules_and_devicetree_oneplus_mt6993/blob/oneplus/mt6993_b_16.0_ace_6_ultra/vendor/oplus/kernel/secureguard/gki2.0/rootguard_new/oplus_kernel_security_check.c&quot; target=&quot;_blank&quot;&gt;OnePlusOSS / android_kernel_modules_and_devicetree_oneplus_mt6993&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;</content:encoded></item><item><title>適配 Minecraft 26.1.x：技術遷移實錄</title><link>https://www.nkbe.top/posts/mc-26-1/</link><guid isPermaLink="true">https://www.nkbe.top/posts/mc-26-1/</guid><description>深度解析 Java 25、Unobfuscated Loom 與 Mojang 官方對映的適配細節，涵蓋工具鏈升級、對映遷移、GUI 重構與 Mixin 修復。</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;&lt;p&gt;深度解析 Java 25、Unobfuscated Loom 與 Mojang 官方對映的適配細節&lt;/p&gt;&lt;p&gt;由 Gemini 3.1 Pro 自我的 md 原稿重寫為 html，換行好像都是問題///&lt;/p&gt;&lt;/blockquote&gt;
&lt;section&gt;&lt;h2&gt;序言&lt;a href=&quot;#序言&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;隨著 &lt;strong&gt;Minecraft 26.1.x&lt;/strong&gt; 的釋出，Fabric 模組開發生態迎來了一次真正意義上的&lt;em&gt;分水嶺&lt;/em&gt;。&lt;/p&gt;&lt;p&gt;這不只是一次例行的版本升級——而是 &lt;strong&gt;26.1 Fabric&lt;/strong&gt; 所代表的&lt;strong&gt;工具鏈、對映體系與開發流程&lt;/strong&gt;的整體轉向。&lt;/p&gt;&lt;p&gt;不僅 Java 版本躍升至 &lt;strong&gt;25&lt;/strong&gt;，構建工具 &lt;strong&gt;Loom&lt;/strong&gt; 的核心架構、對映機制與 GUI 系統都發生了根本性的重構。&lt;/p&gt;&lt;p&gt;本文將以 &lt;code&gt;BoatFly&lt;/code&gt; 與 &lt;code&gt;PetPhraseX&lt;/code&gt; 的完整適配過程為例，簡單說下有關本次遷移的&lt;strong&gt;技術細節&lt;/strong&gt;與&lt;strong&gt;踩坑經驗&lt;/strong&gt;。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第一部分：工具鏈與環境配置&lt;a href=&quot;#第一部分工具鏈與環境配置&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1.1 Java 版本升級至&lt;a href=&quot;#11-java-版本升級至&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Minecraft 26.1.x 要求最低 &lt;strong&gt;Java 25&lt;/strong&gt; 作為編譯與執行環境，這不只是版本號上的遞進，更涉及 JVM 的多項新特性與效能最佳化。&lt;/p&gt;&lt;p&gt;在 &lt;code&gt;gradle.properties&lt;/code&gt; 中，我們需要明確指定目標版本，如：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;org.gradle.jvmargs&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; -Xmx4096m -&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Dfile.encoding&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;UTF-8&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;target_java_version&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 25&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;minecraft_version&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 26.1.2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Warning&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;**注意：**若使用 Gradle Wrapper 需升級至 &lt;strong&gt;9.4.0+&lt;/strong&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.2 Fabric Loader 與 Loom 的版本對齊&lt;a href=&quot;#12-fabric-loader-與-loom-的版本對齊&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Loom 1.15-SNAPSHOT&lt;/strong&gt; 是適配 26.1.x 的關鍵版本。它引入了全新的編譯流程，&lt;em&gt;不再依賴 Yarn 對映&lt;/em&gt;的中間層轉換。&lt;/p&gt;&lt;p&gt;同時也建議將 &lt;strong&gt;Fabric Loader&lt;/strong&gt;升級至 &lt;strong&gt;0.18.6+&lt;/strong&gt;，以支援新的模組載入機制。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;plugins {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 引入支援 Unobfuscated 流程的最新版 Loom 外掛&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;id &lt;/span&gt;&lt;span&gt;&apos;net.fabricmc.fabric-loom&apos;&lt;/span&gt;&lt;span&gt; version &lt;/span&gt;&lt;span&gt;&apos;1.16-SNAPSHOT&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;dependencies {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 指定目標 Minecraft 版本為 26.1.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minecraft &lt;/span&gt;&lt;span&gt;&quot;com.mojang:minecraft:26.1.2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 引入支援新模組載入機制的 Fabric Loader 0.18.6+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;compileOnly &lt;/span&gt;&lt;span&gt;&quot;net.fabricmc:fabric-loader:0.18.6&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.3 fabric.mod.json 後設資料規範更新&lt;a href=&quot;#13-fabricmodjson-後設資料規範更新&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;伴隨 Fabric Loader 0.18.6+ 的升級，模組後設資料檔案的校驗規則迎來了強約束更新，過往寬鬆的欄位宣告將直接導致模組無法載入，甚至出現啟動器校驗不透過的問題。&lt;/p&gt;&lt;p&gt;核心變更集中在依賴宣告、環境限定與 Java 版本約束三個維度，尤其針對 Minecraft 26.1.x 與 Java 25 的強制要求，必須在後設資料中明確宣告。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Warning&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;必須在 &lt;code&gt;depends&lt;/code&gt; 中明確宣告 &lt;code&gt;&quot;java&quot;: &quot;&amp;gt;=25&quot;&lt;/code&gt;，否則 Loader 可能會直接阻斷模組載入，無任何容錯空間。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1.4 IDE 開發環境適配最佳化&lt;a href=&quot;#14-ide-開發環境適配最佳化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;針對 Java 25 與全新 Loom 工具鏈，主流 IDE 也需要完成對應的配置最佳化，才能避免同步失敗、原始碼對映錯亂、除錯斷點失效等問題。&lt;/p&gt;&lt;p&gt;以 IntelliJ IDEA 為例，核心適配步驟如下：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;升級 IDEA 至 2025.3+ 版本，才能獲得 Java 25 語法的完整支援與 Gradle 9.4+ 的原生相容&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;專案結構 → SDK&lt;/code&gt; 中新增 Java 25 正式版 SDK，並將專案的 SDK、語言級別均設定為 Java 25&lt;/li&gt;
&lt;li&gt;在 Gradle 設定中，將「使用 Gradle 來自」設定為 &lt;code&gt;gradle-wrapper.properties&lt;/code&gt;，並指定 Gradle JVM 為 Java 25&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第二部分：對映機制遷移&lt;a href=&quot;#第二部分對映機制遷移&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;2.1 從 Yarn 到 Mojang 的範式變革&lt;a href=&quot;#21-從-yarn-到-mojang-的範式變革&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本次 26.1.x 適配最核心的變革，莫過於 Loom 1.15+ 帶來的 &lt;strong&gt;Unobfuscated 原生官方對映開發流程&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;過往 Fabric 模組開發的標準流程，是基於社群維護的 Yarn 命名對映編寫程式碼，編譯時通過 Loom 轉換為 Intermediary 中間對映，最終在執行時匹配遊戲的混淆位元組碼。&lt;/p&gt;&lt;p&gt;而全新的 Unobfuscated 流程，直接基於 Mojang 官方釋出的 deobfuscation 對映進行開發，徹底移除了 Yarn 中間層的依賴：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;編譯流程大幅簡化，無需執行對映轉換，構建速度將會有所提升&lt;/li&gt;
&lt;li&gt;命名與官方原始碼完全對齊，避免了 Yarn 與官方對映的命名差異帶來的理解成本&lt;/li&gt;
&lt;li&gt;與 Forge 生態的命名體系完全一致，跨載入器模組開發的適配成本大幅降低&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;在 &lt;code&gt;build.gradle&lt;/code&gt; 中，無需再引入任何 Yarn 對映依賴，僅需保留 Minecraft 官方依賴即可完成對映配置，這也是本次工具鏈升級最具顛覆性的變化。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.2 大規模包名與類名變更&lt;a href=&quot;#22-大規模包名與類名變更&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;官方對映的引入，導致了&lt;strong&gt;數百個類&lt;/strong&gt;的重新命名。以下是在我專案中常出現的變更對照：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 文本&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;net.minecraft.text.Text → net.minecraft.network.chat.Component&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// GUI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;net.minecraft.client.gui.screen.Screen → net.minecraft.client.gui.screens.Screen&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;net.minecraft.client.gui.widget.ButtonWidget → net.minecraft.client.gui.components.Button&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 渲染&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;net.minecraft.client.gui.DrawContext → net.minecraft.client.gui.GuiGraphics&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Warning&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;**注意：**除了命名變更，大量方法的引數順序、返回值型別也發生了調整，切勿僅做簡單的查詢替換，需逐行核對方法簽名的完整性，避免出現執行時崩潰。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第三部分：GUI 系統重構&lt;a href=&quot;#第三部分gui-系統重構&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;3.1 渲染生命週期的變更&lt;a href=&quot;#31-渲染生命週期的變更&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在我的專案中，最重大的 API 變更發生在 &lt;code&gt;Screen&lt;/code&gt; 類。&lt;/p&gt;&lt;p&gt;舊版本使用 &lt;code&gt;render()&lt;/code&gt;，新版本則改為 &lt;code&gt;extractRenderState()&lt;/code&gt;——必須重新適應新的&lt;em&gt;圖形提取模式&lt;/em&gt;。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Note&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;提示：&lt;/strong&gt;&lt;code&gt;GuiGraphicsExtractor&lt;/code&gt; 的 &lt;code&gt;text()&lt;/code&gt; 預設為&lt;strong&gt;左對齊&lt;/strong&gt;，不再內建居中功能，反正開發文件裡我沒看到。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;Override&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractRenderState&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;GuiGraphicsExtractor&lt;/span&gt;&lt;span&gt;&lt;span&gt; graphics&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt; mouseX&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt; mouseY&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt; delta) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;extractRenderState&lt;/span&gt;&lt;span&gt;(graphics, mouseX, mouseY, delta);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 手動計算居中位置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; titleWidth &lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;font&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; centerX &lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; titleWidth) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;graphics&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;font&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, centerX, &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0xFFFFFF&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第四部分：Mixin 注入體系適配要點&lt;a href=&quot;#第四部分mixin-注入體系適配要點&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本次 26.1.x 版本升級中，Mixin 注入邏輯的調整，是多數模組啟動崩潰的核心誘因。&lt;/p&gt;&lt;p&gt;除了前文提到的類名、方法名全量變更，遊戲核心類的執行流程、位元組碼結構也有深層重構，過往的注入點會出現無效異常，甚至直接阻斷遊戲啟動。&lt;/p&gt;&lt;p&gt;以下為本次適配的核心規則，均來自 BoatFly 與 PetPhraseX 的實戰驗證。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;4.1 注入目標的全量重定位&lt;a href=&quot;#41-注入目標的全量重定位&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;官方對映體系下，Mixin 注入的核心目標，必須完全替換為 Mojang 官方的命名規範，而非簡單替換 Yarn 對映的名稱。&lt;/p&gt;&lt;p&gt;核心調整包含三個維度：&lt;/p&gt;&lt;p&gt;其一，&lt;code&gt;@Mixin&lt;/code&gt; 註解的目標類，需替換為官方對映的全限定類名，不可繼續沿用 Yarn 體系的類路徑。&lt;/p&gt;&lt;p&gt;其二，&lt;code&gt;@At&lt;/code&gt; 註解中的注入目標，無論是方法呼叫還是欄位訪問，都需同步更新為官方對映的命名與描述符。&lt;/p&gt;&lt;p&gt;其三，&lt;code&gt;@Shadow&lt;/code&gt; 註解的欄位與方法，必須與官方對映的簽名完全一致，否則會同時出現編譯與執行期雙重異常。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4.2 注入規範的強約束更新&lt;a href=&quot;#42-注入規範的強約束更新&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;伴隨 Loom 1.15+ 的升級，Mixin 新增了編譯期強校驗機制，過往寬鬆的注入寫法將直接導致構建失敗。&lt;/p&gt;&lt;p&gt;最核心的變更，是要求所有注入點必須顯式宣告 &lt;code&gt;require&lt;/code&gt; 屬性，推薦強制每個注入點必須匹配到對應目標以防止靜默崩潰。&lt;/p&gt;&lt;p&gt;同時，介面注入、訪問器的目標類與方法，也需同步完成官方對映的替換，並嚴格按客戶端、服務端環境拆分配置，避免服務端載入客戶端專屬 Mixin 導致的崩潰。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4.3 配置檔案的規範調整&lt;a href=&quot;#43-配置檔案的規範調整&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Mixin 配置檔案需同步完成兩項核心調整，否則會直接導致 Mixin 無法載入。&lt;/p&gt;&lt;p&gt;第一，必須顯式宣告 &lt;code&gt;compatibilityLevel&lt;/code&gt; 為 &lt;code&gt;JAVA_25&lt;/code&gt;，確保 Mixin 適配 Java 25 的位元組碼版本。&lt;/p&gt;&lt;p&gt;第二，必須顯式宣告 &lt;code&gt;required&lt;/code&gt; 為 &lt;code&gt;true&lt;/code&gt;，明確告知 Loader 該配置為模組必需，避免載入時的警告與潛在異常。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第五部分：Fabric API 核心體系變更&lt;a href=&quot;#第五部分fabric-api-核心體系變更&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Fabric API 針對 26.1.x 同步完成了架構重構，大量常用事件、工具類被標記為棄用甚至移除，事件的觸發時機、引數列表也有破壞性變更。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;5.1 客戶端生命週期事件重構&lt;a href=&quot;#51-客戶端生命週期事件重構&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;伴隨 GUI 渲染系統的重寫，客戶端核心生命週期事件也同步完成了調整。&lt;/p&gt;&lt;p&gt;螢幕渲染相關事件，完全對應新的 &lt;code&gt;extractRenderState&lt;/code&gt; 生命週期，替換了舊版本的 &lt;code&gt;render&lt;/code&gt; 相關事件，觸發時機與傳入引數均有對應調整。&lt;/p&gt;&lt;p&gt;客戶端 Tick、螢幕開啟關閉等核心事件，也進行了名稱空間與分類的重構，需按新的事件路徑完成註冊，否則會出現事件不生效的問題。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5.2 聊天與文本系統適配&lt;a href=&quot;#52-聊天與文本系統適配&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;除了前文提到的 &lt;code&gt;Text&lt;/code&gt; 到 &lt;code&gt;Component&lt;/code&gt; 的類名變更，聊天訊息的事件監聽、文本元件構建 API 也有全量調整。&lt;/p&gt;&lt;p&gt;文本元件的構建方法，需替換為官方對映對應的靜態方法，樣式設定的流式 API 也有對應調整。&lt;/p&gt;&lt;p&gt;聊天訊息相關事件進行了強約束重構，新增了訊息取消機制，攔截或修改聊天訊息需按新的規範返回對應結果，否則會出現訊息重複傳送、攔截失效的問題。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5.3 輸入與按鍵繫結系統調整&lt;a href=&quot;#53-輸入與按鍵繫結系統調整&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;客戶端輸入處理的重構，也帶來了按鍵繫結、滑鼠鍵盤事件的對應變更。&lt;/p&gt;&lt;p&gt;按鍵繫結需使用新的註冊 API，而非舊版本的直接例項化註冊。&lt;/p&gt;&lt;p&gt;按鍵按下/釋放、滑鼠點選滾動等輸入事件，也進行了名稱空間重構，引數列表新增了視窗上下文資訊，需同步完成適配。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第六部分：常見踩坑與解決方案&lt;a href=&quot;#第六部分常見踩坑與解決方案&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 BoatFly 與 PetPhraseX 的完整適配過程中，我們整理了多數開發者都會遇到的共性問題，對應的解決方案可大幅縮短適配週期。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;6.1 編譯與環境類問題&lt;a href=&quot;#61-編譯與環境類問題&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最常見的「無效的目標發行版: 25」報錯，核心原因無非三點：Gradle 版本過低、IDE 配置的 Java SDK 版本不正確、目標版本宣告錯誤。&lt;/p&gt;&lt;p&gt;對應解決方案也很明確：升級 Gradle Wrapper 至 9.4.0+ 版本，在 IDE 中配置 Java 25 正式版 SDK，並將專案與 Gradle 的 JVM 均設定為 Java 25，同時確認配置檔案中的目標版本號正確。&lt;/p&gt;&lt;p&gt;另一類常見的依賴同步失敗問題，多是 Loom 版本與 Minecraft 版本不匹配，需使用 1.15-SNAPSHOT 及以上的 Loom 版本，才能完整支援 26.1.x 的官方對映流程。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6.2 執行與載入類問題&lt;a href=&quot;#62-執行與載入類問題&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;模組載入時提示「依賴約束不滿足」，核心是 &lt;code&gt;fabric.mod.json&lt;/code&gt; 中的依賴宣告不符合新規範。&lt;/p&gt;&lt;p&gt;必須在依賴中顯式宣告 Java 25、對應的 Fabric Loader 與 Minecraft 版本範圍，否則 Loader 會直接阻斷模組載入，無任何容錯空間。&lt;/p&gt;&lt;p&gt;遊戲啟動時的「模組訪問許可權異常」，是 Java 25 強化了模組系統的訪問控制，需在執行引數中新增對應的模組開放配置，解決反射訪問的許可權問題。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6.3 功能與渲染類問題&lt;a href=&quot;#63-功能與渲染類問題&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GUI 渲染時文本錯位、元件不顯示，多是未遷移至新的渲染生命週期，仍沿用舊的 &lt;code&gt;render&lt;/code&gt; 方法，或是文本座標計算不符合新 API 的預設規則。&lt;/p&gt;&lt;p&gt;需將所有螢幕渲染邏輯遷移至 &lt;code&gt;extractRenderState&lt;/code&gt; 方法，手動計算文本與元件的座標，不再依賴舊版本的內建居中功能。&lt;/p&gt;&lt;p&gt;Mixin 注入失效、功能不生效，需先開啟 Mixin 除錯模式，檢視詳細的注入日誌，核對注入目標的命名、描述符是否與官方對映完全一致，多數問題都來自命名的細微偏差。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;總結&lt;a href=&quot;#總結&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Minecraft 26.1.x 的適配雖然涉及&lt;strong&gt;深度的技術重構&lt;/strong&gt;，但也為模組開發生態帶來了長期的&lt;em&gt;穩定性&lt;/em&gt;與&lt;em&gt;可維護性&lt;/em&gt;。&lt;/p&gt;&lt;p&gt;透過採用&lt;strong&gt;官方對映&lt;/strong&gt;、&lt;strong&gt;新的 GUI API&lt;/strong&gt; 與&lt;strong&gt;改進的構建流程&lt;/strong&gt;，我們現在能編寫更清晰、更易維護的程式碼。&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>