-
[1.12.2] Bidirectional packets with Spigot
Hello everyone. I'm trying to establish a bidirectional channel between my Spigot plugin and my Forge mod. I just need to be able to send some data (in form of a byte array) from the client from the server. And send some data back (also byte array) from the server to the client I have created a basic mod and a basic plugin to test things out. But I encountered an issue. I can send from the client (forge), and receive into my plugin (spigot). But I can't send back from spigot to forge. There are no errors. I've tried debugging in wireshark, but it's pretty difficult as I'm flooded with protocol packets and I don't know what the headers are. First, here is my source for the client side (forge) PacketHandler: 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 PacketHandler implements IMessageHandler<GenericMessage, IMessage> { @Override public IMessage onMessage(GenericMessage message, MessageContext ctx) { System.out.println("RECEIVED CL MESSAGE !"); return message; } } HUDData: import java.text.SimpleDateFormat; import java.util.Date; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.relauncher.Side; public class HUDData { public SimpleNetworkWrapper network; public int ticksSinceLastPulse = 0; public void preInit() { network = NetworkRegistry.INSTANCE.newSimpleChannel("LKHud"); PacketHandler handler = new PacketHandler(); network.registerMessage(handler, GenericMessage.class, 0, Side.CLIENT); System.out.println("LKHud registered as CLIENT Side with 0"); } @SubscribeEvent public void onClientTick(TickEvent.ClientTickEvent event) { if (event.phase == TickEvent.Phase.START) { ticksSinceLastPulse++; if (ticksSinceLastPulse > 300) { this.sendHUDRefresh(); ticksSinceLastPulse = 0; } } } void sendHUDRefresh() { System.out.println("Sending test message to server"); network.sendToServer(new GenericMessage(new SimpleDateFormat("dd-MM-yyyy hh:mm:ss").format(new Date()))); System.out.println("Sent test message to server"); } } GenericMessage: import io.netty.buffer.ByteBuf; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; public class GenericMessage implements IMessage { String s; public GenericMessage() { System.out.println("Incoming message"); // Empty constructor for incoming messages. } // Constructor for outgoing messages public GenericMessage(String s) { this.s = s; } @Override public void fromBytes(ByteBuf buf) { // Convert the ByteBuf object to a String object System.out.println("From Bytes"); s = ByteBufUtils.readUTF8String(buf); } // Just returns the message stored in the GenericMessage object public String getMessage() { return s; } @Override public void toBytes(ByteBuf buf) { // Converts the message from the outgoing constructor to bytes for sending. buf.writeBytes(s.getBytes()); } } Then, Server Side (spigot): Main: import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; public class LKHudServer extends JavaPlugin { static LKHudServer plugin; // Fired when plugin is disabled @Override public void onDisable() { } @Override public void onEnable() { plugin = this; Logger logger = this.getLogger(); logger.info("Initializing LKHudServer side"); Bukkit.getMessenger().registerOutgoingPluginChannel(this, "LKHud"); Bukkit.getMessenger().registerIncomingPluginChannel(this, "LKHud", new MessageListener()); } } MessageListenener: import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; import java.util.Arrays; public class MessageListener implements PluginMessageListener { @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { System.out.println("Received message >" + channel + "<"); if (channel.equals("LKHud")) { byte[] effectiveMessage = Arrays.copyOfRange(message, 1, message.length); System.out.println(new String(effectiveMessage)); player.sendMessage("RECEIVED MESSAGE"); byte[] output = new byte[8]; output[0] = (byte)0; output[1] = (byte)0; output[2] = (byte)0; output[3] = (byte)0; output[4] = (byte)0; output[5] = (byte)0; output[6] = (byte)0; output[7] = (byte)0; player.sendPluginMessage(LKHudServer.plugin, "LKHud", output); System.out.println("Sent back to the client"); } } } (I've read that the first byte must be equal to the packet ID, defined in HUDData) Any help or suggestion is highly welcomed. Thank you in advance
IPS spam blocked by CleanTalk.