2020-04-24 03:25:58 +02:00
|
|
|
package net.minestom.server;
|
2019-08-19 17:04:19 +02:00
|
|
|
|
2020-04-24 03:25:58 +02:00
|
|
|
import net.minestom.server.entity.Player;
|
|
|
|
import net.minestom.server.network.PacketWriterUtils;
|
|
|
|
import net.minestom.server.network.packet.server.ServerPacket;
|
2019-08-19 17:04:19 +02:00
|
|
|
|
2019-08-31 12:10:46 +02:00
|
|
|
import java.util.HashSet;
|
2019-08-19 17:04:19 +02:00
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
public interface Viewable {
|
|
|
|
|
|
|
|
void addViewer(Player player);
|
|
|
|
|
|
|
|
void removeViewer(Player player);
|
|
|
|
|
|
|
|
Set<Player> getViewers();
|
|
|
|
|
|
|
|
default boolean isViewer(Player player) {
|
|
|
|
return getViewers().contains(player);
|
|
|
|
}
|
|
|
|
|
2019-08-21 16:50:52 +02:00
|
|
|
default void sendPacketToViewers(ServerPacket packet) {
|
2019-08-31 12:10:46 +02:00
|
|
|
PacketWriterUtils.writeAndSend(getViewers(), packet);
|
2019-08-21 16:50:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
default void sendPacketsToViewers(ServerPacket... packets) {
|
2019-08-22 14:52:32 +02:00
|
|
|
for (ServerPacket packet : packets) {
|
2019-08-31 12:10:46 +02:00
|
|
|
PacketWriterUtils.writeAndSend(getViewers(), packet);
|
2019-08-22 14:52:32 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
default void sendPacketToViewersAndSelf(ServerPacket packet) {
|
|
|
|
if (this instanceof Player) {
|
2019-08-31 12:10:46 +02:00
|
|
|
if (getViewers().isEmpty()) {
|
|
|
|
((Player) this).getPlayerConnection().sendPacket(packet);
|
|
|
|
} else {
|
|
|
|
UNSAFE_sendPacketToViewersAndSelf(packet);
|
|
|
|
}
|
2019-08-27 05:23:25 +02:00
|
|
|
} else {
|
|
|
|
sendPacketToViewers(packet);
|
2019-08-22 14:52:32 +02:00
|
|
|
}
|
2019-08-21 16:50:52 +02:00
|
|
|
}
|
|
|
|
|
2019-08-27 05:23:25 +02:00
|
|
|
private void UNSAFE_sendPacketToViewersAndSelf(ServerPacket packet) {
|
2019-08-31 12:10:46 +02:00
|
|
|
Set<Player> recipients = new HashSet<>(getViewers());
|
|
|
|
recipients.add((Player) this);
|
|
|
|
PacketWriterUtils.writeAndSend(recipients, packet);
|
2019-08-27 05:23:25 +02:00
|
|
|
}
|
|
|
|
|
2019-08-19 17:04:19 +02:00
|
|
|
}
|