Class ServerPlayNetworking

java.lang.Object
net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking

public final class ServerPlayNetworking extends Object
Offers access to play stage server-side networking functionalities.

Server-side networking functionalities include receiving serverbound packets, sending clientbound packets, and events related to server-side network handlers. Packets received by this class must be registered to PayloadTypeRegistry.playC2S() on both ends. Packets sent by this class must be registered to PayloadTypeRegistry.playS2C() on both ends. Packets must be registered before registering any receivers.

This class should be only used for the logical server.

Packet object-based API

This class provides a registration method, utilizing packet objects, registerGlobalReceiver(CustomPacketPayload.Type, PlayPayloadHandler). This handler executes the callback in the server thread, ensuring thread safety.

This payload object-based API involves three classes:

  • A class implementing CustomPacketPayload that is "sent" over the network
  • CustomPacketPayload.TypeAndCodec instance, which represents the packet's type (and its codec)
  • ServerPlayNetworking.PlayPayloadHandler, which handles the packet (usually implemented as a functional interface)

See the documentation on each class for more information.

See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static interface 
     
    static interface 
    ServerPlayNetworking.PlayPayloadHandler<T extends net.minecraft.network.protocol.common.custom.CustomPacketPayload>
    A thread-safe packet handler utilizing CustomPacketPayload.
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
    canSend(net.minecraft.server.level.ServerPlayer player, net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type<?> type)
    Checks if the connected client declared the ability to receive a specific type of packet.
    static boolean
    canSend(net.minecraft.server.level.ServerPlayer player, net.minecraft.resources.Identifier channelName)
    Checks if the connected client declared the ability to receive a packet on a specified channel name.
    static boolean
    canSend(net.minecraft.server.network.ServerGamePacketListenerImpl handler, net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type<?> type)
    Checks if the connected client declared the ability to receive a specific type of packet.
    static boolean
    canSend(net.minecraft.server.network.ServerGamePacketListenerImpl handler, net.minecraft.resources.Identifier channelName)
    Checks if the connected client declared the ability to receive a packet on a specified channel name.
    static <T extends net.minecraft.network.protocol.common.custom.CustomPacketPayload>
    net.minecraft.network.protocol.Packet<net.minecraft.network.protocol.common.ClientCommonPacketListener>
    createS2CPacket(T packet)
    Creates a packet which may be sent to a connected client.
    static Set<net.minecraft.resources.Identifier>
    Gets all channel names which global receivers are registered for.
    static Set<net.minecraft.resources.Identifier>
    getReceived(net.minecraft.server.level.ServerPlayer player)
    Gets all the channel names that the server can receive packets on.
    static Set<net.minecraft.resources.Identifier>
    getReceived(net.minecraft.server.network.ServerGamePacketListenerImpl handler)
    Gets all the channel names that the server can receive packets on.
    static Set<net.minecraft.resources.Identifier>
    getSendable(net.minecraft.server.level.ServerPlayer player)
    Gets all channel names that the connected client declared the ability to receive a packets on.
    static Set<net.minecraft.resources.Identifier>
    getSendable(net.minecraft.server.network.ServerGamePacketListenerImpl handler)
    Gets all channel names that a connected client declared the ability to receive a packets on.
    getSender(net.minecraft.server.level.ServerPlayer player)
    Gets the packet sender which sends packets to the connected client.
    getSender(net.minecraft.server.network.ServerGamePacketListenerImpl handler)
    Gets the packet sender which sends packets to the connected client.
    static void
    reconfigure(net.minecraft.server.level.ServerPlayer player)
    Put the player back into configuration phase and re-run all of the configuration tasks.
    static void
    reconfigure(net.minecraft.server.network.ServerGamePacketListenerImpl handler)
    Put the player back into configuration phase and re-run all of the configuration tasks.
    static <T extends net.minecraft.network.protocol.common.custom.CustomPacketPayload>
    boolean
    registerGlobalReceiver(net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type<T> type, ServerPlayNetworking.PlayPayloadHandler<T> handler)
    Registers a handler for a payload type.
    static <T extends net.minecraft.network.protocol.common.custom.CustomPacketPayload>
    boolean
    registerReceiver(net.minecraft.server.network.ServerGamePacketListenerImpl networkHandler, net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type<T> type, ServerPlayNetworking.PlayPayloadHandler<T> handler)
    Registers a handler for a payload type.
    static void
    send(net.minecraft.server.level.ServerPlayer player, net.minecraft.network.protocol.common.custom.CustomPacketPayload payload)
    Sends a packet to a player.
    unregisterGlobalReceiver(net.minecraft.resources.Identifier id)
    Removes the handler for a payload type.
    unregisterReceiver(net.minecraft.server.network.ServerGamePacketListenerImpl networkHandler, net.minecraft.resources.Identifier id)
    Removes the handler for a packet type.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • registerGlobalReceiver

      public static <T extends net.minecraft.network.protocol.common.custom.CustomPacketPayload> boolean registerGlobalReceiver(net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type<T> type, ServerPlayNetworking.PlayPayloadHandler<T> handler)
      Registers a handler for a payload type. A global receiver is registered to all connections, in the present and future.

      If a handler is already registered for the type, this method will return false, and no change will be made. Use unregisterGlobalReceiver(Identifier) to unregister the existing handler.

      Parameters:
      type - the packet type
      handler - the handler
      Returns:
      false if a handler is already registered to the channel
      Throws:
      IllegalArgumentException - if the codec for type has not been registered yet
      See Also:
    • unregisterGlobalReceiver

      public static @Nullable ServerPlayNetworking.PlayPayloadHandler<?> unregisterGlobalReceiver(net.minecraft.resources.Identifier id)
      Removes the handler for a payload type. A global receiver is registered to all connections, in the present and future.

      The id is guaranteed not to have an associated handler after this call.

      Parameters:
      id - the payload id
      Returns:
      the previous handler, or null if no handler was bound to the channel, or it was not registered using registerGlobalReceiver(CustomPacketPayload.Type, PlayPayloadHandler)
      See Also:
    • getGlobalReceivers

      public static Set<net.minecraft.resources.Identifier> getGlobalReceivers()
      Gets all channel names which global receivers are registered for. A global receiver is registered to all connections, in the present and future.
      Returns:
      all channel names which global receivers are registered for.
    • registerReceiver

      public static <T extends net.minecraft.network.protocol.common.custom.CustomPacketPayload> boolean registerReceiver(net.minecraft.server.network.ServerGamePacketListenerImpl networkHandler, net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type<T> type, ServerPlayNetworking.PlayPayloadHandler<T> handler)
      Registers a handler for a payload type. This method differs from registerGlobalReceiver(CustomPacketPayload.Type, PlayPayloadHandler) since the channel handler will only be applied to the player represented by the ServerGamePacketListenerImpl.

      For example, if you only register a receiver using this method when a ServerLoginNetworking.registerGlobalReceiver(Identifier, ServerLoginNetworking.LoginQueryResponseHandler) login response has been received, you should use ServerPlayConnectionEvents.INIT to register the channel handler.

      If a handler is already registered for the type, this method will return false, and no change will be made. Use unregisterReceiver(ServerGamePacketListenerImpl, Identifier) to unregister the existing handler.

      Parameters:
      networkHandler - the network handler
      type - the packet type
      handler - the handler
      Returns:
      false if a handler is already registered to the channel name
      Throws:
      IllegalArgumentException - if the codec for type has not been registered yet
      See Also:
    • unregisterReceiver

      public static @Nullable ServerPlayNetworking.PlayPayloadHandler<?> unregisterReceiver(net.minecraft.server.network.ServerGamePacketListenerImpl networkHandler, net.minecraft.resources.Identifier id)
      Removes the handler for a packet type.

      The id is guaranteed not to have an associated handler after this call.

      Parameters:
      id - the id of the payload
      Returns:
      the previous handler, or null if no handler was bound to the channel, or it was not registered using registerReceiver(ServerGamePacketListenerImpl, CustomPacketPayload.Type, PlayPayloadHandler)
    • getReceived

      public static Set<net.minecraft.resources.Identifier> getReceived(net.minecraft.server.level.ServerPlayer player)
      Gets all the channel names that the server can receive packets on.
      Parameters:
      player - the player
      Returns:
      All the channel names that the server can receive packets on
    • getReceived

      public static Set<net.minecraft.resources.Identifier> getReceived(net.minecraft.server.network.ServerGamePacketListenerImpl handler)
      Gets all the channel names that the server can receive packets on.
      Parameters:
      handler - the network handler
      Returns:
      All the channel names that the server can receive packets on
    • getSendable

      public static Set<net.minecraft.resources.Identifier> getSendable(net.minecraft.server.level.ServerPlayer player)
      Gets all channel names that the connected client declared the ability to receive a packets on.
      Parameters:
      player - the player
      Returns:
      All the channel names the connected client declared the ability to receive a packets on
    • getSendable

      public static Set<net.minecraft.resources.Identifier> getSendable(net.minecraft.server.network.ServerGamePacketListenerImpl handler)
      Gets all channel names that a connected client declared the ability to receive a packets on.
      Parameters:
      handler - the network handler
      Returns:
      true if the connected client has declared the ability to receive a packet on the specified channel
    • canSend

      public static boolean canSend(net.minecraft.server.level.ServerPlayer player, net.minecraft.resources.Identifier channelName)
      Checks if the connected client declared the ability to receive a packet on a specified channel name.
      Parameters:
      player - the player
      channelName - the channel name
      Returns:
      true if the connected client has declared the ability to receive a packet on the specified channel
    • canSend

      public static boolean canSend(net.minecraft.server.level.ServerPlayer player, net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type<?> type)
      Checks if the connected client declared the ability to receive a specific type of packet.
      Parameters:
      player - the player
      type - the packet type
      Returns:
      true if the connected client has declared the ability to receive a specific type of packet
    • canSend

      public static boolean canSend(net.minecraft.server.network.ServerGamePacketListenerImpl handler, net.minecraft.resources.Identifier channelName)
      Checks if the connected client declared the ability to receive a packet on a specified channel name.
      Parameters:
      handler - the network handler
      channelName - the channel name
      Returns:
      true if the connected client has declared the ability to receive a packet on the specified channel
    • canSend

      public static boolean canSend(net.minecraft.server.network.ServerGamePacketListenerImpl handler, net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type<?> type)
      Checks if the connected client declared the ability to receive a specific type of packet.
      Parameters:
      handler - the network handler
      type - the packet type
      Returns:
      true if the connected client has declared the ability to receive a specific type of packet
    • createS2CPacket

      public static <T extends net.minecraft.network.protocol.common.custom.CustomPacketPayload> net.minecraft.network.protocol.Packet<net.minecraft.network.protocol.common.ClientCommonPacketListener> createS2CPacket(T packet)
      Creates a packet which may be sent to a connected client.
      Parameters:
      packet - the packet
      Returns:
      a new packet
    • getSender

      public static PacketSender getSender(net.minecraft.server.level.ServerPlayer player)
      Gets the packet sender which sends packets to the connected client.
      Parameters:
      player - the player
      Returns:
      the packet sender
    • getSender

      public static PacketSender getSender(net.minecraft.server.network.ServerGamePacketListenerImpl handler)
      Gets the packet sender which sends packets to the connected client.
      Parameters:
      handler - the network handler, representing the connection to the player/client
      Returns:
      the packet sender
    • send

      public static void send(net.minecraft.server.level.ServerPlayer player, net.minecraft.network.protocol.common.custom.CustomPacketPayload payload)
      Sends a packet to a player.

      Any packets sent must be registered.

      Parameters:
      player - the player to send the packet to
      payload - the payload to send
    • reconfigure

      public static void reconfigure(net.minecraft.server.level.ServerPlayer player)
      Put the player back into configuration phase and re-run all of the configuration tasks.
      Parameters:
      player - the player
    • reconfigure

      public static void reconfigure(net.minecraft.server.network.ServerGamePacketListenerImpl handler)
      Put the player back into configuration phase and re-run all of the configuration tasks.
      Parameters:
      handler - the network handler