Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package org.mvplugins.multiverse.inventories.listeners;

import com.dumptruckman.minecraft.util.Logging;
import github.scarsz.discordsrv.DiscordSRV;
import github.scarsz.discordsrv.api.Subscribe;
import github.scarsz.discordsrv.api.events.AchievementMessagePreProcessEvent;
import org.bukkit.event.player.PlayerAdvancementDoneEvent;

/**
* Spigot is old and outdated, so we have this separate class to handle Paper-specific
* advancement done event features that uses adventure text components.
*/
final class AdvancementDonePaperHelper {

private static AdvancementDonePaperHelper instance;

static AdvancementDonePaperHelper getInstance() {
if (instance == null) {
instance = new AdvancementDonePaperHelper();
}
return instance;
}

private AdvancementDonePaperHelper() {
}

void registerDiscordSrvHook() {
Logging.fine("Registering DiscordSRV advancement grant hook.");
DiscordSRV.api.subscribe(new DiscordSrvHook());
}

void handleAdvancementDoneEventSuppression(PlayerAdvancementDoneEvent event) {
Logging.finest("Suppressing advancement done message for player %s due to share handling.",
event.getPlayer().getName());
event.message(net.kyori.adventure.text.Component.text("mvinv:suppressed"));
}

private static class DiscordSrvHook {
@Subscribe
public void onAchievementMessage(AchievementMessagePreProcessEvent event) {
if (!(event.getTriggeringBukkitEvent() instanceof PlayerAdvancementDoneEvent advancementEvent)) {
return;
}
if (net.kyori.adventure.text.Component.EQUALS.test(
advancementEvent.message(),
net.kyori.adventure.text.Component.text("mvinv:suppressed"))) {
Logging.finest("Suppressing DiscordSRV advancement message for player %s due to share handling.",
advancementEvent.getPlayer().getName());
event.setCancelled(true);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package org.mvplugins.multiverse.inventories.listeners;

import com.dumptruckman.minecraft.util.Logging;
import github.scarsz.discordsrv.DiscordSRV;
import github.scarsz.discordsrv.api.Subscribe;
import github.scarsz.discordsrv.api.events.AchievementMessagePreProcessEvent;
import org.bukkit.Bukkit;
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
import org.bukkit.event.player.PlayerRecipeDiscoverEvent;
Expand Down Expand Up @@ -32,9 +29,9 @@ final class SilentGrantsListener implements MVInvListener {
this.hasPlayerAdvancementDoneMessageMethod = ReflectHelper.getMethod(
PlayerAdvancementDoneEvent.class,"message") != null;

if (Bukkit.getPluginManager().isPluginEnabled("DiscordSRV")) {
if (hasPlayerAdvancementDoneMessageMethod && Bukkit.getPluginManager().isPluginEnabled("DiscordSRV")) {
Logging.fine("Registering DiscordSRV advancement grant hook.");
DiscordSRV.api.subscribe(new DiscordSrvHook());
AdvancementDonePaperHelper.getInstance().registerDiscordSrvHook();
}
}

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

@EventMethod
void onPluginEnable(PluginEnableEvent event) {
if (event.getPlugin().getName().equals("DiscordSRV")) {
if (hasPlayerAdvancementDoneMessageMethod && event.getPlugin().getName().equals("DiscordSRV")) {
Logging.fine("Registering DiscordSRV advancement grant hook.");
DiscordSRV.api.subscribe(new DiscordSrvHook());
}
}

private class DiscordSrvHook {
@Subscribe
public void onAchievementMessage(AchievementMessagePreProcessEvent event) {
if (!(event.getTriggeringBukkitEvent() instanceof PlayerAdvancementDoneEvent advancementEvent)) {
return;
}
if (!hasPlayerAdvancementDoneMessageMethod) {
// paper does not have the method to suppress notifications
return;
}
if (net.kyori.adventure.text.Component.EQUALS.test(
advancementEvent.message(),
net.kyori.adventure.text.Component.text("mvinv:suppressed"))) {
Logging.finest("Suppressing DiscordSRV advancement message for player %s due to share handling.",
advancementEvent.getPlayer().getName());
event.setCancelled(true);
}
AdvancementDonePaperHelper.getInstance().registerDiscordSrvHook();
}
}
}
Loading