Skip to content

Commit d567290

Browse files
committed
fix Missing code implementation in the compiler error
1 parent 3c15fdd commit d567290

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

releases/pyjavabridge-dev.jar

2.22 KB
Binary file not shown.

src/main/java/com/pyjavabridge/event/EventSubscription.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
import com.pyjavabridge.PyJavaBridgePlugin;
44
import com.pyjavabridge.BridgeInstance;
55

6-
import org.bukkit.Bukkit;
76
import org.bukkit.event.Event;
87
import org.bukkit.event.EventPriority;
98
import org.bukkit.event.HandlerList;
109
import org.bukkit.event.Listener;
1110
import org.bukkit.plugin.EventExecutor;
11+
import org.bukkit.plugin.RegisteredListener;
1212

13+
import java.lang.reflect.Method;
1314
import java.util.concurrent.ConcurrentHashMap;
1415
import java.util.concurrent.atomic.AtomicLong;
1516

@@ -18,7 +19,7 @@ public class EventSubscription implements Listener {
1819
private static final ConcurrentHashMap<String, Class<? extends Event>> eventClassCache = new ConcurrentHashMap<>();
1920

2021
private final PyJavaBridgePlugin pluginRef;
21-
private final Class<? extends Event> eventClass;
22+
private final Class<?> eventClass;
2223
private final EventPriority priority;
2324
private final AtomicLong lastTick = new AtomicLong(-1);
2425
private volatile long lastDispatchNano = 0;
@@ -67,7 +68,9 @@ public EventSubscription(PyJavaBridgePlugin plugin, BridgeInstance instance, Str
6768

6869
public void register() {
6970
// Do not ignore cancelled events: some events (e.g. interact air) are pre-cancelled by Bukkit.
70-
Bukkit.getPluginManager().registerEvent(eventClass, this, this.priority, executor, pluginRef, false);
71+
HandlerList handlerList = resolveHandlerList(this.eventClass);
72+
RegisteredListener listener = new RegisteredListener(this, this.executor, this.priority, this.pluginRef, false);
73+
handlerList.register(listener);
7174
}
7275

7376
public void unregister() {
@@ -116,6 +119,24 @@ static Class<? extends Event> resolveEventClass(String eventName) throws ClassNo
116119
throw new ClassNotFoundException("Event not found for " + eventName);
117120
}
118121

122+
private static HandlerList resolveHandlerList(Class<?> type) {
123+
if (!Event.class.isAssignableFrom(type)) {
124+
throw new IllegalStateException("Type is not a Bukkit event: " + type.getName());
125+
}
126+
127+
try {
128+
Method method = type.getMethod("getHandlerList");
129+
Object value = method.invoke(null);
130+
if (value instanceof HandlerList) {
131+
return (HandlerList) value;
132+
}
133+
} catch (ReflectiveOperationException ex) {
134+
throw new IllegalStateException("Unable to resolve handler list for event type: " + type.getName(), ex);
135+
}
136+
137+
throw new IllegalStateException("Event type does not expose static getHandlerList(): " + type.getName());
138+
}
139+
119140
static String toPascalCase(String value) {
120141
StringBuilder builder = new StringBuilder();
121142
for (String part : value.split("_")) {

0 commit comments

Comments
 (0)