Skip to content

Commit a03d8b4

Browse files
committed
register component class and interfaces
1 parent 6f7c9d9 commit a03d8b4

1 file changed

Lines changed: 31 additions & 7 deletions

File tree

  • plugin/plugin-base/src/main/java/io/github/projectunified/minelib/plugin/base

plugin/plugin-base/src/main/java/io/github/projectunified/minelib/plugin/base/BasePlugin.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22

33
import org.bukkit.plugin.java.JavaPlugin;
44

5-
import java.util.Collections;
6-
import java.util.List;
7-
import java.util.Map;
5+
import java.util.*;
86
import java.util.function.Consumer;
9-
import java.util.stream.Collectors;
107

118
/**
129
* Base plugin class that provides a simple way to manage components
@@ -18,9 +15,36 @@ public class BasePlugin extends JavaPlugin implements Loadable {
1815
* Create a new plugin instance
1916
*/
2017
public BasePlugin() {
21-
components = getComponents()
22-
.stream()
23-
.collect(Collectors.toMap(Object::getClass, o -> o));
18+
components = getComponentMap(getComponents());
19+
}
20+
21+
/**
22+
* Get a map of components by their class and interfaces
23+
*
24+
* @param components the components to map
25+
* @return the map of components
26+
*/
27+
private static Map<Class<?>, Object> getComponentMap(List<Object> components) {
28+
Map<Class<?>, Object> componentMap = new HashMap<>();
29+
for (Object component : components) {
30+
Set<Class<?>> addedClasses = new HashSet<>();
31+
Queue<Class<?>> classQueue = new LinkedList<>();
32+
classQueue.add(component.getClass());
33+
while (true) {
34+
Class<?> clazz = classQueue.poll();
35+
if (clazz == null) break;
36+
if (!addedClasses.add(clazz)) continue;
37+
38+
componentMap.put(clazz, component);
39+
40+
Class<?> superClass = clazz.getSuperclass();
41+
if (superClass != null) {
42+
classQueue.add(superClass);
43+
}
44+
classQueue.addAll(Arrays.asList(clazz.getInterfaces()));
45+
}
46+
}
47+
return componentMap;
2448
}
2549

2650
/**

0 commit comments

Comments
 (0)