mirror of
https://github.com/Minestom/Minestom.git
synced 2024-11-04 17:59:49 +01:00
Add util method to send a packet to an audience
This commit is contained in:
parent
b29217e076
commit
18608deefa
@ -4,8 +4,11 @@ import com.velocitypowered.natives.compression.VelocityCompressor;
|
||||
import com.velocitypowered.natives.util.Natives;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.audience.ForwardingAudience;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.adventure.AdventureSerializer;
|
||||
import net.minestom.server.adventure.audience.PacketGroupingAudience;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.listener.manager.PacketListenerManager;
|
||||
import net.minestom.server.network.netty.packet.FramedPacket;
|
||||
@ -18,6 +21,7 @@ import net.minestom.server.utils.callback.validator.PlayerValidator;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Collection;
|
||||
import java.util.zip.DataFormatException;
|
||||
|
||||
@ -34,6 +38,39 @@ public final class PacketUtils {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a packet to an audience. This method performs the following steps in the
|
||||
* following order:
|
||||
* <ol>
|
||||
* <li>If {@code audience} is a {@link Player}, send the packet to them.</li>
|
||||
* <li>Otherwise, if {@code audience} is a {@link PacketGroupingAudience}, call
|
||||
* {@link #sendGroupedPacket(Collection, ServerPacket)} on the players that the
|
||||
* grouping audience contains.</li>
|
||||
* <li>Otherwise, if {@code audience} is a {@link ForwardingAudience.Single},
|
||||
* call this method on the single audience inside the forwarding audience.</li>
|
||||
* <li>Otherwise, if {@code audience} is a {@link ForwardingAudience}, call this
|
||||
* method for each audience member of the forwarding audience.</li>
|
||||
* <li>Otherwise, do nothing.</li>
|
||||
* </ol>
|
||||
*
|
||||
* @param audience the audience
|
||||
* @param packet the packet
|
||||
*/
|
||||
@SuppressWarnings("OverrideOnly") // we need to access the audiences inside ForwardingAudience
|
||||
public static void sendPacket(@NotNull Audience audience, @NotNull ServerPacket packet) {
|
||||
if (audience instanceof Player) {
|
||||
((Player) audience).getPlayerConnection().sendPacket(packet);
|
||||
} else if (audience instanceof PacketGroupingAudience) {
|
||||
PacketUtils.sendGroupedPacket(((PacketGroupingAudience) audience).getPlayers(), packet);
|
||||
} else if (audience instanceof ForwardingAudience.Single) {
|
||||
PacketUtils.sendPacket(((ForwardingAudience.Single) audience).audience(), packet);
|
||||
} else if (audience instanceof ForwardingAudience) {
|
||||
for (Audience member : ((ForwardingAudience) audience).audiences()) {
|
||||
PacketUtils.sendPacket(member, packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a {@link ServerPacket} to multiple players.
|
||||
* <p>
|
||||
|
Loading…
Reference in New Issue
Block a user