- Mixin è una libreria Java che applica patch alle classi compilate di Minecraft al momento del caricamento.
- I mod descrivono dove iniettare il codice, non l'aspetto del file, quindi le patch sopravvivono agli aggiornamenti del gioco.
- Fabric si basa su Mixin e applica i mixin di ciascun mod durante il caricamento delle classi.
- Non installi mai Mixin direttamente; il loader lo include.
Mixin è una libreria Java che consente a un mod di modificare le classi compilate di Minecraft durante il caricamento del gioco, senza modificare il codice sorgente originale. I mod scrivono piccole classi che indicano "aggiungi questo codice in questo punto in questo metodo di gioco", e Mixin le integra nel bytecode a runtime. Fabric lo utilizza come meccanismo di modding principale.
Dove si integra Opal
Opal è un mod per Fabric, quindi si basa su Mixin internamente. Non è necessario installare Mixin separatamente; la guida all'installazione spiega come far funzionare Opal e Fabric.
Come funziona Mixin
Mixin modifica le classi dopo la loro compilazione ma prima che la JVM le esegua. Una mod spedisce una classe Mixin che prende di mira una classe reale del gioco. Le annotazioni su quella classe indicano dove inserire il codice iniettato: l'inizio di un metodo, la fine, una specifica chiamata di metodo o un valore restituito. Quando Minecraft carica la classe di destinazione, Mixin riscrive il suo bytecode per inserire il codice della mod.
Questo è importante perché Minecraft non è progettato per essere esteso. Il gioco non ha punti di plugin ufficiali per la maggior parte dei comportamenti. Mixin offre alle mod un modo per entrare trattando il gioco compilato stesso come superficie di estensione.
Perché le mod lo usano invece di modificare il gioco
Ci sono due ragioni: compatibilità e aggiornamenti.
Modificare direttamente il codice sorgente del gioco significa spedire una copia modificata completa, su cui nessuno può costruire e che si rompe non appena il gioco viene aggiornato. Le patch di Mixin sono piccole e mirate, quindi molte mod possono patchare lo stesso gioco senza dover spedire ciascuna una fork completa.
Le patch descrivono anche dove iniettare piuttosto che come appare il file, quindi una mixin scritta per una versione spesso funziona ancora dopo un aggiornamento del gioco, a condizione che il metodo di destinazione esista ancora.
Come si integra con Fabric
Fabric è costruito su Mixin. Il loader legge la configurazione mixin di ogni mod, quindi passa le classi mixin elencate a Mixin affinché vengano applicate durante il caricamento delle classi. Una tipica mod Fabric è costituita principalmente dalle proprie classi più un numero limitato di mixin che agganciano i pochi metodi di gioco che deve modificare.
Punti di iniezione comuni
| Annotazione | Cosa fa |
|---|---|
@Inject | Esegue il tuo codice in un punto scelto all'interno di un metodo di destinazione |
@Redirect | Sostituisce una specifica chiamata di metodo all'interno del target |
@ModifyArg | Modifica un argomento passato a una chiamata all'interno del target |
@ModifyVariable | Riscrive una variabile locale a metà metodo |
@Overwrite | Sostituisce un intero metodo (ultima risorsa; si rompe facilmente) |
@Inject è lo strumento predefinito perché è il meno invasivo e il più probabile che sopravviva a un aggiornamento del gioco. @Overwrite è evitato perché entra in conflitto con qualsiasi altra mod che tocca lo stesso metodo.
FAQ
No. Mixin è una libreria con cui vengono creati i mod. Non lo installi separatamente; un loader come Fabric lo include e applica i mixin forniti dai tuoi mod.
No. Le patch avvengono in memoria durante il caricamento delle classi. I file su disco rimangono intatti, motivo per cui la rimozione di un mod elimina correttamente le sue modifiche.
Se entrambe modificano lo stesso metodo in modi incompatibili, soprattutto con @Overwrite, una può annullare o compromettere l'altra. I mixin ben scritti utilizzano punti di iniezione ristretti per evitare di interferire tra loro.
No. Mixin è un framework generale per bytecode Java, ma la modding di Minecraft è dove viene utilizzato più intensamente, e l'adozione da parte di Fabric ne ha fatto lo standard lì.