MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Affichage de capabilities

    Planifier Épinglé Verrouillé Déplacé Résolu 1.9.x et 1.10.x
    1.10.x
    29 Messages 2 Publieurs 3.8k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Jerem_TechJ Hors-ligne
      Jerem_Tech
      dernière édition par

      Salut ,

      J’ai donc fait les changements que tu m’a dit mais l’affichage ne fonctionne toujours pas ….
      On a 1 , la valeur par défaut …

      Cordialement ,

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002R Hors-ligne
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
        dernière édition par

        Ton paquet est bien enregistré ?
        Tu peux envoyer le code du paquet ?

        1 réponse Dernière réponse Répondre Citer 0
        • Jerem_TechJ Hors-ligne
          Jerem_Tech
          dernière édition par

          Oui il est bien enregistré et il retourne la bonne valeur .
          C’est uniquement le fait de devoir l’afficher qui pose problème car l’entityplayer de la fonction addinformation() c’est un entotyplayerSP et on a besoin d’un entityplayerMP ….

          Sinon voici le packet :

          [font=Courier Newpublic class ]PacketLevel implements IMessage
          {
          
            IDofusCraftLevels level%(#cc7832)[;
          ]
             public PacketLevel()
            {
            }
          
            public PacketLevel(IDofusCraftLevels level)
            {
               this.level = level%(#cc7832)[;
          ]   }
          
            %(#bbb529)[@Override
          ]   public void fromBytes(ByteBuf buf)
            {
               if(this.getLevel() != null)
               {
          
                  this.getLevel().setLevel(buf.readInt())%(#cc7832)[;
          ]
               }
            }
          
            %(#bbb529)[@Override
          ]   public void toBytes(ByteBuf buf)
            {
               if(this.getLevel() != null)
               {
          
                  buf.writeInt(this.getLevel().getLevel())%(#cc7832)[;
          ]
               }
            }
          
            public void setLevel(IDofusCraftLevels level)
            {
               this.level = level%(#cc7832)[;
          ]   }
          
            public  IDofusCraftLevels getLevel()
            {
               return this.level%(#cc7832)[;
          ]   }
          
            public static class PacketLevelHandlerClient implements IMessageHandler <packetlevel, imessage="">{
          
               %(#bbb529)[@Override
          ]      public IMessage onMessage(PacketLevel message, MessageContext ctx)
               {
          
                  IThreadListener thread = DofusCraftCore.*proxy*.getListener(ctx)%(#cc7832)[;
          ]         final EntityPlayer player = DofusCraftCore.*proxy*.getPlayer(ctx)%(#cc7832)[;
          ]         final IDofusCraftLevels value = message.getLevel()%(#cc7832)[;
          ]         thread.addScheduledTask(() -> {
                     if(player != null) {
                        IDofusCraftLevels capabilities = player.getCapability(DofusCraftLevelsProvider.*LEVEL_CAP*, null)%(#cc7832)[;
          ]               if(capabilities != null && value != null) {
                           capabilities.setLevel(value.getLevel())%(#cc7832)[;
          ]               }
                     }
                  })%(#cc7832)[;
          ]
          %(#cc7832)[         return null;
          ]      }
            }
          
            public static class PacketLevelHandlerServer implements IMessageHandler <packetlevel, imessage="">{
          
               %(#bbb529)[@Override
          ]      public IMessage onMessage(PacketLevel message, MessageContext ctx)
               {
                  IThreadListener thread = DofusCraftCore.*proxy*.getListener(ctx)%(#cc7832)[;
          ]         final EntityPlayer player = DofusCraftCore.*proxy*.getPlayer(ctx)%(#cc7832)[;
          ]         final IDofusCraftLevels value = message.getLevel()%(#cc7832)[;
          ]         thread.addScheduledTask(() -> {
                     if(player != null) {
                        IDofusCraftLevels capabilities = player.getCapability(DofusCraftLevelsProvider.*LEVEL_CAP*, null)%(#cc7832)[;
          ]               if(capabilities != null && value != null) {
                           capabilities.setLevel(value.getLevel())%(#cc7832)[;
          ]               }
                     }
                  })%(#cc7832)[;
          ]%(#cc7832)[         return null;
          ]      }
            }
          
          }
          
          

          Cordialement ,</packetlevel%(#cc7832)[,></packetlevel%(#cc7832)[,>

          1 réponse Dernière réponse Répondre Citer 0
          • robin4002R Hors-ligne
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
            dernière édition par

            Non tu n’as pas besoin d’un entityplayerMP pour afficher la valeur d’une capability.
            Je le fais dans plusieurs de mes mods sans problème.

            La synchro coince quelque part, mais je ne vois pas où car ton code est correcte (du moins pour les classes que j’ai vu).
            Vérifies que toutes les fonctions sont bien un appelé (avec le débogguer + point d’arrêt, il faut vérifier toute la chaine, envoie du paquet, réception par le client, modification de la valeur de la capa sur le client)

            1 réponse Dernière réponse Répondre Citer 0
            • Jerem_TechJ Hors-ligne
              Jerem_Tech
              dernière édition par

              C’est la modification de la capa côté client qui ne fonctionne pas ……
              Car le packet j’ai bien le bon niveau en réponse et l’envoi fonctionne nickel …

              Le truc c’est que je sais pas comment fixer le problème …

              Cordialement ,

              1 réponse Dernière réponse Répondre Citer 0
              • robin4002R Hors-ligne
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                dernière édition par

                Je vois pourquoi.
                à l’arrivé du paquet IDofusCraftLevels est null.
                Il faudrait lui donner une valeur ou alors le remplacer directement par un int et changer la valeur de capabilities.getLevel().level au lieu de changer l’objet level qui se trouve dans capabilities.

                (d’ailleurs je ne comprends pas pourquoi tu mets ta variable level à l’intérieur d’un objet level. Si tu veux une classe à part pour la question des niveaux, il serait mieux de nommer la classe LevelMananger ou quelque chose du genre, afin d’avoir nom différent pour éviter les possibles confusions).

                1 réponse Dernière réponse Répondre Citer 0
                • Jerem_TechJ Hors-ligne
                  Jerem_Tech
                  dernière édition par

                  Je suis censé faire ça comment ?
                  Pour l’histoire de l’objet , en fait c’est parce que après il y aura 13 variables correspondantes à un métier chacune ….

                  Cordialement ,

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002R Hors-ligne
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                    dernière édition par

                    D’accord.

                    Mais dans ce cas je ne vois pas la pertinence d’avoir un setter dans la classe de capability l’avoir dans dans la classe IDofusCraftLevels aurait plus de sens.

                    public class PacketLevel implements IMessage
                    {
                    
                    private int level;
                    
                    public PacketLevel()
                    {
                    }
                    
                    public PacketLevel(IDofusCraftLevels level)
                    {
                    this.level = level.getLevel();
                    }
                    
                    @Override
                    public void fromBytes(ByteBuf buf)
                    {
                    level = buf.readInt();
                    }
                    
                    @Override
                    public void toBytes(ByteBuf buf)
                    {
                    buf.writeInt(this.level);
                    }
                    
                    public static class PacketLevelHandlerClient implements IMessageHandler <packetlevel, imessage="">{
                    
                    @Override
                    public IMessage onMessage(final PacketLevel message, MessageContext ctx)
                    {
                    
                    IThreadListener thread = DofusCraftCore.proxy.getListener(ctx);
                    final EntityPlayer player = DofusCraftCore.proxy.getPlayer(ctx);
                    thread.addScheduledTask(() -> {
                    if(player != null) {
                    IDofusCraftLevels capabilities = player.getCapability(DofusCraftLevelsProvider.LEVEL_CAP, null);
                    if(capabilities != null) {
                    capabilities.getLevel().setLevel(message.level);
                    }
                    }
                    });
                    
                    return null;
                    }
                    }
                    
                    public static class PacketLevelHandlerServer implements IMessageHandler <packetlevel, imessage="">{
                    
                    @Override
                    public IMessage onMessage(final PacketLevel message, MessageContext ctx)
                    {
                    IThreadListener thread = DofusCraftCore.proxy.getListener(ctx);
                    final EntityPlayer player = DofusCraftCore.proxy.getPlayer(ctx);
                    thread.addScheduledTask(() -> {
                    if(player != null) {
                    IDofusCraftLevels capabilities = player.getCapability(DofusCraftLevelsProvider.LEVEL_CAP, null);
                    if(capabilities != null) {
                    capabilities.getLevel().setLevel(message.level);
                    }
                    }
                    });
                    return null;
                    }
                    }
                    }
                    ```</packetlevel,></packetlevel,>
                    1 réponse Dernière réponse Répondre Citer 0
                    • Jerem_TechJ Hors-ligne
                      Jerem_Tech
                      dernière édition par

                      Changements effectuées , simplement ça change rein xD
                      Et est-ce une erreur ceci ?

                      %(#a9b7c6)[[font=Courier New]capabilities.getLevel.setLevel(message].%(#9876aa)[level])%(#cc7832)[;]
                      

                      Ce n’est pas plutôt ça :

                      %(#a9b7c6)[[font=Courier New]capabilities.setLevel(message].%(#9876aa)[level])%(#cc7832)[;]
                      

                      Après dans le second cas ça ne fonctionne quand même , et dans le premier bah moi j’ai pas de méthodes que je peut appeler ainsi ….

                      Cordialement ,

                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002R Hors-ligne
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                        dernière édition par

                        Oula …
                        Je viens de capter que j’étais à côté de la plaque pour l’IDofusCraftLevels.
                        Je croyais pendant un moment que c’était une classe que tu avais en plus alors que c’est ta capability.

                        Autant pour moi, donc en effet c’est juste capabilities.setLevel(message.level)

                        Par contre je ne comprends pas pourquoi la valeur ne synchro toujours pas.
                        Regardes ce qu’il se passe avec le déboguer.

                        1 réponse Dernière réponse Répondre Citer 0
                        • Jerem_TechJ Hors-ligne
                          Jerem_Tech
                          dernière édition par

                          J’ai rien dit en redémarrant le jeu ça fonctionne 😉
                          Donc je peut enfin passer ce sujet en résolu !

                          Mille merci !

                          1 réponse Dernière réponse Répondre Citer 0
                          • 1
                          • 2
                          • 1 / 2
                          • Premier message
                            Dernier message
                          Design by Woryk
                          ContactMentions Légales

                          MINECRAFT FORGE FRANCE © 2024

                          Powered by NodeBB