From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: BillyGalbreath 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 ee3123ac8a568d915ca4e1b42fc1196c269b287e..82125185233bdc59ef93d376e7327180c98c794d 100644 --- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java @@ -169,10 +169,10 @@ public class EntitySelector { if (this.j != null) { entityplayer = commandlistenerwrapper.getServer().getPlayerList().getPlayer(this.j); - return (List) (entityplayer == null ? Collections.emptyList() : Lists.newArrayList(new EntityPlayer[]{entityplayer})); + return entityplayer == null || !canSee(commandlistenerwrapper, entityplayer) ? Collections.emptyList() : Lists.newArrayList(entityplayer); // Purpur } else if (this.k != null) { entityplayer = commandlistenerwrapper.getServer().getPlayerList().getPlayer(this.k); - return (List) (entityplayer == null ? Collections.emptyList() : Lists.newArrayList(new EntityPlayer[]{entityplayer})); + return entityplayer == null || !canSee(commandlistenerwrapper, entityplayer) ? Collections.emptyList() : Lists.newArrayList(entityplayer); // Purpur } else { Vec3D vec3d = (Vec3D) this.f.apply(commandlistenerwrapper.getPosition()); Predicate predicate = this.a(vec3d); @@ -182,7 +182,7 @@ public class EntitySelector { EntityPlayer entityplayer1 = (EntityPlayer) commandlistenerwrapper.getEntity(); if (predicate.test(entityplayer1)) { - return Lists.newArrayList(new EntityPlayer[]{entityplayer1}); + return !canSee(commandlistenerwrapper, entityplayer1) ? Collections.emptyList() : Lists.newArrayList(entityplayer1); // Purpur } } @@ -195,6 +195,7 @@ public class EntitySelector { predicate.getClass(); object = worldserver.a(predicate::test); + ((List) object).removeIf(entityplayer3 -> !canSee(commandlistenerwrapper, (EntityPlayer) entityplayer3)); // Purpur } else { object = Lists.newArrayList(); Iterator iterator = commandlistenerwrapper.getServer().getPlayerList().getPlayers().iterator(); @@ -202,7 +203,7 @@ public class EntitySelector { while (iterator.hasNext()) { EntityPlayer entityplayer2 = (EntityPlayer) iterator.next(); - if (predicate.test(entityplayer2)) { + if (predicate.test(entityplayer2) && canSee(commandlistenerwrapper, entityplayer2)) { // Purpur ((List) object).add(entityplayer2); } } @@ -244,4 +245,11 @@ public class EntitySelector { public static IChatMutableComponent a(List list) { return ChatComponentUtils.b(list, Entity::getScoreboardDisplayName); } + + // Purpur start + private boolean canSee(CommandListenerWrapper commandlistenerwrapper, EntityPlayer target) { + Entity entity = commandlistenerwrapper.getEntity(); + return !net.pl3x.purpur.PurpurConfig.hideHiddenPlayersFromEntitySelector || !(entity instanceof EntityPlayer) || ((EntityPlayer) entity).getBukkitEntity().canSee(target.getBukkitEntity()); + } + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java index 7e8654e4df61527f33d4fce2afdb14e29b90a4c2..61f385021e8e870a4cb1b9c2744105988c8b709a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -212,8 +212,10 @@ public class PurpurConfig { } public static boolean commandGamemodeRequiresPermission = false; + public static boolean hideHiddenPlayersFromEntitySelector = false; private static void commandSettings() { commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission); + hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); } public static boolean barrelSixRows = false;