Skip to content

Commit 41f5cc3

Browse files
authored
Use Paper command forwarding API (#4794)
Uses API added in PaperMC/Paper@9940bca, when available.
1 parent c6fe160 commit 41f5cc3

File tree

2 files changed

+54
-15
lines changed

2 files changed

+54
-15
lines changed

EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordCommandSender.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
import net.ess3.provider.providers.PaperCommandSender;
77
import net.essentialsx.discord.JDADiscordService;
88
import org.bukkit.Bukkit;
9+
import org.bukkit.command.CommandSender;
910
import org.bukkit.command.ConsoleCommandSender;
1011
import org.bukkit.scheduler.BukkitTask;
1112

1213
public class DiscordCommandSender {
13-
private final BukkitSenderProvider sender;
14+
private final CommandSender sender;
1415
private BukkitTask task;
1516
private String responseBuffer = "";
1617
private long lastTime = System.currentTimeMillis();
@@ -20,7 +21,7 @@ public DiscordCommandSender(JDADiscordService jda, ConsoleCommandSender sender,
2021
responseBuffer = responseBuffer + (responseBuffer.isEmpty() ? "" : "\n") + MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripFormat(message));
2122
lastTime = System.currentTimeMillis();
2223
};
23-
this.sender = (VersionUtil.isPaper() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_5_R01)) ? new PaperCommandSender(sender, hook) : new BukkitSenderProvider(sender, hook);
24+
this.sender = getCustomSender(sender, hook);
2425

2526
task = Bukkit.getScheduler().runTaskTimerAsynchronously(jda.getPlugin(), () -> {
2627
if (!responseBuffer.isEmpty() && System.currentTimeMillis() - lastTime >= 1000) {
@@ -36,11 +37,21 @@ public DiscordCommandSender(JDADiscordService jda, ConsoleCommandSender sender,
3637
}, 0, 20);
3738
}
3839

40+
private CommandSender getCustomSender(final ConsoleCommandSender consoleSender, final BukkitSenderProvider.MessageHook hook) {
41+
if (VersionUtil.isPaper() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_5_R01)) {
42+
if (PaperCommandSender.forwardingSenderAvailable()) {
43+
return PaperCommandSender.createCommandSender(hook::sendMessage);
44+
}
45+
return new PaperCommandSender(consoleSender, hook);
46+
}
47+
return new BukkitSenderProvider(consoleSender, hook);
48+
}
49+
3950
public interface CmdCallback {
4051
void onMessage(String message);
4152
}
4253

43-
public BukkitSenderProvider getSender() {
54+
public CommandSender getSender() {
4455
return sender;
4556
}
4657
}

providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperCommandSender.java

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,49 @@
11
package net.ess3.provider.providers;
22

3+
import io.papermc.paper.text.PaperComponents;
34
import net.kyori.adventure.audience.MessageType;
45
import net.kyori.adventure.identity.Identified;
56
import net.kyori.adventure.identity.Identity;
67
import net.kyori.adventure.text.Component;
78
import net.kyori.adventure.text.ComponentLike;
89
import org.bukkit.Bukkit;
10+
import org.bukkit.command.CommandSender;
911
import org.bukkit.command.ConsoleCommandSender;
1012
import org.jetbrains.annotations.NotNull;
1113

14+
import java.util.function.Consumer;
15+
1216
public class PaperCommandSender extends BukkitSenderProvider {
17+
private static final boolean FORWARDING_SENDER_AVAILABLE;
18+
19+
static {
20+
boolean jmpHappy;
21+
try {
22+
Bukkit.createCommandSender(component -> {});
23+
jmpHappy = true;
24+
} catch (NoSuchMethodError ignored) {
25+
jmpHappy = false;
26+
}
27+
FORWARDING_SENDER_AVAILABLE = jmpHappy;
28+
}
29+
1330
public PaperCommandSender(ConsoleCommandSender base, MessageHook hook) {
1431
super(base, hook);
1532
}
1633

34+
public static boolean forwardingSenderAvailable() {
35+
return FORWARDING_SENDER_AVAILABLE;
36+
}
37+
38+
public static CommandSender createCommandSender(Consumer<String> consumer) {
39+
if (!forwardingSenderAvailable()) {
40+
return null;
41+
}
42+
return Bukkit.createCommandSender(component -> consumer.accept(PaperComponents.legacySectionSerializer().serialize(component)));
43+
}
44+
1745
@Override
18-
public void sendMessage(Identity identity, Component message, MessageType type) {
46+
public void sendMessage(@NotNull Identity identity, @NotNull Component message, @NotNull MessageType type) {
1947
sendDumbComponent(message);
2048
}
2149

@@ -25,57 +53,57 @@ public void sendMessage(ComponentLike message) {
2553
}
2654

2755
@Override
28-
public void sendMessage(Identified source, ComponentLike message) {
56+
public void sendMessage(@NotNull Identified source, ComponentLike message) {
2957
sendDumbComponent(message.asComponent());
3058
}
3159

3260
@Override
33-
public void sendMessage(Identity source, ComponentLike message) {
61+
public void sendMessage(@NotNull Identity source, ComponentLike message) {
3462
sendDumbComponent(message.asComponent());
3563
}
3664

3765
@Override
38-
public void sendMessage(Component message) {
66+
public void sendMessage(@NotNull Component message) {
3967
sendDumbComponent(message);
4068
}
4169

4270
@Override
43-
public void sendMessage(Identified source, Component message) {
71+
public void sendMessage(@NotNull Identified source, @NotNull Component message) {
4472
sendDumbComponent(message);
4573
}
4674

4775
@Override
48-
public void sendMessage(Identity source, Component message) {
76+
public void sendMessage(@NotNull Identity source, @NotNull Component message) {
4977
sendDumbComponent(message);
5078
}
5179

5280
@Override
53-
public void sendMessage(ComponentLike message, MessageType type) {
81+
public void sendMessage(ComponentLike message, @NotNull MessageType type) {
5482
sendDumbComponent(message.asComponent());
5583
}
5684

5785
@Override
58-
public void sendMessage(Identified source, ComponentLike message, MessageType type) {
86+
public void sendMessage(@NotNull Identified source, ComponentLike message, @NotNull MessageType type) {
5987
sendDumbComponent(message.asComponent());
6088
}
6189

6290
@Override
63-
public void sendMessage(Identity source, ComponentLike message, MessageType type) {
91+
public void sendMessage(@NotNull Identity source, ComponentLike message, @NotNull MessageType type) {
6492
sendDumbComponent(message.asComponent());
6593
}
6694

6795
@Override
68-
public void sendMessage(Component message, MessageType type) {
96+
public void sendMessage(@NotNull Component message, @NotNull MessageType type) {
6997
sendDumbComponent(message);
7098
}
7199

72100
@Override
73-
public void sendMessage(Identified source, Component message, MessageType type) {
101+
public void sendMessage(@NotNull Identified source, @NotNull Component message, @NotNull MessageType type) {
74102
sendDumbComponent(message);
75103
}
76104

77105
public void sendDumbComponent(Component message) {
78-
sendMessage(Bukkit.getUnsafe().legacyComponentSerializer().serialize(message));
106+
sendMessage(PaperComponents.legacySectionSerializer().serialize(message));
79107
}
80108

81109
@Override

0 commit comments

Comments
 (0)