MFF

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

    [1.7.x]Modifier la vie du joueur

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    14 Messages 4 Publieurs 4.7k 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.
    • AmaA Hors-ligne
      Ama
      dernière édition par

      Pour le render de la barre de vie

      @ForgeSubscribe
      @SideOnly(Side.CLIENT)
      public void renderGameOverlay(RenderGameOverlayEvent.Pre event)
      {
      if(event.type == ElementType.HEALTH)
      {
      event.setCanceled(true);
      }
      }
      

      c.f Robin

      Si je t'ai filé un coup de main n'oublie pas le + / -
      Par contre évite les demandes d'aides en MP, tu sera sympa'

      La JavaDoc c'est comme le PQ, ça sert à ce démerder tous seul. -Victor Hugo- 2017

      Une superbe API pour animer vos super modèles CraftStudio dans Minecraft !

      1 réponse Dernière réponse Répondre Citer 1
      • D Hors-ligne
        Dezta
        dernière édition par

        Ok, pas de soucis pour la barre de vie, ça confirme ce que je pensais.
        Quelqu’un aurait une idée pour le reste ?
        EDIT: Au passage, je crois que c’est plutot @SubscribeEvent plutot que @ForgeSubscribe ^^.

        1 réponse Dernière réponse Répondre Citer 0
        • RedRelayR Hors-ligne
          RedRelay Moddeurs confirmés
          dernière édition par

          Tu as la fonction setHealth(float) qui te permet de modifier la vie d’une EntityLivingBase.
          Je ne sais pas si ça répond a ton problème, tu peux nous en dire plus sur ton Extended Entity Property ?

          –------------------------------------------------------------------------------------
          Si tu trouves mon intervention pertinente, n'hésite pas a m…

          1 réponse Dernière réponse Répondre Citer 1
          • D Hors-ligne
            Dezta
            dernière édition par

            Oui, j’ai continué mes recherches et je suis tombé sur la même fonction, j’étais justement en train de me demandé comment l’employer et si je pourrais l’utilisé sur le joueur.

            Pour mon extended entity, bah c’est un truc sans aucune prétention, presque le même que le tuto de Gugu ^^(C’est pour dire, y a encore ces petits commentaires dedans ; D) .

            J’ai juste créer une variable et je voudrais que quand on la monte, la vie maximal du joueur monte également.
            Je peux vous filé le code mais c’est encore très … embryonnaire on va dire, je fais surtout sur papier pour le moment.

            1 réponse Dernière réponse Répondre Citer 0
            • RedRelayR Hors-ligne
              RedRelay Moddeurs confirmés
              dernière édition par

              Tu peux peut-être faire

              
              @SubscribeEvent
              public void onPlayerTick(PlayerTickEvent e) {
              if(e.phase == TickEvent.Phase.START) {
              if(!e.player.getFoodStats().needFood() && e.player.getHealth() < laVieMaxDuJoueur) {
              e.player.setHealth(e.player.getHealth()+0.1F);
              }
              }
              }
              
              

              –------------------------------------------------------------------------------------
              Si tu trouves mon intervention pertinente, n'hésite pas a m…

              1 réponse Dernière réponse Répondre Citer 1
              • D Hors-ligne
                Dezta
                dernière édition par

                Merci beaucoup, mais j’ai fait quelques tests a partir de la fonction que tu ma passé, la vie du joueur est effectivement régénéré mais, dans tout les cas on ne peut pas dépasser 20 points : Il doit y avoir un plafond défini pour Player.

                Mais peut être que toutes les EntityLiving en on un. Ça va être compliquer du coup pour faire ce que je veux si c’est le cas…

                EDIT : je viens de tombé sur ça : http://minecraft.gamepedia.com/Attribute
                Je vais essayer de faire quelques choses avec, ça a l’air intéressant.

                1 réponse Dernière réponse Répondre Citer 0
                • RedRelayR Hors-ligne
                  RedRelay Moddeurs confirmés
                  dernière édition par

                  Effectivement, tu risques de devoir utiliser l’instrospection pour surcharger la fonction public final float getMaxHealth() de EntityLivingBase.

                  –------------------------------------------------------------------------------------
                  Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

                    Rebonjour !
                    Je me suis renseigné sur l’introspection et franchement je me voit mal utilisé ce truc avec mon niveau actuel en java.
                    Mais j’ai trouvé une solution : j’ai contacté le type qui a fait le mod dont je parlais plus haut et il m’a confirmé avoir utilisé un custom modifier pour affecter la vie du joueurs. J’ai cherché partout des tuto la dessus, je n’en ai trouvé nul parts.
                    Du coup, j’ai jeté un coup d’œil a son code source, j’ai trouvé la méthode qui m’intéresse mais tous est offuscated c’est pas pratique, et malgré le fait que se soit en 1.6.4, je n’arrive pas l’avoir avec BON. La voici :

                    
                    protected void c(ye par1ItemStack, abw par2World, uf par3EntityPlayer) {
                    double valueToSet = 2.0D;
                    try {
                    valueToSet = par3EntityPlayer.a(tp.a).a(par3EntityPlayer.getPersistentID()).d() + 2.0D;
                    }
                    catch (Exception e) {
                    }
                    ot moreHealth = new ot(par3EntityPlayer.getPersistentID(), "Heart Crystal Health Boost", valueToSet, 0);
                    
                    os attributeinstance = par3EntityPlayer.a(tp.a);
                    attributeinstance.b(moreHealth);
                    attributeinstance.a(moreHealth);
                    }
                    
                    

                    En gros, cette classe était la méthode “OnItemRightClic” d’un item. Lorsqu’on l’active, elle compte la valeur du modifier du joueur, le supprime , puis en ajoute un nouveau de valeur égal au précédent + 2.0D et enfin l’enregistre.
                    J’ai reussie a comprendre que tp correspond à SharedMonsterAttributes, os à IAttributeInstance, et ot a AttributeModifier, mais je n’arrive pas a voir quel méthode sont appelés. Quelqu’un aurait-il une idée du nom des fonctions qui sont masqués ?

                    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

                      MD: uf/a ()V net/minecraft/entity/player/EntityPlayer/func_70088_a ()V
                      func_70088_a,entityInit,2,
                      Donc par3EntityPlayer.a = player.entityInit(

                      FD: tp/a net/minecraft/entity/SharedMonsterAttributes/field_111267_a
                      field_111267_a,maxHealth,2,
                      Donc tp.a = SharedMonsterAttributes.maxHealth
                      etc …

                      Je te laisse chercher, il te faut juste un setup de forge en 1.6.4 avec forge gradle, puis va dans le dossier forge-1.6.4\build\unpacked\conf
                      Ici, tu as le fichier packaged.srg, dedans il y a toutes les correspondances des noms a , b, c, d, etc … vers field_xxx, fonc_xxx et le nom des classes.
                      Ensuite dans forge-1.6.4\build\unpacked\mappings tu as les fichiers fields.csv et methods.csv, dans le premier tu as les correspondances de field_xxx vers le nom correcte et dans le second la même chose pour les méthodes.

                      (En passant, c’est pas bien de décompiler un mod sans l’accord de l’auteur …).

                      1 réponse Dernière réponse Répondre Citer 1
                      • D Hors-ligne
                        Dezta
                        dernière édition par

                        Oaui, je sais, mais j’ai vraiment pas eu d’autres solutions, ça fait 3 jours que je cherche partout ces 50 caractères de code …
                        En plus j’ai même pas tout decompilé, juste une pitite méthode. Je pence qu’il m’en voudra pas :x
                        Sinon merci beaucoup, je savais qu’il y avait surment une sorte de “tableau de correspondance” dans les files de graddle, mais pour la 1.6.4 j’étais encore sous MCP et j’ai pas trouvé .:P

                        Je vous dirais si ça marche !


                        Encore un petit problème, mais on commence a en voir le boue !
                        Dans le code source, nous avions :

                        os attributeinstance = par3EntityPlayer.a(tp.a);
                        
                        

                        Ce qui, après relecture donne :

                        IAttributeInstance attributeinstance = par3EntityPlayer.entityInit(SharedMonsterAttributes.maxHealth);
                        

                        Problème : J’ai une erreur sur entityInit, qui est protected et ne prend pas de paramètre :

                        protected void entityInit()
                        {
                        super.entityInit();
                        this.dataWatcher.addObject(16, Byte.valueOf((byte)0));
                        this.dataWatcher.addObject(17, Float.valueOf(0.0F));
                        this.dataWatcher.addObject(18, Integer.valueOf(0));
                        }
                        
                        

                        Donc ou j’ai du faire une erreurs en relisant le tableau et c’est une autre fonction qui va a la place, ou bien j’ai … autre chose ?

                        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

                          En effet ça peut pas être ça, il chercher la fonction qui accepte un attribue en argument. Elle est surement dans une classe mère.

                          1 réponse Dernière réponse Répondre Citer 1
                          • D Hors-ligne
                            Dezta
                            dernière édition par

                            Je repost pour vous dire que j’ai fini par trouvé, voilà le code que j’utilise finalement:

                            
                            AttributeModifier moreHealth = new AttributeModifier(par3EntityPlayer.getPersistentID(), "Minefus Caracteristique Health Boost", valueToSet, 0);// On déclare un AttributeModifier pour par3EntityPlayer, on lui donne un ID, un nom, une valeur et le type d'opération qui va être effectuer.
                            
                            IAttributeInstance attributeinstance = par3EntityPlayer.getEntityAttribute(SharedMonsterAttributes.maxHealth); // Nouvelle instance de AttributeInstance, qui pointe sur l'Attribute "MaxHealth" joueur.
                            
                            attributeinstance.removeModifier(moreHealth); // On supprime les éventuelles AttributeModifier du même nom de l'AttributeInstance .
                            attributeinstance.applyModifier(moreHealth);// On applique finalement l'AttributeModifier sur l'AttributeInstance
                            
                            

                            Voilà ! Avec ce code, plusieurs mod qui affecte la vie du joueur peuvent fonctionné sans conflis, j’ai testé, c’est génial.
                            Merci beaucoup a tout ceux qui m’ont aider pour y arrivé, c’était vraiment une prise de tête, vous devriez faire un tutoriel sur les Attribute & Modifier, c’est super utile !
                            Vous pouvez mettre en “Résolu”.

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

                              Désolé du UP, mais ces bouts de code tu les mets où exactement ?

                              Si je t'ai filé un coup de main n'oublie pas le + / -
                              Par contre évite les demandes d'aides en MP, tu sera sympa'

                              La JavaDoc c'est comme le PQ, ça sert à ce démerder tous seul. -Victor Hugo- 2017

                              Une superbe API pour animer vos super modèles CraftStudio dans Minecraft !

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

                              MINECRAFT FORGE FRANCE © 2024

                              Powered by NodeBB