MFF

    Minecraft Forge France
    • [[global:header.recent]]
    • [[global:header.popular]]
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

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

    Planifié Épinglé Verrouillé Déplacé Le réseau
    channel1.15.21.14.4packetpaquet1.13.2network
    11 Messages 3 Publieurs 4.0k Vues 2 Abonné
    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 En 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 En 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 En 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 En 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 En 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

                        Bonjour ! Vous semblez intéressé par cette conversation, mais vous n’avez pas encore de compte.

                        Marre de refaire défiler les mêmes messages ? Créez un compte pour retrouver votre position, recevoir des notifications des nouvelles réponses, sauvegarder vos favoris et voter pour les messages que vous appréciez.

                        Grâce à votre participation, ce message peut devenir encore meilleur 💗

                        S'inscrire Se connecter
                        • 1 / 1
                        • Premier message
                          Dernier message
                        Design by Woryk
                        ContactMentions Légales

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB