-
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

-
Salut,
Tu as aussi le problème si tu mets le code utilisant EntityPlayerSP dans la fonction
ctx.get().enqueueWork(() -> { });? -
Salut,
oui…

-
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).
-
@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 worldsEDIT : Je n’ai rien dis, ca fonctionne! J’avais oublier d’enlever l’autre OnlyIn x)
Merci!
-
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; }); }); -
@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 ?
-
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.
-
@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
-
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; } -
R robin4002 a fait référence à ce sujet sur
-
R robin4002 a fait référence à ce sujet sur
-
R robin4002 a fait référence à ce sujet sur
