Lier mon mod avec quelques plugins



  • Bonjour,
    En développement d'un mod pour mon serveur KCauldron en 1.7.10, j'aimerais savoir si il est possible (même en sachant que cela est possible) et comment fait-on pour lier mon mod avec certains plugins.

    Je m'explique, j'ai créé une interface pour permettre aux joueurs de voir certaines informations à leur sujet (ex: Argent, Metier, Faction, etc…).
    En recherchant su internet en français puis en anglais, je n'ai malheureusement trouvé aucun indice qui pourrait m'aider.
    C'est pour cela que je me tourne vers vous en espérant de l'aide  🙂

    Est-il possible d'utiliser une variable d'un de ces plugins et l'afficher comme je le voudrais.

    Merci de votre compréhension.
    Quentin.

    Un aperçu de l'interface:



  • Côté client ou serveur pour le mod ?


  • Administrateurs

    Salut,
    Côté serveur il faudrait que tu obtiennes la valeur des variables en utilisant de la réflexion. Ensuite tu envoies avec un paquet au client les valeurs pour les afficher dans ton gui.



  • Merci de vos réponses 🙂

    Le mod est coté client et serveur, je vais essayer de faire ce que tu me dit mais je ne savais pas comment je pouvais faire pour prendre des variables de plugins qui ne sont pas de moi comme iConomy, au début j'avais pensé aux packets mais le problème est toujours le même, trouver et utiliser les variables ^^

    J'ai pensé à faire un plugin qui récupère les variables de iConomy, etc … et à les envoyer, dans un fichier que le mod pourrait utiliser par exemple, ou une autre façon 🙂

    Merci 🙂



  • Alors j'ai longuement réfléchi après une journée de recherche, je n'arrive pas à envoyer de paquet à partir du plugin que j'ai fais ^^ J'ai regarder les tutos de forge sur les packets car je n'avais aucunes idées comment il fallait faire, j'ai laisser tomber l'idée mais aimerais quand même savoir comment on fait pour envoyer le packet depuis mon plugin et qu'il soit intercepté par le mod.

    Alors je vous remercie d'avance si vous voulez bien m'aider 🙂



  • Si ton plugin utilise le même système que fml pour envoyer des messages, tu as juste as enregistré le channel de la même façon



  • @'SCAREX':

    Si ton plugin utilise le même système que fml pour envoyer des messages, tu as juste as enregistré le channel de la même façon

    D'accord je ne savais pas, le plugin est fait de la même manière qu'un simple plugin Bukkit ou Spigot 🙂
    Donc je vais chercher un peu plus sur une manière possible FML d'envoyer un packet par le plugin 🙂



  • Bonjour,
    Ayant résolu le problème et oublié de le signaler sur ce post, je donne la solution pour quiconque en aurait besoin.

    Il s'avère que la réponse est très simple pour communiquer entre le client et le serveur via des paquets (code exemple ci-dessous).

    Il y a un tutoriel sur ce forum ici : https://www.minecraftforgefrance.fr/showthread.php?tid=1118

    Créer la classe du paquet
    Code exemple acquis sur : http://www.minecraftforge.net/forum/topic/19932-using-the-simple-network-implementation-simplenetworkwrapper-17/

    public class MyMessage implements IMessage {
    
       private String text;
    
       public MyMessage() { }
    
       public MyMessage(String text) {
           this.text = text;
       }
    
       @Override
       public void fromBytes(ByteBuf buf) {
           text = ByteBufUtils.readUTF8String(buf); // this class is very useful in general for writing more complex objects
       }
    
       @Override
       public void toBytes(ByteBuf buf) {
           ByteBufUtils.writeUTF8String(buf, text);
       }
    
       public static class Handler implements IMessageHandler <mymessage, imessage="">{
    
           @Override
           public IMessage onMessage(MyMessage message, MessageContext ctx) {
               System.out.println(String.format("Received %s from %s", message.text, ctx.getServerHandler().playerEntity.getDisplayName()));
               return null; // no response in this case
           }
       }
    }
    

    Comment ça marche

    @Override
       public void fromBytes(ByteBuf buf) {
           text = ByteBufUtils.readUTF8String(buf); // this class is very useful in general for writing more complex objects
       }
    
       @Override
       public void toBytes(ByteBuf buf) {
           ByteBufUtils.writeUTF8String(buf, text);
       }
    

    La fonction ***fromBytes ***a pour rôle de lire les données du paquet, lorsque qu'il est reçu par le (serveur ou client) et la fonction ***to******Bytes ***a pour rôle d'écrire les données dans le paquet.
    Attention : vous devez mettre le même ordre dans les données quand vous les écrivez c'est très important, exemple:

    @Override
       public void fromBytes(ByteBuf buf) {
           text = ByteBufUtils.readUTF8String(buf); //text est en premier dans la reception du paquet
           unAutreTexte = readUTF8String(buf); //unAutreTexte est en deuxieme
       }
    
       @Override
       public void toBytes(ByteBuf buf) {
           ByteBufUtils.writeUTF8String(buf, text); //text est en premier dans l'ecriture !!
           ByteBufUtils.writeUTF8String(buf, unAutreTexte); //unAutreTexte est toujours deuxieme ici aussi
       }
    

    Pour donner un exemple plus compréhensible, c'est comme si je vous envoie des objets et que vous deviez les attraper.
    Exemple :
    Je vous envoie une balle bleue puis une balle rouge.
    Vous attraper la balle bleue en premier puis la rouge en deuxième.
    Envoyer le paquet au serveur

    classePrincipaleDuMod.network.sendToServer(new MyMessage("Mon super message!"));
    

    La reception du paquet

    public static class Handler implements IMessageHandler <mymessage, imessage="">{
    
           @Override
           public IMessage onMessage(MyMessage message, MessageContext ctx) {
               System.out.println(String.format("Received %s from %s", message.text, ctx.getServerHandler().playerEntity.getDisplayName()));
               return null; // no response in this case
           }
       }
    

    Dans la fonction onMessage, on reçoit un **message **et le **contexte **de réception de ce message.

    Le **message **est tout simplement le contenu de votre paquet et le **contexte **est en général (à ce que j'ai compris) l'objet qui vous permet de traiter ce message comme bon vous semble.
    Exemple :

    @Override
    public IMessage onMessage(MS_PacketTitleClient message, MessageContext ctx) {
        if(ctx.side.isClient()){
             System.out.println("Message reçu côté client");    
       }
        return null;
    }
    

    En espérant que ce soit LA réponse que vous cherchiez.</mymessage,></mymessage,>


  • Administrateurs

    Il y a aussi un tutoriel sur les packets sur notre forum 😉
    Passes en résolu avec le bouton ^^



  • @'robin4002':

    Il y a aussi un tutoriel sur les packets sur notre forum 😉
    Passes en résolu avec le bouton ^^

    Pas de soucis j'allais le faire ahah !