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 mencari untuk memulai menulis mixin, kami juga sangat menyarankan hati-hati memeriksa semua contoh-contoh di SpongeForge repositori yang secara luas didokumentasikan dan mencakup banyak skenario yang lebih kompleks. Anda juga harus berkonsultasi dengan Javadoc dari Mixin repositori itu sendiri, karena hampir semuanya sudah terdokumentasi.

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.