Plugin Mixins

Les Mixins peuvent être utilisés pour modifier des classes au runtime avant qu’elles ne soient chargées. Vous pouvez les utiliser dans les plugins si vous voulez optimiser une partie du jeu spécifiquement pour votre serveur - sans avoir à faire un fork de Sponge. Les modifications seront regroupées directement avec votre plugin et seront seulement actives tant que le plugin sera chargé.

Voir aussi

Documentation des Mixins

La documentation des Mixins inclue une introduction aux Mixins.

Plugin Exemple

Plugin d’exemple qui utilise les Plugin Mixins pour afficher un message lorsque le serveur démarre.

Réglages

  1. Ajoutez la librairie Mixin comme dépendance à votre plugin :

    dependencies {
        compile 'org.spongepowered:mixin:0.7.11-SNAPSHOT'
    }
    
  2. Ajoutez une nouvelle configuration de Mixin à votre plugin, exemple mixins.myplugin.json dans votre dossier ressources :

    {
        "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. Ajoutez une classeM ixin au package spécifié :

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

Debugging

Normalement, la configuration Mixin est enregistré à l’intérieur du manifeste du JAR du plugin. Puisque le plugin n’est pas mis dans un JAR lors du debugging à l’intérieur de l’IDE vous devez spécifier les Mixins à appliquer avec une option de ligne de commande :

  1. Ajoutez une option --mixin <mixin config file name> pour chaque fichier de configuration Mixin dans les arguments du programme de votre configuration de démarrage :

    --mixin mixins.myplugin.json
    

Production

Si votre Mixin fonctionne dans votre environnement de développement, vous devrez quand même faire quelques modifications pour le faire fonctionner en production :

  1. Appliquez le plugin MixinGradle à votre script de build :

    buildscript {
        repositories {
            maven {
                name = 'sponge'
                url = 'https://repo.spongepowered.org/maven'
            }
        }
        dependencies {
            classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT'
        }
    }
    
    apply plugin: 'org.spongepowered.mixin'
    
  2. Définissez la refmap depuis votre configuration Mixin :

    sourceSets {
        main {
            ext.refMap = "mixins.myplugin.refmap.json"
        }
    }
    
  3. Ajoutez votre configuration Mixin au manifeste du JAR. L’entrée manifeste FMLCorePluginContainsFMLMod est nécessaire si vous voulez charger votre Mixin sur SpongeForge :

    jar {
        manifest.attributes(
            'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker',
            'MixinConfigs': 'mixins.myplugin.json',
            'FMLCorePluginContainsFMLMod': 'true',
        )
    }
    
  4. Assurez-vous de re-build le plugin en utilisant Gradle. Le Mixin devrait maintenant être appliqué par SpongeVanilla et SpongeForge.

    gradle clean build