Skip to content

Commit fcc1b0b

Browse files
committed
ignore immunity
1 parent 1ba07b2 commit fcc1b0b

File tree

6 files changed

+46
-2
lines changed

6 files changed

+46
-2
lines changed

src/main/java/pro/cloudnode/smp/cloudnodemsg/Permission.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,9 @@ public final class Permission {
2222
* Allows ignoring and unignoring players
2323
*/
2424
public final static @NotNull String IGNORE = "cloudnodemsg.ignore";
25+
26+
/**
27+
* Player's messages are immune to ignoring
28+
*/
29+
public final static @NotNull String IGNORE_IMMUNE = "cloudnodemsg.ignore.immune";
2530
}

src/main/java/pro/cloudnode/smp/cloudnodemsg/PluginConfig.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,5 +182,18 @@ public PluginConfig(final @NotNull FileConfiguration config) {
182182
Placeholder.unparsed("player", player)
183183
);
184184
}
185+
186+
/**
187+
* Player cannot be ignored
188+
* <p>Placeholders:</p>
189+
* <ul><li>{@code <player>} - the player's username</li></ul>
190+
*
191+
* @param player The player's username
192+
*/
193+
public @NotNull Component cannotIgnore(final @NotNull String player) {
194+
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("errors.cannot-ignore")),
195+
Placeholder.unparsed("player", player)
196+
);
197+
}
185198
}
186199

src/main/java/pro/cloudnode/smp/cloudnodemsg/command/IgnoreCommand.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
import org.jetbrains.annotations.Nullable;
88
import pro.cloudnode.smp.cloudnodemsg.CloudnodeMSG;
99
import pro.cloudnode.smp.cloudnodemsg.Permission;
10+
import pro.cloudnode.smp.cloudnodemsg.error.CannotIgnoredError;
1011
import pro.cloudnode.smp.cloudnodemsg.error.NoPermissionError;
1112
import pro.cloudnode.smp.cloudnodemsg.error.NotPlayerError;
1213
import pro.cloudnode.smp.cloudnodemsg.message.Message;
1314

1415
import java.util.ArrayList;
1516
import java.util.List;
17+
import java.util.Objects;
1618
import java.util.Optional;
1719

1820
public final class IgnoreCommand extends Command {
@@ -22,13 +24,14 @@ public final class IgnoreCommand extends Command {
2224
public boolean onCommand(final @NotNull CommandSender sender, final @NotNull org.bukkit.command.Command command, final @NotNull String label, @NotNull String @NotNull [] args) {
2325
if (!sender.hasPermission(Permission.IGNORE)) return new NoPermissionError().send(sender);
2426
if (!(sender instanceof final @NotNull Player player)) return new NotPlayerError().send(sender);
25-
if (args.length == 0) return sendMessage(sender, CloudnodeMSG.getInstance().config().usage(label, usage));
27+
if (args.length == 0) return sendMessage(player, CloudnodeMSG.getInstance().config().usage(label, usage));
2628
final @NotNull OfflinePlayer target = CloudnodeMSG.getInstance().getServer().getOfflinePlayer(args[0]);
2729
if (Message.isIgnored(player, target)) return unignore(player, target);
2830
return ignore(player, target);
2931
}
3032

3133
public static boolean ignore(final @NotNull Player player, final @NotNull OfflinePlayer target) {
34+
if (target.isOnline() && Objects.requireNonNull(target.getPlayer()).hasPermission(Permission.IGNORE_IMMUNE)) return new CannotIgnoredError(Optional.ofNullable(target.getName()).orElse("Unknown Player")).send(player);
3235
Message.ignore(player, target);
3336
return sendMessage(player, CloudnodeMSG.getInstance().config().ignored(Optional.ofNullable(target.getName()).orElse("Unknown Player")));
3437
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package pro.cloudnode.smp.cloudnodemsg.error;
2+
3+
import org.jetbrains.annotations.NotNull;
4+
import pro.cloudnode.smp.cloudnodemsg.CloudnodeMSG;
5+
6+
/**
7+
* Player cannot be ignored
8+
*/
9+
public final class CannotIgnoredError extends Error {
10+
public CannotIgnoredError(final @NotNull String player) {
11+
super(CloudnodeMSG.getInstance().config().cannotIgnore(player));
12+
}
13+
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.jetbrains.annotations.NotNull;
1111
import org.jetbrains.annotations.Nullable;
1212
import pro.cloudnode.smp.cloudnodemsg.CloudnodeMSG;
13+
import pro.cloudnode.smp.cloudnodemsg.Permission;
1314
import pro.cloudnode.smp.cloudnodemsg.error.InvalidPlayerError;
1415

1516
import java.util.Arrays;
@@ -37,7 +38,11 @@ public void send() throws InvalidPlayerError {
3738
sendMessage(sender, CloudnodeMSG.getInstance().config().outgoing(senderUsername, recipientUsername, message));
3839
setReplyTo(sender, recipient);
3940

40-
if (recipient.isOnline() && Message.isIgnored(Objects.requireNonNull(recipient.getPlayer()), sender)) return;
41+
if (
42+
(recipient.isOnline() && Message.isIgnored(Objects.requireNonNull(recipient.getPlayer()), sender))
43+
&&
44+
(sender.isOnline() && !Objects.requireNonNull(sender.getPlayer()).hasPermission(Permission.IGNORE_IMMUNE))
45+
) return;
4146
sendMessage(recipient, CloudnodeMSG.getInstance().config()
4247
.incoming(senderUsername, recipientUsername, message));
4348
setReplyTo(recipient, sender);

src/main/resources/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,8 @@ errors:
5959
# Placeholders:
6060
# <player> - the player's username
6161
not-ignored: "<red>(!) You are not ignoring that player.</red>"
62+
63+
# Player cannot be ignored
64+
# Placeholders:
65+
# <player> - the player's username
66+
cannot-ignore: "<red>(!) You cannot ignore <gray><player></gray>.</red>"

0 commit comments

Comments
 (0)