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

    Separation client serveur

    Sans suite
    1.7.2
    4
    14
    2550
    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.
    • RedRelay
      RedRelay Moddeurs confirmés last edited by

      Salut,

      J’ai un soucis de compréhension concernant la séparation client/serveur des mods.
      Je ne serais pas explicitement vous dire ce que je ne comprends pas, parce qu’en gros, je ne comprends quasi rien.
      Et vu que je suis sur mon vieux Debian de 512Mo RAM et le proco du début des années 2000 qui va avec, quand je lance un test, je ne peux pas lancer le serveur et le client a la fois et rien que le client c’est 30 min pour faire un test ^^

      Comme j’ai un bon gros ensemble de classe, et que le tout est assez complexe quand on n’a pas le nez dedans, je ne vais pas balancer de code.
      Le mod sur lequel je travail s’appel Jobs donc ça vous donne une idée général de se que cela consiste.

      J’ai une classe Joueur qui représente un joueur (notamment les informations additionnelles lié au mod).
      Et une autre ListeJoueur qui possède une Map <entityplayer, joueur=“”>en static.

      Lorsque le joueur rentre dans une partie, une instance de Joueur est ajouter a la Map de ListeJoueur.
      Lorsqu’il se déconnecte, l’instance qui le représente est supprimer de la Map de ListeJoueur.

      J’aimerai que les events liée au Join/Leave game se trouve dans la classe Joueur.

      Qu’est ce qui est serveur ? qu’est ce qui est client ? Est ce que je dois faire un proxy ou non ?
      J’imagine que la liste des joueurs et que l’instance du joueur, c’est la partie serveur non ?
      Donc ma classe joueur doit être serverSide only ou forge va faire la séparation automatiquement ?

      Merci :)</entityplayer,>

      –------------------------------------------------------------------------------------
      Si tu trouves mon intervention pertinente, n'hésite pas a m…

      1 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

        Salut,
        Normalement tu n’as pas à utiliser @SideOnly(Side.SERVER)

        La liste des joueurs, ça dépend ce que tu compte en faire, si c’est pour des rendus, il faut les mettre client, sinon serveur.
        Et sinon tu le laisse des deux côté, la plupart du code de minecraft est joué par le client et le serveur, d’où l’utilisation de !world.isRemote dans certaines fonctions.

        1 Reply Last reply Reply Quote 0
        • RedRelay
          RedRelay Moddeurs confirmés last edited by

          Ok, mais pour optimisé les calcul que fait le client quand il joue sur serveur, le mieux serait d’utiliser les @SideOnly() non ?
          La par exemple je fais des test sur l’event PlayerLoggedInEvent, quand je met @SideOnly(Side.SERVER),
          ça ne se déclenche pas quand je joue en solo. Pourtant quand on joue solo, il y a quand même un serveur local, donc ça devrait s’aficher non ?

          –------------------------------------------------------------------------------------
          Si tu trouves mon intervention pertinente, n'hésite pas a m…

          1 Reply Last reply Reply Quote 0
          • robin4002
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

            Le side only prend par rapport au type de l’application. Donc @SideOnly(Side.SERVER) correspond au serveur intégré seulement. C’est pour ça que j’ai dis que normalement dans un mod normal, il ne devrait pas servir.

            1 Reply Last reply Reply Quote 0
            • RedRelay
              RedRelay Moddeurs confirmés last edited by

              Ah ok d’accord je comprend mieux 🙂
              C’est pas super optimisé je trouve _

              –------------------------------------------------------------------------------------
              Si tu trouves mon intervention pertinente, n'hésite pas a m…

              1 Reply Last reply Reply Quote 0
              • RedRelay
                RedRelay Moddeurs confirmés last edited by

                La pour le coups j’ai encore un problème ^^
                J’ai un gui qui a besoin d’informations concernant le client, seulement ses informations sont initialisée lorsque le client rejoint une partie.

                Du coups je me retrouve avec des null pointer exceptions.

                Comment je peux faire pour initialiser mon GUI proprement uniquement lorsqu’il rejoint une partie ?

                J’ai essayé ça :

                private GuiJob guiJob;
                
                @SubscribeEvent
                public void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event) {
                System.out.println("Player join : "+Minecraft.getMinecraft().thePlayer);
                if(event.player.getDisplayName().equals(Minecraft.getMinecraft().thePlayer.getDisplayName())) {
                System.out.println("player is me");
                guiJob = new GuiJob();
                FMLCommonHandler.instance().bus().register(guiJob);
                }
                }
                
                @SubscribeEvent
                public void onPlayerLeave(PlayerEvent.PlayerLoggedOutEvent event) {
                if(event.player.getDisplayName().equals(Minecraft.getMinecraft().thePlayer.getDisplayName())) {
                FMLCommonHandler.instance().bus().unregister(guiJob);
                guiJob = null;
                }
                }
                

                Mais Minecraft.getMinecraft().thePlayer est toujours null :'/

                –------------------------------------------------------------------------------------
                Si tu trouves mon intervention pertinente, n'hésite pas a m…

                1 Reply Last reply Reply Quote 0
                • jglrxavpok
                  jglrxavpok Modérateurs last edited by

                  Normal. Minecraft.getMinecraft() est côté client seulement 😉
                  Utilise le player de l’event

                  Modérateur sur MFF. 
                  Mon Github: http://github.com/jglrxavpok
                  Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

                  1 Reply Last reply Reply Quote 0
                  • RedRelay
                    RedRelay Moddeurs confirmés last edited by

                    J’ai mis des @SideOnly(Side.CLIENT), mais thePlayer est toujours null 😕
                    Je préfèrerai ne pas utiliser le player de l’event, car si un autre joueur se connect, je vais aussi initialisé la chose 😕

                    Autre chose,
                    J’ai une class Lumberjack que voici :

                    package fr.mff.eyzox.job.defaultjob.common;
                    
                    /*import …*/
                    
                    public class Lumberjack extends Job {
                    
                    public static final String NAME = "Lumberjack";
                    public static final ResourceLocation TEXTURE = new ResourceLocation(Main.MODID, "lumberjack.png");
                    
                    @Override
                    public String getName() {
                    return NAME;
                    }
                    
                    @Override
                    public int getIconID() {
                    return Minecraft.getMinecraft().renderEngine.getTexture(TEXTURE).getGlTextureId();
                    }
                    
                    public Lumberjack() {
                    MinecraftForge.EVENT_BUS.register(this);
                    Minecraft.getMinecraft().renderEngine.bindTexture(TEXTURE);
                    }
                    
                    @SubscribeEvent
                    public void onBlockBreak(BlockEvent.BreakEvent event) {
                    if(event.block instanceof BlockLog) {
                    EyJobPlayer player = (EyJobPlayer) ExtensiblePlayer.getPlayerAddon(event.getPlayer(), EyJobPlayer.ADDON_NAME);
                    if(player != null) {
                    JobLevel jobLevel = player.getJob(this);
                    if(jobLevel != null) {
                    jobLevel.setEXP(jobLevel.getEXP()+1);
                    }
                    }
                    }
                    
                    }
                    
                    }
                    

                    Comment faire la séparation proprement entre le serveur et le client ?

                    –------------------------------------------------------------------------------------
                    Si tu trouves mon intervention pertinente, n'hésite pas a m…

                    1 Reply Last reply Reply Quote 0
                    • robin4002
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                      Étrange que le player soit null. Pour séparer le client et le serveur, les proxys sont tes amis.

                      1 Reply Last reply Reply Quote 0
                      • RedRelay
                        RedRelay Moddeurs confirmés last edited by

                        La problème des poxies c’est qu’il me faut obligatoirement un attribut static non ?
                        Je peux pas faire un proxy dans une methode ?

                        Et ça veut dire qu’a chaque fois que je vais devoir créé un metier, il va me falloir un LumberjackServer et un LumberjackClient extend LumberjackServer ??

                        –------------------------------------------------------------------------------------
                        Si tu trouves mon intervention pertinente, n'hésite pas a m…

                        1 Reply Last reply Reply Quote 0
                        • Superloup10
                          Superloup10 Modérateurs last edited by

                          De toutes façon, pour un mod, le proxy est obligatoire, sinon, crash.

                          Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

                          Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

                          1 Reply Last reply Reply Quote 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                            Non x)
                            Tu appelle ta méthode comme ça :
                            ClassePrincipale.proxy.methode()
                            Et ensuite dans cette méthode tu mets ce que tu veux.

                            Sinon si tu as l’objet du monde tu peux aussi utiliser world.isRemote.

                            1 Reply Last reply Reply Quote 0
                            • RedRelay
                              RedRelay Moddeurs confirmés last edited by

                              J’ai pas l’objet world 😕

                              Et ça veut dire qu’a chaque fois que je vais devoir créé un metier, il va me falloir un LumberjackServer et un LumberjackClient extend LumberjackServer ??

                              –------------------------------------------------------------------------------------
                              Si tu trouves mon intervention pertinente, n'hésite pas a m…

                              1 Reply Last reply Reply Quote 0
                              • robin4002
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                Non, absolument pas. Dans ta classe Lumberjack, tu appelle le proxy, et dans le proxy tu fais ce que tu veux.

                                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