mirror of
https://github.com/DiscordSRV/Ascension.git
synced 2025-02-15 01:31:26 +01:00
Initial for bukkit split
This commit is contained in:
parent
317a3c20f6
commit
53842c183d
@ -1,87 +1,5 @@
|
|||||||
import dev.vankka.dependencydownload.task.GenerateDependencyDownloadResourceTask
|
|
||||||
|
|
||||||
[
|
|
||||||
'net.kyori',
|
|
||||||
'me.lucko.commodore'
|
|
||||||
].each {
|
|
||||||
tasks.shadowJar.relocate it, 'com.discordsrv.dependencies.' + it
|
|
||||||
tasks.generateRuntimeDownloadResourceForRuntimeDownloadOnly.relocate it, 'com.discordsrv.dependencies.' + it
|
|
||||||
}
|
|
||||||
// More relocations in buildscript/relocations.gradle
|
|
||||||
|
|
||||||
shadowJar {
|
|
||||||
archiveFileName = 'bukkit.jarinjar'
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: rootProject.file('buildscript/runtime.gradle')
|
|
||||||
|
|
||||||
configurations {
|
|
||||||
commodore
|
|
||||||
compileOnly.extendsFrom commodore
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register('generateResourceForCommodore', GenerateDependencyDownloadResourceTask) {
|
|
||||||
var conf = configurations.commodore
|
|
||||||
configuration = conf
|
|
||||||
file = 'dependencies/' + conf.name + '.txt'
|
|
||||||
}
|
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
maven { url 'https://repo.papermc.io/repository/maven-public/' }
|
maven { url 'https://repo.papermc.io/repository/maven-public/' }
|
||||||
maven { url 'https://nexus.scarsz.me/content/groups/public/' }
|
|
||||||
maven { url 'https://repo.essentialsx.net/releases/' }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
|
||||||
// API
|
|
||||||
annotationProcessor project(':api')
|
|
||||||
|
|
||||||
// Platform
|
|
||||||
compileOnly(libs.bukkit)
|
|
||||||
|
|
||||||
// Common
|
|
||||||
compileOnly project(':common')
|
|
||||||
implementation project(path: ':common', configuration: 'runtimeElements')
|
|
||||||
|
|
||||||
// Folia, modern bukkit
|
|
||||||
api project(':bukkit:bukkit-folia')
|
|
||||||
api project(':bukkit:bukkit-paper')
|
|
||||||
api project(':bukkit:bukkit-spigot')
|
|
||||||
api project(':bukkit:bukkit-bukkit1_12')
|
|
||||||
|
|
||||||
// DependencyDownload
|
|
||||||
implementation(libs.mcdependencydownload.bukkit.bootstrap)
|
|
||||||
|
|
||||||
// Adventure
|
|
||||||
runtimeDownloadApi(libs.adventure.api)
|
|
||||||
runtimeDownloadApi(libs.adventure.platform.bukkit)
|
|
||||||
|
|
||||||
// Commodore
|
|
||||||
commodore(libs.commodore) {
|
|
||||||
// We only use commodore when it's included in the server, so we don't want to download it
|
|
||||||
exclude module: 'brigadier'
|
|
||||||
// We don't use the commodore file format
|
|
||||||
exclude module: 'commodore-file'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Integrations
|
|
||||||
compileOnly(libs.vaultapi)
|
|
||||||
compileOnly(libs.placeholderapi.bukkit)
|
|
||||||
|
|
||||||
// Chat Integrations
|
|
||||||
compileOnly(libs.chatty)
|
|
||||||
compileOnly(libs.griefprevention)
|
|
||||||
compileOnly(libs.lunachat)
|
|
||||||
compileOnly(libs.bungeecord.chat) // Required for LunaChatIntegration
|
|
||||||
compileOnly(libs.mcmmo)
|
|
||||||
compileOnly(libs.townychat)
|
|
||||||
compileOnly(libs.venturechat)
|
|
||||||
compileOnly(libs.essentialsx)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
processResources {
|
|
||||||
dependsOn(generateResourceForCommodore)
|
|
||||||
}
|
|
29
bukkit/common/build.gradle
Normal file
29
bukkit/common/build.gradle
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
repositories {
|
||||||
|
maven { url 'https://nexus.scarsz.me/content/groups/public/' }
|
||||||
|
maven { url 'https://repo.essentialsx.net/releases/' }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// API
|
||||||
|
annotationProcessor project(':api')
|
||||||
|
|
||||||
|
// Platform
|
||||||
|
compileOnly(libs.bukkit.minimum)
|
||||||
|
|
||||||
|
// Common
|
||||||
|
api project(':common')
|
||||||
|
|
||||||
|
// Integrations
|
||||||
|
compileOnly(libs.vaultapi)
|
||||||
|
compileOnly(libs.placeholderapi.bukkit)
|
||||||
|
|
||||||
|
// Chat Integrations
|
||||||
|
compileOnly(libs.chatty)
|
||||||
|
compileOnly(libs.griefprevention)
|
||||||
|
compileOnly(libs.lunachat)
|
||||||
|
compileOnly(libs.bungeecord.chat) // Required for LunaChatIntegration
|
||||||
|
compileOnly(libs.mcmmo)
|
||||||
|
compileOnly(libs.townychat)
|
||||||
|
compileOnly(libs.venturechat)
|
||||||
|
compileOnly(libs.essentialsx)
|
||||||
|
}
|
42
bukkit/legacy/build.gradle
Normal file
42
bukkit/legacy/build.gradle
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import dev.vankka.dependencydownload.task.GenerateDependencyDownloadResourceTask
|
||||||
|
|
||||||
|
[
|
||||||
|
'net.kyori',
|
||||||
|
'me.lucko.commodore'
|
||||||
|
].each {
|
||||||
|
tasks.shadowJar.relocate it, 'com.discordsrv.dependencies.' + it
|
||||||
|
tasks.generateRuntimeDownloadResourceForRuntimeDownloadOnly.relocate it, 'com.discordsrv.dependencies.' + it
|
||||||
|
}
|
||||||
|
// More relocations in buildscript/relocations.gradle
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
archiveFileName = 'bukkit.jarinjar'
|
||||||
|
}
|
||||||
|
|
||||||
|
apply from: rootProject.file('buildscript/runtime.gradle')
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
commodore
|
||||||
|
compileOnly.extendsFrom commodore
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register('generateResourceForCommodore', GenerateDependencyDownloadResourceTask) {
|
||||||
|
var conf = configurations.commodore
|
||||||
|
configuration = conf
|
||||||
|
file = 'dependencies/' + conf.name + '.txt'
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api project(':bukkit:bukkit-common')
|
||||||
|
|
||||||
|
// Adventure
|
||||||
|
runtimeDownloadApi(libs.adventure.api)
|
||||||
|
runtimeDownloadApi(libs.adventure.platform.bukkit)
|
||||||
|
|
||||||
|
// DependencyDownload
|
||||||
|
api(libs.mcdependencydownload.bukkit.bootstrap)
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
dependsOn(generateResourceForCommodore)
|
||||||
|
}
|
0
bukkit/legacy/compat/build.gradle
Normal file
0
bukkit/legacy/compat/build.gradle
Normal file
5
bukkit/legacy/compat/bukkit1_12/build.gradle
Normal file
5
bukkit/legacy/compat/bukkit1_12/build.gradle
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
dependencies {
|
||||||
|
api(project(':bukkit:bukkit-common'))
|
||||||
|
|
||||||
|
compileOnly(libs.spigotapi.onetwelve)
|
||||||
|
}
|
5
bukkit/legacy/compat/spigot/build.gradle
Normal file
5
bukkit/legacy/compat/spigot/build.gradle
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
dependencies {
|
||||||
|
api(project(':bukkit:bukkit-common'))
|
||||||
|
|
||||||
|
compileOnly(libs.spigotapi.latest)
|
||||||
|
}
|
31
bukkit/legacy/loader/build.gradle
Normal file
31
bukkit/legacy/loader/build.gradle
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import org.apache.tools.ant.filters.ReplaceTokens
|
||||||
|
|
||||||
|
apply plugin: 'xyz.jpenilla.run-paper'
|
||||||
|
apply from: rootProject.file('buildscript/loader.gradle')
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// API
|
||||||
|
implementation project(':common:common-api')
|
||||||
|
|
||||||
|
// Platform
|
||||||
|
compileOnly(libs.spigotapi.onetwelve)
|
||||||
|
|
||||||
|
// DependencyDownload
|
||||||
|
implementation(libs.mcdependencydownload.bukkit.loader)
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
filter(ReplaceTokens, tokens: ['VERSION': project.version])
|
||||||
|
}
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
archiveBaseName = 'DiscordSRV-Bukkit'
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks {
|
||||||
|
runServer {
|
||||||
|
minecraftVersion("1.12.2")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// buildscript/loader.gradle includes the jarinjar in the jar
|
@ -1,18 +1,16 @@
|
|||||||
java {
|
shadowJar {
|
||||||
disableAutoTargetJvm() // Requires Java 21, we target 8
|
archiveFileName = 'paper.jarinjar'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apply from: rootProject.file('buildscript/runtime.gradle')
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Platform
|
api project(':bukkit:bukkit-common')
|
||||||
compileOnly(libs.paperapi) {
|
|
||||||
// v2
|
|
||||||
exclude module: 'slf4j-api'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adventure (runtime downloaded by :bukkit)
|
// Compatability with newer versions
|
||||||
compileOnly(libs.adventure.platform.bukkit)
|
implementation(project(':bukkit:paper:compat:bukkit-paper-compat-folia'))
|
||||||
|
implementation(project(':bukkit:paper:compat:bukkit-paper-compat-latest'))
|
||||||
|
|
||||||
// Common
|
// DependencyDownload
|
||||||
compileOnly project(':bukkit:bukkit-bukkit1_12')
|
api(libs.mcdependencydownload.bukkit.bootstrap)
|
||||||
compileOnly project(':common')
|
|
||||||
}
|
}
|
12
bukkit/paper/compat/folia/build.gradle
Normal file
12
bukkit/paper/compat/folia/build.gradle
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
java {
|
||||||
|
disableAutoTargetJvm() // Requires Java 21, we target 8
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api(project(':bukkit:bukkit-common'))
|
||||||
|
|
||||||
|
compileOnly(libs.folia) {
|
||||||
|
// v2
|
||||||
|
exclude module: 'slf4j-api'
|
||||||
|
}
|
||||||
|
}
|
12
bukkit/paper/compat/latest/build.gradle
Normal file
12
bukkit/paper/compat/latest/build.gradle
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
java {
|
||||||
|
disableAutoTargetJvm() // Requires Java 21, we target 8
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api(project(':bukkit:bukkit-common'))
|
||||||
|
|
||||||
|
compileOnly(libs.paperapi.latest) {
|
||||||
|
// v2
|
||||||
|
exclude module: 'slf4j-api'
|
||||||
|
}
|
||||||
|
}
|
31
bukkit/paper/loader/build.gradle
Normal file
31
bukkit/paper/loader/build.gradle
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import org.apache.tools.ant.filters.ReplaceTokens
|
||||||
|
|
||||||
|
apply plugin: 'xyz.jpenilla.run-paper'
|
||||||
|
apply from: rootProject.file('buildscript/loader.gradle')
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// API
|
||||||
|
implementation project(':common:common-api')
|
||||||
|
|
||||||
|
// Platform
|
||||||
|
compileOnly(libs.paperapi.minimum)
|
||||||
|
|
||||||
|
// DependencyDownload
|
||||||
|
implementation(libs.mcdependencydownload.bukkit.loader)
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
filter(ReplaceTokens, tokens: ['VERSION': project.version])
|
||||||
|
}
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
archiveBaseName = 'DiscordSRV-Paper'
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks {
|
||||||
|
runServer {
|
||||||
|
minecraftVersion("1.21.2")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// buildscript/loader.gradle includes the jarinjar in the jar
|
87
bukkitv1/build.gradle
Normal file
87
bukkitv1/build.gradle
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
import dev.vankka.dependencydownload.task.GenerateDependencyDownloadResourceTask
|
||||||
|
|
||||||
|
[
|
||||||
|
'net.kyori',
|
||||||
|
'me.lucko.commodore'
|
||||||
|
].each {
|
||||||
|
tasks.shadowJar.relocate it, 'com.discordsrv.dependencies.' + it
|
||||||
|
tasks.generateRuntimeDownloadResourceForRuntimeDownloadOnly.relocate it, 'com.discordsrv.dependencies.' + it
|
||||||
|
}
|
||||||
|
// More relocations in buildscript/relocations.gradle
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
archiveFileName = 'bukkit.jarinjar'
|
||||||
|
}
|
||||||
|
|
||||||
|
apply from: rootProject.file('buildscript/runtime.gradle')
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
commodore
|
||||||
|
compileOnly.extendsFrom commodore
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register('generateResourceForCommodore', GenerateDependencyDownloadResourceTask) {
|
||||||
|
var conf = configurations.commodore
|
||||||
|
configuration = conf
|
||||||
|
file = 'dependencies/' + conf.name + '.txt'
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
repositories {
|
||||||
|
maven { url 'https://repo.papermc.io/repository/maven-public/' }
|
||||||
|
maven { url 'https://nexus.scarsz.me/content/groups/public/' }
|
||||||
|
maven { url 'https://repo.essentialsx.net/releases/' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// API
|
||||||
|
annotationProcessor project(':api')
|
||||||
|
|
||||||
|
// Platform
|
||||||
|
compileOnly(libs.bukkit.minimum)
|
||||||
|
|
||||||
|
// Common
|
||||||
|
compileOnly project(':common')
|
||||||
|
implementation project(path: ':common', configuration: 'runtimeElements')
|
||||||
|
|
||||||
|
// Folia, modern bukkit
|
||||||
|
api project(':bukkitv1:bukkitv1-folia')
|
||||||
|
api project(':bukkitv1:bukkitv1-paper')
|
||||||
|
api project(':bukkitv1:bukkitv1-spigot')
|
||||||
|
api project(':bukkitv1:bukkitv1-bukkit1_12')
|
||||||
|
|
||||||
|
// DependencyDownload
|
||||||
|
implementation(libs.mcdependencydownload.bukkit.bootstrap)
|
||||||
|
|
||||||
|
// Adventure
|
||||||
|
runtimeDownloadApi(libs.adventure.api)
|
||||||
|
runtimeDownloadApi(libs.adventure.platform.bukkit)
|
||||||
|
|
||||||
|
// Commodore
|
||||||
|
commodore(libs.commodore) {
|
||||||
|
// We only use commodore when it's included in the server, so we don't want to download it
|
||||||
|
exclude module: 'brigadier'
|
||||||
|
// We don't use the commodore file format
|
||||||
|
exclude module: 'commodore-file'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Integrations
|
||||||
|
compileOnly(libs.vaultapi)
|
||||||
|
compileOnly(libs.placeholderapi.bukkit)
|
||||||
|
|
||||||
|
// Chat Integrations
|
||||||
|
compileOnly(libs.chatty)
|
||||||
|
compileOnly(libs.griefprevention)
|
||||||
|
compileOnly(libs.lunachat)
|
||||||
|
compileOnly(libs.bungeecord.chat) // Required for LunaChatIntegration
|
||||||
|
compileOnly(libs.mcmmo)
|
||||||
|
compileOnly(libs.townychat)
|
||||||
|
compileOnly(libs.venturechat)
|
||||||
|
compileOnly(libs.essentialsx)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
dependsOn(generateResourceForCommodore)
|
||||||
|
}
|
@ -4,7 +4,10 @@ java {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Platform
|
// Platform
|
||||||
compileOnly(libs.folia)
|
compileOnly(libs.folia) {
|
||||||
|
// v2
|
||||||
|
exclude module: 'slf4j-api'
|
||||||
|
}
|
||||||
|
|
||||||
// Common
|
// Common
|
||||||
compileOnly project(':common')
|
compileOnly project(':common')
|
@ -8,7 +8,7 @@ dependencies {
|
|||||||
implementation project(':common:common-api')
|
implementation project(':common:common-api')
|
||||||
|
|
||||||
// Platform
|
// Platform
|
||||||
compileOnly(libs.spigotapi)
|
compileOnly(libs.spigotapi.latest)
|
||||||
|
|
||||||
// DependencyDownload
|
// DependencyDownload
|
||||||
implementation(libs.mcdependencydownload.bukkit.loader)
|
implementation(libs.mcdependencydownload.bukkit.loader)
|
18
bukkitv1/paper/build.gradle
Normal file
18
bukkitv1/paper/build.gradle
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
java {
|
||||||
|
disableAutoTargetJvm() // Requires Java 21, we target 8
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// Platform
|
||||||
|
compileOnly(libs.paperapi.latest) {
|
||||||
|
// v2
|
||||||
|
exclude module: 'slf4j-api'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adventure (runtime downloaded by :bukkit)
|
||||||
|
compileOnly(libs.adventure.platform.bukkit)
|
||||||
|
|
||||||
|
// Common
|
||||||
|
compileOnly project(':bukkitv1:bukkitv1-bukkit1_12')
|
||||||
|
compileOnly project(':common')
|
||||||
|
}
|
@ -1,11 +1,11 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
// Platform
|
// Platform
|
||||||
compileOnly(libs.spigotapi)
|
compileOnly(libs.spigotapi.latest)
|
||||||
|
|
||||||
// Adventure (runtime downloaded by :bukkit)
|
// Adventure (runtime downloaded by :bukkit)
|
||||||
compileOnly(libs.adventure.platform.bukkit)
|
compileOnly(libs.adventure.platform.bukkit)
|
||||||
|
|
||||||
// Common
|
// Common
|
||||||
compileOnly project(':bukkit:bukkit-bukkit1_12')
|
compileOnly project(':bukkitv1:bukkitv1-bukkit1_12')
|
||||||
compileOnly project(':common')
|
compileOnly project(':common')
|
||||||
}
|
}
|
@ -0,0 +1,208 @@
|
|||||||
|
package com.discordsrv.bukkit.debug;
|
||||||
|
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
import org.bukkit.plugin.RegisteredListener;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
public class EventObserver<E extends Event, P> {
|
||||||
|
|
||||||
|
private final Plugin plugin;
|
||||||
|
private final Class<?> eventClass;
|
||||||
|
private final BiConsumer<RegisteredListener, E> observer;
|
||||||
|
|
||||||
|
private final Function<E, P> propertyGetter;
|
||||||
|
private final ThreadLocal<P> propertyValue = ThreadLocal.withInitial(() -> null);
|
||||||
|
|
||||||
|
private final EnumMap<EventPriority, EventObserverList<E, P>> proxies = new EnumMap<>(EventPriority.class);
|
||||||
|
private EnumMap<EventPriority, ArrayList<RegisteredListener>> originalMap;
|
||||||
|
|
||||||
|
public EventObserver(Plugin plugin, @NotNull Class<E> eventClass, BiConsumer<RegisteredListener, E> observer, Function<E, P> propertyGetter) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.eventClass = eventClass;
|
||||||
|
this.observer = observer;
|
||||||
|
this.propertyGetter = propertyGetter;
|
||||||
|
inject();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() {
|
||||||
|
if (originalMap == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (Map.Entry<EventPriority, ArrayList<RegisteredListener>> entry : originalMap.entrySet()) {
|
||||||
|
ArrayList<RegisteredListener> list = entry.getValue();
|
||||||
|
list.clear();
|
||||||
|
list.addAll(proxies.get(entry.getKey()).getRaw());
|
||||||
|
}
|
||||||
|
|
||||||
|
HandlerList handlerList = getHandlerList();
|
||||||
|
setSlots(handlerList, originalMap);
|
||||||
|
|
||||||
|
// Reset the handlers so it gets them again
|
||||||
|
Field handlers = handlerList.getClass().getDeclaredField("handlers");
|
||||||
|
handlers.setAccessible(true);
|
||||||
|
handlers.set(handlerList, null);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("Unable to clean up handler list.", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
originalMap = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void inject() {
|
||||||
|
HandlerList handlerList = getHandlerList();
|
||||||
|
EnumMap<EventPriority, ArrayList<RegisteredListener>> slots = getSlots(handlerList);
|
||||||
|
originalMap = slots.clone();
|
||||||
|
|
||||||
|
for (EventPriority eventPriority : slots.keySet()) {
|
||||||
|
List<RegisteredListener> original = originalMap.get(eventPriority);
|
||||||
|
EventObserverList<E, P> proxy = new EventObserverList<>(original, this);
|
||||||
|
|
||||||
|
slots.put(eventPriority, proxy);
|
||||||
|
proxies.put(eventPriority, proxy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private HandlerList getHandlerList() {
|
||||||
|
Class<?> currentClass = eventClass;
|
||||||
|
while (currentClass != null && Event.class.isAssignableFrom(currentClass)) {
|
||||||
|
try {
|
||||||
|
Method method = currentClass.getDeclaredMethod("getHandlerList");
|
||||||
|
if (!method.isAccessible()) method.setAccessible(true);
|
||||||
|
return (HandlerList) method.invoke(null);
|
||||||
|
} catch (NoSuchMethodException ignored) {
|
||||||
|
currentClass = currentClass.getSuperclass();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
throw new RuntimeException("Could not get HandlerList", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException("Unable to find HandlerList");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSlots(HandlerList handlerList, EnumMap<EventPriority, ArrayList<RegisteredListener>> slots) {
|
||||||
|
try {
|
||||||
|
getSlotsField().set(handlerList, slots);
|
||||||
|
} catch (IllegalAccessException | NoSuchFieldException e) {
|
||||||
|
throw new RuntimeException("Unable to set handlerslots field", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public EnumMap<EventPriority, ArrayList<RegisteredListener>> getSlots(HandlerList handlerList) {
|
||||||
|
try {
|
||||||
|
return (EnumMap<EventPriority, ArrayList<RegisteredListener>>) getSlotsField().get(handlerList);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
throw new RuntimeException("Unable to get handlerslots field", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Field getSlotsField() throws NoSuchFieldException {
|
||||||
|
Field field = HandlerList.class.getDeclaredField("handlerslots");
|
||||||
|
if (!field.isAccessible()) field.setAccessible(true);
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class EventObserverList<E extends Event, P> extends ArrayList<RegisteredListener> {
|
||||||
|
|
||||||
|
private final EventObserver<E, P> observer;
|
||||||
|
|
||||||
|
public EventObserverList(Collection<RegisteredListener> original, EventObserver<E, P> observer) {
|
||||||
|
super(original);
|
||||||
|
this.observer = observer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<RegisteredListener> getRaw() {
|
||||||
|
// Avoid #toArray
|
||||||
|
Iterator<RegisteredListener> iterator = iterator();
|
||||||
|
List<RegisteredListener> listeners = new ArrayList<>();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
listeners.add(iterator.next());
|
||||||
|
}
|
||||||
|
return listeners;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<RegisteredListener> getListeners() {
|
||||||
|
List<RegisteredListener> listeners = new ArrayList<>();
|
||||||
|
listeners.add(new CancellationDetectingListener<>(null, observer));
|
||||||
|
for (RegisteredListener listener : this) {
|
||||||
|
listeners.add(listener);
|
||||||
|
listeners.add(new CancellationDetectingListener<>(listener, observer));
|
||||||
|
}
|
||||||
|
return listeners;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object @NotNull [] toArray() {
|
||||||
|
return getListeners().toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T @NotNull [] toArray(T[] a) {
|
||||||
|
return getListeners().toArray(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean remove(Object o) {
|
||||||
|
if (o instanceof CancellationDetectingListener) {
|
||||||
|
// Prevent removing these from the collection
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.remove(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean add(RegisteredListener registeredListener) {
|
||||||
|
if (registeredListener instanceof CancellationDetectingListener) {
|
||||||
|
// Prevent adding these to the collection
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.add(registeredListener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class CancellationDetectingListener<E extends Event, P> extends RegisteredListener {
|
||||||
|
|
||||||
|
private final RegisteredListener listener;
|
||||||
|
private final EventObserver<E, P> observer;
|
||||||
|
|
||||||
|
public CancellationDetectingListener(
|
||||||
|
RegisteredListener listener,
|
||||||
|
EventObserver<E, P> observer
|
||||||
|
) {
|
||||||
|
super(
|
||||||
|
new Listener() {},
|
||||||
|
(l, e) -> {},
|
||||||
|
listener != null ? listener.getPriority() : EventPriority.LOWEST,
|
||||||
|
observer.plugin,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
this.listener = listener;
|
||||||
|
this.observer = observer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public void callEvent(Event event) {
|
||||||
|
P propertyValue = observer.propertyGetter.apply((E) event);
|
||||||
|
P previousValue = observer.propertyValue.get();
|
||||||
|
|
||||||
|
if (!Objects.equals(propertyValue, previousValue)) {
|
||||||
|
observer.propertyValue.set(propertyValue);
|
||||||
|
if (listener != null) {
|
||||||
|
observer.observer.accept(listener, (E) event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -24,15 +24,14 @@ dependencyResolutionManagement {
|
|||||||
plugin('run-waterfall', 'xyz.jpenilla.run-waterfall').versionRef('runtask')
|
plugin('run-waterfall', 'xyz.jpenilla.run-waterfall').versionRef('runtask')
|
||||||
|
|
||||||
// Bukkit
|
// Bukkit
|
||||||
version('bukkit_minimum', '1.8.8-R0.1-SNAPSHOT')
|
library('bukkit-minimum', 'org.bukkit', 'bukkit').version('1.8.8-R0.1-SNAPSHOT')
|
||||||
version('bukkit1_12', '1.12.2-R0.1-SNAPSHOT')
|
library('spigotapi-onetwelve', 'org.spigotmc', 'spigot-api').version('1.12.2-R0.1-SNAPSHOT')
|
||||||
version('bukkit_latest', '1.21.1-R0.1-SNAPSHOT')
|
library('spigotapi-latest', 'org.spigotmc', 'spigot-api').version('1.21.2-R0.1-SNAPSHOT')
|
||||||
version('folia', '1.20.1-R0.1-SNAPSHOT')
|
|
||||||
library('paperapi', 'io.papermc.paper', 'paper-api').versionRef('bukkit_latest')
|
// Paper
|
||||||
library('spigotapi', 'org.spigotmc', 'spigot-api').versionRef('bukkit_latest')
|
library('paperapi-minimum', 'com.destroystokyo.paper', 'paper-api').version('1.16.2-R0.1-SNAPSHOT')
|
||||||
library('bukkit', 'org.bukkit', 'bukkit').versionRef('bukkit_minimum')
|
library('paperapi-latest', 'io.papermc.paper', 'paper-api').version('1.21.4-R0.1-SNAPSHOT')
|
||||||
library('spigotapi-onetwelve', 'org.spigotmc', 'spigot-api').versionRef('bukkit1_12')
|
library('folia', 'dev.folia', 'folia-api').version('1.21.4-R0.1-SNAPSHOT')
|
||||||
library('folia', 'dev.folia', 'folia-api').versionRef('folia')
|
|
||||||
|
|
||||||
// Bungee
|
// Bungee
|
||||||
library('bungee', 'net.md-5', 'bungeecord-api').version('1.21-R0.1-SNAPSHOT')
|
library('bungee', 'net.md-5', 'bungeecord-api').version('1.21-R0.1-SNAPSHOT')
|
||||||
@ -155,8 +154,15 @@ rootProject.name = 'DiscordSRV-Ascension'
|
|||||||
'common', 'common:api', 'common:unrelocate',
|
'common', 'common:api', 'common:unrelocate',
|
||||||
'i18n',
|
'i18n',
|
||||||
'api',
|
'api',
|
||||||
'bukkit', 'bukkit:loader', 'bukkit:folia', 'bukkit:spigot', 'bukkit:paper', 'bukkit:bukkit1_12',
|
// Bukkit old
|
||||||
|
'bukkitv1', 'bukkitv1:loader', 'bukkitv1:folia', 'bukkitv1:spigot', 'bukkitv1:paper', 'bukkitv1:bukkit1_12',
|
||||||
|
// Bukkit
|
||||||
|
'bukkit:common',
|
||||||
|
'bukkit:legacy', 'bukkit:legacy:loader','bukkit:legacy:compat', 'bukkit:legacy:compat:bukkit1_12', 'bukkit:legacy:compat:spigot',
|
||||||
|
'bukkit:paper', 'bukkit:paper:loader', 'bukkit:paper:compat', 'bukkit:paper:compat:latest', 'bukkit:paper:compat:folia',
|
||||||
|
// Bungee
|
||||||
'bungee', 'bungee:loader',
|
'bungee', 'bungee:loader',
|
||||||
|
// Velocity
|
||||||
'velocity'
|
'velocity'
|
||||||
].each {
|
].each {
|
||||||
include it
|
include it
|
||||||
|
Loading…
Reference in New Issue
Block a user