From c98e84baedaa34e6cf0320b1354804e874796a5f Mon Sep 17 00:00:00 2001 From: Jonathing Date: Wed, 23 Apr 2025 20:29:39 -0400 Subject: [PATCH] Add BusGroup#unregister(EventListener) for single listeners Allows unregistering an event listener that was registered to a bus group without needing to hunt down the event bus for that bus group. --- .../java/net/minecraftforge/eventbus/api/bus/BusGroup.java | 7 +++++++ .../net/minecraftforge/eventbus/internal/BusGroupImpl.java | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraftforge/eventbus/api/bus/BusGroup.java b/src/main/java/net/minecraftforge/eventbus/api/bus/BusGroup.java index 3bb95598..2d06da02 100644 --- a/src/main/java/net/minecraftforge/eventbus/api/bus/BusGroup.java +++ b/src/main/java/net/minecraftforge/eventbus/api/bus/BusGroup.java @@ -89,4 +89,11 @@ static BusGroup create(String name, Class baseType) { * {@link #register(MethodHandles.Lookup, Class)} or {@link #register(MethodHandles.Lookup, Object)} */ void unregister(Collection listeners); + + /** + * Unregisters the given listener from this BusGroup. + * @param listeners The listeners to unregister, contained from the collection obtained from + * {@link #register(MethodHandles.Lookup, Class)} or {@link #register(MethodHandles.Lookup, Object)} + */ + void unregister(EventListener listeners); } diff --git a/src/main/java/net/minecraftforge/eventbus/internal/BusGroupImpl.java b/src/main/java/net/minecraftforge/eventbus/internal/BusGroupImpl.java index c8df55a3..2a6fe5ba 100644 --- a/src/main/java/net/minecraftforge/eventbus/internal/BusGroupImpl.java +++ b/src/main/java/net/minecraftforge/eventbus/internal/BusGroupImpl.java @@ -79,10 +79,15 @@ public void unregister(Collection listeners) { "the BusGroup#register method."); for (var listener : listeners) { - getOrCreateEventBus((Class) listener.eventType()).removeListener(listener); + unregister(listener); } } + @Override + public void unregister(EventListener listener) { + getOrCreateEventBus((Class) listener.eventType()).removeListener(listener); + } + //region Internal access only @SuppressWarnings("unchecked") private EventBus createEventBus(Class eventType) {