Skip to content

Commit 5b9a2ae

Browse files
committed
Fix spigot compatibility with adventure component in PlayerAdvancementDoneEvent
1 parent a470124 commit 5b9a2ae

File tree

2 files changed

+58
-30
lines changed

2 files changed

+58
-30
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.mvplugins.multiverse.inventories.listeners;
2+
3+
import com.dumptruckman.minecraft.util.Logging;
4+
import github.scarsz.discordsrv.DiscordSRV;
5+
import github.scarsz.discordsrv.api.Subscribe;
6+
import github.scarsz.discordsrv.api.events.AchievementMessagePreProcessEvent;
7+
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
8+
9+
/**
10+
* Spigot is old and outdated, so we have this separate class to handle Paper-specific
11+
* advancement done event features that uses adventure text components.
12+
*/
13+
final class AdvancementDonePaperHelper {
14+
15+
private static AdvancementDonePaperHelper instance;
16+
17+
static AdvancementDonePaperHelper getInstance() {
18+
if (instance == null) {
19+
instance = new AdvancementDonePaperHelper();
20+
}
21+
return instance;
22+
}
23+
24+
private AdvancementDonePaperHelper() {
25+
}
26+
27+
void registerDiscordSrvHook() {
28+
Logging.fine("Registering DiscordSRV advancement grant hook.");
29+
DiscordSRV.api.subscribe(new DiscordSrvHook());
30+
}
31+
32+
void handleAdvancementDoneEventSuppression(PlayerAdvancementDoneEvent event) {
33+
Logging.finest("Suppressing advancement done message for player %s due to share handling.",
34+
event.getPlayer().getName());
35+
event.message(net.kyori.adventure.text.Component.text("mvinv:suppressed"));
36+
}
37+
38+
private static class DiscordSrvHook {
39+
@Subscribe
40+
public void onAchievementMessage(AchievementMessagePreProcessEvent event) {
41+
if (!(event.getTriggeringBukkitEvent() instanceof PlayerAdvancementDoneEvent advancementEvent)) {
42+
return;
43+
}
44+
if (net.kyori.adventure.text.Component.EQUALS.test(
45+
advancementEvent.message(),
46+
net.kyori.adventure.text.Component.text("mvinv:suppressed"))) {
47+
Logging.finest("Suppressing DiscordSRV advancement message for player %s due to share handling.",
48+
advancementEvent.getPlayer().getName());
49+
event.setCancelled(true);
50+
}
51+
}
52+
}
53+
}

src/main/java/org/mvplugins/multiverse/inventories/listeners/SilentGrantsListener.java

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package org.mvplugins.multiverse.inventories.listeners;
22

33
import com.dumptruckman.minecraft.util.Logging;
4-
import github.scarsz.discordsrv.DiscordSRV;
5-
import github.scarsz.discordsrv.api.Subscribe;
6-
import github.scarsz.discordsrv.api.events.AchievementMessagePreProcessEvent;
74
import org.bukkit.Bukkit;
85
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
96
import org.bukkit.event.player.PlayerRecipeDiscoverEvent;
@@ -32,9 +29,9 @@ final class SilentGrantsListener implements MVInvListener {
3229
this.hasPlayerAdvancementDoneMessageMethod = ReflectHelper.getMethod(
3330
PlayerAdvancementDoneEvent.class,"message") != null;
3431

35-
if (Bukkit.getPluginManager().isPluginEnabled("DiscordSRV")) {
32+
if (hasPlayerAdvancementDoneMessageMethod && Bukkit.getPluginManager().isPluginEnabled("DiscordSRV")) {
3633
Logging.fine("Registering DiscordSRV advancement grant hook.");
37-
DiscordSRV.api.subscribe(new DiscordSrvHook());
34+
AdvancementDonePaperHelper.getInstance().registerDiscordSrvHook();
3835
}
3936
}
4037

@@ -58,37 +55,15 @@ void onPlayerAdvancementDone(PlayerAdvancementDoneEvent event) {
5855
return;
5956
}
6057
if (playerShareHandlingState.isHandlingSharable(event.getPlayer(), Sharables.ADVANCEMENTS)) {
61-
Logging.finest("Suppressing advancement done message for player %s due to share handling.",
62-
event.getPlayer().getName());
63-
event.message(net.kyori.adventure.text.Component.text("mvinv:suppressed"));
58+
AdvancementDonePaperHelper.getInstance().handleAdvancementDoneEventSuppression(event);
6459
}
6560
}
6661

6762
@EventMethod
6863
void onPluginEnable(PluginEnableEvent event) {
69-
if (event.getPlugin().getName().equals("DiscordSRV")) {
64+
if (hasPlayerAdvancementDoneMessageMethod && event.getPlugin().getName().equals("DiscordSRV")) {
7065
Logging.fine("Registering DiscordSRV advancement grant hook.");
71-
DiscordSRV.api.subscribe(new DiscordSrvHook());
72-
}
73-
}
74-
75-
private class DiscordSrvHook {
76-
@Subscribe
77-
public void onAchievementMessage(AchievementMessagePreProcessEvent event) {
78-
if (!(event.getTriggeringBukkitEvent() instanceof PlayerAdvancementDoneEvent advancementEvent)) {
79-
return;
80-
}
81-
if (!hasPlayerAdvancementDoneMessageMethod) {
82-
// paper does not have the method to suppress notifications
83-
return;
84-
}
85-
if (net.kyori.adventure.text.Component.EQUALS.test(
86-
advancementEvent.message(),
87-
net.kyori.adventure.text.Component.text("mvinv:suppressed"))) {
88-
Logging.finest("Suppressing DiscordSRV advancement message for player %s due to share handling.",
89-
advancementEvent.getPlayer().getName());
90-
event.setCancelled(true);
91-
}
66+
AdvancementDonePaperHelper.getInstance().registerDiscordSrvHook();
9267
}
9368
}
9469
}

0 commit comments

Comments
 (0)