存取權限擴寬
存取權限擴寬是類別調整的一種類型,用於放寬類別、方法與欄位的存取限制,並將該變更反映在反編譯原始碼中。 這包括將它們設為公開、可擴充及/或可變更。
存取權限擴寬器條目可以是傳遞性的,讓依賴你的模組的其他模組也能看到這些變更。
若要存取欄位或方法,使用存取器 Mixin 通常會更安全也更簡單;但在以下兩種情況中,存取器並不足夠,必須使用存取權限擴寬:
- 如果你需要存取
private、protected或套件私有的類別 - 如果你需要覆寫
final方法,或繼承final類別
然而,與存取器 Mixin 不同,類別調整只適用於原版 Minecraft 類別,不適用於其他模組。
存取指令
存取權限擴寬器條目會以三種指令關鍵字之一開頭,用來指定要套用的修改類型。
accessible
accessible 可以以類別、方法與欄位為目標:
- 欄位與類別會被設為公開。
- 方法會被設為公開;若原本是 private,則也會被設為 final。
將方法或欄位設為 accessible,也會讓其所屬類別變為 accessible。
extendable
extendable 可以以類別與方法為目標:
- 類別會被設為公開且非 final。
- 方法會被設為 protected 且非 final。
將方法設為 extendable,也會讓其所屬類別變為 extendable。
mutable
mutable 可以讓欄位變為非 final。
若要讓 private final 欄位同時可存取且可變更,你必須在檔案中建立兩個獨立條目。
指定目標
對於類別調整,類別會使用其內部名稱。 對於欄位與方法,你必須指定其類別名稱、名稱,以及其位元組碼描述符。
格式:
<accessible / extendable> class <className>範例:
classtweaker
# Makes the inner class MenuSupplier in MenuType public
accessible class net/minecraft/world/inventory/MenuType$MenuSupplier產生條目
手動撰寫存取權限擴寬器條目既耗時,也容易發生人為錯誤。 接下來我們會介紹一些工具,它們可以讓你產生並複製條目,藉此簡化部分流程。
mcsrc.dev
對於所有提供未混淆 JAR 的版本,也就是 1.21.11 及以上版本,mcsrc 可讓你在瀏覽器中反編譯並瀏覽 Minecraft 原始碼,並將 Mixin、存取權限擴寬器或存取轉換器目標複製到剪貼簿。
若要複製存取權限擴寬器條目,請先前往你想修改的類別,然後在目標上按右鍵以開啟快顯選單。

接著,點擊 Copy Class Tweaker / Access Widener,頁面頂端應會出現確認訊息。

之後,你就可以將條目貼到你的類別調整器檔案中。
Minecraft Development 外掛(IntelliJ IDEA)
Minecraft Development 外掛,也稱為 MCDev,是一個 IntelliJ IDEA 外掛,用於協助 Minecraft 模組開發的各個面向。 例如,它可讓你從反編譯原始碼中的目標,將存取權限擴寬器條目複製到剪貼簿。
若要複製存取權限擴寬器條目,請先前往你想修改的類別,然後在目標上按右鍵以開啟快顯選單。

接著,點擊 Copy / Paste Special,再點擊 AW Entry。

此時,你按右鍵的元素上應會彈出確認訊息。

之後,你就可以將條目貼到你的類別調整器檔案中。
套用變更
若要看到已套用的變更,你必須重新整理 Gradle 專案並重新產生原始碼。 你所指定的元素應會相應地修改其存取限制。 若修改沒有出現,可以嘗試驗證檔案,並檢查是否出現任何錯誤。

























