• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu JetPack

    1.7.x
    1.7.10
    4
    15
    1699
    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.
    • Folgansky
      Folgansky Correcteurs dernière édition par

      Salut les gars,

      Petit soucis avec mon jetpack, j’ai un NPE si je retire la pièce d’armure (ou que le joueur meurt)

          @SubscribeEvent
          public void fly(LivingUpdateEvent e)
          {
              if(e.entity instanceof EntityPlayer)
              {
                  if(!Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode &&
      Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(3).getItem() == ModPg2.itemJetPack && // Le NPE est ici
      Minecraft.getMinecraft().thePlayer.isSneaking())
                  {
                      Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(3).damageItem(1, Minecraft.getMinecraft().thePlayer);
                      Minecraft.getMinecraft().thePlayer.motionY += 0.075;
                  }
              }
          }
      

      Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(3).getItem() != null;  n’a pas l’air d’être un bon nullcheck…

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

        Salut,
        Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(3) != null;
        C’est ça le bon check puisque c’est l’itemstack qui est null.
        Par contre du  Minecraft.getMinecraft() dans LivingUpdateEvent  …

           @SubscribeEvent
           public void fly(LivingUpdateEvent e)
           {
               if(e.entity instanceof EntityPlayer)
               {
                   EntityPlayer player = (EntityPlayer)e.entity;
                   if(!player.capabilities.isCreativeMode && player.getEquipmentInSlot(3) != null && player.getEquipmentInSlot(3).getItem() == ModPg2.itemJetPack && player.isSneaking())
                   {
                       player.getEquipmentInSlot(3).damageItem(1,player);
                       player.motionY += 0.075;
                   }
               }
           }
        
        1 réponse Dernière réponse Répondre Citer 0
        • Folgansky
          Folgansky Correcteurs dernière édition par

          Eh bien c’est car Eclipse me dit:

          Cannot cast from LivingEvent.LivingUpdateEvent to EntityPlayer

          au niveau de EntityPlayer player = **(EntityPlayer)**e;

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

            e.entity *

            1 réponse Dernière réponse Répondre Citer 0
            • Folgansky
              Folgansky Correcteurs dernière édition par

              D’acc. C’est remplacé merci.

              J’ai également des surprises au niveau de la “durabilité” de cette pièce d’armure.

              Bien que je mette

              public ItemJetPackR3(ArmorMaterial material, int type)
                  {
                      super(material, 0, type);
                      this.setMaxDamage(60);
                  }
              

              La durabilité de l’item est bien plus élevée (1000 et quelques) qui correspond visiblement au type mais je ne comprend pas pourquoi set à 60 ne résoud pas l’histoire.
              Au final la pièce d’armure passe de 0 à 60 et ainsi de suite.

              1 réponse Dernière réponse Répondre Citer 0
              • Deleted
                Deleted dernière édition par

                Bah en fait la durée de l’armure et par-rapport à celle inscrite dans l’armor material qui lui est assigné. Rajouter un setMaxDamage ne changera rien à la barre de dura, tout est géré dans l’armor material

                1 réponse Dernière réponse Répondre Citer 0
                • Folgansky
                  Folgansky Correcteurs dernière édition par

                  J’ai changé ça. Donc enlevé ce setMaxDamage et changé un peu la durabilité du material (il est à 1 ce qui vaut une dura de 13)

                  LE soucis est toujours le même. L’armure ne casse pas.

                  1 réponse Dernière réponse Répondre Citer 0
                  • AymericRed
                    AymericRed dernière édition par

                    Je crois pas que damageItem vérifie la dura et casse l’item en conséquence, il faut que tu vérifies toi même.

                    Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                    AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                    Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                    Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                    1 réponse Dernière réponse Répondre Citer 0
                    • Folgansky
                      Folgansky Correcteurs dernière édition par

                      J’ai essayé

                      if(this.getMaxDamage() <= 0)
                                  {
                                      itemStack.stackSize–;
                                  }
                      

                      Dans la méthode onArmorTick. Mais c’pas non plus. Je ne connais pas les variables qui gèrent la durabilité

                      1 réponse Dernière réponse Répondre Citer 0
                      • AymericRed
                        AymericRed dernière édition par

                        Il faut que tu remplaces getMaxDamage par getItemDamage (ou getDamage). Et aussi je précise que si tu fais juste stackSize–, tu peux avoir une size négative, il faudra que tu le revefies et que tu définisses le stack à null si la size est <= 0

                        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                        1 réponse Dernière réponse Répondre Citer 0
                        • Deleted
                          Deleted dernière édition par

                          Voilà le code que tu désires :

                          
                              itemStack.setItemDamage(itemStack.getItemDamageForDisplay() + 20);//Le code pour damage l'item, à remplacer avec damageItem(blabla)
                                 if (itemStack.getItemDamageForDisplay() >= itemStack.getMaxDamage())//La condition qui check lorsque la dura de ton armure est totalement épuisée
                                 {
                                  player.renderBrokenItemStack(itemStack);//Pour rendre les particules de la casse d'armure et le son
                                     player.setCurrentItemOrArmor(3, (ItemStack)null);//Pour virer l'armure de son slot, sinon elle bug et elle y reste, même en n'ayant plus aucune dura. A absolument mettre sinon la condition est toujours check et bonjour le spam de la méthode renderBrokenItemStack…
                                 }
                          
                          

                          L’argument itemStack est celui de la méthode onArmorTick
                          @AymericRed sa condition même avec getItemDamage à la place de getMaxDamage ne sera jamais vérifié. Print la variable getItemDamage, tu verras qu’au contraire elle ne décrémente pas au fur et à mesure mais s’incrémente. En fait elle commence à 0 pour rejoindre sa getMaxDamage, logique quoi 😃
                          Et tout façon si stackSize est négatif, il est automatiquement delet, du moins je crois. Pour être sûr je me suis servir de setCurrentItemOrArmor. J’ai testé le code ci-dessus, j’ai remarqué une anomalie in game, mais je pense que ça vient en réalité que de chez moi, du moins j’espère :3

                          1 réponse Dernière réponse Répondre Citer 0
                          • Folgansky
                            Folgansky Correcteurs dernière édition par

                            Ah ouais parfait.
                            Merci parce que là j’étais très loin du compte.

                            1 réponse Dernière réponse Répondre Citer 0
                            • AymericRed
                              AymericRed dernière édition par

                              Pour le fait qu’il se delete automatiquement, ce n’est pas le cas pour les items dans les tile entity (four) après dans les slots d’Armor je sais pas. Et pour le damage, oui je me suis trompé (je me trompe tout le temps comme pour moi c’est plus logique que ça décrémente)

                              Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                              AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                              Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                              Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                              1 réponse Dernière réponse Répondre Citer 0
                              • Deleted
                                Deleted dernière édition par

                                Chacun sa logique, 🙂
                                Et pour la variable stackSize, je pense en fait qu’il faut être client & server pour que l’item disparaisse lorsque la variable est inférieur à 0. Regarde comme les containers sont gérés server side only (du moins je crois ?), l’itemstack reste présent même avec une stackSize < 0. Or pour moi, comme la fonction onArmorTick est des 2 côtés, je pense qu’il n’aurait pas rencontré de soucis…

                                1 réponse Dernière réponse Répondre Citer 0
                                • AymericRed
                                  AymericRed dernière édition par

                                  Oui c’est ça ^^
                                  Et oui possible que ce soit un problème de side.

                                  Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                  AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                  Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                  Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

                                  MINECRAFT FORGE FRANCE © 2018

                                  Powered by NodeBB