Skip to content

Commit cbcd557

Browse files
committed
exit channel if recipient is vanished
1 parent f5aa5ff commit cbcd557

File tree

4 files changed

+40
-11
lines changed

4 files changed

+40
-11
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import org.bukkit.persistence.PersistentDataType;
99
import org.jetbrains.annotations.NotNull;
1010
import org.jetbrains.annotations.Nullable;
11+
import pro.cloudnode.smp.cloudnodemsg.error.ChannelOfflineError;
1112
import pro.cloudnode.smp.cloudnodemsg.error.InvalidPlayerError;
13+
import pro.cloudnode.smp.cloudnodemsg.error.PlayerNotFoundError;
1214

1315
import java.util.Arrays;
1416
import java.util.HashSet;
@@ -42,12 +44,25 @@ public Message(@NotNull OfflinePlayer sender, @NotNull OfflinePlayer recipient,
4244
}
4345

4446
public void send() throws InvalidPlayerError {
47+
send(false);
48+
}
49+
50+
public void send(final boolean channel) throws InvalidPlayerError {
4551
final @NotNull String senderUsername = playerOrServerUsername(this.sender);
4652
final @NotNull String recipientUsername = playerOrServerUsername(this.recipient);
4753

4854
final @NotNull Optional<@NotNull Player> senderPlayer = Optional.ofNullable(this.sender.getPlayer());
4955
final @NotNull Optional<@NotNull Player> recipientPlayer = Optional.ofNullable(this.recipient.getPlayer());
5056

57+
if (senderPlayer.isPresent() && (recipientPlayer.isEmpty() || (CloudnodeMSG.isVanished(recipientPlayer.get()) && !senderPlayer.get().hasPermission(Permission.SEND_VANISHED)))) {
58+
if (!channel) new PlayerNotFoundError(senderPlayer.get().getName()).send(senderPlayer.get());
59+
else {
60+
Message.exitChannel(senderPlayer.get());
61+
new ChannelOfflineError(senderPlayer.get().getName(), Optional.ofNullable(recipient.getName()).orElse("Unknown Player")).send(senderPlayer.get());
62+
}
63+
return;
64+
}
65+
5166
sendMessage(sender, CloudnodeMSG.getInstance().config().outgoing(senderUsername, recipientUsername, message));
5267
if (senderPlayer.isPresent() && !Message.hasChannel(senderPlayer.get(), recipient))
5368
setReplyTo(sender, recipient);

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,12 @@ public boolean run(final @NotNull CommandSender sender, final @NotNull String la
3333

3434
final @NotNull Optional<@NotNull Player> recipient = Optional.ofNullable(CloudnodeMSG.getInstance().getServer()
3535
.getPlayer(args[0]));
36-
if (recipient.isEmpty() || (CloudnodeMSG.isVanished(recipient.get()) && !sender.hasPermission(Permission.SEND_VANISHED))) return new PlayerNotFoundError(args[0]).send(sender);
36+
if (recipient.isEmpty() || (CloudnodeMSG.isVanished(recipient.get()) && !sender.hasPermission(Permission.SEND_VANISHED)))
37+
return new PlayerNotFoundError(args[0]).send(sender);
3738
if (sender instanceof final @NotNull Player player && recipient.get().getUniqueId().equals(player.getUniqueId()))
3839
return new MessageYourselfError().send(sender);
39-
if (!Message.isIncomingEnabled(recipient.get()) && !sender.hasPermission(Permission.TOGGLE_BYPASS)) return new PlayerHasIncomingDisabledError(recipient.get().getName()).send(sender);
40+
if (!Message.isIncomingEnabled(recipient.get()) && !sender.hasPermission(Permission.TOGGLE_BYPASS))
41+
return new PlayerHasIncomingDisabledError(recipient.get().getName()).send(sender);
4042

4143
if (args.length == 1) {
4244
final @NotNull Player player = (Player) sender;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package pro.cloudnode.smp.cloudnodemsg.error;
2+
3+
import org.jetbrains.annotations.NotNull;
4+
import pro.cloudnode.smp.cloudnodemsg.CloudnodeMSG;
5+
6+
/**
7+
* Channel recipient not found (the channel should be closed after this error)
8+
*/
9+
public final class ChannelOfflineError extends Error {
10+
/**
11+
* Channel recipient not found (the channel should be closed after this error)
12+
*
13+
* @param sender The username of the message sender
14+
* @param recipient The username of the message recipient
15+
*/
16+
public ChannelOfflineError(final @NotNull String sender, final @NotNull String recipient) {
17+
super(CloudnodeMSG.getInstance().config().channelOffline(sender, recipient));
18+
}
19+
}

src/main/java/pro/cloudnode/smp/cloudnodemsg/listener/AsyncChatListener.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
import org.bukkit.scoreboard.Team;
1212
import org.jetbrains.annotations.NotNull;
1313
import pro.cloudnode.smp.cloudnodemsg.CloudnodeMSG;
14+
import pro.cloudnode.smp.cloudnodemsg.Message;
1415
import pro.cloudnode.smp.cloudnodemsg.Permission;
1516
import pro.cloudnode.smp.cloudnodemsg.command.TeamMessageCommand;
1617
import pro.cloudnode.smp.cloudnodemsg.error.InvalidPlayerError;
17-
import pro.cloudnode.smp.cloudnodemsg.Message;
1818

1919
import java.util.HashSet;
2020
import java.util.Iterator;
@@ -45,15 +45,8 @@ public void channels(final @NotNull AsyncChatEvent event) {
4545
final @NotNull Optional<@NotNull OfflinePlayer> channelRecipient = Message.getChannel(sender);
4646
if (channelRecipient.isEmpty()) return;
4747
event.setCancelled(true);
48-
final @NotNull Optional<@NotNull Player> recipient = channelRecipient.map(p -> p.isOnline() ? p.getPlayer() : null);
49-
if (recipient.isEmpty()) {
50-
Message.exitChannel(sender);
51-
sender.sendMessage(CloudnodeMSG.getInstance().config().channelOffline(sender.getName(), Optional.ofNullable(channelRecipient.get().getName()).orElse("Unknown Player")));
52-
return;
53-
}
54-
5548
try {
56-
new Message(sender, recipient.get(), event.message()).send();
49+
new Message(sender, channelRecipient.get(), event.message()).send(true);
5750
}
5851
catch (final @NotNull InvalidPlayerError e) {
5952
e.log().send(sender);

0 commit comments

Comments
 (0)