Annotated 2



  • Logo Annotated

    Introduction

    Annotated (anciennement appelé Packeta) c'est un outil de développement pour les mods Forge (plus exactement un annotation processor) qui va créer du code à votre place. Son but est de simplifier le plus possible la création de packets tout en minimisant les données transférées. Annotated fonctionne directement dans votre IDE et génère le code nécessaire à chaque sauvegarde.

    Fonctionnement

    Le principe est simple :

    Tout d'abord, il faut créer un réseau de packets.
    Pour cela, il suffit de créer une classe et d'y ajouter une annotation de canal :

    • L'annotation @GenerateChannel crée un nouveau canal avec le nom et la version choisie.
    • L'annotation @DelegateChannel va réutiliser le canal définit dans la classe de network choisie.

    Pour créer un packet, il faut créer la fonction que vous voulez appeler à la réception du packet (équivalent au handler des packets classiques).
    Il faut ensuite l'annoter avec @ClientPacket si la fonction doit être exécutée côté client ou @ServerPacket si elle doit être exécutée côté serveur.

    Une classe pour la packet est alors automatiquement générée est enregistré dans le réseau. La classe contient la méthode send qui prend en paramètre une cible et des arguments. Cette fonction permet d'envoyer le packet à la cible. Quand le packet est reçu, la fonction annotée va être appelée avec les arguments passés à send.
    Il y a également les fonctions sendTo pour envoyer un packet à un seul joueur et sendToServer pour envoyer le packet au serveur.

    Certains types en paramètre de la fonction annotée ont une signification particulière, ils ne seront pas nécessaires dans la fonction send et une valeur est automatiquement assignée au paramètre :

    • ServerPlayerEntity : le joueur qui a envoyé le packet
    • NetworkEvent.Context : le contexte du packet

    Voici un exemple d'utilisation de Annotated :

    Code de la classe du réseau :

    @GenerateChannel(protocolVersion = "1", channelName = MyMod.MOD_ID + ":example")
    public class Example
    {
    	@ServerPacket
    	public static void loveItem(ItemStack stack, String comment, ServerPlayerEntity sender)
    	{
            // Exécuté coté serveur
    		sender.sendMessage(new StringTextComponent("You love the item " + stack.getDisplayName().getString() + " : " + comment));
            
            //TODO Save loved items in a database
    	}
    }
    

    Utilisation du packet généré :

    // Exécuté coté client
    Example_loveItem.sendToServer(new ItemStack(Items.GOLD_INGOT), "It looks like butter");
    

    Installation

    La version 2.0 de Annotated est uniquement disponible pour minecraft 1.15.x.

    Configuration de gradle

    • Ajoutez le dépôt JitPack dans le fichier build.gradle :
    repositories {
        maven {
            name = 'JitPack'
            url = 'https://jitpack.io'
        }
    }
    
    • Ajoutez Annotated à vos dépendances :
    compileOnly 'com.github.LeBossMax2:Annotated:MC1.15.2-v2.0'
    annotationProcessor 'com.github.LeBossMax2:Annotated:MC1.15.2-v2.0'
    
    • Ajouter les bibliothèques de Minecraft au chemin d'accès de l'annotation processor :
    configurations {
        annotationProcessor.extendsFrom minecraft
    }
    

    Configuration spécifique pour Eclipse

    • Pour Eclipse, en plus de la configuration précédente, il est recommandé d'utiliser le plugin net.ltgt.apt-eclipse pour configurer correctement Eclipse :
    plugins {
        id 'net.ltgt.apt-eclipse' version '0.21'
    }
    
    • Il faut configurer le chemin de sortie de l'annotation processor de la manière suivante :
    eclipse {
    	jdt.apt.genSrcDir = file('src/generated/java') // Définit le chemin où le code sera généré (optionnel)
    	classpath.file.whenMerged {
            entries.findAll { it.kind == 'output' } *.path = 'bin/main' // Définit le chemin de compilation du code généré pour être accessible dans Forge
        }	
    }
    
    • Enfin, lancez la commande ./gradlew eclipse pour configurer Eclipse de manière à utiliser l'annotation processor.

    Liens


Log in to reply