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.

If you’re looking to get started writing mixins, we also strongly recommend carefully examining all of the examples in the SpongeForge repository which are extensively documented and cover many of the more complex scenarios. You should also consult the Javadoc of the Mixin repository itself, since almost everything is already documented.

** 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,