Mixin

Catatan

Halaman ini berlaku untuk SpongeCommon, SpongeForge, dan SpongeVanilla sebagai tiga repositori menggunakan Mixin untuk menghubungkan ke yang mendasari implementasi (Vanilla Minecraft server dan Menempa).

Mixin cara memodifikasi kode java pada saat runtime dengan menambahkan tambahan perilaku kelas. Mereka memungkinkan tanam dimaksudkan perilaku yang sudah ada Minecraft benda-benda. Mixin yang diperlukan untuk semua resmi Spons untuk implementasi fungsi.

Pengenalan dasar beberapa konsep inti yang mendasari fungsi mixin yang kami gunakan untuk menjalankan Sponge tersedia di`Mixin Wiki <https://github.com/SpongePowered/Mixin/wiki/>`_

dimulai dengan dasar-dasar yang mutlak. Jika anda seorang pengembang java yang berpengalaman, silahkan menuju kebagian 4, dimana mixin itu sendiri dibahas.

Jika anda ingin memulai menuliskan mixins, kami juga sangat merekomendasikan untuk secara hati-hati memeriksa seluruh contoh yang ada di SpongeCommon repository yang didokimentasikan secara luas dan mencakup lebih banyak skenario yang rumit. Anda seharusnya juga mengkonsultasikan Javadoc of the Mixin repositori itu sendiri, karena hampir semua telah didokumentasikan.

Peringatan: Saat menyumbang mixin, perhatikan bahwa anda tidak dapat menggunakan kelas anonim ataupun ekpresi lambda,

Ini berarti ungkapan seperti berikut ini akan menyebabkan mixin gagal dan membawa ke kematian dan kehancuran atas semua yang mencoba menggunakan sponge.

return new Predicate<ItemStack>() {
    @Override
    public boolean test(ItemStack input) {
        return input.getItem().equals(Items.golden_apple);
    }
}
return input -> input.getItem().equals(Items.golden_apple);
return this::checkItem;

Ini diterapkan pada semua kelas beranotasi dengan ''@Mixin''. Kelas itu tidak tersentuh oleh prosesor mixin mungkin menjadikan menggunakan fitur itu. Namun, kamu bisa menggunakan kelas utilitas statis untuk membuat kelas anonim kamu, karena tidak seperti kelas utilitas kamu bahwa kelas utilitas akan tetap ada pada runtime. sedangkan kelas mixin anda akan tergabung ke dalam kelas target yang ditentukan. karena itu kode pengikut akan bekerja.

public class ItemUtil {
    public static Predicate<ItemStack> typeChecker(final Item item) {
        return new Predicate<ItemStack>() {
            @Override
            public boolean test(ItemStack input) {
                return input.getItem().equals(item);
            }
        }
    }
}

@Mixin(TargetClass.class)
public abstract class SomeMixin {
    public Predicate<ItemStack> someFunction() {
        return ItemUtil.typeChecker(Items.golden_apple);
    }
}

Catatan

Proyek mixin akan melayani sejumlah proyek lain selain sponge sendiri, oleh karena itu mixin memiliki dokumentasi sendiri bersama dengan repositori.