RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
PluginManager.java
1package com.osroyale.game.plugin;
2
3import com.osroyale.game.event.bus.PlayerDataBus;
4import io.github.classgraph.*;
5import org.apache.logging.log4j.LogManager;
6import org.apache.logging.log4j.Logger;
7
8import java.lang.reflect.Constructor;
9import java.util.HashSet;
10import java.util.Set;
11
32
33* This class handles how plugins are loaded/unloaded and accessed.
34 *
35 * @author nshusa
36 */
37public final class PluginManager {
38
39 private static final Logger logger = LogManager.getLogger(PluginManager.class);
40 private static final Set<String> plugins = new HashSet<>();
41 private static final PlayerDataBus dataBus = PlayerDataBus.getInstance();
42
43 private PluginManager() {
44 throw new UnsupportedOperationException();
45 }
46
47 public static void load(final String pkg) {
48 try (final ScanResult scanResult =
49 new ClassGraph()
50 .enableClassInfo()
51 .enableMethodInfo()
52 .acceptPackages(pkg)
53 .scan()) {
54 for (final ClassInfo classInfo : scanResult.getSubclasses(PluginContext.class)) {
55 try {
56 if (!classInfo.isAbstract()) {
57 final MethodInfoList constructorInfos = classInfo.getDeclaredConstructorInfo();
58 final MethodInfo constructorInfo = constructorInfos.get(0);
59 final Constructor<?> constructor = constructorInfo.loadClassAndGetConstructor();
60
61 final Object instance = constructor.newInstance();
62 final PluginContext listener = (PluginContext) instance;
63 listener.onInit();
64 dataBus.subscribe(listener);
65 plugins.add(classInfo.getName());
66 }
67 } catch (Exception ex) {
68 logger.error(String.format("Error loading plugin=%s", classInfo.getSimpleName()), ex);
69 }
70 }
71 }
72 logger.info(String.format("Loaded: %d plugins.", PluginManager.getPluginCount()));
73 }
74
75 public static int getPluginCount() {
76 return plugins.size();
77 }
78
79 public static PlayerDataBus getDataBus() {
80 return dataBus;
81 }
82
83}