Jak działa Mixins?

Informacja

Niniejsza publikacja dotyczy SpongeCommon, SpongeForge, oraz SpongeVanilla jako to, że wszystkie trzy wykorzystują zaczep udostępniony przez oprogramowanie Mixin do podstawowej implementacji (Vanilla Minecraft serwer i Forge).

Mixin jest metodą modyfikacji kodu Java podczas jego działania poprzez uruchomienie dodatkowych Eventów. Umożliwiają one włączenie do Sponge istniejących już funkcji i obiektów w Minecraft. Mixins jest niezbędne do poprawnego działania modyfikacji Sponge.

Podstawowe objaśnienie koncepcji, która wspiera podstawową funkcjonalność w Sponge jest dostępna na Mixin Wiki

Zaczyna się od zupełnych podstaw. Jeśli jesteś zaawansowanym deweloperem Java, spokojnie możesz przejść do sekcji 4, gdzie Mixins zaczynają być dokładnie omawiane.

Jeśli chcesz zacząć pisać Mixins, naprawdę zalecamy zapoznać się ze wszystkimi przykładami w Repozytorium Sponge które są tam dokładnie opisane i pokrywają się z wieloma możliwymi scenariuszami. Powinieneś także zapoznać się z Javadoc, które znajduje się w repozytorium Mixin, gdyż prawie wszystko mamy już opisane.

** Zastrzeżenie: Przyczyniając się do tworzenia Mixiny należy pamiętać, że nie można używać ani anonimowych klas ani dodatków lambda.**

Oznacza to, że wyrażenia podobne do tych poniżej spowodują problem z Mixiny. Sprowadzą śmierć i zniszczenie dlatego będzie trzeba użyć gąbki (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;

Dotyczy to wszystkich klas, które są opisane z @Mixin. Klasy, które nie korzystają z mixin mogą wciąż korzystać z tych funkcji. Jednak można użyć klasy statycznej , aby stworzyć anonimowąklase, jak w przeciwieństwie do mixin klasy utility będzie nadal istniała w momencie wykonywania, podczas gdy klasy mixin zoistaną połączone w klasy określone obiektem jako miejsce docelowe. Następujący kod powinien działać według przedstawionej reguły:

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

Informacja

Projekt Mixin będzie obsługiwał inne projekty, nie tylko Sponge. Dlatego też, Mixin ma własną dokumentację razem z oddzielnym repozytorium,