MFF

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

    Ajout de code lorsqu'une épée frappe

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.2
    21 Messages 3 Publieurs 6.2k 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.
    • DeletedD Hors-ligne
      Deleted
      dernière édition par

      @‘robin4002’:

      Je re-déplace dans non résolu.
      Je viens de faire quelque test, en effet le code n’a aucun effet, il semblerait que hitEntity n’est que déclenché en serveur et non en client. Il faudrait donc utilise des paquets.

      ÉDIT : open source = le code est libre, n’importe qui peut le consulter et le modifier.

      En effet mais j’ai regardé dans la catégorie Gui et packets de Tutoriels et je ne vois pas vraiment comment utiliser des packets


      J’ai regardé sur serveur vanilla et aucune particule nn plus alors?

      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

        Oui, il n’y a pas encore de tutoriel sur les paquets, ça ne devrait pas tarder.

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

          @‘robin4002’:

          Oui, il n’y a pas encore de tutoriel sur les paquets, ça ne devrait pas tarder.

          Ok sinon d’ici là tu as une astuce?

          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

            Tu peux jeter un coup d’ailleurs à Nanotech Mod si tu veux :
            https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/core/NanotechMod.java#L60
            https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/core/NanotechMod.java#L126
            https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/core/NanotechMod.java#L138
            https://github.com/FFMT/nanotech_mod/tree/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/network/packet

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

              @‘robin4002’:

              Tu peux jeter un coup d’ailleurs à Nanotech Mod si tu veux :
              https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/core/NanotechMod.java#L60
              https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/core/NanotechMod.java#L126
              https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/core/NanotechMod.java#L138
              https://github.com/FFMT/nanotech_mod/tree/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/network/packet

              J’ai fait quelque test et j’ai l’impression que quand on déclare une méthode du worldobj hey bien cela ne marche pas !
              Exemple j’ai attribué un effet de potion et le lancement d’une musique sans y mettre worldObj tout cela marchait.
              Malheureusement on n’ajoute des particule que, grâce au worldObj donc je ne sais pas comment faire

              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

                Rien à voir avec ça.
                Suffit de mettre :

                public boolean hitEntity(ItemStack stack, EntityLivingBase attackedLiving, EntityLivingBase attackerLiving)
                {
                System.out.println("client ? " + attackedLiving.worldObj.isRemote);
                return super.hitEntity(stack, attackedLiving, attackerLiving);
                }
                

                Et de taper un mob en jeu pour voir que le jeu va toujours indiquer false. Tout simplement car cette méthode n’est que appelé en serveur, or les particules ont besoins d’être dans une méthode qui est appelé en client. Donc il faut utiliser des paquets.

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

                  @‘robin4002’:

                  Rien à voir avec ça.
                  Suffit de mettre :

                  public boolean hitEntity(ItemStack stack, EntityLivingBase attackedLiving, EntityLivingBase attackerLiving)
                  {
                  System.out.println("client ? " + attackedLiving.worldObj.isRemote);
                  return super.hitEntity(stack, attackedLiving, attackerLiving);
                  }
                  

                  Et de taper un mob en jeu pour voir que le jeu va toujours indiquer false. Tout simplement car cette méthode n’est que appelé en serveur, or les particules ont besoins d’être dans une méthode qui est appelé en client. Donc il faut utiliser des paquets.

                  Toute façon je n’utilise plus cette méthode j’ai trouvé une alternative mais tu dit que “hitEntity” n’est appelé que en multi? Alors comment se fait-il que j’y ai pu faire jouer des sons ?

                  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

                    Suffit de remonter la fonction playSound pour comprendre pourquoi :

                    public void playSoundAtEntity(Entity par1Entity, String par2Str, float par3, float par4)
                    {
                    PlaySoundAtEntityEvent event = new PlaySoundAtEntityEvent(par1Entity, par2Str, par3, par4);
                    if (MinecraftForge.EVENT_BUS.post(event))
                    {
                    return;
                    }
                    par2Str = event.name;
                    for (int i = 0; i < this.worldAccesses.size(); ++i)
                    {
                    ((IWorldAccess)this.worldAccesses.get(i)).playSound(par2Str, par1Entity.posX, par1Entity.posY - (double)par1Entity.yOffset, par1Entity.posZ, par3, par4);
                    }
                    }
                    

                    ctrl + clic sur playSound de “((IWorldAccess)this.worldAccesses.get(i)).playSound”, tu tombe sur ça dans la classe IWorldAccess :

                    void playSound(String var1, double var2, double var4, double var6, float var8, float var9);
                    

                    ici, reste appuyer sur ctrl et passe la souris sur playSound et clic sur open implementation
                    La tu as deux choix, RenderGlobal et WorldManager.
                    RenderGlobal c’est pour le client.
                    WorldManager c’est pour le serveur.
                    Si tu ouvre WorldManager, tu tombe sur cette fonction :

                    public void playSound(String par1Str, double par2, double par4, double par6, float par8, float par9)
                    {
                    this.mcServer.getConfigurationManager().sendToAllNear(par2, par4, par6, par8 > 1.0F ? (double)(16.0F * par8) : 16.0D, this.theWorldServer.provider.dimensionId, new S29PacketSoundEffect(par1Str, par2, par4, par6, par8, par9));
                    }
                    

                    Et ça, c’est l’envoie d’un paquet pour le son.
                    Voilà pourquoi le son fonctionne, c’est parce qu’il passe par un paquet.

                    Alors que les particules, la fonction dans WorldManager est vide.

                    Sinon avec l’autre fonction ça fonctionne ?

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

                      @‘robin4002’:

                      Suffit de remonter la fonction playSound pour comprendre pourquoi :

                      public void playSoundAtEntity(Entity par1Entity, String par2Str, float par3, float par4)
                      {
                      PlaySoundAtEntityEvent event = new PlaySoundAtEntityEvent(par1Entity, par2Str, par3, par4);
                      if (MinecraftForge.EVENT_BUS.post(event))
                      {
                      return;
                      }
                      par2Str = event.name;
                      for (int i = 0; i < this.worldAccesses.size(); ++i)
                      {
                      ((IWorldAccess)this.worldAccesses.get(i)).playSound(par2Str, par1Entity.posX, par1Entity.posY - (double)par1Entity.yOffset, par1Entity.posZ, par3, par4);
                      }
                      }
                      

                      ctrl + clic sur playSound de “((IWorldAccess)this.worldAccesses.get(i)).playSound”, tu tombe sur ça dans la classe IWorldAccess :

                      void playSound(String var1, double var2, double var4, double var6, float var8, float var9);
                      

                      ici, reste appuyer sur ctrl et passe la souris sur playSound et clic sur open implementation
                      La tu as deux choix, RenderGlobal et WorldManager.
                      RenderGlobal c’est pour le client.
                      WorldManager c’est pour le serveur.
                      Si tu ouvre WorldManager, tu tombe sur cette fonction :

                      public void playSound(String par1Str, double par2, double par4, double par6, float par8, float par9)
                      {
                      this.mcServer.getConfigurationManager().sendToAllNear(par2, par4, par6, par8 > 1.0F ? (double)(16.0F * par8) : 16.0D, this.theWorldServer.provider.dimensionId, new S29PacketSoundEffect(par1Str, par2, par4, par6, par8, par9));
                      }
                      

                      Et ça, c’est l’envoie d’un paquet pour le son.
                      Voilà pourquoi le son fonctionne, c’est parce qu’il passe par un paquet.

                      Alors que les particules, la fonction dans WorldManager est vide.

                      Sinon avec l’autre fonction ça fonctionne ?

                      Merci beaucoup pour toutes ces explications Robin
                      Oui en fait je suis passer directement par l’Entity en question et lui ait crée une condition (en me basant sur le creeper si il se fait tué par un skeleton) du genre :
                      Si tu te fait tuer par le joueur tenant un certain item avec un damageSource directe alors il spawnera des particules et voilà ça fonctionne c’était le plan B lol

                      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

                        Ok ^^
                        Je passe donc en résolu.

                        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