MFF

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

    Effet de knockback

    Planifier Épinglé Verrouillé Déplacé Résolu 1.11.x
    1.11.x
    13 Messages 3 Publieurs 2.4k 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.
    • MrCupCakeMonsterM Hors-ligne
      MrCupCakeMonster
      dernière édition par

      Bonjour à tous,
      ça fait maintenant 2 jours que je me casses la tête pour ajouter un effet de knockback que je clic droit sur une entité avec un item spécifique.
      Eclipse n’affiche aucune erreur, mais cela ne marche simplement pas. Voici le code :

      @Override
      public ActionResult <itemstack>onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) {
      
      Minecraft mc = Minecraft.getMinecraft();
      RayTraceResult rayTrace = mc.objectMouseOver;
      Entity entity = rayTrace.entityHit;
      
      if (rayTrace.entityHit != null) {
      if (rayTrace.entityHit instanceof EntityLivingBase) {
      ((EntityLivingBase) rayTrace.entityHit).knockBack(playerIn, 5, (double) MathHelper.sin(playerIn.rotationYaw * 0.017453292F),
      (double) (-MathHelper.cos(playerIn.rotationYaw * 0.017453292F)));
      }
      }
      return new ActionResult(EnumActionResult.SUCCESS, playerIn.getHeldItem(handIn));
      }
      

      J’ai cru comprendre qu’a la place de mettre l’argument playerIn de onItemRightClick() directement dans la méthode knockback, il faudrait avoir un argument de type EntityPlayerMP.
      Seulement je ne sais pas comment l’instancier.

      Merci d’avance</itemstack>

      Mes tutos :

      >! Un item mangeable
      [url=http://www.minecraftforgefranc…

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

        Salut,
        La méthode knockback est à appeler uniquement côté serveur comme elle gère les motion. Par ailleurs le paramètre Entity est inutilisée dans la déclaration de la méthode, donc peu importe ce que tu mets, le soucis ne peut venir de là.
        En revanche, toi tu as besoin de get l’entity visée par un outil client side, le ray tracer. Donc tu as besoin d’un packet à envoyer au serveur avec l’id de l’entity visée, que tu pourras ensuite instancier côté serveur à l’aide d’un World#getEntityByID, afin d’appeler la fonction knockback.
        D’autres questions ?

        PS = Pour le moment, méfies toi de ta variable Minecraft, le serveur dédié n’aimera pas du tout au lancement, et crashera avec un ClassNotFoundException.

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

          Donc je dois utiliser MonMod.network.sendToServer(); ?
          Et a l’intérieur je met quoi ?

          Mes tutos :

          >! Un item mangeable
          [url=http://www.minecraftforgefranc…

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

            @‘Plaigon’:

            Donc tu as besoin d’un packet à envoyer au serveur avec l’id de l’entity visée, que tu pourras ensuite **instancier **côté serveur à l’aide d’un World#getEntityByID, afin **d’appeler **la fonction knockback.

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

              Faut-il donc que j’ajoute a ma classe de Packet une nouvelle variable de knockback ?

              Car pour l’instant j’ai réussi à trouver ça :

              ModSWMod.network.sendToServer(new PacketCapabilitiesSWMod());

              A vrai dire j’avance très lentement car j’ai beaucoup de mal à comprendre le network

              Mes tutos :

              >! Un item mangeable
              [url=http://www.minecraftforgefranc…

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

                Non, il faut que l’appel de la fonction knockback sur ton entity visée soit fait côté serveur (dans ton ta fonction onMessage de ta sous-classe Handler) plutôt que côté client (dans ta fonction onItemRightClick).

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

                  Je ne comprends vraiment pas ce que je dois faire.
                  Où est ce que je dois mettre mon code pour le knockback ? Dans un event ? Le laisser dans onItemRightClick ?
                  Comment je suis sensé envoyé l’ID de l’entité au serveur ? Je ne sais pas comment il faut faire et faut il créer une nouvelle variable ?
                  Une fois que j’ai envoyé le packet, comment je peux instancier cette entité ?

                  N’as tu pas un bout de code à me fournir, cela pourrait être plus explicite et je pourrai comprendre mieux ?

                  Mes tutos :

                  >! Un item mangeable
                  [url=http://www.minecraftforgefranc…

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

                    “Où est ce que je dois mettre mon code pour le knockback ? Dans un event ? Le laisser dans onItemRightClick ?”
                    –>
                    @‘Plaigon’:

                    il faut que l’appel de la fonction knockback […] dans ton ta fonction onMessage de ta sous-classe Handler

                    “Comment je suis sensé envoyé l’ID de l’entité au serveur ? Je ne sais pas comment il faut faire et faut il créer une nouvelle variable ?”
                    Tu as la méthode Entity#getEntityId, tout bêtement.

                    “Une fois que j’ai envoyé le packet, comment je peux instancier cette entité ?”
                    Une fois le packet reçu* plutôt
                    –>
                    @‘Plaigon’:

                    avec l’id de l’entity visée, que tu pourras ensuite instancier côté serveur à l’aide d’un World#getEntityByID

                    A mettre dans un try, au cas où l’id ne soit pas bon/l’entity ne puisse pas être instancé !

                    “N’as tu pas un bout de code à me fournir, cela pourrait être plus explicite et je pourrai comprendre mieux ?”
                    Tu dois savoir apprendre par toi même, surtout cette notion. En revanche MFF est là pour te mettre sur la piste !

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

                      Merci pour ton aide et merci pour le tuto même si je l’ai déjà lu, est ce que je dois faire une nouvelle classe de packet exprès pour ce que je veux faire ?

                      Mes tutos :

                      >! Un item mangeable
                      [url=http://www.minecraftforgefranc…

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

                        Peut-être que MC a déjà un packet adapté (notamment lors du middle click sur un entity pour get son oeuf). Faut que tu diriges tes recherches vers ceci, si tu veux éviter ta propre classe de packet, qui disons le, ne contiendrais pas grand chose.

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

                          Pourquoi faire simple quand on peut faire compliqué ?

                          onItemRightClick est utilisé quand tu fais click droit en général, mais il existe la même chose pour le click sur une entité : itemInteractionForEntity -> pas besoin de rayTrace et pas besoin de packet !

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

                            Franchement je ne comprends rien du tout, je n’y arrive pas.
                            EDIT : je vais essayer ton idée


                            Merci ça marche ^^

                            Mes tutos :

                            >! Un item mangeable
                            [url=http://www.minecraftforgefranc…

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

                              Bien joué, je n’en n’avais plus connaissance !

                              EDIT = LeBossMax2, ce serait plutôt “Pourquoi faire compliqué quand on peut faire simple ?” 😃

                              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