ZNPCsPlus/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java

64 lines
1.4 KiB
Java
Raw Normal View History

2023-04-25 23:31:49 +00:00
package lol.pyr.znpcsplus.util;
import org.bukkit.entity.Player;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public abstract class Viewable {
private final Set<Player> viewers = new HashSet<>();
public void delete() {
UNSAFE_hideAll();
viewers.clear();
}
public void respawn() {
UNSAFE_hideAll();
UNSAFE_showAll();
}
public void respawn(Player player) {
if (!viewers.contains(player)) return;
_hide(player);
_show(player);
}
public void show(Player player) {
if (viewers.contains(player)) return;
_show(player);
viewers.add(player);
}
public void hide(Player player) {
if (!viewers.contains(player)) return;
_hide(player);
viewers.remove(player);
}
public boolean isShown(Player player) {
return viewers.contains(player);
}
protected void UNSAFE_hideAll() {
for (Player viewer : viewers) _hide(viewer);
}
protected void UNSAFE_showAll() {
for (Player viewer : viewers) _show(viewer);
}
public Set<Player> getViewers() {
return Collections.unmodifiableSet(viewers);
}
2023-05-11 04:40:33 +00:00
public boolean isVisibleTo(Player player) {
return viewers.contains(player);
}
2023-04-25 23:31:49 +00:00
protected abstract void _show(Player player);
protected abstract void _hide(Player player);
}