From 2ed94f104891f5f253c5ef46a11ac3d34e82f40d Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Oct 2021 10:27:07 -0400 Subject: [PATCH] Add provider to use new Paper advancement API (#4588) Paper added in PaperMC/Paper@40ee634 --- .../discord/JDADiscordService.java | 8 +++++++- providers/PaperProvider/build.gradle | 8 ++++++-- .../PaperAdvancementListenerProvider.java | 20 +++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAdvancementListenerProvider.java diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 52bd24f16..e9b810ec2 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -21,6 +21,7 @@ import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.utils.cache.CacheFlag; import net.ess3.nms.refl.providers.AchievementListenerProvider; import net.ess3.nms.refl.providers.AdvancementListenerProvider; +import net.ess3.provider.providers.PaperAdvancementListenerProvider; import net.essentialsx.api.v2.events.discord.DiscordMessageEvent; import net.essentialsx.api.v2.services.discord.DiscordService; import net.essentialsx.api.v2.services.discord.InteractionController; @@ -207,7 +208,12 @@ public class JDADiscordService implements DiscordService, IEssentialsModule { try { if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_12_0_R01)) { - Bukkit.getPluginManager().registerEvents(new AdvancementListenerProvider(), plugin); + try { + Class.forName("io.papermc.paper.advancement.AdvancementDisplay"); + Bukkit.getPluginManager().registerEvents(new PaperAdvancementListenerProvider(), plugin); + } catch (ClassNotFoundException e) { + Bukkit.getPluginManager().registerEvents(new AdvancementListenerProvider(), plugin); + } } else { Bukkit.getPluginManager().registerEvents(new AchievementListenerProvider(), plugin); } diff --git a/providers/PaperProvider/build.gradle b/providers/PaperProvider/build.gradle index 1b1dba537..9a483358e 100644 --- a/providers/PaperProvider/build.gradle +++ b/providers/PaperProvider/build.gradle @@ -2,10 +2,14 @@ plugins { id("essentials.base-conventions") } +java { + disableAutoTargetJvm() +} + dependencies { implementation project(':providers:BaseProviders') - compileOnly 'com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT' - compileOnly 'com.destroystokyo.paper:paper-mojangapi:1.16.5-R0.1-SNAPSHOT' + compileOnly 'io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT' + compileOnly 'io.papermc.paper:paper-mojangapi:1.17.1-R0.1-SNAPSHOT' } essentials { diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAdvancementListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAdvancementListenerProvider.java new file mode 100644 index 000000000..c54811e2e --- /dev/null +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAdvancementListenerProvider.java @@ -0,0 +1,20 @@ +package net.ess3.provider.providers; + +import io.papermc.paper.advancement.AdvancementDisplay; +import net.ess3.provider.AbstractAchievementEvent; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerAdvancementDoneEvent; + +public class PaperAdvancementListenerProvider implements Listener { + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onAdvancement(final PlayerAdvancementDoneEvent event) { + final AdvancementDisplay display = event.getAdvancement().getDisplay(); + if (display != null && display.doesAnnounceToChat()) { + //noinspection deprecation + Bukkit.getPluginManager().callEvent(new AbstractAchievementEvent(event.getPlayer(), Bukkit.getUnsafe().plainComponentSerializer().serialize(display.title()))); + } + } +}