MFF

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

    Proxies

    Planifier Épinglé Verrouillé Déplacé Résolu 1.11.x
    1.11.x
    18 Messages 5 Publieurs 3.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

      Salut,

      1. Le serveur interne fonctionne avec le Common Proxy.
        2)Tu as cette variable qui est à true, sur serveur dédié (logique), et donc à false, en solo, sur serveur interne :
        FMLCommonHandler.instance().getMinecraftServerInstance().isDedicatedServer()
      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

        Salut,
        Le proxy, tout comme le @SideOnly ont comme side le type de l’application.

        Si le client est lancé (lancement du jeu depuis le launcher ou lancement du run “client” sur eclipse", c’est Side.CLIENT si le serveur est lancé (lancement de minecraft_server.jar ou lancement du run “server” sur eclipse) c’est Side.SERVER.

        Globalement si tu veux savoir si tu es en side client ou serveur lorsque tu as le client de MC qui est lancé, tu peux utilise la valeur de world.isRemote (nécessite d’avoir world dans la fonction où tu veux check).

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

          Ok je comprends tout de suite beaucoup mieux.
          Mais justement ma deuxième question était dans le cas où je n’ai pas accès à un objet de type World.

          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

            Généralement quand tu n’as pas moyen d’avoir world tu n’as pas à te poser cette question, tu es sur du client.

            Explique le contexte précis et je te confirmerai.

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

              J’ai créé 2 objets qui sont les suivants : ServerDatabase et ClientDatabase. Ils implémentent tous deux l’interface Database que j’ai aussi créé.
              J’aimerais créer maintenant une méthode publique et statique qui retourne une ServerDatabase quand on se trouve côté server et qui sinon retourne une ClientDatabase si on est côté client.

              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

                Je ne vois pas du tout comment faire sans instance du monde.

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

                  J’ai un début d’idée, tu peut peut-être utiliser FMLServerStartingEvent comme c’est appelé lors du lancement d’un serveur (en solo aussi), mais je ne sais pas où enregistrer que l’on est coté server.

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

                    Voici ce que je propose de faire :

                        private boolean serverStarted;
                    
                        @EventHandler
                        public void onServerStarting (FMLServerStartingEvent event){
                            serverStarted = true;
                        }
                    
                        @EventHandler
                        public void onServerStopped (FMLServerStoppedEvent event){
                            serverStarted = false;
                        }
                    
                        public static void isOnServer (){
                            return serverStarted;
                        }
                    

                    Vous me garantissez donc que si isOnServer() retourne true alors on est FORCÉMENT sur le server (interne ou non). Et que si isOnServer() retourne false alors on est FORCÉMENT sur le client ?

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

                      Il va y avoir un problème car la class où il y a la variable serverStarted est commune à la partie client et server. Donc quand la partie server se lance (en solo), la variable change pour le server et le client.

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

                        Effectivement…
                        Bon bah je suis dans une impasse.
                        D’autres idées ?

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

                          J’ai deux solutions possibles, je ne les ai pas encore testé.
                           - Faire FMLCommonHandler.instance().getEffectiveSide()==Side.CLIENT; //ou Side.SERVER pour savoir si tu est sur client ou server. Mais comme expliqué dans plusieurs sujets en Anglais, dans des cas particuliers, ça peut ne pas fonctionner.

                          - ou, plus compliqué : dans FMLServerStartingEvent, tu enregistre le Thread dans une variable (à la place de serverStarted). Pour ça, tu get le thread grâce à Thread.currentThread(). Ensuite, tu change la fonction inOnServer :

                          
                          private static Thread serverThread;
                          @EventHandler
                          public void onServerStarting (FMLServerStartingEvent event){
                              serverThread = Thread.currentThread();
                          }
                          
                          @EventHandler
                          public void onServerStopped (FMLServerStoppedEvent event){
                              serverThread = null;
                          }
                          
                          public static void isOnServer (){
                             return Thread.currentThread() == serverThread;
                          }
                          
                          
                          1 réponse Dernière réponse Répondre Citer 1
                          • Cl00e9mentC Hors-ligne
                            Cl00e9ment
                            dernière édition par

                            Ok, je vois.
                            Je teste ça demain soir puis je dirait si ça a marché. 😉

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

                              Le première solution je l’ai utilisé très souvent et ca marche bien, pour la deuxième solution le problème c’est que si c’est par exemple un thread de netty (pour les packets) ça ne marchera pas.
                              Et oui la première fonction peut ne pas fonctionner mais c’est dans des cas très spécifiques que tu ne verras sûrement pas ^^

                              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
                              • robin4002R Hors-ligne
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                dernière édition par

                                Ah oui il y a getEffectiveSide. Ça me semble adapté à la situation.

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

                                  FMLCommonHandler.instance().getEffectiveSide() semble plutôt bien fonctionner mais j’aimerais connaître les cas spécifiques pour lesquels ça ne fonctionnera pas.

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

                                    Dans le cas où tu crée un thread toi même où la fonction sera exécutée, comme la fonction regarde le nom du thread pour avoir la side, (server si le nom contient “server” sinon client), mais à ce moment tu peux changer le nom du thread pour résoudre le problème.
                                    Il y a ça se trouve d’autres problèmes mais je ne crois pas, en tous cas j’en ait jamais vu.

                                    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 1
                                    • Cl00e9mentC Hors-ligne
                                      Cl00e9ment
                                      dernière édition par

                                      Ok merci de l’info !

                                      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