RuneHive-Game
Loading...
Searching...
No Matches
PluginManager.java
Go to the documentation of this file.
1
package
com.runehive.game.plugin;
2
3
import
com.runehive.game.event.bus.PlayerDataBus;
4
import
io.github.classgraph.*;
5
import
org.apache.logging.log4j.LogManager;
6
import
org.apache.logging.log4j.Logger;
7
8
import
java.lang.reflect.Constructor;
9
import
java.util.HashSet;
10
import
java.util.Set;
11
12
/**
13
* This class handles how plugins are loaded/unloaded and accessed.
14
*
15
* @author nshusa
16
*/
17
public
final
class
PluginManager
{
18
19
private
static
final
Logger
logger
= LogManager.getLogger(
PluginManager
.class);
20
private
static
final
Set<String>
plugins
=
new
HashSet<>();
21
private
static
final
PlayerDataBus
dataBus
=
PlayerDataBus
.
getInstance
();
22
23
private
PluginManager
() {
24
throw
new
UnsupportedOperationException();
25
}
26
27
public
static
void
load
(
final
String pkg) {
28
try
(
final
ScanResult scanResult =
29
new
ClassGraph()
30
.enableClassInfo()
31
.enableMethodInfo()
32
.acceptPackages(pkg)
33
.scan()) {
34
for
(
final
ClassInfo classInfo : scanResult.getSubclasses(
PluginContext
.class)) {
35
try
{
36
if
(!classInfo.isAbstract()) {
37
final
MethodInfoList constructorInfos = classInfo.getDeclaredConstructorInfo();
38
final
MethodInfo constructorInfo = constructorInfos.get(0);
39
final
Constructor<?> constructor = constructorInfo.loadClassAndGetConstructor();
40
41
final
Object instance = constructor.newInstance();
42
final
PluginContext
listener = (
PluginContext
) instance;
43
listener.
onInit
();
44
dataBus
.subscribe(listener);
45
plugins
.add(classInfo.getName());
46
}
47
}
catch
(Exception ex) {
48
logger
.error(String.format(
"Error loading plugin=%s"
, classInfo.getSimpleName()), ex);
49
}
50
}
51
}
52
logger
.info(String.format(
"Loaded: %d plugins."
,
PluginManager
.getPluginCount()));
53
}
54
55
public
static
int
getPluginCount
() {
56
return
plugins
.size();
57
}
58
59
public
static
PlayerDataBus
getDataBus
() {
60
return
dataBus
;
61
}
62
63
}
com.runehive.game.event.bus.PlayerDataBus
Definition
PlayerDataBus.java:10
com.runehive.game.event.bus.PlayerDataBus.getInstance
static PlayerDataBus getInstance()
Definition
PlayerDataBus.java:18
com.runehive.game.plugin.PluginContext
The base class that all plugins should extend.
Definition
PluginContext.java:35
com.runehive.game.plugin.PluginContext.onInit
void onInit()
Definition
PluginContext.java:39
com.runehive.game.plugin.PluginManager.getDataBus
static PlayerDataBus getDataBus()
Definition
PluginManager.java:59
com.runehive.game.plugin.PluginManager.logger
static final Logger logger
Definition
PluginManager.java:19
com.runehive.game.plugin.PluginManager.PluginManager
PluginManager()
Definition
PluginManager.java:23
com.runehive.game.plugin.PluginManager.plugins
static final Set< String > plugins
Definition
PluginManager.java:20
com.runehive.game.plugin.PluginManager.getPluginCount
static int getPluginCount()
Definition
PluginManager.java:55
com.runehive.game.plugin.PluginManager.dataBus
static final PlayerDataBus dataBus
Definition
PluginManager.java:21
com.runehive.game.plugin.PluginManager.load
static void load(final String pkg)
Definition
PluginManager.java:27