diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/PlayerArgument.java b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/PlayerArgument.java index e43a971f4..4bd5f29df 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/PlayerArgument.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/argument/PlayerArgument.java @@ -50,9 +50,10 @@ public SuggestionResult suggest( Argument argument, SuggestionContext context ) { + CommandSender sender = invocation.sender(); return this.server.getOnlinePlayers().stream() - .filter(player -> !this.vanishService.isVanished(player.getUniqueId())) - .map(player -> player.getName()) + .filter(player -> this.vanishService.canSeeVanished(sender) || !this.vanishService.isVanished(player.getUniqueId())) + .map(Player::getName) .collect(SuggestionResult.collector()); } } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/vanish/VanishPermissionConstant.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/vanish/VanishPermissionConstant.java new file mode 100644 index 000000000..028bab220 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/vanish/VanishPermissionConstant.java @@ -0,0 +1,6 @@ +package com.eternalcode.core.feature.vanish; + +class VanishPermissionConstant { + + static final String VANISH_SEE_PERMISSION = "eternalcore.vanish.see"; +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/vanish/VanishService.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/vanish/VanishService.java index 1b9c9ab7f..462161233 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/vanish/VanishService.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/vanish/VanishService.java @@ -1,9 +1,11 @@ package com.eternalcode.core.feature.vanish; +import com.eternalcode.annotations.scan.feature.FeatureDocs; import com.eternalcode.core.injector.annotations.Inject; import com.eternalcode.core.injector.annotations.component.Service; import java.util.UUID; import org.bukkit.Server; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.metadata.MetadataValue; @@ -34,4 +36,13 @@ public boolean isVanished(Player player) { } return false; } + + @FeatureDocs( + name = "Vanish tabulation", + description = "EternalCore prevents non-admin players from seeing vanished players in the commands like /tpa." + + " To re-enable this feature for specific players, grant them the eternalcore.vanish.see permission." + ) + public boolean canSeeVanished(CommandSender sender) { + return sender.hasPermission(VanishPermissionConstant.VANISH_SEE_PERMISSION); + } }