Skip to content

Commit b7955f9

Browse files
committed
ignore player functionality
1 parent afc3e36 commit b7955f9

File tree

1 file changed

+53
-2
lines changed
  • src/main/java/pro/cloudnode/smp/cloudnodemsg/message

1 file changed

+53
-2
lines changed

src/main/java/pro/cloudnode/smp/cloudnodemsg/message/Message.java

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@
55
import org.bukkit.OfflinePlayer;
66
import org.bukkit.command.CommandSender;
77
import org.bukkit.entity.Player;
8+
import org.bukkit.persistence.PersistentDataContainer;
89
import org.bukkit.persistence.PersistentDataType;
910
import org.jetbrains.annotations.NotNull;
1011
import org.jetbrains.annotations.Nullable;
1112
import pro.cloudnode.smp.cloudnodemsg.CloudnodeMSG;
1213
import pro.cloudnode.smp.cloudnodemsg.error.InvalidPlayerError;
1314

15+
import java.util.Arrays;
16+
import java.util.HashSet;
1417
import java.util.Objects;
1518
import java.util.Optional;
1619
import java.util.UUID;
@@ -32,10 +35,11 @@ public void send() throws InvalidPlayerError {
3235
final @NotNull String recipientUsername = playerOrServerUsername(this.recipient);
3336

3437
sendMessage(sender, CloudnodeMSG.getInstance().config().outgoing(senderUsername, recipientUsername, message));
38+
setReplyTo(sender, recipient);
39+
40+
if (recipient.isOnline() && Message.isIgnored(Objects.requireNonNull(recipient.getPlayer()), sender)) return;
3541
sendMessage(recipient, CloudnodeMSG.getInstance().config()
3642
.incoming(senderUsername, recipientUsername, message));
37-
38-
setReplyTo(sender, recipient);
3943
setReplyTo(recipient, sender);
4044
}
4145

@@ -78,4 +82,51 @@ public static void removeReplyTo(final @NotNull OfflinePlayer player) {
7882
else if (player.isOnline())
7983
Objects.requireNonNull(player.getPlayer()).getPersistentDataContainer().remove(REPLY_TO);
8084
}
85+
86+
public static final @NotNull NamespacedKey IGNORED_PLAYERS = new NamespacedKey(CloudnodeMSG.getInstance(), "ignored");
87+
88+
/**
89+
* Get UUID set of ignored players from PDC string
90+
*
91+
* @param player The player
92+
*/
93+
public static @NotNull HashSet<@NotNull UUID> getIgnored(final @NotNull Player player) {
94+
final @NotNull Optional<@NotNull String> str = Optional.ofNullable(player.getPersistentDataContainer().get(IGNORED_PLAYERS, PersistentDataType.STRING));
95+
return str.map(s -> new HashSet<>(Arrays.stream(s.split(";")).filter(e -> !e.isEmpty()).map(UUID::fromString).toList()))
96+
.orElseGet(HashSet::new);
97+
}
98+
99+
/**
100+
* Check if a player is ignored
101+
*
102+
* @param player The player
103+
* @param ignored The ignored player
104+
*/
105+
public static boolean isIgnored(final @NotNull Player player, final @NotNull OfflinePlayer ignored) {
106+
return getIgnored(player).contains(ignored.getUniqueId());
107+
}
108+
109+
/**
110+
* Ignore a player
111+
*
112+
* @param player The player
113+
* @param ignore The player to ignore
114+
*/
115+
public static void ignore(final @NotNull Player player, final @NotNull OfflinePlayer ignore) {
116+
final @NotNull HashSet<@NotNull UUID> ignoredPlayers = getIgnored(player);
117+
ignoredPlayers.add(ignore.getUniqueId());
118+
player.getPersistentDataContainer().set(IGNORED_PLAYERS, PersistentDataType.STRING, String.join(";", ignoredPlayers.stream().map(UUID::toString).toList()));
119+
}
120+
121+
/**
122+
* Unignore a player
123+
*
124+
* @param player The player
125+
* @param ignored The player to unignore
126+
*/
127+
public static void unignore(final @NotNull Player player, final @NotNull OfflinePlayer ignored) {
128+
final @NotNull HashSet<@NotNull UUID> ignoredPlayers = getIgnored(player);
129+
ignoredPlayers.remove(ignored.getUniqueId());
130+
player.getPersistentDataContainer().set(IGNORED_PLAYERS, PersistentDataType.STRING, String.join(";", ignoredPlayers.stream().map(UUID::toString).toList()));
131+
}
81132
}

0 commit comments

Comments
 (0)