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.

Mixins yazmaya başlamak istiyorsanız, `SpongeCommon deposunda <https://github.com/SpongePowered/SpongeCommon/tree/stable-6/src/example/java sayfasındaki tüm örnekleri dikkatlice incelemenizi öneririz / org / spongepowered> `__ ve bunlar kapsamlı olarak derlenmiş ve daha karmaşık senaryoları kapsar. Ayrıca, hemen hemen her şey zaten derlenmiş 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.