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!


Log in to reply