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.
    • DeletedD Hors-ligne
      Deleted
      dernière édition par

      Tu pourrais mettre les balises java pour faciliter l’aperçu du code ?
      De + si tu respectais la convention, ça serait aussi + apréciable niveau lecture.
      Et quand souhaites-tu vérifier que le son est joué, dans ta TE ? Je te rappelle que les musiques ne sont gérées que côté server, du coup tu n’as pas à t’embêter au niveau de ton serveur, c’est le client qui s’en occupera 😉

      1 réponse Dernière réponse Répondre Citer 0
      • 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