Résolu Communication forge spigot
-
Bonjour j’essaye de créer une communication entre forge et spigot pour transmettre des données depuis mon plugin à mon mod pour ça j’utilise les packets la communication marche très bien cependant mon mod ne reçoit aucun donnée du packet envoyé par le plugin
mes classes:
côté forge :
public class SpigotDataPacket implements IMessage { private String text; public SpigotDataPacket() { System.out.println("IT'S A TEST OK"); } public SpigotDataPacket(String text) { System.out.println("IT'S A TEST OK"); 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<SpigotDataPacket, IMessage> { @Override public IMessage onMessage(SpigotDataPacket message, MessageContext ctx) { System.out.println(String.format("Received %s", message.text)); return null; // no response in this case } } }
côté spigot
public static void startDataTransmission() { if(startedDataTransmission == true) return; startedDataTransmission = true; BukkitScheduler scheduler = Bukkit.getPluginManager().getPlugin("Craftyourliferp-Core").getServer().getScheduler(); scheduler.scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("Craftyourliferp-Core"), new Runnable() { @Override public void run() { System.out.println("Sending data to client"); Player[] players = Bukkit.getOnlinePlayers(); if(players.length > 0) { for(int p = 0; p < players.length; p++) { BigDecimal s = main.es.getUser(players[p]).getMoney(); String msg = "PMONEY|" + s; ByteArrayDataOutput r = ByteStreams.newDataOutput(); r.writeByte(5); r.writeChars(msg); System.out.println("§4" + r.toByteArray()); players[p].sendPluginMessage(Bukkit.getPluginManager().getPlugin("Craftyourliferp-Core"), "CYLRP", r.toByteArray()); } } } }, 0L, 20L * 60);
Logs côté client
[17:58:15] [Client thread/INFO] [STDOUT]: [fr.craftyourliferp.network.SpigotDataPacket$Handler:onMessage:37]: Received [17:59:14] [Client thread/INFO] [STDOUT]: [fr.craftyourliferp.network.SpigotDataPacket$Handler:onMessage:37]: Received [18:00:14] [Client thread/INFO] [STDOUT]: [fr.craftyourliferp.network.SpigotDataPacket$Handler:onMessage:37]: Received
Comme vous pouvez le voir la communication marche parfaitement le côté client reçoit bien le packet envoyé depuis spigot mais je n’arrive pas récupérer les données du packet.
merci d’avance à ceux qui peuvent m’aider.
-
Salut,
Pour pouvoir récupérer les données d’un packet envoyé par spigot (qui est un packet CustomPayload), il faut utiliser une FMLEventDrivenChannel (à register avec NetworkRegistry), et register une classe d’event sur cet FMLEventDrivenChannel (l’event à utiliser étant ClientCustomPacketEvent de mémoire).
-
@aymericred a dit dans Communication forge spigot [1.7.10] :
es d’un packet envoyé par spigot (qui est un packet CustomPayload), il faut utiliser une FMLEventDrivenChan
Merci beaucoup tu me sauves la vie!