Commits
Jonas Konrad authored and md_5 committed b333b58c05a
243 243 | methods.add(method); |
244 244 | } |
245 245 | } catch (NoClassDefFoundError e) { |
246 246 | plugin.getLogger().severe("Plugin " + plugin.getDescription().getFullName() + " has failed to register events for " + listener.getClass() + " because " + e.getMessage() + " does not exist."); |
247 247 | return ret; |
248 248 | } |
249 249 | |
250 250 | for (final Method method : methods) { |
251 251 | final EventHandler eh = method.getAnnotation(EventHandler.class); |
252 252 | if (eh == null) continue; |
253 + | // Do not register bridge or synthetic methods to avoid event duplication |
254 + | // Fixes SPIGOT-893 |
255 + | if (method.isBridge() || method.isSynthetic()) { |
256 + | continue; |
257 + | } |
253 258 | final Class<?> checkClass; |
254 259 | if (method.getParameterTypes().length != 1 || !Event.class.isAssignableFrom(checkClass = method.getParameterTypes()[0])) { |
255 260 | plugin.getLogger().severe(plugin.getDescription().getFullName() + " attempted to register an invalid EventHandler method signature \"" + method.toGenericString() + "\" in " + listener.getClass()); |
256 261 | continue; |
257 262 | } |
258 263 | final Class<? extends Event> eventClass = checkClass.asSubclass(Event.class); |
259 264 | method.setAccessible(true); |
260 265 | Set<RegisteredListener> eventSet = ret.get(eventClass); |
261 266 | if (eventSet == null) { |
262 267 | eventSet = new HashSet<RegisteredListener>(); |