mirror of
https://github.com/DiscordSRV/Ascension.git
synced 2024-11-28 12:56:17 +01:00
Add spigot listener for advancements
This commit is contained in:
parent
91fa61542d
commit
273f3d9a19
@ -38,7 +38,7 @@ dependencies {
|
|||||||
annotationProcessor project(':api')
|
annotationProcessor project(':api')
|
||||||
|
|
||||||
// Platform
|
// Platform
|
||||||
compileOnly(libs.spigotapi)
|
compileOnly(libs.bukkit)
|
||||||
|
|
||||||
// Common
|
// Common
|
||||||
compileOnly project(':common')
|
compileOnly project(':common')
|
||||||
@ -47,6 +47,7 @@ dependencies {
|
|||||||
// Folia, modern bukkit
|
// Folia, modern bukkit
|
||||||
api project(':bukkit:bukkit-folia')
|
api project(':bukkit:bukkit-folia')
|
||||||
api project(':bukkit:bukkit-paper')
|
api project(':bukkit:bukkit-paper')
|
||||||
|
api project(':bukkit:bukkit-spigot')
|
||||||
api project(':bukkit:bukkit-bukkit1_12')
|
api project(':bukkit:bukkit-bukkit1_12')
|
||||||
|
|
||||||
// DependencyDownload
|
// DependencyDownload
|
||||||
@ -72,6 +73,7 @@ dependencies {
|
|||||||
compileOnly(libs.chatty)
|
compileOnly(libs.chatty)
|
||||||
compileOnly(libs.griefprevention)
|
compileOnly(libs.griefprevention)
|
||||||
compileOnly(libs.lunachat)
|
compileOnly(libs.lunachat)
|
||||||
|
compileOnly(libs.bungeecord.chat) // Required for LunaChatIntegration
|
||||||
compileOnly(libs.mcmmo)
|
compileOnly(libs.mcmmo)
|
||||||
compileOnly(libs.townychat)
|
compileOnly(libs.townychat)
|
||||||
compileOnly(libs.venturechat)
|
compileOnly(libs.venturechat)
|
||||||
|
@ -30,6 +30,9 @@ import org.bukkit.event.player.PlayerAdvancementDoneEvent;
|
|||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for Spigot and Paper in versions before they added advancement apis.
|
||||||
|
*/
|
||||||
public class BukkitAdvancementListener extends AbstractBukkitAwardListener {
|
public class BukkitAdvancementListener extends AbstractBukkitAwardListener {
|
||||||
|
|
||||||
private final NMS nms;
|
private final NMS nms;
|
||||||
@ -37,19 +40,12 @@ public class BukkitAdvancementListener extends AbstractBukkitAwardListener {
|
|||||||
public BukkitAdvancementListener(DiscordSRV discordSRV, IBukkitAwardForwarder forwarder) {
|
public BukkitAdvancementListener(DiscordSRV discordSRV, IBukkitAwardForwarder forwarder) {
|
||||||
super(discordSRV, forwarder);
|
super(discordSRV, forwarder);
|
||||||
|
|
||||||
String className = Bukkit.getServer().getClass().getName();
|
String version = Bukkit.getServer().getBukkitVersion().split("-", 2)[0];
|
||||||
String[] packageParts = className.split("\\.");
|
|
||||||
if (packageParts.length != 5) {
|
|
||||||
this.nms = null;
|
|
||||||
logger.error("Server does not have NMS, incompatible with advancements.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String version = packageParts[3];
|
|
||||||
NMS nms = null;
|
NMS nms = null;
|
||||||
try {
|
try {
|
||||||
if ((version.startsWith("v1_19") && !version.startsWith("v1_19_R1") && !version.startsWith("v1_19_R2"))
|
if ((version.startsWith("1.19") && !version.matches("1.19.[1-3].*"))
|
||||||
|| version.startsWith("v1_2")) {
|
|| version.startsWith("1.2")) {
|
||||||
// 1.19.4+
|
// 1.19.4+
|
||||||
nms = new NMS("org.bukkit.craftbukkit." + version + ".advancement.CraftAdvancement",
|
nms = new NMS("org.bukkit.craftbukkit." + version + ".advancement.CraftAdvancement",
|
||||||
"d", "i", "a");
|
"d", "i", "a");
|
||||||
|
11
bukkit/spigot/build.gradle
Normal file
11
bukkit/spigot/build.gradle
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
dependencies {
|
||||||
|
// Platform
|
||||||
|
compileOnly(libs.spigotapi)
|
||||||
|
|
||||||
|
// Adventure (runtime downloaded by :bukkit)
|
||||||
|
compileOnly(libs.adventure.platform.bukkit)
|
||||||
|
|
||||||
|
// Common
|
||||||
|
compileOnly project(':bukkit:bukkit-bukkit1_12')
|
||||||
|
compileOnly project(':common')
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.discordsrv.bukkit.listener.award;
|
||||||
|
|
||||||
|
import com.discordsrv.api.component.MinecraftComponent;
|
||||||
|
import com.discordsrv.common.DiscordSRV;
|
||||||
|
import com.discordsrv.common.component.util.ComponentUtil;
|
||||||
|
import net.kyori.adventure.platform.bukkit.BukkitComponentSerializer;
|
||||||
|
import org.bukkit.advancement.Advancement;
|
||||||
|
import org.bukkit.advancement.AdvancementDisplay;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
|
||||||
|
|
||||||
|
public class SpigotModernAdvancementListener extends AbstractBukkitAwardListener {
|
||||||
|
|
||||||
|
public SpigotModernAdvancementListener(DiscordSRV discordSRV, IBukkitAwardForwarder forwarder) {
|
||||||
|
super(discordSRV, forwarder);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void onPlayerAdvancementDone(PlayerAdvancementDoneEvent event) {
|
||||||
|
Advancement advancement = event.getAdvancement();
|
||||||
|
AdvancementDisplay display = advancement.getDisplay();
|
||||||
|
if (display == null || !display.shouldAnnounceChat()) {
|
||||||
|
logger.trace("Skipping advancement display of \"" + advancement.getKey().getKey() + "\" for "
|
||||||
|
+ event.getPlayer() + ": advancement display == null or does not broadcast to chat");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
MinecraftComponent title = ComponentUtil.toAPI(BukkitComponentSerializer.legacy().deserialize(display.getTitle())) ;
|
||||||
|
forwarder.publishEvent(event, event.getPlayer(), title, null, false);
|
||||||
|
}
|
||||||
|
}
|
@ -24,21 +24,39 @@ import com.discordsrv.bukkit.BukkitDiscordSRV;
|
|||||||
import com.discordsrv.common.player.IPlayer;
|
import com.discordsrv.common.player.IPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.intellij.lang.annotations.Language;
|
||||||
|
|
||||||
public class BukkitAwardForwarder implements IBukkitAwardForwarder {
|
public class BukkitAwardForwarder implements IBukkitAwardForwarder {
|
||||||
|
|
||||||
public static Listener get(BukkitDiscordSRV discordSRV) {
|
public static Listener get(BukkitDiscordSRV discordSRV) {
|
||||||
try {
|
BukkitAwardForwarder forwarder = new BukkitAwardForwarder(discordSRV);
|
||||||
Class.forName("org.bukkit.event.player.PlayerAdvancementDoneEvent");
|
|
||||||
try {
|
|
||||||
Class.forName("io.papermc.paper.advancement.AdvancementDisplay");
|
|
||||||
|
|
||||||
return new PaperModernAdvancementListener(discordSRV, new BukkitAwardForwarder(discordSRV));
|
if (exists("org.bukkit.event.player.PlayerAdvancementDoneEvent")) {
|
||||||
} catch (ClassNotFoundException ignored) {
|
// Advancement
|
||||||
return new BukkitAdvancementListener(discordSRV, new BukkitAwardForwarder(discordSRV));
|
if (exists("io.papermc.paper.advancement.AdvancementDisplay")) {
|
||||||
|
// Paper
|
||||||
|
return new PaperModernAdvancementListener(discordSRV, forwarder);
|
||||||
|
} else if (exists("org.bukkit.advancement.AdvancementDisplay")) {
|
||||||
|
// Spigot
|
||||||
|
return new SpigotModernAdvancementListener(discordSRV, forwarder);
|
||||||
|
} else {
|
||||||
|
// Generic
|
||||||
|
return new BukkitAdvancementListener(discordSRV, forwarder);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// Achievement
|
||||||
|
return new BukkitAchievementListener(discordSRV, forwarder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean exists(
|
||||||
|
@Language(value = "JAVA", prefix = "class X{static{Class.forName(\"", suffix = "\")}}") String className
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
Class.forName(className);
|
||||||
|
return true;
|
||||||
} catch (ClassNotFoundException ignored) {
|
} catch (ClassNotFoundException ignored) {
|
||||||
return new BukkitAchievementListener(discordSRV, new BukkitAwardForwarder(discordSRV));
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,14 +19,18 @@
|
|||||||
package com.discordsrv.common.config.connection;
|
package com.discordsrv.common.config.connection;
|
||||||
|
|
||||||
import com.discordsrv.common.config.Config;
|
import com.discordsrv.common.config.Config;
|
||||||
|
import com.discordsrv.common.config.configurate.annotation.Constants;
|
||||||
|
import com.discordsrv.common.config.main.MainConfig;
|
||||||
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
|
||||||
|
|
||||||
@ConfigSerializable
|
@ConfigSerializable
|
||||||
public class ConnectionConfig implements Config {
|
public class ConnectionConfig implements Config {
|
||||||
|
|
||||||
public static final String FILE_NAME = "connections.yaml";
|
public static final String FILE_NAME = "connections.yaml";
|
||||||
|
|
||||||
|
@Constants(MainConfig.FILE_NAME)
|
||||||
public static final String HEADER = "DiscordSRV's configuration file for connections to different external services.\n"
|
public static final String HEADER = "DiscordSRV's configuration file for connections to different external services.\n"
|
||||||
+ "This file is intended to contain connection details to services in order to keep them out of the config.yml\n"
|
+ "This file is intended to contain connection details to services in order to keep them out of the %1\n"
|
||||||
+ "and to serve as a easy way to identify and control what external connections are being used.\n"
|
+ "and to serve as a easy way to identify and control what external connections are being used.\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "All domains listed as \"Requires a connection to\" require port 443 (https/wss) unless otherwise specified\n"
|
+ "All domains listed as \"Requires a connection to\" require port 443 (https/wss) unless otherwise specified\n"
|
||||||
|
@ -21,7 +21,8 @@ dependencyResolutionManagement {
|
|||||||
version('bukkit_latest', '1.20.1-R0.1-SNAPSHOT')
|
version('bukkit_latest', '1.20.1-R0.1-SNAPSHOT')
|
||||||
version('folia', '1.20.1-R0.1-SNAPSHOT')
|
version('folia', '1.20.1-R0.1-SNAPSHOT')
|
||||||
library('paperapi', 'io.papermc.paper', 'paper-api').versionRef('bukkit_latest')
|
library('paperapi', 'io.papermc.paper', 'paper-api').versionRef('bukkit_latest')
|
||||||
library('spigotapi', 'org.spigotmc', 'spigot-api').versionRef('bukkit_minimum')
|
library('spigotapi', 'org.spigotmc', 'spigot-api').versionRef('bukkit_latest')
|
||||||
|
library('bukkit', 'org.bukkit', 'bukkit').versionRef('bukkit_minimum')
|
||||||
library('spigotapi-onetwelve', 'org.spigotmc', 'spigot-api').versionRef('bukkit1_12')
|
library('spigotapi-onetwelve', 'org.spigotmc', 'spigot-api').versionRef('bukkit1_12')
|
||||||
library('folia', 'dev.folia', 'folia-api').versionRef('folia')
|
library('folia', 'dev.folia', 'folia-api').versionRef('folia')
|
||||||
|
|
||||||
@ -107,6 +108,7 @@ dependencyResolutionManagement {
|
|||||||
library('venturechat', 'mineverse.aust1n46', 'venturechat').version('3.5.0')
|
library('venturechat', 'mineverse.aust1n46', 'venturechat').version('3.5.0')
|
||||||
library('chatty', 'ru.mrbrikster', 'chatty-api').version('2.19.13')
|
library('chatty', 'ru.mrbrikster', 'chatty-api').version('2.19.13')
|
||||||
library('lunachat', 'com.github.ucchyocean.lc', 'LunaChat').version('3.0.16')
|
library('lunachat', 'com.github.ucchyocean.lc', 'LunaChat').version('3.0.16')
|
||||||
|
library('bungeecord-chat', 'net.md-5', 'bungeecord-chat').version('1.12-SNAPSHOT')
|
||||||
library('mcmmo', 'com.gmail.nossr50', 'mcmmo').version('2.1.220')
|
library('mcmmo', 'com.gmail.nossr50', 'mcmmo').version('2.1.220')
|
||||||
library('griefprevention', 'me.ryanhamshire', 'GriefPrevention').version('16.18.1')
|
library('griefprevention', 'me.ryanhamshire', 'GriefPrevention').version('16.18.1')
|
||||||
|
|
||||||
@ -149,7 +151,7 @@ rootProject.name = 'DiscordSRV-Ascension'
|
|||||||
'common', 'common:api', 'common:unrelocate',
|
'common', 'common:api', 'common:unrelocate',
|
||||||
'i18n',
|
'i18n',
|
||||||
'api',
|
'api',
|
||||||
'bukkit', 'bukkit:loader', 'bukkit:folia', 'bukkit:paper', 'bukkit:bukkit1_12',
|
'bukkit', 'bukkit:loader', 'bukkit:folia', 'bukkit:spigot', 'bukkit:paper', 'bukkit:bukkit1_12',
|
||||||
'bungee', 'bungee:loader',
|
'bungee', 'bungee:loader',
|
||||||
'sponge', 'sponge:loader',
|
'sponge', 'sponge:loader',
|
||||||
'velocity'
|
'velocity'
|
||||||
|
Loading…
Reference in New Issue
Block a user