diff --git a/src/main/java/net/minestom/server/event/EventNode.java b/src/main/java/net/minestom/server/event/EventNode.java index ab91ab7cd..a4b5e85e9 100644 --- a/src/main/java/net/minestom/server/event/EventNode.java +++ b/src/main/java/net/minestom/server/event/EventNode.java @@ -352,9 +352,24 @@ public interface EventNode { @Contract(value = "_ -> this") @NotNull EventNode removeListener(@NotNull EventListener listener); + /** + * Maps a specific object to a node. + *

+ * Be aware that such structure have huge performance penalty as they will + * always require a map lookup. Use only at last resort. + * + * @param node the node to map + * @param value the mapped value + */ @ApiStatus.Experimental void map(@NotNull EventNode node, @NotNull Object value); + /** + * Undo {@link #map(EventNode, Object)} + * + * @param value the value to unmap + * @return true if the value has been unmapped, false if nothing happened + */ @ApiStatus.Experimental boolean unmap(@NotNull Object value); diff --git a/src/main/java/net/minestom/server/event/EventNodeImpl.java b/src/main/java/net/minestom/server/event/EventNodeImpl.java index 2d4f5bfc7..ac6b5b97b 100644 --- a/src/main/java/net/minestom/server/event/EventNodeImpl.java +++ b/src/main/java/net/minestom/server/event/EventNodeImpl.java @@ -326,8 +326,7 @@ class EventNodeImpl implements EventNode { // Retrieve all filters used to retrieve potential handlers for (var mappedEntry : mappedNodeCache.entrySet()) { final EventNodeImpl mappedNode = mappedEntry.getValue(); - final Class mappedNodeType = mappedNode.eventType; - if (!mappedNodeType.isAssignableFrom(eventType)) continue; + if (!mappedNode.eventType.isAssignableFrom(eventType)) continue; if (mappedNode.listenerMap.isEmpty()) continue; // The mapped node does not have any listener (perhaps throw a warning?) filters.add(mappedNode.filter);