From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 13 May 2021 16:18:29 -0500 Subject: [PATCH] Hide hidden players from entity selector diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java index c8d39e6e1c570c9219f6066da273dc0130920519..d881caf99c2bad66b76bdc6ddb11a6cac1e94db6 100644 --- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java @@ -198,10 +198,10 @@ public class EntitySelector { if (this.playerName != null) { entityplayer = source.getServer().getPlayerList().getPlayerByName(this.playerName); - return entityplayer == null ? List.of() : List.of(entityplayer); + return entityplayer == null || !canSee(source, entityplayer) ? List.of() : List.of(entityplayer); // Purpur - Hide hidden players from entity selector } else if (this.entityUUID != null) { entityplayer = source.getServer().getPlayerList().getPlayer(this.entityUUID); - return entityplayer == null ? List.of() : List.of(entityplayer); + return entityplayer == null || !canSee(source, entityplayer) ? List.of() : List.of(entityplayer); // Purpur - Hide hidden players from entity selector } else { Vec3 vec3d = (Vec3) this.position.apply(source.getPosition()); AABB axisalignedbb = this.getAbsoluteAabb(vec3d); @@ -214,7 +214,7 @@ public class EntitySelector { ServerPlayer entityplayer1 = (ServerPlayer) entity; if (predicate.test(entityplayer1)) { - return List.of(entityplayer1); + return !canSee(source, entityplayer1) ? List.of() : List.of(entityplayer1); // Purpur - Hide hidden players from entity selector } } @@ -225,6 +225,7 @@ public class EntitySelector { if (this.isWorldLimited()) { object = source.getLevel().getPlayers(predicate, i); + ((List) object).removeIf(entityplayer3 -> !canSee(source, (ServerPlayer) entityplayer3)); // Purpur - Hide hidden players from entity selector } else { object = new ObjectArrayList(); Iterator iterator = source.getServer().getPlayerList().getPlayers().iterator(); @@ -232,7 +233,7 @@ public class EntitySelector { while (iterator.hasNext()) { ServerPlayer entityplayer2 = (ServerPlayer) iterator.next(); - if (predicate.test(entityplayer2)) { + if (predicate.test(entityplayer2) && canSee(source, entityplayer2)) { // Purpur - Hide hidden players from entity selector ((List) object).add(entityplayer2); if (((List) object).size() >= i) { return (List) object; @@ -299,4 +300,10 @@ public class EntitySelector { public static Component joinNames(List entities) { return ComponentUtils.formatList(entities, Entity::getDisplayName); } + + // Purpur start - Hide hidden players from entity selector + private boolean canSee(CommandSourceStack sender, ServerPlayer target) { + return !org.purpurmc.purpur.PurpurConfig.hideHiddenPlayersFromEntitySelector || !(sender.getEntity() instanceof ServerPlayer player) || player.getBukkitEntity().canSee(target.getBukkitEntity()); + } + // Purpur end - Hide hidden players from entity selector } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index 3a0ed610320f9730806d463647f53857265aa2e8..f4e5d43625838f0dd6979e10a21ef58e8e0e1263 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -249,6 +249,7 @@ public class PurpurConfig { public static String commandTPSBarTextColorLow = ""; public static int commandTPSBarTickInterval = 20; public static boolean commandGamemodeRequiresPermission = false; + public static boolean hideHiddenPlayersFromEntitySelector = false; private static void commandSettings() { commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle); commandTPSBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.tpsbar.overlay", commandTPSBarProgressOverlay.name())); @@ -261,6 +262,7 @@ public class PurpurConfig { commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow); commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval); commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission); + hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); } public static int barrelRows = 3;