MFF

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

    [1.7.10 ] [SoundManager] Petit problème pour récupérer une information.

    Planifier Épinglé Verrouillé Déplacé Sans suite
    19 Messages 3 Publieurs 2.8k 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.
    • aurelien974A Hors-ligne
      aurelien974
      dernière édition par

      Reuh Salut,
      (De + si tu respectais la convention, ça serait aussi + apréciable niveau lecture.) Désolé je suis pas un vrais programmeur je bricole comme je peux x’)

      Alors j’ai trouvé mais le problème c’est que je me demander si le fait de refresh se petit boue code la

      
      @SideOnly(Side.CLIENT)
      @SubscribeEvent
      public void PlaySoundSource(PlaySoundSourceEvent event)
      {
      SoundManager manager = null;
      try
      {
      // handler -> manager -> playingList
      
      // gets SoundHandler
      net.minecraft.client.audio.SoundHandler handler;
      Field field_handler = Minecraft.class.getDeclaredField("mcSoundHandler");
      field_handler.setAccessible(true);
      handler = (net.minecraft.client.audio.SoundHandler) field_handler.get(Minecraft.getMinecraft());
      
      // gets SoundManager
      Field field_manager = net.minecraft.client.audio.SoundHandler.class.getDeclaredField("sndManager");
      field_manager.setAccessible(true);
      manager = (SoundManager) field_manager.get(handler);
      
      // gets playing list
      Field field_playing = SoundManager.class.getDeclaredField("playingSounds");
      field_playing.setAccessible(true);
      AurelienMod.playing = (HashBiMap<string, isound="">) field_playing.get(manager);
      
      }
      catch (Exception ex)
      {
      ex.printStackTrace();
      }
      }
      
      

      Pause pas problème de performance ??

      Au début je les ajouter dans une fonction qui load les sound du cout coté client ça fonctionner mais pas coté server !

      C’était suis la

      
      @SideOnly(Side.CLIENT)
      @SubscribeEvent
      public void onSoundsLoaded(SoundLoadEvent event)
      {
      
      ```</string,>
      1 réponse Dernière réponse Répondre Citer 0
      • aurelien974A Hors-ligne
        aurelien974
        dernière édition par

        En solo tout fonction bien, juste que sur le server je peux pas utilisé ( import net.minecraft.client.audio.SoundManager; )

        Du coup la fonction

        
        private boolean isSoundPlaying(ResourceLocation res)
        {
        if (AurelienMod.playing != null)
        {
        ISound[] array_playing = AurelienMod.playing.values().toArray(new ISound[AurelienMod.playing.values().size()]);
        for (int i = 0; i < array_playing.length; i++)
        {
        if (array_playing*.getPositionedSoundLocation().equals(res))
        {
        return true;
        }
        }
        }
        return false;
        }
        
        

        Du coup il return false coté server parce que la variable (AurelienMod.playing) est null

        parce que le server utilise pas de SoundManager. c’est que coté client.

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

          ~~Si les TE ne sont pas des 2 côtés alors packet obligatoire ~~
          Les TE sont gérés des 2 côtés donc suis le message de robin au-dessus

          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 et c’est normal, le son n’est que géré côté client. Il n’a aucun intérêt côté serveur. Tout ce qui concerne le son ne doit que être fait sur le client.

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

              Du coup je vais essayer nettoyer mon code, est aller après tester les Packet ^^ je vous tient au courant.

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

                Nan regarde mon message (je l’ai édité). Pas besoin de packet, rajoute juste une condition de ce genre
                if(this.worldObj.isRemote)
                {
                //Ta méthode qui check si un disque est joué
                }

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

                  je peux pas le mettre dans isSoundPlaying parce que coté server il va return false quand même ^^ du coup il va coupé la musique est remettre un autre en boucle sans que la musique soie fini ^^

                  Est quand tu parler de TE sa va dit ?

                  (Les TE sont gérés des 2 côtés)

                  En plus par IMessage je peux pas le faire non plus,

                  Le updateTick  fonctionne que sur server est pas sur client 😕

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

                    Les TileEntity sont des 2 côtés : client et serveur. Du coup tu peux très bien vérifier dans la méthode updateEntity de ta TE si une musique est jouée. Et comme on te le dit depuis plusieurs messages, occupe toi que du client ^^ Le serveur n’en a rien à faire de ta musique. Du coup rajoute cette condition :
                    if(this.worldObj.isRemote)

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

                      J’ai déjà teste ^^ le problème c’est que quand le mod est sur le server le client utilise pas la fonction updateTick, il y a que le serveur. j’ai teste avec un System.out.println est il y à que le server qui l’affiche dans le console le client non 😕

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

                        Est-ce que t’as essayé mon code au moins avant de dire qu’il ne marche pas ? Si c’est le cas, alors packet obligatoire !

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

                          Juste un problème c’est que le updateTick marche pas sur le client quand j’ajoute le mod sur un server forge.
                          Il y à que le server qui updateTick le block

                          Je comprend pas 😕

                          
                          @Override
                          public void updateTick(World world, int x, int y, int z, Random rand)
                          {
                          if (world.isRemote == true)
                          {
                          System.out.println("Client updateTick"); // Quand le mod est sur le server ça marche pas !
                          }
                          else
                          {
                          System.out.println("Server updateTick");
                          }
                          
                          world.markBlockForUpdate(x, y, z);
                          }
                          
                          
                          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

                            C’est tout à fait normal. Sur serveur il y a que les fonctions serveurs qui sont exécutés et world.isRemote est toujours faux.
                            Sur ton client c’est l’inverse.
                            Et lorsque tu joues en solo tu as les deux, car il y a un serveur intégré qui tourne.

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

                              J’ai trouvé un moyen plus simple, j’ai créer 2 classe pour géré la duré des musique, faut juste l’ajoute dans un fichier json mais du coup ça fonction des 2 coté est j’ai plus besoin de SoundManager. j’ai juste encore quelque problème avec les ticks. parce que le sound s’arrête 3 seconde en avance ^^

                              Je passerai le code.

                              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