Update for new BungeeCord (api)
Dieser Commit ist enthalten in:
Ursprung
a92642e612
Commit
be90aa57e2
@ -24,13 +24,11 @@ import com.google.common.collect.Multimap;
|
|||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.plugin.*;
|
import net.md_5.bungee.api.plugin.*;
|
||||||
import org.yaml.snakeyaml.Yaml;
|
import org.yaml.snakeyaml.Yaml;
|
||||||
import org.yaml.snakeyaml.representer.Representer;
|
|
||||||
import org.yaml.snakeyaml.constructor.Constructor;
|
import org.yaml.snakeyaml.constructor.Constructor;
|
||||||
|
import org.yaml.snakeyaml.representer.Representer;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
@ -169,18 +167,19 @@ public final class PluginUtils {
|
|||||||
Preconditions.checkNotNull(pluginsMap);
|
Preconditions.checkNotNull(pluginsMap);
|
||||||
|
|
||||||
for (String dependency : desc.getDepends()) {
|
for (String dependency : desc.getDepends()) {
|
||||||
if (!pluginsMap.keySet().contains(dependency)) {
|
if (!pluginsMap.containsKey(dependency)) {
|
||||||
ProxyServer.getInstance().getLogger().log(Level.WARNING, "{0} (required by {1}) is unavailable", new Object[]{dependency, desc.getName()});
|
ProxyServer.getInstance().getLogger().log(Level.WARNING, "{0} (required by {1}) is unavailable", new Object[]{dependency, desc.getName()});
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Object libraryLoader = ReflectionUtils.getFieldValue(ProxyServer.getInstance().getPluginManager(), "libraryLoader");
|
||||||
|
|
||||||
//load plugin
|
//load plugin
|
||||||
Class<?> pluginClassLoader = Class.forName("net.md_5.bungee.api.plugin.PluginClassloader");
|
Class<?> pluginClassLoader = Class.forName("net.md_5.bungee.api.plugin.PluginClassloader");
|
||||||
java.lang.reflect.Constructor<?> constructor = pluginClassLoader.getConstructor(ProxyServer.class, PluginDescription.class, URL[].class);
|
java.lang.reflect.Constructor<?> constructor = pluginClassLoader.getConstructor(ProxyServer.class, PluginDescription.class, File.class, ClassLoader.class);
|
||||||
constructor.setAccessible(true);
|
constructor.setAccessible(true);
|
||||||
URLClassLoader loader = (URLClassLoader) constructor.newInstance(ProxyServer.getInstance(), desc, new URL[]{pluginFile.toURI().toURL()});
|
URLClassLoader loader = (URLClassLoader) constructor.newInstance(ProxyServer.getInstance(), desc, pluginFile, libraryLoader != null ? ReflectionUtils.invokeMethod(libraryLoader, "createLoader", desc) : null);
|
||||||
Class<?> mainclazz = loader.loadClass(desc.getMain());
|
Class<?> mainclazz = loader.loadClass(desc.getMain());
|
||||||
Plugin plugin = (Plugin) mainclazz.getDeclaredConstructor().newInstance();
|
Plugin plugin = (Plugin) mainclazz.getDeclaredConstructor().newInstance();
|
||||||
ReflectionUtils.invokeMethod(plugin, "init", ProxyServer.getInstance(), desc);
|
ReflectionUtils.invokeMethod(plugin, "init", ProxyServer.getInstance(), desc);
|
||||||
|
@ -70,20 +70,21 @@ public final class ReflectionUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void invokeMethod(Object obj, String methodName, Object... args) {
|
static Object invokeMethod(Object obj, String methodName, Object... args) {
|
||||||
Class<?> clazz = obj.getClass();
|
Class<?> clazz = obj.getClass();
|
||||||
do {
|
do {
|
||||||
try {
|
try {
|
||||||
for (Method method : clazz.getDeclaredMethods()) {
|
for (Method method : clazz.getDeclaredMethods()) {
|
||||||
if (method.getName().equals(methodName) && method.getParameterTypes().length == args.length) {
|
if (method.getName().equals(methodName) && method.getParameterTypes().length == args.length) {
|
||||||
method.setAccessible(true);
|
method.setAccessible(true);
|
||||||
method.invoke(obj, args);
|
return method.invoke(obj, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException error) {
|
} catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException error) {
|
||||||
// Ignore
|
// Ignore
|
||||||
}
|
}
|
||||||
} while ((clazz = clazz.getSuperclass()) != null);
|
} while ((clazz = clazz.getSuperclass()) != null);
|
||||||
|
throw new SecurityException("Method could not be found!");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren