mirror of
https://github.com/filoghost/HolographicDisplays.git
synced 2024-10-01 16:47:36 +02:00
Improve DefaultVisibilityManager
This commit is contained in:
parent
c1cd5b200c
commit
d67480749b
@ -14,11 +14,9 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
|
|
||||||
public class DefaultVisibilityManager implements VisibilityManager {
|
public class DefaultVisibilityManager implements VisibilityManager {
|
||||||
|
|
||||||
@ -52,33 +50,16 @@ public class DefaultVisibilityManager implements VisibilityManager {
|
|||||||
// Has a specific value set
|
// Has a specific value set
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (visibleByDefault) {
|
sendVisibilityChangePacket(hologram, player, visibleByDefault);
|
||||||
// Now it's visible, and it previously wasn't because the value has changed
|
|
||||||
sendCreatePacket(player, hologram);
|
|
||||||
} else {
|
|
||||||
// Opposite case: now it's not visible
|
|
||||||
sendDestroyPacket(player, hologram);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showTo(@NotNull Player player) {
|
public void showTo(@NotNull Player player) {
|
||||||
Preconditions.notNull(player, "player");
|
Preconditions.notNull(player, "player");
|
||||||
|
|
||||||
boolean wasVisible = isVisibleTo(player);
|
setVisibleTo(player, true);
|
||||||
|
|
||||||
if (playersVisibilityMap == null) {
|
|
||||||
// Lazy initialization
|
|
||||||
playersVisibilityMap = new ConcurrentHashMap<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
playersVisibilityMap.put(player.getUniqueId(), true);
|
|
||||||
|
|
||||||
if (!wasVisible) {
|
|
||||||
sendCreatePacket(player, hologram);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -86,17 +67,20 @@ public class DefaultVisibilityManager implements VisibilityManager {
|
|||||||
public void hideTo(@NotNull Player player) {
|
public void hideTo(@NotNull Player player) {
|
||||||
Preconditions.notNull(player, "player");
|
Preconditions.notNull(player, "player");
|
||||||
|
|
||||||
|
setVisibleTo(player, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setVisibleTo(Player player, boolean visible) {
|
||||||
boolean wasVisible = isVisibleTo(player);
|
boolean wasVisible = isVisibleTo(player);
|
||||||
|
|
||||||
|
// Lazy initialization
|
||||||
if (playersVisibilityMap == null) {
|
if (playersVisibilityMap == null) {
|
||||||
// Lazy initialization
|
playersVisibilityMap = new HashMap<>();
|
||||||
playersVisibilityMap = new ConcurrentHashMap<>();
|
|
||||||
}
|
}
|
||||||
|
playersVisibilityMap.put(player.getUniqueId(), visible);
|
||||||
playersVisibilityMap.put(player.getUniqueId(), false);
|
|
||||||
|
if (wasVisible != visible) {
|
||||||
if (wasVisible) {
|
sendVisibilityChangePacket(hologram, player, visible);
|
||||||
sendDestroyPacket(player, hologram);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,9 +89,9 @@ public class DefaultVisibilityManager implements VisibilityManager {
|
|||||||
Preconditions.notNull(player, "player");
|
Preconditions.notNull(player, "player");
|
||||||
|
|
||||||
if (playersVisibilityMap != null) {
|
if (playersVisibilityMap != null) {
|
||||||
Boolean value = playersVisibilityMap.get(player.getUniqueId());
|
Boolean visible = playersVisibilityMap.get(player.getUniqueId());
|
||||||
if (value != null) {
|
if (visible != null) {
|
||||||
return value;
|
return visible;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,45 +106,34 @@ public class DefaultVisibilityManager implements VisibilityManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean wasVisible = isVisibleTo(player);
|
Boolean wasVisible = playersVisibilityMap.remove(player.getUniqueId());
|
||||||
|
if (wasVisible != null && visibleByDefault != wasVisible) {
|
||||||
playersVisibilityMap.remove(player.getUniqueId());
|
sendVisibilityChangePacket(hologram, player, visibleByDefault);
|
||||||
|
|
||||||
if (visibleByDefault && !wasVisible) {
|
|
||||||
sendCreatePacket(player, hologram);
|
|
||||||
|
|
||||||
} else if (!visibleByDefault && wasVisible) {
|
|
||||||
sendDestroyPacket(player, hologram);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resetVisibilityAll() {
|
public void resetVisibilityAll() {
|
||||||
if (playersVisibilityMap != null) {
|
if (playersVisibilityMap == null) {
|
||||||
// We need to refresh all the players
|
return;
|
||||||
Set<UUID> playerIDs = new HashSet<>(playersVisibilityMap.keySet());
|
}
|
||||||
|
|
||||||
for (UUID playerID : playerIDs) {
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
Player onlinePlayer = Bukkit.getPlayer(playerID);
|
boolean wasVisible = isVisibleTo(player);
|
||||||
if (onlinePlayer != null) {
|
if (visibleByDefault != wasVisible) {
|
||||||
resetVisibility(onlinePlayer);
|
sendVisibilityChangePacket(hologram, player, visibleByDefault);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
playersVisibilityMap.clear();
|
|
||||||
playersVisibilityMap = null;
|
|
||||||
}
|
}
|
||||||
|
playersVisibilityMap = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendCreatePacket(Player player, StandardHologram hologram) {
|
private void sendVisibilityChangePacket(StandardHologram hologram, Player player, boolean visible) {
|
||||||
if (ProtocolLibHook.isEnabled()) {
|
if (ProtocolLibHook.isEnabled()) {
|
||||||
ProtocolLibHook.sendCreateEntitiesPacket(player, hologram);
|
if (visible) {
|
||||||
}
|
ProtocolLibHook.sendCreateEntitiesPacket(player, hologram);
|
||||||
}
|
} else {
|
||||||
|
ProtocolLibHook.sendDestroyEntitiesPacket(player, hologram);
|
||||||
private void sendDestroyPacket(Player player, StandardHologram hologram) {
|
}
|
||||||
if (ProtocolLibHook.isEnabled()) {
|
|
||||||
ProtocolLibHook.sendDestroyEntitiesPacket(player, hologram);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user