RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
PacketListenerLoader.java
1package com.osroyale.io;
2
3import com.osroyale.net.packet.PacketListener;
4import com.osroyale.net.packet.PacketListenerMeta;
5import com.osroyale.net.packet.PacketRepository;
6import io.github.classgraph.*;
7import org.apache.logging.log4j.LogManager;
8import org.apache.logging.log4j.Logger;
9
10import java.lang.annotation.Annotation;
11import java.lang.reflect.Constructor;
12import java.util.Arrays;
13
33
34* The class that loads all packet listeners.
35 *
36 * @author nshusa
37 */
38public final class PacketListenerLoader implements Runnable {
39
40 private static final Logger logger = LogManager.getLogger(PacketListenerLoader.class);
41
42 @Override
43 public void run() {
44 try (final ScanResult scanResult =
45 new ClassGraph()
46 .enableClassInfo()
47 .enableMethodInfo()
48 .enableAnnotationInfo()
49 .acceptPackages("com.osroyale.net.packet.in")
50 .scan()) {
51 for (final ClassInfo classInfo : scanResult.getClassesWithAnnotation(PacketListenerMeta.class)) {
52 try {
53 final MethodInfoList constructorInfos = classInfo.getDeclaredConstructorInfo();
54 final MethodInfo constructorInfo = constructorInfos.get(0);
55 final Constructor<?> constructor = constructorInfo.loadClassAndGetConstructor();
56
57 final Object instance = constructor.newInstance();
58 final PacketListener listener = (PacketListener) instance;
59
60 final AnnotationInfo annotationInfo = classInfo.getAnnotationInfo(PacketListenerMeta.class);
61 final Annotation annotation = annotationInfo.loadClassAndInstantiate();
62 final PacketListenerMeta meta = (PacketListenerMeta) annotation;
63
64 Arrays.stream(meta.value())
65 .forEach(it -> PacketRepository.registerListener(it, listener));
66 } catch (final Exception ex) {
67 logger.error(String.format("Error loading packet listeners=%s", classInfo.getSimpleName()), ex);
68 }
69 }
70 }
71 }
72
73}
static void registerListener(int opcode, PacketListener listener)