MFF

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

    Communiquer entre le client et le serveur : le réseau et les paquets

    Planifier Épinglé Verrouillé Déplacé Le réseau
    channel1.15.21.14.4packetpaquet1.13.2network
    11 Messages 3 Publieurs 3.4k Vues 2 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.
    • FlowF Hors-ligne
      Flow
      dernière édition par

      Salut Broken,

      merci pour ce tutoriel très complet !

      J’ai cependant une question qui pourra peut-être aider plus d’un!

      Pour un packet envoyé au client, comme tu le précises le Context#getSender ne fonctionne pas car nous sommes du côté client, il faudrait donc utiliser Minecraft#getInstance#player sauf que lors de l’enregistrement côté client aucun problème mais côté coté serveur la classe EntityPlayerSP n’est pas trouvé (ce qui est logique).

      Comment faut-il donc procéder ? Car un OnlyIn(Dist.CLIENT) au dessus du handler ne fonctionne pas ?

      Merci encore 🙂

      Oui ce gif est drôle.

      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,

        Tu as aussi le problème si tu mets le code utilisant EntityPlayerSP dans la fonctionctx.get().enqueueWork(() -> { }); ?

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

          Salut,

          oui…

          f05b4f04-aca5-4860-9767-a4618ae53e8d-image.png

          Oui ce gif est drôle.

          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 robin4002

            ctx.get().enqueueWork(new Runnable() {
                @Override
                @OnlyIn(Dist.CLIENT)
                public void run() {
                    EntityPlayerSP player = Minecraft.getInstance().player;
                    ....
                }
            });
            

            Comme ça je pense que ça sera bon. Par contre c’est moins bien pour la lisibilité (pas possible d’appliquer l’annotation sur une lambda).

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

              @robin4002 a dit dans Communiquer entre le client et le serveur : le réseau et les paquets :

              ctx.get().enqueueWork(new Runnable() { @Override @OnlyIn(Dist.CLIENT) public void run() { EntityPlayerSP player = SGClient.MC.player; … } });

              Toujours pas 😕

              Voici l’erreur

              	Index: 1
              	Listeners:
              		0: NORMAL
              		1: net.minecraftforge.eventbus.EventBus$$Lambda$1843/1994991750@5b112b8d
              java.lang.BootstrapMethodError: java.lang.NoSuchMethodError: fr.fifoube.packets.PacketMoneyData.handle(Lfr/fifoube/packets/PacketMoneyData;Ljava/util/function/Supplier;)V
              	at fr.fifoube.packets.PacketsRegistery.registerNetworkPackets(PacketsRegistery.java:18)
              	at fr.fifoube.main.ModEconomyInc.setup(ModEconomyInc.java:74)
              	at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:209)
              	at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:201)
              	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:266)
              	at net.minecraftforge.fml.javafmlmod.FMLModContainer.fireEvent(FMLModContainer.java:105)
              	at java.util.function.Consumer.lambda$andThen$0(Unknown Source)
              	at java.util.function.Consumer.lambda$andThen$0(Unknown Source)
              	at net.minecraftforge.fml.ModContainer.transitionState(ModContainer.java:111)
              	at net.minecraftforge.fml.ModList.lambda$null$9(ModList.java:120)
              	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
              	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
              	at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
              	at java.util.stream.ForEachOps$ForEachTask.compute(Unknown Source)
              	at java.util.concurrent.CountedCompleter.exec(Unknown Source)
              	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
              	at java.util.concurrent.ForkJoinTask.doInvoke(Unknown Source)
              	at java.util.concurrent.ForkJoinTask.invoke(Unknown Source)
              	at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(Unknown Source)
              	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(Unknown Source)
              	at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
              	at java.util.stream.ReferencePipeline.forEach(Unknown Source)
              	at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source)
              	at net.minecraftforge.fml.ModList.lambda$dispatchParallelEvent$10(ModList.java:120)
              	at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(Unknown Source)
              	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
              	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source)
              	at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
              	at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
              Caused by: java.lang.NoSuchMethodError: fr.fifoube.packets.PacketMoneyData.handle(Lfr/fifoube/packets/PacketMoneyData;Ljava/util/function/Supplier;)V
              	at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
              	at java.lang.invoke.MemberName$Factory.resolve(Unknown Source)
              	at java.lang.invoke.MemberName$Factory.resolveOrFail(Unknown Source)
              	at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(Unknown Source)
              	at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(Unknown Source)
              	at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(Unknown Source)
              	... 29 more
              
              [23:25:32.445] [modloading-worker-1/ERROR] [ne.mi.fm.ja.FMLModContainer/LOADING]: Caught exception during event FMLCommonSetupEvent dispatch for modid economyinc
              java.lang.BootstrapMethodError: java.lang.NoSuchMethodError: fr.fifoube.packets.PacketMoneyData.handle(Lfr/fifoube/packets/PacketMoneyData;Ljava/util/function/Supplier;)V
              	at fr.fifoube.packets.PacketsRegistery.registerNetworkPackets(PacketsRegistery.java:18) ~[main/:?]
              	at fr.fifoube.main.ModEconomyInc.setup(ModEconomyInc.java:74) ~[main/:?]
              	at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:209) ~[eventbus-0.8.1-service.jar:?]
              	at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:201) ~[eventbus-0.8.1-service.jar:?]
              	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:266) ~[eventbus-0.8.1-service.jar:?]
              	at net.minecraftforge.fml.javafmlmod.FMLModContainer.fireEvent(FMLModContainer.java:105) ~[?:25.0]
              	at java.util.function.Consumer.lambda$andThen$0(Unknown Source) ~[?:1.8.0_201]
              	at java.util.function.Consumer.lambda$andThen$0(Unknown Source) ~[?:1.8.0_201]
              	at net.minecraftforge.fml.ModContainer.transitionState(ModContainer.java:111) ~[?:?]
              	at net.minecraftforge.fml.ModList.lambda$null$9(ModList.java:120) ~[?:?]
              	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source) ~[?:1.8.0_201]
              	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source) ~[?:1.8.0_201]
              	at java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[?:1.8.0_201]
              	at java.util.stream.ForEachOps$ForEachTask.compute(Unknown Source) ~[?:1.8.0_201]
              	at java.util.concurrent.CountedCompleter.exec(Unknown Source) ~[?:1.8.0_201]
              	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) ~[?:1.8.0_201]
              	at java.util.concurrent.ForkJoinTask.doInvoke(Unknown Source) ~[?:1.8.0_201]
              	at java.util.concurrent.ForkJoinTask.invoke(Unknown Source) ~[?:1.8.0_201]
              	at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(Unknown Source) ~[?:1.8.0_201]
              	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(Unknown Source) ~[?:1.8.0_201]
              	at java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[?:1.8.0_201]
              	at java.util.stream.ReferencePipeline.forEach(Unknown Source) ~[?:1.8.0_201]
              	at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) ~[?:1.8.0_201]
              	at net.minecraftforge.fml.ModList.lambda$dispatchParallelEvent$10(ModList.java:120) ~[?:?]
              	at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(Unknown Source) [?:1.8.0_201]
              	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) [?:1.8.0_201]
              	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source) [?:1.8.0_201]
              	at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) [?:1.8.0_201]
              	at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source) [?:1.8.0_201]
              Caused by: java.lang.NoSuchMethodError: fr.fifoube.packets.PacketMoneyData.handle(Lfr/fifoube/packets/PacketMoneyData;Ljava/util/function/Supplier;)V
              	at java.lang.invoke.MethodHandleNatives.resolve(Native Method) ~[?:1.8.0_201]
              	at java.lang.invoke.MemberName$Factory.resolve(Unknown Source) ~[?:1.8.0_201]
              	at java.lang.invoke.MemberName$Factory.resolveOrFail(Unknown Source) ~[?:1.8.0_201]
              	at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(Unknown Source) ~[?:1.8.0_201]
              	at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(Unknown Source) ~[?:1.8.0_201]
              	at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(Unknown Source) ~[?:1.8.0_201]
              	... 29 more
              [23:25:32.492] [modloading-worker-2/DEBUG] [ne.mi.fm.ja.FMLModContainer/LOADING]: Fired event for modid forge : FMLCommonSetupEvent
              [23:25:32.494] [Server thread/FATAL] [ne.mi.fm.ModLoader/]: Failed to complete lifecycle event SETUP, 1 errors found
              [23:25:32.494] [Server thread/ERROR] [minecraft/MinecraftServer]: Encountered an unexpected exception
              net.minecraftforge.fml.LoadingFailedException: null
              	at net.minecraftforge.fml.ModLoader.dispatchAndHandleError(ModLoader.java:157) ~[?:?]
              	at net.minecraftforge.fml.ModLoader.loadMods(ModLoader.java:144) ~[?:?]
              	at net.minecraftforge.fml.server.ServerModLoader.begin(ServerModLoader.java:44) ~[?:?]
              	at net.minecraft.server.dedicated.DedicatedServer.init(DedicatedServer.java:119) ~[?:?]
              	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:595) [?:?]
              	at java.lang.Thread.run(Unknown Source) [?:1.8.0_201]
              [23:25:32.504] [Forge Version Check/INFO] [ne.mi.fm.VersionChecker/]: [forge] Starting version check at https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json
              [23:25:32.522] [Server thread/ERROR] [minecraft/MinecraftServer]: This crash report has been saved to: D:\Documents_D\EconomyInc\MC1132\EconomyIncV16MC1132v250193\run\.\crash-reports\crash-2019-05-10_23.25.32-server.txt
              [23:25:32.546] [Server thread/INFO] [minecraft/MinecraftServer]: Stopping server
              [23:25:32.547] [Server thread/INFO] [minecraft/MinecraftServer]: Saving worlds
              [23:25:32.550] [Server Shutdown Thread/INFO] [minecraft/MinecraftServer]: Stopping server
              [23:25:32.551] [Server Shutdown Thread/INFO] [minecraft/MinecraftServer]: Saving worlds
              

              EDIT : Je n’ai rien dis, ca fonctionne! J’avais oublier d’enlever l’autre OnlyIn x)

              Merci!

              Oui ce gif est drôle.

              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 robin4002

                Ah visiblement il cherche quand même la méthode run, donc en effet ce n’est bon.
                Ceci devrait aussi fonctionner :

                ctx.get().enqueueWork(() -> {
                    DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> {
                        EntityPlayerSP player = Minecraft.getInstance().player;
                    });
                });
                
                FlowF 1 réponse Dernière réponse Répondre Citer 1
                • FlowF Hors-ligne
                  Flow @robin4002
                  dernière édition par

                  @robin4002 a dit dans Communiquer entre le client et le serveur : le réseau et les paquets :

                  Ah visiblement il cherche quand même la méthode run, donc en effet ce n’est bon.
                  Pas d’autres choix que faire ça alors :

                  DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> {
                      EntityPlayerSP player = Minecraft.getInstance().player;
                  });
                  

                  J’avais oublier d’enlever l’autre OnlyIn sur le handle, ca fonctionne parfaitement. Maintenant tu dis que ce n’est pas “propre”, tu vois une alternative plus propre ?

                  Oui ce gif est drôle.

                  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 robin4002

                    C’est entièrement valide concernant la logique, donc c’est propre à ce niveau.

                    C’est par contre plus lourd niveau syntaxe que l’écriture avec une fonction lambda.

                    FlowF 1 réponse Dernière réponse Répondre Citer 1
                    • FlowF Hors-ligne
                      Flow @robin4002
                      dernière édition par

                      @robin4002 Ok je vois, donc pas d’autre possibilité de faire alors ? A part ce que tu as mis au dessus ? C’était beaucoup plus propre en 1.12.2

                      Oui ce gif est drôle.

                      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 robin4002

                        Je ne pense pas qu’il y a d’autres moyens.
                        EDIT en fait si, comme ça :

                        public static void handle(PacketXXXX packet, Supplier<NetworkEvent.Context> ctx) {
                            ctx.get().enqueueWork(() -> handleClient(packet));
                            ctx.get().setPacketHandled(true);
                        }
                        
                        @OnlyIn(Dist.CLIENT)
                        public static void handleClient(PacketXXXX packet) {
                            EntityPlayerSP player = Minecraft.getInstance().player;
                        }
                        
                        1 réponse Dernière réponse Répondre Citer 0
                        • robin4002R robin4002 a fait référence à ce sujet sur
                        • robin4002R robin4002 a fait référence à ce sujet sur
                        • robin4002R robin4002 a fait référence à ce sujet sur
                        • 1 / 1
                        • Premier message
                          Dernier message
                        Design by Woryk
                        ContactMentions Légales

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB