package me.tofaa.entitylib.event; import org.jetbrains.annotations.NotNull; import java.util.HashSet; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; @SuppressWarnings("unchecked") class EventBusSync implements EventBus { private final Map listeners = new ConcurrentHashMap(); @Override public void addListener(@NotNull EventListener listener) { if (listeners.containsKey(listener.getEventClass())) { listeners.put(listener.getEventClass(), new HashSet<>()); } ((HashSet) listeners.get(listener.getEventClass())).add(listener); } @Override public void addListener(@NotNull Class eventClass, @NotNull Consumer consumer) { addListener(EventListener.generateListener(eventClass, consumer)); } @Override public void removeListener(@NotNull EventListener listener) { if (listeners.containsKey(listener.getEventClass())) { ((HashSet) listeners.get(listener.getEventClass())).remove(listener); } } @Override public @NotNull T call(@NotNull T event) { if (!listeners.containsKey(event.getClass())) return event; HashSet> consumers = (HashSet>) listeners.get(event.getClass()); consumers.forEach(consumer -> consumer.handle(event)); return event; } }