From 6a93b3ef634875d2311e4845a4e8e0d01be5479b Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Wed, 23 Apr 2025 15:16:53 +0700 Subject: [PATCH] refactor: some improvements to listener manager --- .../plugins/ListenerManagerPlugin.java | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ListenerManagerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ListenerManagerPlugin.java index 166e85d1..9a7e5264 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ListenerManagerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ListenerManagerPlugin.java @@ -20,41 +20,45 @@ public class ListenerManagerPlugin { } public void dispatch (final Consumer consumer) { - for (final Listener listener : listeners) { - try { - consumer.accept(listener); - } catch (final Exception e) { - bot.logger.error( - Component.translatable( - "Caught exception while trying to dispatch an event to %s!", - Component.text(listener.getClass().getSimpleName()) - ) - ); - bot.logger.error(e); + synchronized (listeners) { + for (final Listener listener : listeners) { + try { + consumer.accept(listener); + } catch (final Exception e) { + bot.logger.error( + Component.translatable( + "Caught exception while trying to dispatch an event to %s!", + Component.text(listener.getClass().getSimpleName()) + ) + ); + bot.logger.error(e); + } } } } public void dispatchWithCheck (final Function function) { - for (final Listener listener : listeners) { - try { - final Boolean result = function.apply(listener); + synchronized (listeners) { + for (final Listener listener : listeners) { + try { + final Boolean result = function.apply(listener); - if (result != null && !result) break; - } catch (final Exception e) { - bot.logger.error( - Component.translatable( - "Caught exception while trying to dispatch an event with a returning boolean to %s!", - Component.text(listener.getClass().getSimpleName()) - ) - ); - bot.logger.error(e); + if (result != null && !result) break; + } catch (final Exception e) { + bot.logger.error( + Component.translatable( + "Caught exception while trying to dispatch an event with a returning boolean to %s!", + Component.text(listener.getClass().getSimpleName()) + ) + ); + bot.logger.error(e); + } } } } public void addListener (final Listener listener) { - if (listeners.contains(listener)) throw new IllegalStateException( + if (listeners.contains(listener)) throw new IllegalArgumentException( "This listener is already in the listeners list. " + "Please call `removeListener(listener)` first." );