Jump to content

Alcibiade

Members
  • Posts

    1
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Alcibiade's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. 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
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.