Complementos de Mixins

Advertencia

These docs were written for SpongeAPI 7 and are likely out of date. If you feel like you can help update them, please submit a PR!

Los Mixins <https://github.com/SpongePowered/Mixin> _ se pueden usar para modificar clases en tiempo de ejecución antes de que se carguen. Puede usarlos en complementos si desea optimizar una parte del juego específicamente para su servidor, sin tener que bifurcar a Sponge. Las modificaciones se agruparán directamente con su complemento y solo estarán activas siempre que se cargue el complemento.

Ver también

La documentación de`Mixin <https://github.com/SpongePowered/Mixin/wiki>`_

Documentación de Mixin que incluye una introducción a los Mixins.

Plugin de ejemplo

Complemento de ejemplo que usa complementos de Mixins para publicar un mensaje cuando el servidor se está iniciando.

Configuración

  1. Añade la librería Mixin como una dependencia a tu complemento:

    dependencies {
        compile 'org.spongepowered:mixin:0.7.11-SNAPSHOT'
    }
    
  2. Añade una nueva configuración Mixin para tu complemento, por ejemplo mixins.myplugin.json dentro de tu carpeta de recursos:

    {
        "required": true,
        "minVersion": "0.7.10",
        "package": "com.example.myplugin.mixin",
        "refmap": "mixins.myplugin.refmap.json",
        "target": "@env(DEFAULT)",
        "compatibilityLevel": "JAVA_8",
        "mixins": [
            "MixinMinecraftServer"
        ]
    }
    
  3. Añade una clase Mixin al paquete especificado:

    package com.example.myplugin.mixin;
    
    import net.minecraft.server.MinecraftServer;
    import org.spongepowered.asm.mixin.Mixin;
    
    @Mixin(MinecraftServer.class)
    public abstract class MixinMinecraftServer {
    
    }
    

Depuración

Normalmente, la configuración de Mixin se registra dentro del manifiesto JAR del complemento. Dado que el complemento no está empaquetado en un JAR mientras se depura dentro del IDE, debes especificar los Mixins para aplicarlos como opciones de línea de comando:

  1. Añade una opción --mixin<mixin config file name> para cada archivo de configuración de Mixin a los argumentos del programa de tu configuración de ejecución:

    --mixin mixins.myplugin.json
    

Producción

Si su Combinación está funcionando en el ámbito del desarrollo, todavía deberá hacer algunos cambios para que pueda funcionar en producción:

  1. Aplica el complemento MixinGradle a tu script de desarrollo:

    buildscript {
        repositories {
            maven {
                name = 'sponge'
                url = 'https://repo.spongepowered.org/repository/maven-public/'
            }
        }
        dependencies {
            classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT'
        }
    }
    
    apply plugin: 'org.spongepowered.mixin'
    
  2. Establezca el mapa de referencia desde la configuración de su Mixin:

    sourceSets {
        main {
            ext.refMap = "mixins.myplugin.refmap.json"
        }
    }
    
  3. Añade tu configuración de Mixin al manifiesto JAR. La entrada del manifiesto FMLCorePluginContainsFMLMod es necesaria si quieres cargar tu Mixin en SpongeForge:

    jar {
        manifest.attributes(
            'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker',
            'MixinConfigs': 'mixins.myplugin.json',
            'FMLCorePluginContainsFMLMod': 'true',
        )
    }
    
  4. Asegúrate de reconstruir el complemento usando Gradle. El Mixin debería ser aplicado por SpongeVanilla y SpongeForge.

    gradle clean build