• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Proxies

    1.11.x
    1.11.x
    5
    18
    3168
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Cl00e9ment
      Cl00e9ment last edited by

      Bonjour,

      Je nage dans un flou total mais mes questions sont simples :

      • Est-ce normal que le server interne ne possède pas de ServerProxy ?
      • Comment dois-je faire pour que à tout moment je sache si je suis sur le server (interne ou non) ou sur le client ?

      Merci.

      1 Reply Last reply Reply Quote 0
      • Deleted
        Deleted last edited by

        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 Reply Last reply Reply Quote 0
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

          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 Reply Last reply Reply Quote 1
          • Cl00e9ment
            Cl00e9ment last edited by

            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 Reply Last reply Reply Quote 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

              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 Reply Last reply Reply Quote 0
              • Cl00e9ment
                Cl00e9ment last edited by

                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 Reply Last reply Reply Quote 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

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

                  1 Reply Last reply Reply Quote 0
                  • LeBossMax2
                    LeBossMax2 last edited by

                    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 Reply Last reply Reply Quote 0
                    • Cl00e9ment
                      Cl00e9ment last edited by

                      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 Reply Last reply Reply Quote 0
                      • LeBossMax2
                        LeBossMax2 last edited by

                        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 Reply Last reply Reply Quote 0
                        • Cl00e9ment
                          Cl00e9ment last edited by

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

                          1 Reply Last reply Reply Quote 0
                          • LeBossMax2
                            LeBossMax2 last edited by

                            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 Reply Last reply Reply Quote 1
                            • Cl00e9ment
                              Cl00e9ment last edited by

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

                              1 Reply Last reply Reply Quote 0
                              • AymericRed
                                AymericRed last edited by

                                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 Reply Last reply Reply Quote 0
                                • robin4002
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

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

                                  1 Reply Last reply Reply Quote 0
                                  • Cl00e9ment
                                    Cl00e9ment last edited by

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

                                    1 Reply Last reply Reply Quote 0
                                    • AymericRed
                                      AymericRed last edited by

                                      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 Reply Last reply Reply Quote 1
                                      • Cl00e9ment
                                        Cl00e9ment last edited by

                                        Ok merci de l’info !

                                        1 Reply Last reply Reply Quote 0
                                        • 1 / 1
                                        • First post
                                          Last post
                                        Design by Woryk
                                        Contact / Mentions Légales

                                        MINECRAFT FORGE FRANCE © 2018

                                        Powered by NodeBB