Mixins

Nota

Esta página aplica para SpongeCommon, SpongeForge y SpongeVanilla estos tres repositorios utilizan Mixins para enlazarse con las implementaciones subyacentes (Vanilla Minecraft server and Forge).

Mixins son una manera de modificar códigos de Java en tiempo de ejecución añadiendo comportamiento adicional a las clases. Ellos permiten transplante del comportamiento previsto dentro de los objetivos de Minecraft existentes. Mixins son necesarios para poder funcionar todas las implementaciones oficiales de Sponge.

Una introducción básica a algunos de los conceptos fundamentales que sustentan la función de Mixin que nosotros usamos para implementar Sponge esta disponible en el Mixin Wiki

Comienza con los aspectos más básicos. Si usted es un desarrollador de Java experimentado, siéntase libre de ir directamente hacia la sección 4, en la cual se tratan las combinaciones.

Si está buscando comenzar a escribir mixins, también recomendamos encarecidamente examinar todos los ejemplos en el repositorio `SpongeCommon <https://github.com/SpongePowered/SpongeCommon/tree/stable-6/src/example/java / org / spongepowered> `__ en el cual están ampliamente documentados y cubren muchos de los escenarios más complejos. También debe consultar el Javadoc del repositorio de Mixin, ya que, casi todo está documentado.

Advertencia: Durante la contribución de mixins, recuerde que no puede usar ni clases anónimas ni expresiones lambda.

Esto significa expresiones como las siguientes que causaran mixins a fallar horriblemente y traer muerte y destrucción a todos los que intenten utilizar 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;

Esto aplica a todas las clases que están anotadas con “@Combinaciones”. Las clases que no están tratadas por el procesador de combinaciones, pueden hacer uso de esas herramientas. De todas maneras, puede usar una clase estable de utilidad para crear sus propias clases anónimas; a diferencia de su clase de combinación, esa clase de utilidad seguirá existiendo durante el tiempo de ejecución, mientras su clase de combinación será incorporada a la clase especificada como objetivo. El siguiente código servirá para ello.

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

Nota

El proyecto Mixin estará al servicio de otros proyectos además de Sponge. Por lo tanto Mixin tiene su propia documentación junto al repositorio.