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

    [Abandonné] Active Item

    Sans suite
    1.9
    5
    15
    2902
    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.
    • J
      Jodge dernière édition par

      Hey ! Cela faisait un baille que je n’avais pas posté !

      Aujourd’hui, je reviens vers vous car je me retrouve dans une impasse. L’ajout de la 2nd main a drastiquement changé la méthode gérant les dégâts.

      Mon problème est sans aucun doute très con et la solution m’as sans doute échappé m’enfin : 
      Comment récupérer l’item (ou itemstack) utilisé par le joueurs pour frapper (dans l’événement forge “LivingAttackEvent”) ?

      Je sais qu’avec

      ((EntityLivingBase)entity).getItemStackFromSlot(EntityEquipmentSlot.MAINHAND)
      

      et

      ((EntityLivingBase)entity).getItemStackFromSlot(EntityEquipmentSlot.OFFHAND)
      

      on peut récupérer les deux itemstack actif. 
      Le problème étant de savoir lequel à été utilisé pour frapper…

      if(((EntityLivingBase) entity).getAttributeMap().getAttributeInstance(SharedMonsterAttributes.ATTACK_DAMAGE) != null)
      {
      baseDamage = (float)((EntityLivingBase) entity).getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue();
      }
      

      me permet de récupérer uniquement la valeurs des dégât, mais aucune indication sur l’item utilisé. Cette valeur ne peu pas me permettre de choisir a coup sur l’item utilisé (ex : deux item ayant les même dommages et vitesse d’attaque)

      voila voila…

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

        Je pence que la réponse est simple : (si je me trompe pas) on ne peut attaquer que avec la main principale donc tu peut utiliser directement :

        ((EntityLivingBase)entity).getItemStackFromSlot(EntityEquipmentSlot.MAINHAND)
        
        1 réponse Dernière réponse Répondre Citer 0
        • J
          Jodge dernière édition par

          @‘LeBossMax2’:

          Je pence que la réponse est simple : (si je me trompe pas) on ne peut attaquer que avec la main principale donc tu peut utiliser directement :

          ((EntityLivingBase)entity).getItemStackFromSlot(EntityEquipmentSlot.MAINHAND)
          

          Oui et non. C’est exacte que l’on ne peu frapper que avec la main principal, mais l’arc (ou de façon plus commune, toutes les armes de jet), lui, peut être utilisé des deux mains 😕

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

            player.getCurrentUsingHand je crois, sinon regarde dans l’event si tu n’as pas quelque chose qui donne accès

            Site web contenant mes scripts : http://SCAREXgaming.github.io

            Pas de demandes de support par MP ni par skype SVP.
            Je n'accepte sur skype que l…

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

              Juste une question, à quoi cela va te servir de savoir de quelle main est partie la flèche ? Car si le joueur à un arc dans sa main principale, la main gauche ne sera pas utilisée et ducoup tu as juste à tester si l’item de la main principale “utilise” le clic gauche.

              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
              • J
                Jodge dernière édition par

                [size=smallplayer.getCurrentUsingHand je crois, sinon regarde dans l’event si tu n’as pas quelque chose qui donne accès]

                La fonction doit fonctionner avec EntityLivingBase comme plus haut niveau commun (monstre, golem, player). Il ne faut donc aucune fonction spécifique a une classe de plus haut niveau…

                [size=smallJuste une question, à quoi cela va te servir de savoir de quelle main est partie la flèche ? Car si le joueur à un arc dans sa main principale, la main gauche ne sera pas utilisée et ducoup tu as juste à tester si l’item de la main principale “utilise” le clic gauche.]

                Contre exemple : tien dans ta main secondaire une potion, et dans ta main principal un objet avec cooldown (vanilla tu a l’enderpearl). Spawn clic gauche. Lorsque l’objet est en “recharge” c’est l’autre qui est utilisé.
                Alors vanilla, je l’avoue ça n’as pas d’importance. Mais prenons le mod Tinker’s (que j’utilise dans mes test) si tu prend deux armes de lancé différentes dans chaque main et que tu spam clic, tu utilisera l’un puis l’autres…

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

                  Regarde les variables disponibles dans l’event. Mais il me semble que les 2 mains ne sont disponibles que pour les joueurs

                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                  Pas de demandes de support par MP ni par skype SVP.
                  Je n'accepte sur skype que l…

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

                    @‘SCAREX’:

                    Regarde les variables disponibles dans l’event. Mais il me semble que les 2 mains ne sont disponibles que pour les joueurs

                    Les deux mains sont disponible dès EntityLivingBase (et peu être même un cran au dessous). En revanche, il n’existe (à ma connaissance) aucun monstre vanilla qui puissent nativement utilisé la 2nd main.

                    Concernant les variables, il n’y a pas grand chose : DamageSource et montant des dégâts (float). Damage sources me donne l’entité attaquante, et si il s’agit de dégat de type ‘thorns’ ou non.

                    L’utilisation de :

                    ((EntityLivingBase)attacker).getHeldItemMainhand();
                    

                    n’est qu’une réduction permettant d’obtenir la main principal. Mojang a considérer que les monstres n’utiliseraient que leurs mains principal. Mais cela ne change rien au problème à la fois pour le joueurs, et les monstres moddée ambidextre.

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

                      EntityLivingBase:2692 :

                         public EnumHand getActiveHand()
                         {
                             return (((Byte)this.dataManager.get(HAND_STATES)).byteValue() & 2) > 0 ? EnumHand.OFF_HAND : EnumHand.MAIN_HAND;
                         }
                      

                      Et ensuite :
                      EntityLivingBase:1611 :

                         @Nullable
                         public ItemStack getHeldItem(EnumHand hand)
                         {
                             if (hand == EnumHand.MAIN_HAND)
                             {
                                 return this.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND);
                             }
                             else if (hand == EnumHand.OFF_HAND)
                             {
                                 return this.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
                             }
                             else
                             {
                                 throw new IllegalArgumentException("Invalid hand " + hand);
                             }
                         }
                      
                      1 réponse Dernière réponse Répondre Citer 0
                      • SCAREX
                        SCAREX dernière édition par

                        Sinon tu as EntityLivingBase.getActiveItemStack

                        Site web contenant mes scripts : http://SCAREXgaming.github.io

                        Pas de demandes de support par MP ni par skype SVP.
                        Je n'accepte sur skype que l…

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

                          Si tu parlais d’utiliser :

                          ((EntityLivingBase)attacker).getHeldItem(((EntityLivingBase)attacker).getActiveHand());
                          

                          alors non. Cela me retourne l’élément courant dans ma main principal, même si je tire a l’arc avec l’autre…

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

                            Pourtant cette fonction est sensé retourner l’item que le joueur utilise actuellement.

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

                              @‘robin4002’:

                              Pourtant cette fonction est sensé retourner l’item que le joueur utilise actuellement.

                              C’est peu être dus à l’intervalle entre le moment ou le projectile par et atteint sa cible ?

                              EDIT : remarque ce serait logique : un bug de minecraft permet de profité du looting d’une épée en switchant la main dessus après avoir lancé une potion.

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

                                Si tu veux quelque chose de particulier pour les flèches il va falloir récupérer le moment où le joueur tire et ça devient plus complexe, au passage je te rappelle qu’une flèche ne vient pas forcément d’une entité mais peut venir de n’importe où

                                Site web contenant mes scripts : http://SCAREXgaming.github.io

                                Pas de demandes de support par MP ni par skype SVP.
                                Je n'accepte sur skype que l…

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

                                  Bon… alors d’après mes observations, ce n’est, à l’heure actuel, et sans développer une fonctionnalité tierce, pas possible, puisque Minecraft ne le gère pas.

                                  Etant donné que c’est un cas peu présent, assez lourds à régler, et que j’ai d’autres priorités plus gênantes, je met pour le moment en stand-by ce problème. Il passe donc en abandonné.

                                  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