diff --git a/common/src/main/java/net/draycia/carbon/common/command/commands/WhisperCommand.java b/common/src/main/java/net/draycia/carbon/common/command/commands/WhisperCommand.java index b4e1c6394..43d88aa73 100644 --- a/common/src/main/java/net/draycia/carbon/common/command/commands/WhisperCommand.java +++ b/common/src/main/java/net/draycia/carbon/common/command/commands/WhisperCommand.java @@ -170,7 +170,9 @@ public void whisper( } final String recipientUsername = recipient.username(); - if (!this.network.online(recipient) || !sender.awareOf(recipient) && !sender.hasPermission("carbon.whisper.vanished")) { + if (!this.network.online(recipient) || !sender.awareOf(recipient) && + !sender.hasPermission("carbon.whisper.vanished")) { + final var exception = new CarbonPlayerParser.ParseException( recipientInputString == null ? recipientUsername : recipientInputString, this.messages @@ -199,7 +201,8 @@ public void whisper( final Component senderDisplayName = sender.displayName(); final Component recipientDisplayName = recipient.displayName(); - final CarbonPrivateChatEvent privateChatEvent = new CarbonPrivateChatEventImpl(sender, recipient, Component.text(message)); + final CarbonPrivateChatEvent privateChatEvent = new CarbonPrivateChatEventImpl(sender, + recipient, Component.text(message)); this.events.emit(privateChatEvent); if (privateChatEvent.cancelled()) { @@ -208,11 +211,18 @@ public void whisper( } final String senderUsername = sender.username(); - this.messages.whisperSender(SourcedAudience.of(sender, sender), senderUsername, senderDisplayName, recipientUsername, recipientDisplayName, privateChatEvent.message()); + + this.messages.whisperSender(SourcedAudience.of(sender, sender), senderUsername, senderDisplayName, + recipientUsername, recipientDisplayName, privateChatEvent.message()); if (localRecipient) { - this.messages.whisperRecipient(SourcedAudience.of(sender, recipient), senderUsername, senderDisplayName, recipientUsername, recipientDisplayName, privateChatEvent.message()); + this.messages.whisperRecipient(SourcedAudience.of(sender, recipient), senderUsername, + senderDisplayName, recipientUsername, recipientDisplayName, privateChatEvent.message()); } - this.messages.whisperConsoleLog(this.server.console(), senderUsername, senderDisplayName, recipientUsername, recipientDisplayName, privateChatEvent.message()); + WhisperCommand.broadcastWhisperSpy(this.server, this.messages, senderUsername, senderDisplayName, + recipientUsername, recipientDisplayName, privateChatEvent.message()); + + this.messages.whisperConsoleLog(this.server.console(), senderUsername, senderDisplayName, + recipientUsername, recipientDisplayName, privateChatEvent.message()); final @Nullable Sound messageSound = this.configManager.primaryConfig().messageSound(); if (localRecipient && messageSound != null) { @@ -243,8 +253,15 @@ public void handlePacket(final WhisperPacket packet) { final Component recipientDisplayName = recipient.displayName(); recipient.whisperReplyTarget(sender.uuid()); - this.messages.whisperRecipient(SourcedAudience.of(sender, recipient), senderUsername, senderDisplayName, recipientUsername, recipientDisplayName, packet.message()); - this.messages.whisperConsoleLog(this.server.console(), senderUsername, senderDisplayName, recipientUsername, recipientDisplayName, packet.message()); + this.messages.whisperRecipient(SourcedAudience.of(sender, recipient), senderUsername, + senderDisplayName, recipientUsername, recipientDisplayName, packet.message()); + + WhisperCommand.broadcastWhisperSpy(this.server, this.messages, senderUsername, senderDisplayName, + recipientUsername, recipientDisplayName, packet.message()); + + this.messages.whisperConsoleLog(this.server.console(), senderUsername, senderDisplayName, + recipientUsername, recipientDisplayName, packet.message()); + final @Nullable Sound messageSound = this.configManager.primaryConfig().messageSound(); if (messageSound != null) { recipient.playSound(messageSound); @@ -256,4 +273,21 @@ public void handlePacket(final WhisperPacket packet) { } } + public static void broadcastWhisperSpy( + final CarbonServer server, + final CarbonMessages messages, + final String senderUsername, + final Component senderDisplayName, + final String recipientUsername, + final Component recipientDisplayName, + final Component message + ) { + for (final CarbonPlayer player : server.players()) { + if (player.spying()) { + messages.whisperRecipientSpy(player, senderUsername, + senderDisplayName, recipientUsername, recipientDisplayName, message); + } + } + } + } diff --git a/common/src/main/java/net/draycia/carbon/common/messages/CarbonMessages.java b/common/src/main/java/net/draycia/carbon/common/messages/CarbonMessages.java index cf232c991..aaefe380c 100644 --- a/common/src/main/java/net/draycia/carbon/common/messages/CarbonMessages.java +++ b/common/src/main/java/net/draycia/carbon/common/messages/CarbonMessages.java @@ -127,6 +127,16 @@ void whisperRecipient( Component message ); + @Message("whisper.from.spy") + void whisperRecipientSpy( + Audience audience, + String senderUsername, + Component senderDisplayName, + String recipientUsername, + Component recipientDisplayName, + Component message + ); + @Message("whisper.console") void whisperConsoleLog( Audience audience, diff --git a/common/src/main/resources/locale/messages-en_US.properties b/common/src/main/resources/locale/messages-en_US.properties index 9197eb438..b069d2737 100644 --- a/common/src/main/resources/locale/messages-en_US.properties +++ b/common/src/main/resources/locale/messages-en_US.properties @@ -133,6 +133,7 @@ whisper.console=[] -> [You have no one to whisper whisper.error=Failed to send private message whisper.from= '>[] -> [You] +whisper.from.spy=SPY [] -> [] whisper.ignored_by_target= is ignoring you whisper.ignoring_target=You are ignoring whisper.ignoring_all=You cannot send messages while they are ignored!