@@ -47,26 +47,27 @@ public Message(@NotNull OfflinePlayer sender, @NotNull OfflinePlayer recipient,
4747 }
4848
4949 public void send () throws InvalidPlayerError {
50- send (false , false );
50+ send (Context . REGULAR );
5151 }
5252
53- public void send (final boolean channel , final boolean inReply ) throws InvalidPlayerError {
53+ public void send (final @ NotNull Context context ) throws InvalidPlayerError {
5454 final @ NotNull String senderUsername = playerOrServerUsername (this .sender );
5555 final @ NotNull String recipientUsername = playerOrServerUsername (this .recipient );
5656
5757 final @ NotNull Optional <@ NotNull Player > senderPlayer = Optional .ofNullable (this .sender .getPlayer ());
5858 final @ NotNull Optional <@ NotNull Player > recipientPlayer = Optional .ofNullable (this .recipient .getPlayer ());
5959
6060 if (!recipient .getUniqueId ().equals (console .getUniqueId ()) && recipientPlayer .isEmpty () || (recipientPlayer .isPresent () && senderPlayer .isPresent () && CloudnodeMSG .isVanished (recipientPlayer .get ()) && !senderPlayer .get ().hasPermission (Permission .SEND_VANISHED ))) {
61- if (!channel ) {
62- final @ NotNull Audience senderAudience = senderPlayer .isPresent () ? senderPlayer .get () : CloudnodeMSG .getInstance ().getServer ().getConsoleSender ();
63- if (inReply ) new ReplyOfflineError (recipientUsername ).send (senderAudience );
64- else new PlayerNotFoundError (recipientUsername ).send (senderAudience );
61+ if (context == Context .CHANNEL ) {
62+ final @ NotNull Player player = Objects .requireNonNull (sender .getPlayer ());
63+ Message .exitChannel (player );
64+ new ChannelOfflineError (player .getName (), Optional .ofNullable (recipient .getName ())
65+ .orElse ("Unknown Player" )).send (player );
6566 }
6667 else {
67- Message . exitChannel ( senderPlayer .get ());
68- new ChannelOfflineError ( senderPlayer . get (). getName (), Optional . ofNullable ( recipient . getName ())
69- . orElse ( "Unknown Player" )) .send (senderPlayer . get () );
68+ final @ NotNull Audience senderAudience = senderPlayer . isPresent () ? senderPlayer .get () : CloudnodeMSG . getInstance (). getServer (). getConsoleSender ( );
69+ if ( context == Context . REPLY ) new ReplyOfflineError ( recipientUsername ). send ( senderAudience );
70+ else new PlayerNotFoundError ( recipientUsername ) .send (senderAudience );
7071 }
7172 return ;
7273 }
@@ -310,4 +311,24 @@ public static void exitTeamChannel(final @NotNull Player player) {
310311 public static boolean hasTeamChannel (final @ NotNull Player player ) {
311312 return player .getPersistentDataContainer ().getOrDefault (CHANNEL_TEAM , PersistentDataType .BOOLEAN , false );
312313 }
314+
315+ /**
316+ * The context in which this message is sent
317+ */
318+ public static enum Context {
319+ /**
320+ * Message sent via command (i.e. no special context)
321+ */
322+ REGULAR ,
323+
324+ /**
325+ * Message sent via messaging channel
326+ */
327+ CHANNEL ,
328+
329+ /**
330+ * Message sent as a reply
331+ */
332+ REPLY ;
333+ }
313334}
0 commit comments