Non résolu Packets entre Forge et Spigot
-
Hey !
J’ai besoin de faire une communication entre Forge et Spigot via packets mais je n’y arrive pas vraimentJ’ai regardé ce topic : https://www.minecraftforgefrance.fr/topic/6372/communication-bidirectionnelle-forge-spigot
Malheureusement, je n’ai pas trouvé comment faire.
J’ai compris qu’il fallait faire des packets CustomPayload mais comment ?Merci pour votre aide
-
@feedback Salut
=============== Cote Forge===============-|
Enregistrement du chanelSimpleNetworkWrapper networML = NetworkRegistry.INSTANCE.newSimpleChannel("Nom Du Chanel"); networML.registerMessage(GenericMessage.Handle.class, GenericMessage.class, 80, Side.CLIENT);
(si tu as des bugs des crash quant tu recoit un msg change la valeur [80], par une autre)
GenericMessage.class
import io.netty.buffer.ByteBuf; import io.netty.util.CharsetUtil; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; public class GenericMessage implements IMessage { public static class Handle implements IMessageHandler<GenericMessage, IMessage> { @Override public IMessage onMessage(GenericMessage message, MessageContext ctx) { OnReceiveMsg.receive(message.getMessage()); return null; } } String s; public GenericMessage() { } public GenericMessage(String s){ this.s = s; } @Override public void fromBytes(ByteBuf buf) { s = buf.toString(CharsetUtil.UTF_8); } public String getMessage() { return s; } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf,s); } }
Pour envoyer un message vers spigot
networML.sendToServer(new GenericMessage("MSG"));
Recuperer un msg envoyer depuis spigot
OnReceiveMsg.classpublic class OnReceiveMsg { public static void receive(String msg) { String[] data = msg.split(";"); for(String text: data){ System.out.println(text); } }
=============== Cote Spigot ===============
Enregistrement du chanel
Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "Nom Du Chanel"); Bukkit.getMessenger().registerIncomingPluginChannel(plugin, "Nom Du Chanel", new PacketListener());
Pour envoyer un message vers Forge
player.sendPluginMessage(plugin, "Nom Du Chanel", text.getBytes());
Recuperer un msg envoyer depuis Forge
PacketListener.classimport org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; public class PacketListener implements PluginMessageListener { @Override public void onPluginMessageReceived(String channel, Player player, byte[] bytes) { try { if (channel.equals("Nom Du Chanel")) { String info = new String(bytes); String[] data = info.split(";"); } } catch (Exception e) { e.printStackTrace(); } } }
/!\ Le nom du chanel doit être le même dans spigot et forge.