Skip to content

Commit b1705dd

Browse files
committed
Merge branch 'main' into 4-add-mail-functionality
2 parents 9dd174a + 39c62d5 commit b1705dd

File tree

5 files changed

+57
-34
lines changed

5 files changed

+57
-34
lines changed

.github/workflows/release.yml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,24 @@ jobs:
2929
uses: actions/setup-java@v3
3030
with:
3131
java-version: '17'
32-
distribution: 'corretto'
33-
32+
distribution: 'temurin'
33+
34+
- name: Set release version
35+
run: |
36+
TAG=${{ github.event.release.tag_name }}
37+
echo "VERSION=${TAG#v}" >> $GITHUB_OUTPUT
38+
id: version
39+
3440
- name: Set project version
35-
run: mvn -B versions:set -DnewVersion=${{ github.event.release.tag_name }} -DgenerateBackupPoms=false
41+
run: mvn -B versions:set -DnewVersion=${{ steps.version.outputs.VERSION }} -DgenerateBackupPoms=false
3642

3743
- name: Build and package Maven project
3844
run: mvn clean package
3945

4046
- name: Upload to release
4147
uses: JasonEtco/upload-to-release@master
4248
with:
43-
args: target/CloudnodeMSG-${{ github.event.release.tag_name }}.jar application/java-archive
49+
args: target/CloudnodeMSG-${{ steps.version.outputs.VERSION }}.jar application/java-archive
4450
env:
4551
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4652

@@ -49,7 +55,7 @@ jobs:
4955
with:
5056
token: ${{ secrets.MODRINTH_TOKEN }}
5157
project: 5Ce4fxJB
52-
file: target/CloudnodeMSG-${{ github.event.release.tag_name }}.jar
58+
file: target/CloudnodeMSG-${{ steps.version.outputs.VERSION }}.jar
5359
changelog: ${{ github.event.release.body }}
5460
loaders: paper
5561

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ Enable or disable receiving private messages of another player.
123123
Reload the plugin configuration.
124124

125125
<dl>
126-
<dt>Aliases:</dt> <dd><code>/toggledms</code>, <code>/togglepms</code></dd>
127126
<dt>Permission:</dt> <dd><code>cloudnodemsg.reload</code></dd>
128127
</dl>
129128

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

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package pro.cloudnode.smp.cloudnodemsg;
22

3+
import net.kyori.adventure.audience.Audience;
34
import net.kyori.adventure.text.Component;
45
import org.bukkit.NamespacedKey;
56
import org.bukkit.OfflinePlayer;
@@ -12,6 +13,7 @@
1213
import pro.cloudnode.smp.cloudnodemsg.error.InvalidPlayerError;
1314
import pro.cloudnode.smp.cloudnodemsg.error.PlayerHasIncomingDisabledError;
1415
import pro.cloudnode.smp.cloudnodemsg.error.PlayerNotFoundError;
16+
import pro.cloudnode.smp.cloudnodemsg.error.ReplyOfflineError;
1517

1618
import java.util.Arrays;
1719
import java.util.HashSet;
@@ -35,19 +37,27 @@ public Message(@NotNull OfflinePlayer sender, @NotNull OfflinePlayer recipient,
3537
}
3638

3739
public void send() throws InvalidPlayerError {
38-
send(false);
40+
send(Context.REGULAR);
3941
}
4042

41-
public void send(final boolean channel) throws InvalidPlayerError {
43+
public void send(final @NotNull Context context) throws InvalidPlayerError {
44+
final @NotNull String senderUsername = playerOrServerUsername(this.sender);
45+
final @NotNull String recipientUsername = playerOrServerUsername(this.recipient);
46+
4247
final @NotNull Optional<@NotNull Player> senderPlayer = Optional.ofNullable(this.sender.getPlayer());
4348
final @NotNull Optional<@NotNull Player> recipientPlayer = Optional.ofNullable(this.recipient.getPlayer());
4449

45-
if (senderPlayer.isPresent() && (recipientPlayer.isEmpty() || (CloudnodeMSG.isVanished(recipientPlayer.get()) && !senderPlayer
46-
.get().hasPermission(Permission.SEND_VANISHED)))) {
47-
if (!channel) new PlayerNotFoundError(senderPlayer.get().getName()).send(senderPlayer.get());
50+
if (!recipient.getUniqueId().equals(console.getUniqueId()) && recipientPlayer.isEmpty() || (recipientPlayer.isPresent() && senderPlayer.isPresent() && CloudnodeMSG.isVanished(recipientPlayer.get()) && !senderPlayer.get().hasPermission(Permission.SEND_VANISHED))) {
51+
if (context == Context.CHANNEL) {
52+
final @NotNull Player player = Objects.requireNonNull(sender.getPlayer());
53+
Message.exitChannel(player);
54+
new ChannelOfflineError(player.getName(), Optional.ofNullable(recipient.getName())
55+
.orElse("Unknown Player")).send(player);
56+
}
4857
else {
49-
Message.exitChannel(senderPlayer.get());
50-
new ChannelOfflineError(senderPlayer.get(), recipient).send(senderPlayer.get());
58+
final @NotNull Audience senderAudience = senderPlayer.isPresent() ? senderPlayer.get() : CloudnodeMSG.getInstance().getServer().getConsoleSender();
59+
if (context == Context.REPLY) new ReplyOfflineError(recipientUsername).send(senderAudience);
60+
else new PlayerNotFoundError(recipientUsername).send(senderAudience);
5161
}
5262
return;
5363
}
@@ -58,17 +68,16 @@ public void send(final boolean channel) throws InvalidPlayerError {
5868
return;
5969
}
6070

61-
sendMessage(sender, CloudnodeMSG.getInstance().config().outgoing(sender, recipient, message));
62-
if (senderPlayer.isPresent() && !Message.hasChannel(senderPlayer.get(), recipient))
63-
setReplyTo(sender, recipient);
64-
6571
sendSpyMessage(sender, recipient, message);
66-
72+
sendMessage(sender, CloudnodeMSG.getInstance().config().outgoing(senderUsername, recipientUsername, message));
6773
if ((recipientPlayer.isPresent() && Message.isIgnored(recipientPlayer.get(), sender)) && (senderPlayer.isPresent() && !senderPlayer
6874
.get().hasPermission(Permission.IGNORE_BYPASS))) return;
6975
sendMessage(recipient, CloudnodeMSG.getInstance().config()
70-
.incoming(sender, recipient, message));
71-
if (recipientPlayer.isPresent() && !Message.hasChannel(recipientPlayer.get(), sender))
76+
.incoming(senderUsername, recipientUsername, message));
77+
78+
if (sender.getUniqueId().equals(console.getUniqueId()) || (senderPlayer.isPresent() && !Message.hasChannel(senderPlayer.get(), recipient)))
79+
setReplyTo(sender, recipient);
80+
if (recipient.getUniqueId().equals(console.getUniqueId()) || (recipientPlayer.isPresent() && !Message.hasChannel(recipientPlayer.get(), sender)))
7281
setReplyTo(recipient, sender);
7382
}
7483

@@ -289,4 +298,24 @@ public static void exitTeamChannel(final @NotNull Player player) {
289298
public static boolean hasTeamChannel(final @NotNull Player player) {
290299
return player.getPersistentDataContainer().getOrDefault(CHANNEL_TEAM, PersistentDataType.BOOLEAN, false);
291300
}
301+
302+
/**
303+
* The context in which this message is sent
304+
*/
305+
public static enum Context {
306+
/**
307+
* Message sent via command (i.e. no special context)
308+
*/
309+
REGULAR,
310+
311+
/**
312+
* Message sent via messaging channel
313+
*/
314+
CHANNEL,
315+
316+
/**
317+
* Message sent as a reply
318+
*/
319+
REPLY;
320+
}
292321
}

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

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@
44
import org.bukkit.command.CommandSender;
55
import org.jetbrains.annotations.NotNull;
66
import pro.cloudnode.smp.cloudnodemsg.CloudnodeMSG;
7+
import pro.cloudnode.smp.cloudnodemsg.Message;
78
import pro.cloudnode.smp.cloudnodemsg.Permission;
89
import pro.cloudnode.smp.cloudnodemsg.error.InvalidPlayerError;
910
import pro.cloudnode.smp.cloudnodemsg.error.NoPermissionError;
1011
import pro.cloudnode.smp.cloudnodemsg.error.NobodyReplyError;
11-
import pro.cloudnode.smp.cloudnodemsg.error.ReplyOfflineError;
12-
import pro.cloudnode.smp.cloudnodemsg.error.PlayerHasIncomingDisabledError;
13-
import pro.cloudnode.smp.cloudnodemsg.Message;
1412

1513
import java.util.ArrayList;
1614
import java.util.List;
17-
import java.util.Objects;
1815
import java.util.Optional;
1916

2017
public final class ReplyCommand extends Command {
@@ -27,17 +24,9 @@ public boolean run(final @NotNull CommandSender sender, final @NotNull String la
2724

2825
final @NotNull Optional<@NotNull OfflinePlayer> recipient = Message.getReplyTo(Message.offlinePlayer(sender));
2926
if (recipient.isEmpty()) return new NobodyReplyError().send(sender);
30-
if (
31-
!recipient.get().getUniqueId().equals(Message.console.getUniqueId())
32-
&& (
33-
!recipient.get().isOnline()
34-
|| (CloudnodeMSG.isVanished(Objects.requireNonNull(recipient.get().getPlayer())) && !sender.hasPermission(Permission.SEND_VANISHED))
35-
)
36-
)
37-
return new ReplyOfflineError(recipient.get()).send(sender);
3827

3928
try {
40-
new Message(Message.offlinePlayer(sender), recipient.get(), String.join(" ", args)).send();
29+
new Message(Message.offlinePlayer(sender), recipient.get(), String.join(" ", args)).send(Message.Context.REPLY);
4130
return true;
4231
}
4332
catch (final @NotNull InvalidPlayerError e) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public void channels(final @NotNull AsyncChatEvent event) {
4848
if (channelRecipient.isEmpty()) return;
4949
event.setCancelled(true);
5050
try {
51-
new Message(sender, channelRecipient.get(), event.message()).send(true);
51+
new Message(sender, channelRecipient.get(), event.message()).send(Message.Context.CHANNEL);
5252
}
5353
catch (final @NotNull InvalidPlayerError e) {
5454
e.log().send(sender);

0 commit comments

Comments
 (0)