Skip to content

Commit

Permalink
hide/unhide_entities enhancement for players
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Apr 5, 2021
1 parent 6570083 commit 1361d9d
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
Expand Up @@ -2943,7 +2943,7 @@ public void adjust(Mechanism mechanism) {
// Note that dynamic matchables like 'entity_flagged' will behave in unexpected ways when dynamically changing.
// -->
if (mechanism.matches("hide_entities") && mechanism.hasValue()) {
HideEntitiesHelper.PlayerHideMap map = HideEntitiesHelper.playerHides.computeIfAbsent(getUUID(), (k) -> new HideEntitiesHelper.PlayerHideMap());
HideEntitiesHelper.PlayerHideMap map = HideEntitiesHelper.getPlayerMapFor(getUUID());
String hideMe = mechanism.getValue().asString();
map.matchersHidden.add(hideMe);
if (isOnline()) {
Expand All @@ -2963,7 +2963,7 @@ public void adjust(Mechanism mechanism) {
// Removes any entity hides added by <@link mechanism PlayerTag.hide_entities>. Input must exactly match the input given to the hide mechanism.
// -->
if (mechanism.matches("unhide_entities") && mechanism.hasValue()) {
HideEntitiesHelper.PlayerHideMap map = HideEntitiesHelper.playerHides.computeIfAbsent(getUUID(), (k) -> new HideEntitiesHelper.PlayerHideMap());
HideEntitiesHelper.PlayerHideMap map = HideEntitiesHelper.getPlayerMapFor(getUUID());
String unhideMe = mechanism.getValue().asString();
map.matchersHidden.remove(unhideMe);
if (map.matchersHidden.isEmpty() && map.entitiesHidden.isEmpty() && map.overridinglyShow.isEmpty()) {
Expand All @@ -2972,7 +2972,7 @@ public void adjust(Mechanism mechanism) {
if (isOnline()) {
for (Entity ent : getPlayerEntity().getWorld().getEntities()) {
if (BukkitScriptEvent.tryEntity(new EntityTag(ent), unhideMe) && !map.shouldHide(ent)) {
NMSHandler.getEntityHelper().sendHidePacket(getPlayerEntity(), ent);
NMSHandler.getEntityHelper().sendShowPacket(getPlayerEntity(), ent);
}
}
}
Expand Down
Expand Up @@ -18,6 +18,8 @@ public class HideEntitiesHelper {

public static class PlayerHideMap {

public UUID player;

public HashSet<UUID> entitiesHidden = new HashSet<>();

public HashSet<UUID> overridinglyShow = new HashSet<>();
Expand All @@ -35,6 +37,12 @@ public boolean shouldHideViaMatcher(Entity entity) {
EntityTag entityTag = new EntityTag(entity);
for (String matchable : matchersHidden) {
if (BukkitScriptEvent.tryEntity(entityTag, matchable)) {
if (entity instanceof Player) {
Player thisPlayer = Bukkit.getPlayer(player);
if (thisPlayer != null && thisPlayer.canSee((Player) entity)) {
thisPlayer.hidePlayer(Denizen.getInstance(), (Player) entity);
}
}
return true;
}
}
Expand Down Expand Up @@ -67,6 +75,16 @@ public static boolean hasAnyHides() {
return !playerHides.isEmpty() || !defaultHidden.isEmpty();
}

public static PlayerHideMap getPlayerMapFor(UUID player) {
PlayerHideMap map = playerHides.get(player);
if (map == null) {
map = new PlayerHideMap();
map.player = player;
playerHides.put(player, map);
}
return map;
}

public static boolean playerShouldHide(UUID player, Entity ent) {
PlayerHideMap map = playerHides.get(player);
if (map == null) {
Expand All @@ -80,7 +98,7 @@ public static boolean addHide(UUID player, UUID entity) {
if (player == null) {
return defaultHidden.add(entity);
}
PlayerHideMap map = playerHides.computeIfAbsent(player, k -> new PlayerHideMap());
PlayerHideMap map = getPlayerMapFor(player);
map.overridinglyShow.remove(entity);
return map.entitiesHidden.add(entity);
}
Expand All @@ -106,6 +124,7 @@ public static boolean removeHide(UUID player, UUID entity) {
if (defaultHidden.contains(entity) || (map != null && map.shouldHideViaMatcher(Bukkit.getEntity(entity)))) {
if (map == null) {
map = new PlayerHideMap();
map.player = player;
playerHides.put(player, map);
}
map.entitiesHidden.remove(entity);
Expand Down

0 comments on commit 1361d9d

Please sign in to comment.