-
Merci Blackout pour ce tuto, il vas bien m’aider pour enfin comprendre les paquets !

-
Merci pour le tuto, un petit problème (je sais pas si je dois le mettre ici on dans support) quand j’utilise la methode registermessage(…) eclipse me met une erreur (souligné en rouge), donc je met le commentaire qu’il me donne :
The method registerMessage(Class>, Class<req>, int, Side) in the type SimpleNetworkWrapper is not applicable for the arguments (Class<packetshema.packethandler>, Class<packetshema.packet>, int, Side)Mon code :
:::public static void register(){ Defaults.channel.registerMessage(PacketShema.PacketHandler.class, PacketShema.Packet.class, Defaults.shemapacid, Side.SERVER); }:::
ma classe PacketShema :
:::public class PacketShema{ public class Packet implements IMessage{ public void fromBytes(ByteBuf buf) { } @Override public void toBytes(ByteBuf buf) { } } public class PacketHandler implements IMessageHandler{ @Override public IMessage onMessage(IMessage message, MessageContext ctx) { return null; } } }:::
Merci pour votre aide.
Edit : je suis en 1.7.10</packetshema.packet></packetshema.packethandler></req>
-
public class PacketShema{ public class Packet implements IMessage{ public void fromBytes(ByteBuf buf) { } @Override public void toBytes(ByteBuf buf) { } } public class PacketHandler implements IMessageHandler<packet, imessage="">{ @Override public IMessage onMessage(IMessage message, MessageContext ctx) { return null; } } }Ta classe devrait être comme ça.</packet,>
-
Comme l’a dit Robin, ton IMessageHandler prend 2 parametres de type :
IMessageHandler<packetarecevoir, packetaretourner=“”></packetarecevoir,> -
Ok merci, je vais revoir quelques cours de java sur les impléments ça ne fera pas de mal.
-
Si je veux envoyer un message du client au serveur et avoir une réponse du serveur ( au client logiquement ) je dois faire un autre type de channel ? ( NetworkRegistry.INSTANCE.newChannel ) ou le ( NetworkRegistry.INSTANCE.newSimpleChannel ) suffit ?
-
Tu utilises ton channel pour l’envoie de message, que se soit client ou serveur.
Tu ne crées un nouveau channel que si tu as plus de 255 types de packet. -
Salut j’ai un probleme:
le message ne s’affiche pas dans la console quand je mets ce codepackage com.harrypotter.sosoh.proxy; import io.netty.buffer.ByteBuf; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; public class PaquetHandler implements IMessage { private String text; public PaquetHandler() { } public PaquetHandler(String text) { this.text = text; } @Override public void fromBytes(ByteBuf buf) { text = ByteBufUtils.readUTF8String(buf); // this class is very useful in general for writing more complex objects } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, text); } public static class Handler implements IMessageHandler <paquethandler, imessage="">{ @Override public IMessage onMessage(PaquetHandler message, MessageContext ctx) { if(message.text == "p"){ System.out.println(String.format("Received %s from %s", message.text, ctx.getServerHandler().playerEntity.getDisplayName())); } return null; // no response in this case } } }mais si je mets lui oui:
package com.harrypotter.sosoh.proxy; import io.netty.buffer.ByteBuf; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; public class PaquetHandler implements IMessage { private String text; public PaquetHandler() { } public PaquetHandler(String text) { this.text = text; } @Override public void fromBytes(ByteBuf buf) { text = ByteBufUtils.readUTF8String(buf); // this class is very useful in general for writing more complex objects } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, text); } public static class Handler implements IMessageHandler <paquethandler, imessage="">{ @Override public IMessage onMessage(PaquetHandler message, MessageContext ctx) { System.out.println(String.format("Received %s from %s", message.text, ctx.getServerHandler().playerEntity.getDisplayName())); return null; // no response in this case } } }le code pour send le packet:
protected void actionPerformed(GuiButton guiButton) { if(guiButton.id == 0) { ModHarryPotter.network.sendToServer(new PaquetHandler("p")); } } ```</paquethandler,></paquethandler,> -
Pour les String utilise equals plutôt que ==
message.text.equals(“p”) -
Ok merci !
-
Bonjour j’ai suivi ton tuto sur les packets tout est operationnelle (super tuto appart que personne a demandé d’exemple concret ^^)
Mais je ne voie pas quelle méthode rajouter dans la partie implémentation de l’handler pour pouvoir téléporter un joueur à une position x, y, z défini
Merci d’avance
-
GG quand j’aurais le temps je vais venir le grignoté tranquillement ! j’ai trop de retard en ce moment j’ai du refaire mon mod 3 fois d’affilé " une corde svp" !!
-
@‘Antoine_’:
Bonjour j’ai suivi ton tuto sur les packets tout est operationnelle (super tuto appart que personne a demandé d’exemple concret ^^)
Mais je ne voie pas quelle méthode rajouter dans la partie implémentation de l’handler pour pouvoir téléporter un joueur à une position x, y, z défini
Merci d’avance
A mon avis, tu n’as pas besoin de paquet pour téléporter un joueur.
Je pense que le système de paquet est déjà implémenté de base pour cette action.
Tu dois avoir une méthode coté serveur pour le faire. Cette méthode envoie d’elle même les paquets qui vont bien pour que le client reste synchronisé.Si tu veux TP un joueur a partir d’un client, dans ce cas, il faut envoyer un paquet qui contient toutes les informations nécessaire pour que le serveur TP le joueur avec cette même méthode.
-
Sinon tu peux faire un player.setPositionAndUpdate
-
J’avais pensais à çà aussi robin mais j’ai une erreur ….
public class Packetteleport implements IMessage { private static String text; public Packetteleport () { } public Packetteleport (String text) { this.text = text; } @Override public void fromBytes(ByteBuf buf) { text = ByteBufUtils.readUTF8String(buf); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, text); } public static class Handler implements IMessageHandler <packetteleport ,="" imessage="">{ @Override public IMessage onMessage(Packetteleport message, MessageContext ctx) { switch(text) { case "gui1": System.out.println("Bonjour monsieur !"); player.setPositionAndUpdate(-22, 37, -694); break; case "gui2": System.out.println("Bonsoir monsieur !"); break; } return null; } } }J’ai une erreur sur le player.setPositionAndUpdate(-22, 37, -694);</packetteleport>
-
Normal, il faut récupérer l’instance du joueur x)
Remplace player par ctx.getServerHandler().playerEntity -
Oui je sais qu’il faut récupérer l’instance j’ai essayer plein de chose, mais je n’est rien trouvé de concluant mais tu viens de me sauver la vie .
Merci beaucoup
ROBIN IS GOD!!!
-
Salut je ne trouves pas comment faire des packets avec ma List <string>voila ma classe de packet:
public class PacketSpellsList implements IMessage { private static List <string>spellsList = new ArrayList<string>(); public PacketSpellsList() { } public PacketSpellsList(List <string>spellsList) { this.spellsList = spellsList; } @Override public void fromBytes(ByteBuf buf) { } @Override public void toBytes(ByteBuf buf) { } public static class Handler implements IMessageHandler <packetmana, imessage="">{ @Override public IMessage onMessage(PacketMana message, MessageContext ctx) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; ExtendedEntityProps props = ExtendedEntityProps.get(player); props.spellsList = spellsList; return null; } } } ```</packetmana,></string></string></string></string> -
@‘sosoh’:
Salut je ne trouves pas comment faire des packets avec ma List <string>voila ma classe de packet:
public class PacketSpellsList implements IMessage { private static List <string>spellsList = new ArrayList<string>(); public PacketSpellsList() { } public PacketSpellsList(List <string>spellsList) { this.spellsList = spellsList; } @Override public void fromBytes(ByteBuf buf) { } @Override public void toBytes(ByteBuf buf) { } public static class Handler implements IMessageHandler <packetmana, imessage="">{ @Override public IMessage onMessage(PacketMana message, MessageContext ctx) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; ExtendedEntityProps props = ExtendedEntityProps.get(player); props.spellsList = spellsList; return null; } } } ```</packetmana,></string></string></string></string> -
En effet je l’ai expliqué dans le tutoriel vidéo.
toBytes :
Tu écrit la taille de la liste
Avec une boucle for tu initialise la liste.
fromBytes :
Tu lis la taille de la liste
Avec une boucle for de 0 au nombre lu juste avant, tu ajoute à la liste ce que tu lis.