跳转至

RPC Packet

在原版或基于 Forge 的模组开发中,维护自定义网络数据包通常十分繁琐。 你通常需要编写大量的样板网络代码:

  • 定义数据包类
  • 手动注册它们
  • 处理序列化和反序列化

为了简化这一流程,LDLib2 引入了一个基于注解的 RPC 系统,使用 @RPCPacket

使用 @RPCPacket,你可以在你的代码库中任意位置声明一个静态方法,并将其作为网络数据包处理器。 被注解的方法本身就成为数据包的执行目标,其参数代表在客户端和服务端之间传输的数据。

  • @RPCPacket("id"):将方法注册为具有唯一标识符的 RPC 处理器。
  • RPCSender(可选):如果声明为第一个参数,LDLib2 会注入发送方信息,允许你区分调用是在客户端还是服务端上执行的。
  • 方法参数:所有参数(除 RPCSender 外)都会自动序列化并传输。

Note

参数类型应在 类型支持 中受到支持。

RPCPacketDistributor

提供工具方法,用于向服务端、所有玩家或特定目标发送 RPC 调用。

// 在你想要的任意位置注解你的数据包方法
@RPCPacket("rpcPacketTest")
public static void rpcPacketTest(RPCSender sender, String message, boolean message2) {
    if (sender.isServer()) {
        LDLib2.LOGGER.info("Received RPC packet from server: {}, {}", message, message2);
    } else {
        LDLib2.LOGGER.info("Received RPC packet from client: {}, {}", message, message2);
    }
}

// 向远程/服务端发送数据包
RPCPacketDistributor.rpcToServer("rpcPacketTest", "Hello from client!", true)
RPCPacketDistributor.rpcToAllPlayers("rpcPacketTest", "Hello from server!", false)