Mixins

Not

Bu sayfa, SpongeCommon, SpongeForge ve SpongeVanilla için geçerlidir, çünkü bu üç depo, temel uygulamalara (Vanilla Minecraft sunucusu ve Forge) bağlanmak için Mixins kullanmaktadır.

Mixins, sınıflara ek davranış ekleyerek çalışma zamanında java kodunu değiştirmenin bir yoludur. Mevcut Minecraft nesnelerine istenilenin yapılmasını sağlarlar. Mixins, tüm resmi Sponge uygulamalarının çalışması için gereklidir.

Sponge uygulamalarında kullandığımız mixin işlevselliğini destekleyen temel kavramların bazılarına`Mixin Wiki’de <https://github.com/SpongePowered/Mixin/wiki/>` __ adresinde bulunabilir

It starts with absolute basics. If you’re an experienced java developer, feel free to skip to section 4, where the mixins themselves are actually discussed.

Mixin’leri yazmaya başlamak istiyorsanız, `SpongeForge deposu<https://github.com/SpongePowered/SpongeCommon/tree/stable-5/src/example/java’daki tüm örnekleri de dikkatlice incelemenizi öneririz. / org / spongepowered> `__ bunlar kapsamlı olarak belgelenmiştir ve daha karmaşık senaryoların çoğunu kapsar. Ayrıca, hemen hemen her şey zaten belgelenmiş olduğundan, Mixin deposunun Javadoc’una da bakmalısınız.

** Uyarı: Mixins’e katkıda bulunduğunuzda, ne anonymous classes ne de lambda ifadelerini kullanamayacağınızı unutmayın. **

Bunun anlamı mixinlerin çok hatalı ve Sponge kullanmak için yapılan tüm işlemlerin başarısız olmasına neden olacaktır.

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;

Bu, `` @ Mixin`` ile açıklanan tüm sınıflar için geçerlidir. Mixin işlemcisi tarafından dokunulmamış sınıflar bu özellikler için kullanabilir. Bununla birlikte, mixin sınıfınız belirtilen hedef sınıfına birleştirilirken, anonim sınıflarınızı oluşturmak için statik bir yardımcı program sınıfı kullanabilirsiniz, çünkü mixin sınıfının aksine, program sınıfı hala çalışma zamanında mevcut olacaktır. Bu nedenle aşağıdaki kod çalışacaktır.

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);
    }
}

Not

Mixin projesi, Sponge’un yanı sıra başka projeye hizmet edecek. Dolayısıyla Mixin, depo ile birlikte kendi dökümanlarına sahiptir.