mirror of
https://github.com/DiscordSRV/Ascension.git
synced 2025-02-08 00:21:38 +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 {
|
||||
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)
|
||||
|
||||
// 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 {
|
||||
disableAutoTargetJvm() // Requires Java 21, we target 8
|
||||
shadowJar {
|
||||
archiveFileName = 'paper.jarinjar'
|
||||
}
|
||||
|
||||
apply from: rootProject.file('buildscript/runtime.gradle')
|
||||
|
||||
dependencies {
|
||||
// Platform
|
||||
compileOnly(libs.paperapi) {
|
||||
// v2
|
||||
exclude module: 'slf4j-api'
|
||||
}
|
||||
api project(':bukkit:bukkit-common')
|
||||
|
||||
// Adventure (runtime downloaded by :bukkit)
|
||||
compileOnly(libs.adventure.platform.bukkit)
|
||||
// Compatability with newer versions
|
||||
implementation(project(':bukkit:paper:compat:bukkit-paper-compat-folia'))
|
||||
implementation(project(':bukkit:paper:compat:bukkit-paper-compat-latest'))
|
||||
|
||||
// Common
|
||||
compileOnly project(':bukkit:bukkit-bukkit1_12')
|
||||
compileOnly project(':common')
|
||||
// DependencyDownload
|
||||
api(libs.mcdependencydownload.bukkit.bootstrap)
|
||||
}
|
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 {
|
||||
// Platform
|
||||
compileOnly(libs.folia)
|
||||
compileOnly(libs.folia) {
|
||||
// v2
|
||||
exclude module: 'slf4j-api'
|
||||
}
|
||||
|
||||
// Common
|
||||
compileOnly project(':common')
|
@ -8,7 +8,7 @@ dependencies {
|
||||
implementation project(':common:common-api')
|
||||
|
||||
// Platform
|
||||
compileOnly(libs.spigotapi)
|
||||
compileOnly(libs.spigotapi.latest)
|
||||
|
||||
// DependencyDownload
|
||||
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 {
|
||||
// Platform
|
||||
compileOnly(libs.spigotapi)
|
||||
compileOnly(libs.spigotapi.latest)
|
||||
|
||||
// Adventure (runtime downloaded by :bukkit)
|
||||
compileOnly(libs.adventure.platform.bukkit)
|
||||
|
||||
// Common
|
||||
compileOnly project(':bukkit:bukkit-bukkit1_12')
|
||||
compileOnly project(':bukkitv1:bukkitv1-bukkit1_12')
|
||||
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')
|
||||
|
||||
// Bukkit
|
||||
version('bukkit_minimum', '1.8.8-R0.1-SNAPSHOT')
|
||||
version('bukkit1_12', '1.12.2-R0.1-SNAPSHOT')
|
||||
version('bukkit_latest', '1.21.1-R0.1-SNAPSHOT')
|
||||
version('folia', '1.20.1-R0.1-SNAPSHOT')
|
||||
library('paperapi', 'io.papermc.paper', 'paper-api').versionRef('bukkit_latest')
|
||||
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('folia', 'dev.folia', 'folia-api').versionRef('folia')
|
||||
library('bukkit-minimum', 'org.bukkit', 'bukkit').version('1.8.8-R0.1-SNAPSHOT')
|
||||
library('spigotapi-onetwelve', 'org.spigotmc', 'spigot-api').version('1.12.2-R0.1-SNAPSHOT')
|
||||
library('spigotapi-latest', 'org.spigotmc', 'spigot-api').version('1.21.2-R0.1-SNAPSHOT')
|
||||
|
||||
// Paper
|
||||
library('paperapi-minimum', 'com.destroystokyo.paper', 'paper-api').version('1.16.2-R0.1-SNAPSHOT')
|
||||
library('paperapi-latest', 'io.papermc.paper', 'paper-api').version('1.21.4-R0.1-SNAPSHOT')
|
||||
library('folia', 'dev.folia', 'folia-api').version('1.21.4-R0.1-SNAPSHOT')
|
||||
|
||||
// Bungee
|
||||
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',
|
||||
'i18n',
|
||||
'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',
|
||||
// Velocity
|
||||
'velocity'
|
||||
].each {
|
||||
include it
|
||||
|
Loading…
Reference in New Issue
Block a user