-
Après quelques nouveaux essais pour tenter de faire communiquer une suite d’entier via les paquets, je retombe sans cesse sur cette erreur que j’ai du mal à comprendre :
[13:33:24] [Client thread/ERROR] [FML]: FMLIndexedMessageCodec exception caught io.netty.handler.codec.DecoderException: java.lang.NullPointerException at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?] at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?] at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:317) [PlayerControllerMP.class:?] at net.minecraft.client.Minecraft.runTick(Minecraft.java:1693) [Minecraft.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_91] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_91] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_91] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_91] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?] at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?] at GradleStart.main(Unknown Source) [start/:?] Caused by: java.lang.NullPointerException at fr.jackcartersmith.ob.OBNetworkClient.fromBytes(OBNetworkClient.java:28) ~[OBNetworkClient.class:?] at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:17) ~[SimpleIndexedCodec.class:?] at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:77) ~[FMLIndexedMessageToMessageCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?] at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?] … 20 more [13:33:24] [Client thread/ERROR] [FML]: SimpleChannelHandlerWrapper exception io.netty.handler.codec.DecoderException: java.lang.NullPointerException at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?] at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?] at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:317) [PlayerControllerMP.class:?] at net.minecraft.client.Minecraft.runTick(Minecraft.java:1693) [Minecraft.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_91] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_91] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_91] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_91] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?] at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?] at GradleStart.main(Unknown Source) [start/:?] Caused by: java.lang.NullPointerException at fr.jackcartersmith.ob.OBNetworkClient.fromBytes(OBNetworkClient.java:28) ~[OBNetworkClient.class:?] at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:17) ~[SimpleIndexedCodec.class:?] at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:77) ~[FMLIndexedMessageToMessageCodec.class:?] at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?] at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?] … 20 moreVoici le bout de code concerné :
private List <integer>dataArray; public OBNetworkClient() {} public OBNetworkClient(List <integer>dataArray) { this.dataArray = dataArray; } @Override public void fromBytes(ByteBuf buf){ for (int i = 0; i < 5; i++){ this.dataArray.add(buf.readInt()); } } @Override public void toBytes(ByteBuf buf){ for (int i = 0; i < 5; i++){ buf.writeInt(this.dataArray.get(i)); } }Quelqu’un aurait-il une idée sur le problème ?
(Je suppose que le programme essaie de lire une valeur Int dans le flux, mais comme elle est absente pour je ne sais qu’elle raison, il lit du null)</integer></integer>
-
Dans ta fonction fromBytes, tu essayes d’ajouter ce que tu lis à la liste dataArray, sauf que cette liste est égale à null.
-
@‘AymericRed’:
Dans ta fonction fromBytes, tu essayes d’ajouter ce que tu lis à la liste dataArray, sauf que cette liste est égale à null.
Je viens de changer
private List <integer>dataArray;par
private List <integer>dataArray = new ArrayList<integer>();Je n’ai plus l’erreur, merci.
EDIT: Je vais chercher encore un peu avant de demander de l’aide ^^</integer></integer></integer>
-
Tu peux envoyer la classe complète du paquet ?
-
@‘robin4002’:
Tu peux envoyer la classe complète du paquet ?
package fr.jackcartersmith.ob; import java.util.ArrayList; import java.util.List; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import fr.jackcartersmith.ob.blocks.ExtenderTileEntity; import fr.jackcartersmith.ob.blocks.OverriderBlockTileEntity; import fr.jackcartersmith.ob.interfaces.PhotonRecieving; import fr.jackcartersmith.ob.interfaces.PhotonSending; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; public class OBNetworkClient implements IMessage { private List <integer>dataArray = new ArrayList<integer>(); public OBNetworkClient() {} public OBNetworkClient(List <integer>dataArray) { this.dataArray = dataArray; } @Override public void fromBytes(ByteBuf buf){ for (int i = 0; i < 5; i++){ this.dataArray.add(buf.readInt()); } } @Override public void toBytes(ByteBuf buf){ for (int i = 0; i < 5; i++){ buf.writeInt(this.dataArray.get(i)); } } public static class Handler implements IMessageHandler<obnetworkclient, imessage="">{ int function; int x; int y; int z; int data_value; @Override public IMessage onMessage(OBNetworkClient message, MessageContext ctx){ try{ this.function = message.dataArray.get(0); this.x = message.dataArray.get(1); this.y = message.dataArray.get(2); this.z = message.dataArray.get(3); this.data_value = message.dataArray.get(4); }catch(Exception var8){ var8.printStackTrace(); return null; } System.out.println(this.function); System.out.println(this.x); System.out.println(this.y); System.out.println(this.z); System.out.println(this.data_value); try{ if (this.function == 1){ EntityPlayerMP player = ctx.getServerHandler().playerEntity; OverriderBlockTileEntity overrider = (OverriderBlockTileEntity)player.worldObj.getTileEntity(this.x, this.y, this.z); if (overrider != null && overrider instanceof OverriderBlockTileEntity){ overrider.currentCharge = this.data_value; } } if (this.function == 3){ EntityPlayerMP player = ctx.getServerHandler().playerEntity; ExtenderTileEntity extender = (ExtenderTileEntity)player.worldObj.getTileEntity(this.x, this.y, this.z); if (extender instanceof ExtenderTileEntity){ extender.currentCharge = this.data_value; } } if (this.function == 5){ EntityPlayerMP player = ctx.getServerHandler().playerEntity; OverriderBlockTileEntity overrider = (OverriderBlockTileEntity)player.worldObj.getTileEntity(this.x, this.y, this.z); if (overrider instanceof OverriderBlockTileEntity){ overrider.shotsLeft = this.data_value; } } if (this.function == 7) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; PhotonSending ext2 = (PhotonSending)player.worldObj.getTileEntity(this.x, this.y, this.z); if (ext2 instanceof PhotonSending) { ext2.setOutputRate(this.data_value); } } if (this.function == 9) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; PhotonSending ext2 = (PhotonSending)player.worldObj.getTileEntity(this.x, this.y, this.z); if (ext2 instanceof PhotonSending) { ext2.setScaledOutput(this.data_value); } } if (this.function == 11) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; PhotonSending ext2 = (PhotonSending)player.worldObj.getTileEntity(this.x, this.y, this.z); if (ext2 instanceof PhotonSending) { ext2.setListSize(this.data_value); } } if (this.function == 13) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; PhotonRecieving ext3 = (PhotonRecieving)player.worldObj.getTileEntity(this.x, this.y, this.z); if (ext3 instanceof PhotonRecieving) { ext3.setScaledOutput(this.data_value); } } if (this.function == 15) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; PhotonRecieving ext3 = (PhotonRecieving)player.worldObj.getTileEntity(this.x, this.y, this.z); if (ext3 instanceof PhotonRecieving) { ext3.setPowerIncoming(this.data_value); } } if (this.function == 17) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; PhotonRecieving ext3 = (PhotonRecieving)player.worldObj.getTileEntity(this.x, this.y, this.z); System.out.println("DefenderPacket17Received!"); if (ext3 instanceof PhotonRecieving) { ext3.setCurrentCharge(this.data_value); } } if (this.function == 19) { System.out.println("DefenderPacket19Received!"); EntityPlayerMP player = ctx.getServerHandler().playerEntity; player.worldObj.playSoundEffect((double)this.x, (double)this.y, (double)this.z, "ob:defenderLock", 1.0F, 1.0F); } return null; }catch (Exception var7){ var7.printStackTrace(); return null; } } } }@robin4002: Dans ta vidéo tu parles que selon si on est du coté client ou serveur du paquet, la déclaration ci-dessous est différente ? Si oui en quel(s) point(s) ?
EntityPlayerMP player = ctx.getServerHandler().playerEntity; ```</obnetworkclient,></integer></integer></integer> -
ctx.getServerHandler() n’est pas possible côté client.
Côté client il faut utiliser Minecraft.getMinecraft().thePlayer pour avoir le joueur.
-
@‘robin4002’:
ctx.getServerHandler() n’est pas possible côté client.
Côté client il faut utiliser Minecraft.getMinecraft().thePlayer pour avoir le joueur.
C’est corrigé, ça marche enfin ^^
-
Bonjour, j’aiemrais récupré la liste des GameProfile du server pour l’afficher sur un GUI, sauf que avec le fromBytes, on ne peut mettre que int String bytes ect… mais pas GameProfile[] quellequ’un aurais une idée de comment faire?
-
Tu envoie un tableau de String contenant l’username, un tableau de string contenant les UUID (GameProfile.getId().toString()) puis quand tu récupère les tableaux tu peux utiliser :
GameProfile profile = new GameProfile(UUID.fromString(uuidString), username); -
Il va falloir sérialiser et désérialiser l’objet, en gros envoyer chaque propriété de l’objet, un petit exemple pour les BlockPos : https://github.com/Leviathan-Studio/LS-Lib/blob/master/src/main/java/com/leviathanstudio/lib/common/network/ByteBufUtil.java#L46-L68
Mais la question à te poser est : Est-ce que j’ai besoin des toutes les informations du GameProfile, si c’est juste pour afficher les pseudo, envoie juste les pseudos
-
sa sert à quoi le network du mod? j’ai pas compris
-
a faire communiquer le server et le client entre eux
-
je n’ai pas compric ou engristrer les packets
-
N’importe où, ça peut être dans la classe principale tout comme ça peut être dans une classe à part.
Du moment que la fonction dans laquelle ils sont enregistrer est appelé les l’init, c’est bon. -
A AymericRed 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
-
R robin4002 a fait référence à ce sujet sur