Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions bukkit/src/main/java/net/pl3x/map/bukkit/BukkitPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,11 @@ public boolean isSpectator() {
return getPlayer().getGameMode() == GameMode.SPECTATOR;
}

@Override
public boolean canBeHidden() {
return getPlayer().hasPermission("pl3xmap.player.can-be-hidden");
}

@Override
public boolean isPersistentlyHidden() {
return getPlayer().getPersistentDataContainer().getOrDefault(hiddenKey, PersistentDataType.BYTE, (byte) 0) != 0;
Expand Down
4 changes: 4 additions & 0 deletions bukkit/src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,7 @@ permissions:
default: op
children:
pl3xmap.command.map: true

pl3xmap.player.can-be-hidden:
description: Determines if a player can be hidden on the map
default: true
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ private void execute(CommandContext<Sender> context) {
return;
}

if (!player.canBeHidden()) {
sender.sendMessage(Lang.PLAYER_CANNOT_BE_HIDDEN_OR_SHOWN,
Placeholder.unparsed("player", player.getName()));
return;
}

if (player.isHidden()) {
sender.sendMessage(Lang.COMMAND_HIDE_ALREADY_HIDDEN,
Placeholder.unparsed("player", player.getName()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,22 +54,28 @@ public void register() {

private void execute(CommandContext<Sender> context) {
Sender sender = context.sender();
Player target = getHandler().getPlatformParsers().resolvePlayerFromPlayerSelector("player", context);
Player player = getHandler().getPlatformParsers().resolvePlayerFromPlayerSelector("player", context);

if (target == null) {
if (player == null) {
sender.sendMessage(Lang.ERROR_MUST_SPECIFY_PLAYER);
return;
}

if (!target.isHidden()) {
if (!player.canBeHidden()){
sender.sendMessage(Lang.PLAYER_CANNOT_BE_HIDDEN_OR_SHOWN,
Placeholder.unparsed("player", player.getName()));
return;
}

if (!player.isHidden()) {
sender.sendMessage(Lang.COMMAND_SHOW_NOT_HIDDEN,
Placeholder.unparsed("player", target.getName()));
Placeholder.unparsed("player", player.getName()));
return;
}

target.setHidden(false, true);
player.setHidden(false, true);

sender.sendMessage(Lang.COMMAND_SHOW_SUCCESS,
Placeholder.unparsed("player", target.getName()));
Placeholder.unparsed("player", player.getName()));
}
}
3 changes: 3 additions & 0 deletions core/src/main/java/net/pl3x/map/core/configuration/Lang.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ public final class Lang extends AbstractConfig {
@Key("command.hide.success")
public static String COMMAND_HIDE_SUCCESS = "<grey><player> <green>is now hidden from the map";

// TODO: what should the key be?
public static String PLAYER_CANNOT_BE_HIDDEN_OR_SHOWN = "<red><player> cannot be hidden or shown from the map.";

@Key("command.pause.description")
public static String COMMAND_PAUSE_DESCRIPTION = "Pause renderers";
@Key("command.pause.paused")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public PlayersLayer(String key, World world, Supplier<String> labelSupplier) {
public Collection<Marker<?>> getMarkers() {
Set<Marker<?>> icons = new HashSet<>();
getWorld().getPlayers().forEach(player -> {
if (player.isHidden()) {
if (player.canBeHidden() && player.isHidden()) {
return;
}
if (player.isNPC()) {
Expand Down
7 changes: 7 additions & 0 deletions core/src/main/java/net/pl3x/map/core/player/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,13 @@ public void setPlayer(Object player) {
*/
public abstract boolean isSpectator();

/**
* Get whether player is allowed to hide from the map.
*
* @return true if player can be hidden
*/
public abstract boolean canBeHidden();

/**
* Get whether player is hidden from the map.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,11 @@ public boolean isSpectator() {
return getPlayer().isSpectator();
}

@Override
public boolean canBeHidden() {
return true; // TODO: make this customizable on fabric.. maybe directly integrate with LuckPerms?
}

@Override
public boolean isPersistentlyHidden() {
return ((AccessServerPlayer) getPlayer()).pl3xMap$isHidden();
Expand Down
Loading