NMS Packetv1.0.0已發布
NMS 封包發送器
NMS Packet Sender
產生封包發送工具類,透過 ServerPlayer.connection 將 Clientbound 封包推送至客戶端(Paper NMS + Mojang mappings)。
nmspacketnettypaperweightclientboundmojang-mapped
更新:2026年4月19日GitHub
NMS Packet Sender
目的
產生標準的 NMS 封包發送工具類,涵蓋單人、多人、廣播、延遲發送等情境。所有發送點透過 ServerPlayer.connection.send(Packet<?>) 進入 Netty write queue。
平台需求
- Paper 1.21 – 1.21.3
- Paperweight userdev 1.7.2+
- Mojang mappings(Paper 1.20.5+ 原生支援)
- Java 21
產生的代碼
PacketSender.java
@SuppressWarnings("UnstableApiUsage")
public final class PacketSender {
public static void send(Player player, Packet<?> packet) {
ServerPlayer nms = ((CraftPlayer) player).getHandle();
if (nms.connection == null) return;
nms.connection.send(packet);
}
public static void broadcast(Packet<?> packet) {
Bukkit.getOnlinePlayers().forEach(p -> send(p, packet));
}
public static void sendLater(Plugin plugin, Player player, Packet<?> packet, long delayTicks) {
Bukkit.getScheduler().runTaskLater(plugin, () -> send(player, packet), delayTicks);
}
}
PacketBuilder.java(Action Bar / Title / CustomPayload)
// Action Bar
ClientboundSetActionBarTextPacket actionBar(Component message)
// Title
ClientboundSetTitleTextPacket title(Component title)
// Plugin Message
ClientboundCustomPayloadPacket customPayload(ResourceLocation channel, byte[] data)
執行緒安全
send()可在任意執行緒呼叫(Netty 排入 write queue)- 封包內容建構若依賴世界狀態,必須在主執行緒完成
connection欄位在玩家離線時為 null,需先檢查