Mixin是一個使用 ASM 的 Java 特徵/混合框架,並透過一組可插入的內建或使用者提供的服務掛鉤到執行時間類別載入過程。內建服務目前支援 Mojang 的 LegacyLauncher 系統,儘管 cpw 已棄用該系統,轉而採用 ModLauncher,後者俱有更大的可擴展性並支援 Java 8 及更高版本。
文件
Mixin的主要文件可以在 Wiki 中找到。
有關各個功能和註釋的其他文件可以在廣泛的 Javadoc 中找到。如需更多協助,請使用 Sponge Discord 伺服器上的#mixin
頻道。
二進位檔案
Mixin 二進位檔案可透過 Jenkins 取得,並發佈到以下 Maven 儲存庫:
- https://repo.spongepowered.org/repository/maven-public/ - SNAPHOT 和 RELEASE 構建
- https://files.minecraftforge.net/maven/ - 僅發布版本
工裝
為了處理混淆任務,Mixin 提供了一個註釋處理器,它在編譯時工作,產生混淆映射以供您的工具鏈應用。如果使用 Gradle 5 或更高版本,註釋處理器不再從compile
配置中自動加載,並且必須透過annotationProcessor
配置明確指定。為此,Mixin 透過:processor
分類器提供了包含所有必要相依性的「fat jar」工件。例如,如果您的建置使用依賴項org.spongepowered:mixin:1.2.3
,那麼您的annotationProcessor 配置應指定依賴項org.spongepowered:mixin:1.2.3:processor
。
如果您在 Minecraft Forge 專案中使用 Mixin,則可以使用 MixinGradle 外掛程式來簡化 Mixin 註解處理器的設定。它提供了為您的專案配置 Mixin AP 的簡單語法,請參閱 MixinGradle README 以了解如何設定 MixinGradle。
與 Eclipse 集成
使用Mixin進行開發時,您可以使用 Eclipse 中的Mixin Annotation Processor來提供上下文相關的錯誤和警告,以協助您更輕鬆地對 mixin 進行故障排除。為此:
- 執行
gradle build
指令產生 mixin jar - 開啟 Eclipse 專案的屬性並導航至
Java Compiler
-> Annotation Processing
-> Factory Path
- 選取
Enable project specific settings
複選框 - 點擊
Add External JARs
按鈕並選擇產生的帶有後綴-processor的 mixin jar(提示:它應該位於Mixin/build/libs
中) - 向上導航一級到
Java Compiler
-> Annotation Processing
- 選取
Enable project specific settings
複選框 - 選取
Enable annotation processing
複選框 - 點選
Processor options
方塊旁的New...
按鈕
- 將
Key
設定為reobfSrgFile - 將
Value
設定為mcp-srg.srg
檔案的完全限定路徑(映射檔案的位置因平台而異,如果您不確定在哪裡找到它,請點擊下面的不和諧連結)。
- 按一下
OK
以應用更改
與 IntelliJ IDEA 集成
在 IntelliJ IDEA 中使用Mixin的增強功能可透過 DemonWav 開發的 Minecraft Development for IntelliJ IDEA 插件取得。
版本歷史
在配置中指定minVersion
屬性非常重要。以下版本歷史記錄可用於確定何時引入功能(有時何時消除主要錯誤),以協助您確定應指定哪個minVersion
。
版本 | 日期 | 特點/變化 |
---|
0.8.3 | 2021 年 2 月 | - 新增了動態目標選擇器支援和@Desc目標選擇器
- 新增了模式目標選擇器
- 為顯式目標選擇器添加了更具表現力的量詞支持
- javadoc 的改版與整體改進
|
0.8.1 (0.8.2) | 2020年9月 | - 支援 ModLauncher 7.0 的修補程序
- 修正了解決繼承介面中混淆成員的關鍵問題
- 更新至 ASM 7.2
|
0.8 | 2020年1月 | - 更新至 ASM 6.2
- 支援 ModLauncher
- 新增了對 Java 9 和 10 的識別
- 支援ForgeGradle 3+ tsrg 混淆表
- 配置現在可以繼承其他配置
- @Invoke現在可用於公開建構函數
- 顯著改進了意外應用程式和預處理器異常的上下文報告,使得在代理因特定操作碼而阻塞時更容易診斷
- 錯誤修復
- 從 mixin 程式碼內部呼叫訪問器 mixin 的成員
- 顯式目標聲明中的空格處理不正確
- 嘗試重定向參與者時出現意外行為
- 正確偵測不相容的存取器重疊並忽略有效的存取器重疊(不警告)
- 如果介面在目標類別之前被類別加載,則介面靜態存取器現在可以正確地符合目標
- 正確偵測和報告存取器的靜態不匹配,而不是導致崩潰
- 修正了與需要 DUP2 的堆疊上的雙字運算元相關的生成器和注入器錯誤
- 修復了從 FabricMC 合併的 LVT 生成器中的問題
- 當最終方法被 mixin 意外隱藏時快速失敗
- 修正本地擷取注入器 LVT 中雜散CallbackInfo實例的外觀
- Apache Commons-IO 相依性已刪除
- 已重新命名的陰影 ASM 已刪除
- 改進了局部變數捕獲注入的局部變數分辨率
- 回調注入器和重定向上的@Coerce現在可以解析超級接口,包括混合接口
|
0.7.11 | 2018年7月 | - 修正了 3 個小錯誤:修正了 maxShiftBy 的處理、改進了 BeforeInvoke 授權搜尋、停用通用簽章合併(除非反編譯器處於活動狀態)。
|
0.7.10 | 2018年6月 | |
0.7.9 | 2018年4月 | |
0.7.8 | 2018年4月 | - 修正了成員聲明驗證、非通配符重定向以及Args子類生成器中的內部錯誤的錯誤
|
0.7.7 | 2018年3月 | - 修正了使用意外記錄器配置運行時處理 INIT 階段的日誌訊息觸發器和錯誤的問題
- 在修改常數處理程序中加入無效切片點和縮小轉換的警告
|
0.7.6 | 2017年11月 | |
0.7.5 | 2017年10月 | |
0.7.4 | 2017年9月 | - 新增了@Dynamic註釋,用於使用動態注入的目標來裝飾 mixin 元素。
|
0.7.3 | 2017年8月 | - 內部更改以支援 modlauncher 和 java 9
|
0.7.2 | 2017年8月 | |
0.7.1 | 2017年8月 | - 對 Mixin AP 的修復和改進,修復多維數組的處理以及解析混淆類別的派生類型的超類別中的方法
- 新增運行時 refmap 重新映射以支援使用具有不同映射版本的 deobfCompile 依賴項。
|
0.7 | 2017年7月 | - 所有官方二進位檔案現已簽名
- 升級到ASM 5.2
- 在 Mixins 中加入對內部類別的支持
- 注入器現在可以有多個明確目標
- @At註解現在可以有自己的id
- 增加對在非混淆方法上使用@Overwrite的支持,作為驗證覆蓋目標是否存在的一種方式
- 改進合成橋的支持,檢測衝突的橋方法
- 偵測並警告 At.Shift.BY 值過高
- ModifyConstant現在可以支援多個切片
- 添加允許噴油器以檢測過度噴射
|
0.6.15 | 2017年7月 | - 在ModifyConstant中加入對多個常量的支持
- 加入CONSTANT作為通用注入點
- 添加對在字段重定向器中重定向數組長度訪問的支持
|
0.6.14 | 2017年7月 | - 新增對回調注入器中引用型別使用@Coerce 的支持,以支援衍生型別。
|
0.6.13 | 2017年7月 | - 增加對覆蓋方法的一致性可見性的支持,以匹配目標類別。修正了目標類別方法已被Access Transformer修改為具有更高可見性的問題
|
0.6.12 | 2017年6月 | - 將切片參數加入@ModifyConstant
- 新增@ModifyArgs注入器,它可以使用單一處理程序更改多個方法來呼叫參數。
|
0.6.11 | 2017年6月 | - 修復當同一唯一方法存在於多個針對相同類別的 mixin 中時對@Unique的處理
- 修復合併 lambda 的處理,以便當目標類別中已存在 lambda 時(在原始類別中以及由早期 mixins 應用時),可以正確應用來自 mixin 的 lambda
|
0.6.10 | 2017年5月 | - (0.6.9) 小修復以消除對已棄用助手的依賴
- 尊重 Mixin 上包含的@At的重新映射
- 要求在呼叫超級控制器之前發生的重定向器是靜態的
|
0.6.8 | 2017年2月 | - 允許@ModifyConstant在比較中掛鉤隱式零
|
0.6.7 | 2017年1月 | |
0.6.6 | 2017年1月 | - 在 Java 8 及更高版本中允許存取器混入中的靜態方法
|
0.6.5 | 2017年1月 | |
0.6.4 | 2017年1月 | |
0.6.3 | 2016年12月 | |
0.6.2 | 2016年12月 | - 增加對@Pseudo(虛擬目標)mixin 的支持
|
0.6.1 | 2016年11月 | |
0.6 | 2016年10月 | |
17.0.5 | 2016年10月 | - 允許 @Redirect 注入器針對建構函式重定向的新操作碼
|
0.5.16 | 2016年10月 | - 註解處理器改進。支援多目標混合中的陰影和覆蓋
- 支援AP中的可插拔混淆環境
|
0.5.14 | 2016年9月 | |
0.5.13 | 2016年9月 | |
0.5.10 | 2016年6月 | |
0.5.9 | 2016年6月 | |
0.5.8 | 2016年6月 | |
0.5.7 | 2016年6月 | |
0.5.6 | 2016年5月 | |
0.5.5 | 2016年4月 | - 新增@ModifyConstant注入器
- 新增@Debug註解
- 在實例方法中允許靜態 @ModifyArg 處理程序
|
0.5.4 | 2016年4月 | |
0.5.3 | 2016年2月 | - 符合噴油器
- 如果代理程式處於活動狀態,則自動啟用熱交換程序
- 修復註解處理器中泛型的多個問題
|
0.5.2 | 2016年2月 | |
0.5.1 | 2016年2月 | - 檢修注入器,所有 mixin 中的注入器現在都會在實際處理任何注入器之前進行掃描。使注射器更具確定性。
|
0.4.19 | 2016年2月 | |
0.4.18 | 2016年2月 | |
0.4.17 | 2016年1月 | - 支援註解處理器中的 ExtraSRG
- 在參考圖中包含構造函數
- 新增@Mutable註解以抑制@Final警告
|
0.4.15 | 2016年1月 | |
0.4.14 | 2016年1月 | |
0.4.13 | 2016年1月 | |
0.4.11 | 2016年1月 | |
0.4.10 | 2015年12月 | - 使用 RemapperChain 的運行時重新映射支援
- 忽略用 @Resource 修飾的類別變壓器
- 支援@reason 和@author 驗證覆蓋
|
0.4.8 | 2015年12月 | - 改進註解處理器以支援 MixinGradle
- 支援 refmap 中的多個目標混淆環境
|
0.4.6 | 2015年9月 | - 新增 INIT 階段以處理早期 FML 啟動
- 在 mixin 中加入對 lambda 的支持
- 添加對 mixins 中熱代碼替換的支持
- 改進 Java 8 功能支持
|
0.4.4 | 2015年7月 | |
0.4.3 | 2015年5月 | - 新增INVOKE_ASSIGN注入點
- 支援不帶參數的注入器回調
- 支援回調中協變參數類型的強制
- 支援截斷本機擷取注入器處理程序
- 使用 fernflower 對導出類別進行運行時反編譯
- 新增匯出過濾器
|
0.4 | 2015年5月 | |
0.3.2 | 2015年4月 | |
0.3.1 | 2015年4月 | |
0.3 | 2015年3月 | |
0.2 | 2015年3月 | - 新增了 supermixin 支援(從其他 mixins 繼承的 mixins)
|
0.1 | 2015年1月 | |