- Mixin, Minecraft'ın derlenmiş sınıflarını yükleme zamanında yamalayan bir Java kütüphanesidir.
- Mod'lar, kodun enjekte edileceği yeri tanımlar, dosyanın nasıl göründüğünü değil, böylece yamalar oyun güncellemelerinden kurtulur.
- Fabric, Mixin üzerine inşa edilmiştir ve sınıf yükleme sırasında her modun mixin'lerini uygular.
- Mixin'i asla kendiniz yüklemezsiniz; yükleyici onu paketler.
Mixin, bir Java kütüphanesidir ve oyun yüklendiği sırada bir modun Minecraft'ın derlenmiş sınıflarını düzenlemesine olanak tanır, orijinal kaynağı düzenlemeden. Mod'lar, "bu oyun metodunun bu noktasında bu kodu ekleyin" diyen küçük sınıflar yazar ve Mixin, bunları çalışma zamanında bytecode'a işler. Fabric bunu temel modlama mekanizması olarak kullanır.
Opal Nerede Çalışır
Opal bir Fabric modudur, bu nedenle arka planda Mixin üzerine kuruludur. Mixin'i kendiniz yüklemenize gerek yoktur; kurulum rehberi Opal ve Fabric'in çalıştırılmasını içerir.
Mixin Nasıl Çalışır
Mixin, sınıfları derledikten sonra ancak JVM tarafından çalıştırılmadan önce düzenler. Bir mod, gerçek bir oyun sınıfını hedefleyen bir mixin sınıfı gönderir. Bu sınıf üzerindeki işaretlemeler, enjekte edilecek kodun nereye gideceğini belirtir: bir metodun başlangıcı, sonu, belirli bir metod çağrısı veya bir dönüş değeri. Minecraft hedef sınıfı yüklediğinde, Mixin, modun kodunu eklemek için bytecode'unu yeniden yazar.
Bunun nedeni, Minecraft genişletmek için tasarlanmamış olmasıdır. Oyunun çoğu davranış için resmi eklenti noktaları bulunmamaktadır. Mixin, derlenmiş oyunu bir uzatma yüzeyi olarak ele alarak modlara bir yol sunar.
Neden Modlar Oyunu Düzenlemek Yerine Bunu Kullanır
İki neden: uyumluluk ve güncellemeler.
Oyunun kaynak kodunu doğrudan düzenlemek, herkesin üzerine inşa edemeyeceği ve oyun güncellendiği anda bozulacak olan değiştirilmiş bir kopyanın gönderilmesi anlamına gelir. Mixin yamaları küçük ve cerrahi müdahalelerdir, bu nedenle birçok mod aynı oyunu değiştirebilir ve her biri tam bir çatallağa ihtiyaç duymadan bunu yapabilir.
Yamalar, dosyanın nasıl göründüğünü değil, enjekte etme yerini tanımladığından, bir sürüm versiyonuna karşı yazılan bir mixin, hedef metod hala mevcut olduğu sürece bir oyun güncellemesinden sonra bile genellikle geçerliliğini korur.
Fabric ile İlişkisi
Fabric, Mixin üzerine inşa edilmiştir. Yükleyici, her bir modun mixin yapılandırmasını okur ve ardından listelenen mixin sınıflarını, sınıf yükleme sırasında uygulanmaları için Mixin'e iletir. Tipik bir Fabric modu, çoğunlukla kendi sınıfları ve değiştirmek istediği birkaç oyun yöntemine müdahale eden birkaç mixinden oluşur.
Yaygın enjeksiyon noktaları
| Açıklama | Ne yapar |
|---|---|
@Inject | Kodunuzu hedef yöntemin içindeki seçilen bir noktada çalıştırır |
@Redirect | Hedef içindeki belirli bir yöntem çağrısını değiştirir |
@ModifyArg | Hedef içindeki bir çağrıya iletilen bir argümanı değiştirir |
@ModifyVariable | Yöntem ortasında yerel bir değişkeni yeniden yazar |
@Overwrite | Tüm bir yöntemi değiştirir (son çare; kolayca bozulur) |
@Inject, en az müdahaleci ve bir oyun güncellemesinden kurtulma olasılığı en yüksek olduğu için varsayılan araçtır. @Overwrite ise aynı yönteme dokunan diğer modlarla çakıştığı için kaçınılmalıdır.
SSS
Hayır. Mixin, modların üzerine inşa edildiği bir kütüphanedir. Tek başına kurmazsınız; Fabric gibi bir yükleyici, onu paketler ve modlarınızın sağladığı mixin'leri uygular.
Hayır. Yamalar, sınıflar yüklendiğinde bellekte gerçekleşir. Disk üzerindeki dosyalar bozulmadan kalır, bu nedenle bir modu temiz bir şekilde kaldırmak değişikliklerini ortadan kaldırır.
Eğer her iki mod da aynı metodu uyumsuz şekillerde, özellikle de @Overwrite ile yamalıyorsa, biri diğerini iptal edebilir veya bozabilir. İyi yazılmış mixin'ler, birbirlerinin önüne geçmemek için dar enjeksiyon noktaları kullanır.
Hayır. Mixin genel bir Java bytecode çerçevesidir, ancak Minecraft modlamada en çok kullanıldığı yerdir ve Fabric tarafından benimsenmesi, orada standart olmasını sağladı.