diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index e30b7deb73..b5bf50d355 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -300,6 +300,16 @@ httpmime 4.5.9 + + io.reactivex.rxjava2 + rxjava + 2.2.10 + + + com.jakewharton.rxrelay2 + rxrelay + 2.1.0 + diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 1fa6aeb5b3..2993fdf108 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -48,16 +48,9 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.client.account.SessionManager; import net.runelite.client.chat.ChatMessageManager; -import net.runelite.client.chat.CommandManager; import net.runelite.client.config.ConfigManager; import net.runelite.client.discord.DiscordService; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.game.ClanManager; -import net.runelite.client.game.ItemManager; -import net.runelite.client.game.LootManager; -import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.graphics.ModelOutlineRenderer; -import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginInstantiationException; import net.runelite.client.plugins.PluginManager; @@ -65,18 +58,14 @@ import net.runelite.client.rs.ClientLoader; import net.runelite.client.rs.ClientUpdateCheckMode; import net.runelite.client.task.Scheduler; import net.runelite.client.ui.ClientUI; -import net.runelite.client.ui.DrawManager; import net.runelite.client.ui.RuneLiteSplashScreen; import net.runelite.client.ui.overlay.OverlayManager; -import net.runelite.client.ui.overlay.OverlayRenderer; import net.runelite.client.ui.overlay.WidgetOverlay; import net.runelite.client.ui.overlay.arrow.ArrowMinimapOverlay; import net.runelite.client.ui.overlay.arrow.ArrowWorldOverlay; -import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.InfoBoxOverlay; import net.runelite.client.ui.overlay.tooltip.TooltipOverlay; import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay; -import net.runelite.client.ws.PartyService; import org.slf4j.LoggerFactory; @Singleton @@ -97,15 +86,9 @@ public class RuneLite @Inject private PluginManager pluginManager; - @Inject - private EventBus eventBus; - @Inject private ConfigManager configManager; - @Inject - private DrawManager drawManager; - @Inject private SessionManager sessionManager; @@ -118,33 +101,12 @@ public class RuneLite @Inject private ClientUI clientUI; - @Inject - private InfoBoxManager infoBoxManager; - @Inject private OverlayManager overlayManager; - @Inject - private PartyService partyService; - - @Inject - private Provider itemManager; - - @Inject - private Provider overlayRenderer; - - @Inject - private Provider clanManager; - @Inject private Provider chatMessageManager; - @Inject - private Provider menuManager; - - @Inject - private Provider commandManager; - @Inject private Provider infoBoxOverlay; @@ -160,12 +122,6 @@ public class RuneLite @Inject private Provider arrowMinimapOverlay; - @Inject - private Provider lootManager; - - @Inject - private Provider chatboxPanelManager; - @Inject @Nullable private Client client; @@ -351,28 +307,11 @@ public class RuneLite // Close the splash screen splashScreen.close(); - // Register event listeners - eventBus.register(clientUI); - eventBus.register(pluginManager); - eventBus.register(overlayManager); - eventBus.register(drawManager); - eventBus.register(infoBoxManager); - eventBus.register(partyService); - if (!isOutdated) { // Initialize chat colors chatMessageManager.get().loadColors(); - eventBus.register(overlayRenderer.get()); - eventBus.register(clanManager.get()); - eventBus.register(itemManager.get()); - eventBus.register(menuManager.get()); - eventBus.register(chatMessageManager.get()); - eventBus.register(commandManager.get()); - eventBus.register(lootManager.get()); - eventBus.register(chatboxPanelManager.get()); - // Add core overlays WidgetOverlay.createOverlays(client).forEach(overlayManager::add); overlayManager.add(infoBoxOverlay.get()); diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java index f394c17f40..22813b4c0a 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java @@ -42,6 +42,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.RuneLitePlusConfig; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.game.ItemManager; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.PluginManager; @@ -84,7 +85,7 @@ public class RuneLiteModule extends AbstractModule bind(Callbacks.class).to(Hooks.class); bind(EventBus.class) - .toInstance(new EventBus()); + .toInstance(new EventBusImplementation()); bind(EventBus.class) .annotatedWith(Names.named("Deferred EventBus")) diff --git a/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java b/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java index 4caef359c3..75e8ec8212 100644 --- a/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java +++ b/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java @@ -25,6 +25,7 @@ package net.runelite.client.account; import com.google.gson.Gson; +import io.reactivex.disposables.Disposable; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; @@ -39,7 +40,7 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.client.RuneLite; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.SessionClose; import net.runelite.client.events.SessionOpen; import net.runelite.client.util.LinkBrowser; @@ -57,17 +58,20 @@ public class SessionManager @Getter private AccountSession accountSession; - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final ConfigManager configManager; private final WSClient wsClient; @Inject - private SessionManager(ConfigManager configManager, EventBus eventBus, WSClient wsClient) + private SessionManager(ConfigManager configManager, EventBusImplementation eventBus, WSClient wsClient) { this.configManager = configManager; this.eventBus = eventBus; this.wsClient = wsClient; - eventBus.register(this); + + this.eventBus + .observableOfType(LoginResponse.class) + .subscribe(this::onLoginResponse); } public void loadSession() @@ -207,8 +211,7 @@ public class SessionManager LinkBrowser.browse(login.getOauthUrl()); } - @Subscribe - public void onLoginResponse(LoginResponse loginResponse) + private void onLoginResponse(LoginResponse loginResponse) { log.debug("Now logged in as {}", loginResponse.getUsername()); diff --git a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java index 5c53677308..8d1873a20f 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java @@ -60,6 +60,7 @@ import net.runelite.client.Notifier; import net.runelite.client.RuneLite; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseManager; import net.runelite.client.task.Scheduler; @@ -88,7 +89,7 @@ public class Hooks implements Callbacks private static final OverlayManager overlayManager = injector.getInstance(OverlayManager.class); @Inject - private EventBus eventBus; + private EventBusImplementation eventBus; @Inject private DeferredEventBus deferredEventBus; diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java index f930992d08..c19a84a405 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java @@ -35,7 +35,7 @@ import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.events.ChatMessage; import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.ChatInput; import net.runelite.client.events.ChatboxInput; import net.runelite.client.events.PrivateMessageInput; @@ -49,12 +49,15 @@ public class ChatCommandManager implements ChatboxInputListener private final ScheduledExecutorService scheduledExecutorService; @Inject - private ChatCommandManager(EventBus eventBus, CommandManager commandManager, Client client, ScheduledExecutorService scheduledExecutorService) + private ChatCommandManager(EventBusImplementation eventBus, CommandManager commandManager, Client client, ScheduledExecutorService scheduledExecutorService) { this.client = client; this.scheduledExecutorService = scheduledExecutorService; - eventBus.register(this); + // eventBus.register(this); commandManager.register(this); + + eventBus.observableOfType(ChatMessage.class) + .subscribe(this::onChatMessage); } public void registerCommand(String command, BiConsumer execute) @@ -82,8 +85,7 @@ public class ChatCommandManager implements ChatboxInputListener commands.remove(command.toLowerCase()); } - @Subscribe - public void onChatMessage(ChatMessage chatMessage) + private void onChatMessage(ChatMessage chatMessage) { if (client.getGameState() != GameState.LOGGED_IN) { diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java index c571282a00..5baa5ba42a 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java @@ -52,7 +52,7 @@ import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.VarbitChanged; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ChatColorConfig; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.ui.JagexColors; import net.runelite.client.util.ColorUtil; @@ -70,17 +70,32 @@ public class ChatMessageManager @Inject private ChatMessageManager( - Client client, - ChatColorConfig chatColorConfig, - ClientThread clientThread) + final Client client, + final ChatColorConfig chatColorConfig, + final ClientThread clientThread, + final EventBusImplementation eventbus) { this.client = client; this.chatColorConfig = chatColorConfig; this.clientThread = clientThread; + + eventbus.observableOfType(VarbitChanged.class) + .subscribe(this::onVarbitChanged); + + eventbus.observableOfType(ResizeableChanged.class) + .subscribe(this::onResizeableChanged); + + eventbus.observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged); + + eventbus.observableOfType(ChatMessage.class) + .subscribe(this::onChatMessage); + + eventbus.observableOfType(ScriptCallbackEvent.class) + .subscribe(this::onScriptCallbackEvent); } - @Subscribe - public void onVarbitChanged(VarbitChanged event) + private void onVarbitChanged(VarbitChanged event) { int setting = client.getVar(Varbits.TRANSPARENT_CHATBOX); @@ -91,14 +106,12 @@ public class ChatMessageManager } } - @Subscribe - public void onResizeableChanged(ResizeableChanged event) + private void onResizeableChanged(ResizeableChanged event) { refreshAll(); } - @Subscribe - public void onConfigChanged(ConfigChanged event) + private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("textrecolor")) { @@ -107,8 +120,7 @@ public class ChatMessageManager } } - @Subscribe - public void onChatMessage(ChatMessage chatMessage) + private void onChatMessage(ChatMessage chatMessage) { MessageNode messageNode = chatMessage.getMessageNode(); ChatMessageType chatMessageType = chatMessage.getType(); @@ -173,8 +185,7 @@ public class ChatMessageManager } } - @Subscribe - public void onScriptCallbackEvent(ScriptCallbackEvent scriptCallbackEvent) + private void onScriptCallbackEvent(ScriptCallbackEvent scriptCallbackEvent) { final String eventName = scriptCallbackEvent.getEventName(); diff --git a/runelite-client/src/main/java/net/runelite/client/chat/CommandManager.java b/runelite-client/src/main/java/net/runelite/client/chat/CommandManager.java index 7529fc6d56..fc07646f0a 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/CommandManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/CommandManager.java @@ -37,8 +37,7 @@ import net.runelite.api.VarClientStr; import net.runelite.api.events.CommandExecuted; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.client.callback.ClientThread; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.ChatboxInput; import net.runelite.client.events.PrivateMessageInput; @@ -51,18 +50,25 @@ public class CommandManager private static final String PRIVMATE_MESSAGE = "privateMessage"; private final Client client; - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final ClientThread clientThread; private boolean sending; private final List chatboxInputListenerList = new ArrayList<>(); @Inject - private CommandManager(Client client, EventBus eventBus, ClientThread clientThread) + private CommandManager( + final Client client, + final EventBusImplementation eventBus, + final ClientThread clientThread + ) { this.client = client; this.eventBus = eventBus; this.clientThread = clientThread; + + eventBus.observableOfType(ScriptCallbackEvent.class) + .subscribe(this::onScriptCallbackEvent); } public void register(ChatboxInputListener chatboxInputListener) @@ -75,7 +81,6 @@ public class CommandManager chatboxInputListenerList.remove(chatboxInputListener); } - @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (sending) diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index b22c8e67a7..2a5ba38441 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -66,6 +66,7 @@ import net.runelite.api.events.ConfigChanged; import net.runelite.client.RuneLite; import static net.runelite.client.RuneLite.PROFILES_DIR; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.util.ColorUtil; import net.runelite.client.ui.FontManager; @@ -79,7 +80,7 @@ public class ConfigManager private static final File STANDARD_SETTINGS_FILE = new File(RuneLite.RUNELITE_DIR, STANDARD_SETTINGS_FILE_NAME); @Inject - EventBus eventBus; + EventBusImplementation eventBus; private final ConfigInvocationHandler handler = new ConfigInvocationHandler(this); private final Properties properties = new Properties(); diff --git a/runelite-client/src/main/java/net/runelite/client/discord/DiscordService.java b/runelite-client/src/main/java/net/runelite/client/discord/DiscordService.java index 091c479ac6..7b6b858788 100644 --- a/runelite-client/src/main/java/net/runelite/client/discord/DiscordService.java +++ b/runelite-client/src/main/java/net/runelite/client/discord/DiscordService.java @@ -39,6 +39,7 @@ import net.runelite.client.discord.events.DiscordJoinRequest; import net.runelite.client.discord.events.DiscordReady; import net.runelite.client.discord.events.DiscordSpectateGame; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.discord.DiscordEventHandlers; import net.runelite.discord.DiscordRPC; import net.runelite.discord.DiscordRichPresence; @@ -48,7 +49,7 @@ import net.runelite.discord.DiscordUser; @Slf4j public class DiscordService implements AutoCloseable { - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final RuneLiteProperties runeLiteProperties; private final ScheduledExecutorService executorService; private final DiscordRPC discordRPC; @@ -61,7 +62,7 @@ public class DiscordService implements AutoCloseable @Inject private DiscordService( - final EventBus eventBus, + final EventBusImplementation eventBus, final RuneLiteProperties runeLiteProperties, final ScheduledExecutorService executorService) { diff --git a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java index a28f2f4371..cc8925c933 100644 --- a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java +++ b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java @@ -25,225 +25,14 @@ */ package net.runelite.client.eventbus; -import com.google.common.base.Preconditions; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; -import java.lang.invoke.CallSite; -import java.lang.invoke.LambdaMetafactory; -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.function.Consumer; -import javax.annotation.Nonnull; -import javax.annotation.concurrent.ThreadSafe; -import lombok.EqualsAndHashCode; -import lombok.RequiredArgsConstructor; -import lombok.Value; -import lombok.extern.slf4j.Slf4j; +import io.reactivex.Observable; +import java.util.List; -@Slf4j -@RequiredArgsConstructor -@ThreadSafe -public class EventBus +public interface EventBus { - @FunctionalInterface - public interface SubscriberMethod - { - void invoke(Object event); - } + void post(Object event); - @Value - private static class Subscriber - { - private final Object object; - private final Method method; - @EqualsAndHashCode.Exclude - private final SubscriberMethod lamda; + Observable observableOfType(Class eventClass); - void invoke(final Object arg) throws Exception - { - if (lamda != null) - { - lamda.invoke(arg); - } - else - { - method.invoke(object, arg); - } - } - } - - private final Consumer exceptionHandler; - private ImmutableMultimap subscribers = ImmutableMultimap.of(); - - /** - * Instantiates EventBus with default exception handler - */ - public EventBus() - { - this((e) -> log.warn("Uncaught exception in event subscriber", e)); - } - - /** - * Registers subscriber to EventBus. All methods in subscriber and it's parent classes are checked for - * {@link Subscribe} annotation and then added to map of subscriptions. - * - * @param object subscriber to register - * @throws IllegalArgumentException in case subscriber method name is wrong (correct format is 'on' + EventName - */ - public synchronized void register(@Nonnull final Object object) - { - final ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - - if (subscribers != null) - { - builder.putAll(subscribers); - } - - for (Class clazz = object.getClass(); clazz != null; clazz = clazz.getSuperclass()) - { - for (final Method method : clazz.getDeclaredMethods()) - { - final Subscribe sub = method.getAnnotation(Subscribe.class); - - if (sub == null) - { - continue; - } - - Preconditions.checkArgument(method.getReturnType() == Void.TYPE, "@Subscribed method \"" + method + "\" cannot return a value"); - Preconditions.checkArgument(method.getParameterCount() == 1, "@Subscribed method \"" + method + "\" must take exactly 1 argument"); - Preconditions.checkArgument(!Modifier.isStatic(method.getModifiers()), "@Subscribed method \"" + method + "\" cannot be static"); - - final Class parameterClazz = method.getParameterTypes()[0]; - - Preconditions.checkArgument(!parameterClazz.isPrimitive(), "@Subscribed method \"" + method + "\" cannot subscribe to primitives"); - Preconditions.checkArgument((parameterClazz.getModifiers() & (Modifier.ABSTRACT | Modifier.INTERFACE)) == 0, "@Subscribed method \"" + method + "\" cannot subscribe to polymorphic classes"); - - for (Class psc = parameterClazz.getSuperclass(); psc != null; psc = psc.getSuperclass()) - { - if (subscribers.containsKey(psc)) - { - throw new IllegalArgumentException("@Subscribed method \"" + method + "\" cannot subscribe to class which inherits from subscribed class \"" + psc + "\""); - } - } - - final String preferredName = "on" + parameterClazz.getSimpleName(); - Preconditions.checkArgument(method.getName().equals(preferredName), "Subscribed method " + method + " should be named " + preferredName); - - method.setAccessible(true); - SubscriberMethod lambda = null; - - try - { - final MethodHandles.Lookup caller = privateLookupIn(clazz); - final MethodType subscription = MethodType.methodType(void.class, parameterClazz); - final MethodHandle target = caller.findVirtual(clazz, method.getName(), subscription); - final CallSite site = LambdaMetafactory.metafactory( - caller, - "invoke", - MethodType.methodType(SubscriberMethod.class, clazz), - subscription.changeParameterType(0, Object.class), - target, - subscription); - - final MethodHandle factory = site.getTarget(); - lambda = (SubscriberMethod) factory.bindTo(object).invokeExact(); - } - catch (Throwable e) - { - log.warn("Unable to create lambda for method {}", method, e); - } - - final Subscriber subscriber = new Subscriber(object, method, lambda); - builder.put(parameterClazz, subscriber); - log.debug("Registering {} - {}", parameterClazz, subscriber); - } - } - - subscribers = builder.build(); - } - - /** - * Unregisters all subscribed methods from provided subscriber object. - * - * @param object object to unsubscribe from - */ - public synchronized void unregister(@Nonnull final Object object) - { - if (subscribers == null) - { - return; - } - - final Multimap map = HashMultimap.create(); - map.putAll(subscribers); - - for (Class clazz = object.getClass(); clazz != null; clazz = clazz.getSuperclass()) - { - for (final Method method : clazz.getDeclaredMethods()) - { - final Subscribe sub = method.getAnnotation(Subscribe.class); - - if (sub == null) - { - continue; - } - - final Class parameterClazz = method.getParameterTypes()[0]; - map.remove(parameterClazz, new Subscriber(object, method, null)); - } - } - - subscribers = ImmutableMultimap.copyOf(map); - } - - /** - * Posts provided event to all registered subscribers. Subscriber calls are invoked immediately and in order - * in which subscribers were registered. - * - * @param event event to post - */ - public void post(@Nonnull final Object event) - { - for (final Subscriber subscriber : subscribers.get(event.getClass())) - { - try - { - subscriber.invoke(event); - } - catch (Exception e) - { - exceptionHandler.accept(e); - } - } - } - - private static MethodHandles.Lookup privateLookupIn(Class clazz) throws IllegalAccessException, NoSuchFieldException, InvocationTargetException - { - try - { - // Java 9+ has privateLookupIn method on MethodHandles, but since we are shipping and using Java 8 - // we need to access it via reflection. This is preferred way because it's Java 9+ public api and is - // likely to not change - final Method privateLookupIn = MethodHandles.class.getMethod("privateLookupIn", Class.class, MethodHandles.Lookup.class); - return (MethodHandles.Lookup) privateLookupIn.invoke(null, clazz, MethodHandles.lookup()); - } - catch (NoSuchMethodException e) - { - // In Java 8 we first do standard lookupIn class - final MethodHandles.Lookup lookupIn = MethodHandles.lookup().in(clazz); - - // and then we mark it as trusted for private lookup via reflection on private field - final Field modes = MethodHandles.Lookup.class.getDeclaredField("allowedModes"); - modes.setAccessible(true); - modes.setInt(lookupIn, -1); // -1 == TRUSTED - return lookupIn; - } - } + Observable observableOfTypes(List> eventClasses); } diff --git a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBusImplementation.java b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBusImplementation.java new file mode 100644 index 0000000000..1ff22546ae --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBusImplementation.java @@ -0,0 +1,50 @@ +package net.runelite.client.eventbus; + +import com.jakewharton.rxrelay2.PublishRelay; +import com.jakewharton.rxrelay2.Relay; +import io.reactivex.Observable; +import java.util.List; +import java.util.Objects; +import javax.inject.Singleton; + +@Singleton +public class EventBusImplementation implements EventBus +{ + private final Relay bus = PublishRelay.create().toSerialized(); + + @Override + public void post(Object event) + { + if (this.bus.hasObservers()) + { + this.bus.accept(event); + } + } + + @Override + public Observable observableOfType(Class eventClass) + { + return this.bus + .filter(Objects::nonNull) // Filter out null objects, better safe than sorry + .filter(eventClass::isInstance) // We're only interested in a specific event class + .cast(eventClass); // Cast it for easier usage + } + + @Override + public Observable observableOfTypes(List> eventClasses) + { + return this.bus + .filter(Objects::nonNull) // Filter out null objects, better safe than sorry + .filter(event -> { + for (Class eventClass : eventClasses) + { + if (eventClass.isInstance(event)) + { + return true; + } + } + + return false; + }); // We're only interested in a specific event classes + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/eventbus/Subscribe.java b/runelite-client/src/main/java/net/runelite/client/eventbus/Subscribe.java deleted file mode 100644 index e34e350be0..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/eventbus/Subscribe.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2018, Abex - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.eventbus; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Marks a method as an event subscriber. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.METHOD) -@Documented -public @interface Subscribe -{ -} diff --git a/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java b/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java index 0b80bbc7e9..ac5bdcc197 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java @@ -44,7 +44,7 @@ import net.runelite.api.IndexedSprite; import net.runelite.api.SpriteID; import net.runelite.api.events.ClanChanged; import net.runelite.api.events.GameStateChanged; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.Text; @@ -97,10 +97,20 @@ public class ClanManager private int modIconsLength; @Inject - private ClanManager(Client client, SpriteManager spriteManager) + private ClanManager( + final Client client, + final SpriteManager spriteManager, + final EventBusImplementation eventbus + ) { this.client = client; this.spriteManager = spriteManager; + + eventbus.observableOfType(GameStateChanged.class) + .subscribe(this::onGameStateChanged); + + eventbus.observableOfType(ClanChanged.class) + .subscribe(this::onClanChanged); } public ClanMemberRank getRank(String playerName) @@ -123,8 +133,7 @@ public class ClanManager return modIconsLength - CLANCHAT_IMAGES.length + clanMemberRank.ordinal() - 1; } - @Subscribe - public void onGameStateChanged(GameStateChanged gameStateChanged) + private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() == GameState.LOGGED_IN && modIconsLength == 0) @@ -133,8 +142,7 @@ public class ClanManager } } - @Subscribe - public void onClanChanged(ClanChanged clanChanged) + private void onClanChanged(ClanChanged clanChanged) { clanRanksCache.invalidateAll(); } diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java index f06de90882..f47307536c 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java @@ -164,7 +164,7 @@ import net.runelite.api.Sprite; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.PostItemDefinition; import net.runelite.client.callback.ClientThread; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.http.api.item.ItemClient; import net.runelite.http.api.item.ItemPrice; import net.runelite.http.api.item.ItemStats; @@ -265,7 +265,12 @@ public class ItemManager build(); @Inject - public ItemManager(Client client, ScheduledExecutorService executor, ClientThread clientThread) + public ItemManager( + Client client, + ScheduledExecutorService executor, + ClientThread clientThread, + EventBusImplementation eventbus + ) { this.client = client; this.scheduledExecutorService = executor; @@ -309,6 +314,12 @@ public class ItemManager return loadItemOutline(key.itemId, key.itemQuantity, key.outlineColor); } }); + + eventbus.observableOfType(GameStateChanged.class) + .subscribe(this::onGameStateChanged); + + eventbus.observableOfType(PostItemDefinition.class) + .subscribe(this::onPostItemDefinition); } private void loadPrices() @@ -352,9 +363,7 @@ public class ItemManager } } - - @Subscribe - public void onGameStateChanged(final GameStateChanged event) + private void onGameStateChanged(final GameStateChanged event) { if (event.getGameState() == GameState.HOPPING || event.getGameState() == GameState.LOGIN_SCREEN) { @@ -362,8 +371,7 @@ public class ItemManager } } - @Subscribe - public void onPostItemDefinition(PostItemDefinition event) + private void onPostItemDefinition(PostItemDefinition event) { itemDefinitions.put(event.getItemDefinition().getId(), event.getItemDefinition()); } diff --git a/runelite-client/src/main/java/net/runelite/client/game/LootManager.java b/runelite-client/src/main/java/net/runelite/client/game/LootManager.java index e297e103c7..6d09f2f361 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/LootManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/LootManager.java @@ -53,8 +53,7 @@ import net.runelite.api.events.ItemQuantityChanged; import net.runelite.api.events.ItemSpawned; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.PlayerDespawned; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.NpcLootReceived; import net.runelite.client.events.PlayerLootReceived; @@ -66,7 +65,7 @@ public class LootManager NpcID.CAVE_KRAKEN, AnimationID.CAVE_KRAKEN_DEATH ); - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final Client client; private final ListMultimap itemSpawns = ArrayListMultimap.create(); private final Set killPoints = new HashSet<>(); @@ -74,14 +73,37 @@ public class LootManager private WorldPoint krakenPlayerLocation; @Inject - private LootManager(EventBus eventBus, Client client) + private LootManager( + final EventBusImplementation eventBus, + final Client client + ) { this.eventBus = eventBus; this.client = client; + + eventBus.observableOfType(GameTick.class) + .subscribe(this::onGameTick); + + eventBus.observableOfType(NpcDespawned.class) + .subscribe(this::onNpcDespawned); + + eventBus.observableOfType(PlayerDespawned.class) + .subscribe(this::onPlayerDespawned); + + eventBus.observableOfType(ItemSpawned.class) + .subscribe(this::onItemSpawned); + + eventBus.observableOfType(ItemDespawned.class) + .subscribe(this::onItemDespawned); + + eventBus.observableOfType(ItemQuantityChanged.class) + .subscribe(this::onItemQuantityChanged); + + eventBus.observableOfType(AnimationChanged.class) + .subscribe(this::onAnimationChanged); } - @Subscribe - public void onNpcDespawned(NpcDespawned npcDespawned) + private void onNpcDespawned(NpcDespawned npcDespawned) { final NPC npc = npcDespawned.getNpc(); if (!npc.isDead()) @@ -123,8 +145,7 @@ public class LootManager processNpcLoot(npc); } - @Subscribe - public void onPlayerDespawned(PlayerDespawned playerDespawned) + private void onPlayerDespawned(PlayerDespawned playerDespawned) { final Player player = playerDespawned.getPlayer(); // Only care about dead Players @@ -153,8 +174,7 @@ public class LootManager eventBus.post(new PlayerLootReceived(player, items)); } - @Subscribe - public void onItemSpawned(ItemSpawned itemSpawned) + private void onItemSpawned(ItemSpawned itemSpawned) { final Item item = itemSpawned.getItem(); final Tile tile = itemSpawned.getTile(); @@ -164,16 +184,14 @@ public class LootManager log.debug("Item spawn {} ({}) location {},{}", item.getId(), item.getQuantity(), location); } - @Subscribe - public void onItemDespawned(ItemDespawned itemDespawned) + private void onItemDespawned(ItemDespawned itemDespawned) { final Item item = itemDespawned.getItem(); final LocalPoint location = itemDespawned.getTile().getLocalLocation(); log.debug("Item despawn {} ({}) location {},{}", item.getId(), item.getQuantity(), location); } - @Subscribe - public void onItemQuantityChanged(ItemQuantityChanged itemQuantityChanged) + private void onItemQuantityChanged(ItemQuantityChanged itemQuantityChanged) { final Item item = itemQuantityChanged.getItem(); final Tile tile = itemQuantityChanged.getTile(); @@ -189,8 +207,7 @@ public class LootManager itemSpawns.put(packed, new ItemStack(item.getId(), diff, location)); } - @Subscribe - public void onAnimationChanged(AnimationChanged e) + private void onAnimationChanged(AnimationChanged e) { if (!(e.getActor() instanceof NPC)) { @@ -219,8 +236,7 @@ public class LootManager } } - @Subscribe - public void onGameTick(GameTick gameTick) + private void onGameTick(GameTick gameTick) { playerLocationLastTick = client.getLocalPlayer().getWorldLocation(); itemSpawns.clear(); diff --git a/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxPanelManager.java b/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxPanelManager.java index 3e70483d2f..4ed2dd8282 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxPanelManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxPanelManager.java @@ -40,8 +40,7 @@ import net.runelite.api.widgets.JavaScriptCallback; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseListener; @@ -54,7 +53,7 @@ public class ChatboxPanelManager { private final Client client; private final ClientThread clientThread; - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final KeyManager keyManager; private final MouseManager mouseManager; @@ -66,7 +65,7 @@ public class ChatboxPanelManager private ChatboxInput currentInput = null; @Inject - private ChatboxPanelManager(EventBus eventBus, Client client, ClientThread clientThread, + private ChatboxPanelManager(EventBusImplementation eventBus, Client client, ClientThread clientThread, KeyManager keyManager, MouseManager mouseManager, Provider chatboxTextMenuInputProvider, Provider chatboxTextInputProvider) { @@ -79,6 +78,12 @@ public class ChatboxPanelManager this.chatboxTextMenuInputProvider = chatboxTextMenuInputProvider; this.chatboxTextInputProvider = chatboxTextInputProvider; + + eventBus.observableOfType(ScriptCallbackEvent.class) + .subscribe(this::onScriptCallbackEvent); + + eventBus.observableOfType(GameStateChanged.class) + .subscribe(this::onGameStateChanged); } public void close() @@ -103,7 +108,7 @@ public class ChatboxPanelManager { client.runScript(ScriptID.CLEAR_CHATBOX_PANEL); - eventBus.register(input); + // eventBus.register(input); if (input instanceof KeyListener) { keyManager.registerKeyListener((KeyListener) input); @@ -150,8 +155,7 @@ public class ChatboxPanelManager .prompt(prompt); } - @Subscribe - public void onScriptCallbackEvent(ScriptCallbackEvent ev) + private void onScriptCallbackEvent(ScriptCallbackEvent ev) { if (currentInput != null && "resetChatboxInput".equals(ev.getEventName())) { @@ -159,7 +163,6 @@ public class ChatboxPanelManager } } - @Subscribe private void onGameStateChanged(GameStateChanged ev) { if (currentInput != null && ev.getGameState() == GameState.LOGIN_SCREEN) @@ -179,7 +182,7 @@ public class ChatboxPanelManager log.warn("Exception closing {}", currentInput.getClass(), e); } - eventBus.unregister(currentInput); + // eventBus.unregister(currentInput); if (currentInput instanceof KeyListener) { keyManager.unregisterKeyListener((KeyListener) currentInput); diff --git a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java index 70ab8ebadf..1550c69a68 100644 --- a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java +++ b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java @@ -65,8 +65,7 @@ import net.runelite.api.events.PlayerMenuOptionsChanged; import net.runelite.api.events.WidgetMenuOptionClicked; import net.runelite.api.events.WidgetPressed; import net.runelite.api.widgets.WidgetInfo; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.util.Text; @Singleton @@ -81,7 +80,7 @@ public class MenuManager static final Pattern LEVEL_PATTERN = Pattern.compile("\\(level-[0-9]*\\)"); private final Client client; - private final EventBus eventBus; + private final EventBusImplementation eventBus; //Maps the indexes that are being used to the menu option. private final Map playerMenuIndexMap = new HashMap<>(); @@ -102,10 +101,31 @@ public class MenuManager private MenuEntry firstEntry = null; @Inject - private MenuManager(Client client, EventBus eventBus) + private MenuManager(Client client, EventBusImplementation eventBus) { this.client = client; this.eventBus = eventBus; + + eventBus.observableOfType(MenuOpened.class) + .subscribe(this::onMenuOpened); + + eventBus.observableOfType(MenuEntryAdded.class) + .subscribe(this::onMenuEntryAdded); + + eventBus.observableOfType(BeforeRender.class) + .subscribe(this::onBeforeRender); + + eventBus.observableOfType(PlayerMenuOptionsChanged.class) + .subscribe(this::onPlayerMenuOptionsChanged); + + eventBus.observableOfType(NpcActionChanged.class) + .subscribe(this::onNpcActionChanged); + + eventBus.observableOfType(WidgetPressed.class) + .subscribe(this::onWidgetPressed); + + eventBus.observableOfType(MenuOptionClicked.class) + .subscribe(this::onMenuOptionClicked); } /** @@ -145,8 +165,7 @@ public class MenuManager return false; } - @Subscribe - public void onMenuOpened(MenuOpened event) + private void onMenuOpened(MenuOpened event) { currentPriorityEntries.clear(); @@ -256,8 +275,7 @@ public class MenuManager client.setMenuEntries(arrayEntries); } - @Subscribe - public void onMenuEntryAdded(MenuEntryAdded event) + private void onMenuEntryAdded(MenuEntryAdded event) { int widgetId = event.getActionParam1(); Collection options = managedMenuOptions.get(widgetId); @@ -280,8 +298,7 @@ public class MenuManager } } - @Subscribe - public void onBeforeRender(BeforeRender event) + private void onBeforeRender(BeforeRender event) { rebuildLeftClickMenu(); } @@ -364,8 +381,7 @@ public class MenuManager } } - @Subscribe - public void onPlayerMenuOptionsChanged(PlayerMenuOptionsChanged event) + private void onPlayerMenuOptionsChanged(PlayerMenuOptionsChanged event) { int idx = event.getIndex(); @@ -389,8 +405,7 @@ public class MenuManager addPlayerMenuItem(newIdx, menuText); } - @Subscribe - public void onNpcActionChanged(NpcActionChanged event) + private void onNpcActionChanged(NpcActionChanged event) { NPCDefinition composition = event.getNpcDefinition(); for (String npcOption : npcMenuOptions) @@ -439,14 +454,12 @@ public class MenuManager } } - @Subscribe - public void onWidgetPressed(WidgetPressed event) + private void onWidgetPressed(WidgetPressed event) { leftClickEntry = rebuildLeftClickMenu(); } - @Subscribe - public void onMenuOptionClicked(MenuOptionClicked event) + private void onMenuOptionClicked(MenuOptionClicked event) { if (!client.isMenuOpen() && event.isAuthentic()) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java index 5e2b612474..580b9f8404 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java @@ -27,7 +27,10 @@ package net.runelite.client.plugins; import com.google.inject.Binder; import com.google.inject.Injector; import com.google.inject.Module; +import io.reactivex.disposables.Disposable; import java.io.File; +import java.util.ArrayList; +import java.util.List; public abstract class Plugin implements Module { @@ -35,6 +38,7 @@ public abstract class Plugin implements Module public File file; public PluginClassLoader loader; + private List disposables = new ArrayList<>(); @Override public void configure(Binder binder) @@ -47,6 +51,12 @@ public abstract class Plugin implements Module protected void shutDown() throws Exception { + this.disposables.forEach(Disposable::dispose); + } + + protected void addSubscription(Disposable disposable) + { + this.disposables.add(disposable); } public final Injector getInjector() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index 52488fb4e3..f231d38e26 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -67,8 +67,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.RuneLiteConfig; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.PluginChanged; import net.runelite.client.events.SessionClose; import net.runelite.client.events.SessionOpen; @@ -87,7 +86,7 @@ public class PluginManager private static final String PLUGIN_PACKAGE = "net.runelite.client.plugins"; private final boolean developerMode; - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final Scheduler scheduler; private final ConfigManager configManager; private final ScheduledExecutorService executor; @@ -107,7 +106,7 @@ public class PluginManager @VisibleForTesting PluginManager( @Named("developerMode") final boolean developerMode, - final EventBus eventBus, + final EventBusImplementation eventBus, final Scheduler scheduler, final ConfigManager configManager, final ScheduledExecutorService executor, @@ -119,6 +118,12 @@ public class PluginManager this.configManager = configManager; this.executor = executor; this.sceneTileManager = sceneTileManager; + + eventBus.observableOfType(SessionOpen.class) + .subscribe(this::onSessionOpen); + + eventBus.observableOfType(SessionClose.class) + .subscribe(this::onSessionClose); } public void watch() @@ -126,14 +131,12 @@ public class PluginManager pluginWatcher.start(); } - @Subscribe - public void onSessionOpen(SessionOpen event) + private void onSessionOpen(SessionOpen event) { refreshPlugins(); } - @Subscribe - public void onSessionClose(SessionClose event) + private void onSessionClose(SessionClose event) { refreshPlugins(); } @@ -368,7 +371,7 @@ public class PluginManager } } - eventBus.register(plugin); + // eventBus.register(plugin); schedule(plugin); eventBus.post(new PluginChanged(plugin, true)); } @@ -392,7 +395,7 @@ public class PluginManager try { unschedule(plugin); - eventBus.unregister(plugin); + // eventBus.unregister(plugin); // plugins always stop in the event thread SwingUtilities.invokeAndWait(() -> diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningPlugin.java index 95ea50287e..d11a2989a7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningPlugin.java @@ -59,7 +59,7 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.ProjectileMoved; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -92,6 +92,8 @@ public class AoeWarningPlugin extends Plugin private BombOverlay bombOverlay; @Inject private Client client; + @Inject + private EventBusImplementation eventbus; @Getter(AccessLevel.PACKAGE) private List LightningTrail = new ArrayList<>(); @Getter(AccessLevel.PACKAGE) @@ -170,6 +172,7 @@ public class AoeWarningPlugin extends Plugin protected void startUp() throws Exception { updateConfig(); + addSubscriptions(); overlayManager.add(coreOverlay); overlayManager.add(bombOverlay); @@ -179,13 +182,53 @@ public class AoeWarningPlugin extends Plugin @Override protected void shutDown() throws Exception { + super.shutDown(); + overlayManager.remove(coreOverlay); overlayManager.remove(bombOverlay); reset(); } - @Subscribe - public void onConfigChanged(ConfigChanged event) + private void addSubscriptions() + { + this.addSubscription( + this.eventbus + .observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ProjectileMoved.class) + .subscribe(this::onProjectileMoved) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameObjectSpawned.class) + .subscribe(this::onGameObjectSpawned) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameObjectDespawned.class) + .subscribe(this::onGameObjectDespawned) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameStateChanged.class) + .subscribe(this::onGameStateChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameTick.class) + .subscribe(this::onGameTick) + ); + } + + private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("aoe")) { @@ -195,8 +238,7 @@ public class AoeWarningPlugin extends Plugin updateConfig(); } - @Subscribe - public void onProjectileMoved(ProjectileMoved event) + private void onProjectileMoved(ProjectileMoved event) { Projectile projectile = event.getProjectile(); @@ -223,8 +265,7 @@ public class AoeWarningPlugin extends Plugin } } - @Subscribe - public void onGameObjectSpawned(GameObjectSpawned event) + private void onGameObjectSpawned(GameObjectSpawned event) { final GameObject gameObject = event.getGameObject(); final WorldPoint wp = gameObject.getWorldLocation(); @@ -260,8 +301,7 @@ public class AoeWarningPlugin extends Plugin } } - @Subscribe - public void onGameObjectDespawned(GameObjectDespawned event) + private void onGameObjectDespawned(GameObjectDespawned event) { GameObject gameObject = event.getGameObject(); WorldPoint wp = gameObject.getWorldLocation(); @@ -286,8 +326,7 @@ public class AoeWarningPlugin extends Plugin } } - @Subscribe - public void onGameStateChanged(GameStateChanged delta) + private void onGameStateChanged(GameStateChanged delta) { if (client.getGameState() == GameState.LOGGED_IN) { @@ -295,8 +334,7 @@ public class AoeWarningPlugin extends Plugin } } - @Subscribe - public void onGameTick(GameTick event) + private void onGameTick(GameTick event) { if (this.configLightningTrail) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Scorecard.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Scorecard.java index df5b7423b4..0c853cc360 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Scorecard.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Scorecard.java @@ -33,7 +33,6 @@ import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.events.ChatMessage; import net.runelite.client.chat.ChatMessageBuilder; -import net.runelite.client.eventbus.Subscribe; @Getter(AccessLevel.PACKAGE) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java index 2c6c68ecb3..25798ea3ae 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java @@ -56,7 +56,7 @@ import net.runelite.api.events.ProjectileMoved; import net.runelite.client.Notifier; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -123,6 +123,9 @@ public class CannonPlugin extends Plugin @Inject private ClientThread clientThread; + @Inject + private EventBusImplementation eventbus; + private boolean lock; private boolean showEmptyCannonNotification; @@ -146,6 +149,7 @@ public class CannonPlugin extends Plugin protected void startUp() throws Exception { updateConfig(); + addSubscriptions(); overlayManager.add(cannonOverlay); overlayManager.add(cannonSpotOverlay); @@ -155,6 +159,8 @@ public class CannonPlugin extends Plugin @Override protected void shutDown() throws Exception { + super.shutDown(); + cannonSpotOverlay.setHidden(true); overlayManager.remove(cannonOverlay); overlayManager.remove(cannonSpotOverlay); @@ -167,8 +173,46 @@ public class CannonPlugin extends Plugin spotPoints.clear(); } - @Subscribe - public void onItemContainerChanged(ItemContainerChanged event) + private void addSubscriptions() + { + this.addSubscription( + this.eventbus + .observableOfType(ItemContainerChanged.class) + .subscribe(this::onItemContainerChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameObjectSpawned.class) + .subscribe(this::onGameObjectSpawned) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ProjectileMoved.class) + .subscribe(this::onProjectileMoved) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ChatMessage.class) + .subscribe(this::onChatMessage) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameTick.class) + .subscribe(this::onGameTick) + ); + } + + private void onItemContainerChanged(ItemContainerChanged event) { if (event.getItemContainer() != client.getItemContainer(InventoryID.INVENTORY)) { @@ -178,8 +222,7 @@ public class CannonPlugin extends Plugin cannonSpotOverlay.setHidden(!ItemUtil.containsAllItemIds(event.getItemContainer().getItems(), CANNON_PARTS)); } - @Subscribe - public void onConfigChanged(ConfigChanged event) + private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("cannon")) { @@ -223,8 +266,7 @@ public class CannonPlugin extends Plugin } } - @Subscribe - public void onGameObjectSpawned(GameObjectSpawned event) + private void onGameObjectSpawned(GameObjectSpawned event) { GameObject gameObject = event.getGameObject(); @@ -238,8 +280,7 @@ public class CannonPlugin extends Plugin } } - @Subscribe - public void onProjectileMoved(ProjectileMoved event) + private void onProjectileMoved(ProjectileMoved event) { Projectile projectile = event.getProjectile(); @@ -261,8 +302,7 @@ public class CannonPlugin extends Plugin } } - @Subscribe - public void onChatMessage(ChatMessage event) + private void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.SPAM && event.getType() != ChatMessageType.GAMEMESSAGE) { @@ -345,8 +385,7 @@ public class CannonPlugin extends Plugin } } - @Subscribe - public void onGameTick(GameTick event) + private void onGameTick(GameTick event) { skipProjectileCheckThisTick = false; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java index bea864d8bc..4f1f8f6134 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java @@ -56,6 +56,7 @@ import net.runelite.api.events.VarClientIntChanged; import net.runelite.api.events.VarClientStrChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.ui.ClientUI; import net.runelite.client.ui.ColorScheme; @@ -86,7 +87,7 @@ class VarInspector extends JFrame private final static int MAX_LOG_ENTRIES = 10_000; private final Client client; - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final JPanel tracker = new JPanel(); @@ -99,7 +100,7 @@ class VarInspector extends JFrame private Map varcs = null; @Inject - VarInspector(Client client, EventBus eventBus, DevToolsPlugin plugin) + VarInspector(Client client, EventBusImplementation eventBus, DevToolsPlugin plugin) { this.eventBus = eventBus; this.client = client; @@ -348,7 +349,7 @@ class VarInspector extends JFrame System.arraycopy(client.getVarps(), 0, oldVarps2, 0, oldVarps2.length); varcs = new HashMap<>(client.getVarcMap()); - eventBus.register(this); + // eventBus.register(this); setVisible(true); toFront(); repaint(); @@ -357,7 +358,7 @@ class VarInspector extends JFrame public void close() { tracker.removeAll(); - eventBus.unregister(this); + // eventBus.unregister(this); setVisible(false); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java index e8cbcb9977..1ebdddaf1f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java @@ -66,12 +66,17 @@ import net.runelite.api.SceneTileModel; import net.runelite.api.SceneTilePaint; import net.runelite.api.Texture; import net.runelite.api.TextureProvider; +import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; +import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.GameTick; +import net.runelite.api.events.ItemContainerChanged; +import net.runelite.api.events.ProjectileMoved; import net.runelite.api.hooks.DrawCallbacks; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginInstantiationException; @@ -121,6 +126,9 @@ public class GpuPlugin extends Plugin implements DrawCallbacks @Inject private PluginManager pluginManager; + @Inject + private EventBusImplementation eventbus; + private Canvas canvas; private JAWTWindow jawtWindow; private GL4 gl; @@ -238,8 +246,7 @@ public class GpuPlugin extends Plugin implements DrawCallbacks private int fogCircularity; private int fogDensity; - @Subscribe - public void onConfigChanged(ConfigChanged event) + private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("gpu")) { @@ -259,9 +266,11 @@ public class GpuPlugin extends Plugin implements DrawCallbacks } @Override - protected void startUp() + protected void startUp() throws Exception { updateConfig(); + addSubscriptions(); + clientThread.invoke(() -> { try @@ -353,15 +362,23 @@ public class GpuPlugin extends Plugin implements DrawCallbacks log.error("error stopping plugin", ex); } - shutDown(); + try + { + shutDown(); + } + catch (Exception ex) + { + } } }); } @Override - protected void shutDown() + protected void shutDown() throws Exception { + super.shutDown(); + clientThread.invoke(() -> { client.setGpu(false); @@ -431,6 +448,21 @@ public class GpuPlugin extends Plugin implements DrawCallbacks }); } + private void addSubscriptions() + { + this.addSubscription( + this.eventbus + .observableOfType(GameStateChanged.class) + .subscribe(this::onGameStateChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged) + ); + } + @Provides GpuPluginConfig provideConfig(ConfigManager configManager) { @@ -800,8 +832,14 @@ public class GpuPlugin extends Plugin implements DrawCallbacks // We inject code in the game engine mixin to prevent the client from doing canvas replacement, // so this should not ever be hit log.warn("Canvas invalidated!"); - shutDown(); - startUp(); + try + { + shutDown(); + startUp(); + } + catch (Exception e) + { + } return; } @@ -1282,8 +1320,7 @@ public class GpuPlugin extends Plugin implements DrawCallbacks textureManager.animate(texture, diff); } - @Subscribe - public void onGameStateChanged(GameStateChanged gameStateChanged) + private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() != GameState.LOGGED_IN) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java index 9227aba3af..d4b7f685ba 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java @@ -52,8 +52,7 @@ import static net.runelite.client.RuneLite.LOGS_DIR; import net.runelite.client.RuneLiteProperties; import net.runelite.client.account.SessionManager; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.SessionClose; import net.runelite.client.events.SessionOpen; import net.runelite.client.ui.ColorScheme; @@ -87,7 +86,7 @@ public class InfoPanel extends PluginPanel private RuneLiteProperties runeLiteProperties; @Inject - private EventBus eventBus; + private EventBusImplementation eventBus; @Inject private SessionManager sessionManager; @@ -187,7 +186,7 @@ public class InfoPanel extends PluginPanel add(actionsContainer, BorderLayout.CENTER); updateLoggedIn(); - eventBus.register(this); + // eventBus.register(this); } /** @@ -316,13 +315,11 @@ public class InfoPanel extends PluginPanel return "" + key + "" + value + ""; } - @Subscribe public void onSessionOpen(SessionOpen sessionOpen) { updateLoggedIn(); } - @Subscribe public void onSessionClose(SessionClose e) { updateLoggedIn(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java index 1578ee408b..cd029e85a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java @@ -27,6 +27,11 @@ package net.runelite.client.plugins.info; import java.awt.image.BufferedImage; import javax.inject.Inject; import javax.inject.Singleton; +import net.runelite.api.events.ConfigChanged; +import net.runelite.api.events.ItemContainerChanged; +import net.runelite.client.eventbus.EventBusImplementation; +import net.runelite.client.events.SessionClose; +import net.runelite.client.events.SessionOpen; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.ClientToolbar; @@ -44,12 +49,18 @@ public class InfoPlugin extends Plugin @Inject private ClientToolbar clientToolbar; + @Inject + private EventBusImplementation eventbus; + private NavigationButton navButton; + + private InfoPanel panel; + @Override protected void startUp() throws Exception { - final InfoPanel panel = injector.getInstance(InfoPanel.class); + panel = injector.getInstance(InfoPanel.class); panel.init(); final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "info_icon.png"); @@ -62,11 +73,30 @@ public class InfoPlugin extends Plugin .build(); clientToolbar.addNavigation(navButton); + + addSubscriptions(); } @Override - protected void shutDown() + protected void shutDown() throws Exception { + super.shutDown(); + clientToolbar.removeNavigation(navButton); } + + private void addSubscriptions() + { + this.addSubscription( + this.eventbus + .observableOfType(SessionOpen.class) + .subscribe(panel::onSessionOpen) + ); + + this.addSubscription( + this.eventbus + .observableOfType(SessionClose.class) + .subscribe(panel::onSessionClose) + ); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java index 907f66f03d..0350579ae3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java @@ -31,6 +31,7 @@ import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.mta.alchemy.AlchemyRoom; @@ -60,7 +61,7 @@ public class MTAPlugin extends Plugin private EnchantmentRoom enchantmentRoom; @Inject - private EventBus eventBus; + private EventBusImplementation eventBus; @Inject private MTASceneOverlay sceneOverlay; @Inject @@ -85,7 +86,7 @@ public class MTAPlugin extends Plugin for (MTARoom room : rooms) { - eventBus.register(room); + // eventBus.register(room); } } @@ -97,7 +98,7 @@ public class MTAPlugin extends Plugin for (MTARoom room : rooms) { - eventBus.unregister(room); + // eventBus.unregister(room); } telekineticRoom.resetRoom(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java index 0f8f150190..6aa6628621 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java @@ -66,7 +66,7 @@ import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -116,6 +116,9 @@ public class NpcIndicatorsPlugin extends Plugin @Inject private ClientThread clientThread; + @Inject + private EventBusImplementation eventbus; + @Setter(AccessLevel.PACKAGE) private boolean hotKeyPressed = false; @@ -207,6 +210,7 @@ public class NpcIndicatorsPlugin extends Plugin protected void startUp() throws Exception { updateConfig(); + addSubscriptions(); overlayManager.add(npcSceneOverlay); overlayManager.add(npcMinimapOverlay); @@ -222,6 +226,8 @@ public class NpcIndicatorsPlugin extends Plugin @Override protected void shutDown() throws Exception { + super.shutDown(); + overlayManager.remove(npcSceneOverlay); overlayManager.remove(npcMinimapOverlay); deadNpcsToDisplay.clear(); @@ -234,8 +240,70 @@ public class NpcIndicatorsPlugin extends Plugin keyManager.unregisterKeyListener(inputListener); } - @Subscribe - public void onGameStateChanged(GameStateChanged event) + private void addSubscriptions() + { + this.addSubscription( + this.eventbus + .observableOfType(GameStateChanged.class) + .subscribe(this::onGameStateChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(FocusChanged.class) + .subscribe(this::onFocusChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(MenuEntryAdded.class) + .subscribe(this::onMenuEntryAdded) + ); + + this.addSubscription( + this.eventbus + .observableOfType(MenuOptionClicked.class) + .subscribe(this::onMenuOptionClicked) + ); + + this.addSubscription( + this.eventbus + .observableOfType(NpcSpawned.class) + .subscribe(this::onNpcSpawned) + ); + + this.addSubscription( + this.eventbus + .observableOfType(NpcDefinitionChanged.class) + .subscribe(this::onNpcDefinitionChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(NpcDespawned.class) + .subscribe(this::onNpcDespawned) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GraphicsObjectCreated.class) + .subscribe(this::onGraphicsObjectCreated) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameTick.class) + .subscribe(this::onGameTick) + ); + } + + private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGIN_SCREEN || event.getGameState() == GameState.HOPPING) @@ -248,8 +316,7 @@ public class NpcIndicatorsPlugin extends Plugin } } - @Subscribe - public void onConfigChanged(ConfigChanged configChanged) + private void onConfigChanged(ConfigChanged configChanged) { if (!configChanged.getGroup().equals("npcindicators")) { @@ -262,8 +329,7 @@ public class NpcIndicatorsPlugin extends Plugin rebuildAllNpcs(); } - @Subscribe - public void onFocusChanged(FocusChanged focusChanged) + private void onFocusChanged(FocusChanged focusChanged) { if (!focusChanged.isFocused()) { @@ -271,8 +337,7 @@ public class NpcIndicatorsPlugin extends Plugin } } - @Subscribe - public void onMenuEntryAdded(MenuEntryAdded event) + private void onMenuEntryAdded(MenuEntryAdded event) { MenuEntry[] menuEntries = client.getMenuEntries(); String target = event.getTarget(); @@ -306,8 +371,7 @@ public class NpcIndicatorsPlugin extends Plugin } } - @Subscribe - public void onMenuOptionClicked(MenuOptionClicked click) + private void onMenuOptionClicked(MenuOptionClicked click) { if (click.getMenuAction() != MenuAction.RUNELITE || (!click.getOption().equals(TAG) @@ -344,8 +408,7 @@ public class NpcIndicatorsPlugin extends Plugin click.consume(); } - @Subscribe - public void onNpcSpawned(NpcSpawned npcSpawned) + private void onNpcSpawned(NpcSpawned npcSpawned) { NPC npc = npcSpawned.getNpc(); highlightNpcIfMatch(npc); @@ -356,8 +419,7 @@ public class NpcIndicatorsPlugin extends Plugin } } - @Subscribe - public void onNpcDefinitionChanged(NpcDefinitionChanged event) + private void onNpcDefinitionChanged(NpcDefinitionChanged event) { NPC npc = event.getNpc(); highlightNpcIfMatch(npc); @@ -373,8 +435,7 @@ public class NpcIndicatorsPlugin extends Plugin } } - @Subscribe - public void onNpcDespawned(NpcDespawned npcDespawned) + private void onNpcDespawned(NpcDespawned npcDespawned) { final NPC npc = npcDespawned.getNpc(); @@ -386,8 +447,7 @@ public class NpcIndicatorsPlugin extends Plugin highlightedNpcs.remove(npc); } - @Subscribe - public void onGraphicsObjectCreated(GraphicsObjectCreated event) + private void onGraphicsObjectCreated(GraphicsObjectCreated event) { final GraphicsObject go = event.getGraphicsObject(); @@ -397,8 +457,7 @@ public class NpcIndicatorsPlugin extends Plugin } } - @Subscribe - public void onGameTick(GameTick event) + private void onGameTick(GameTick event) { removeOldHighlightedRespawns(); validateSpawnedNpcs(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java index 56db18f616..1b63b044a7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java @@ -64,7 +64,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; @@ -108,6 +108,9 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener @Inject private KeyManager keyManager; + @Inject + private EventBusImplementation eventbus; + @Getter(AccessLevel.PACKAGE) private RenderStyle objectMarkerRenderStyle; @Getter(AccessLevel.PACKAGE) @@ -127,6 +130,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener protected void startUp() { updateConfig(); + addSubscriptions(); overlayManager.add(overlay); keyManager.registerKeyListener(this); @@ -135,6 +139,14 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener @Override protected void shutDown() { + try + { + super.shutDown(); + } + catch (Exception e) + { + } + overlayManager.remove(overlay); keyManager.unregisterKeyListener(this); points.clear(); @@ -142,6 +154,69 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener hotKeyPressed = false; } + private void addSubscriptions() + { + this.addSubscription( + this.eventbus + .observableOfType(FocusChanged.class) + .subscribe(this::onFocusChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameObjectSpawned.class) + .subscribe(this::onGameObjectSpawned) + ); + + this.addSubscription( + this.eventbus + .observableOfType(DecorativeObjectSpawned.class) + .subscribe(this::onDecorativeObjectSpawned) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameObjectDespawned.class) + .subscribe(this::onGameObjectDespawned) + ); + + this.addSubscription( + this.eventbus + .observableOfType(DecorativeObjectDespawned.class) + .subscribe(this::onDecorativeObjectDespawned) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameStateChanged.class) + .subscribe(this::onGameStateChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(MenuOptionClicked.class) + .subscribe(this::onMenuOptionClicked) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameStateChanged.class) + .subscribe(this::onGameStateChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(MenuEntryAdded.class) + .subscribe(this::onMenuEntryAdded) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged) + ); + } + @Override public void keyTyped(KeyEvent e) { @@ -166,8 +241,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener } } - @Subscribe - public void onFocusChanged(final FocusChanged event) + private void onFocusChanged(final FocusChanged event) { if (!event.isFocused()) { @@ -175,34 +249,29 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener } } - @Subscribe - public void onGameObjectSpawned(GameObjectSpawned event) + private void onGameObjectSpawned(GameObjectSpawned event) { final GameObject eventObject = event.getGameObject(); checkObjectPoints(eventObject); } - @Subscribe - public void onDecorativeObjectSpawned(DecorativeObjectSpawned event) + private void onDecorativeObjectSpawned(DecorativeObjectSpawned event) { final DecorativeObject eventObject = event.getDecorativeObject(); checkObjectPoints(eventObject); } - @Subscribe - public void onGameObjectDespawned(GameObjectDespawned event) + private void onGameObjectDespawned(GameObjectDespawned event) { objects.remove(event.getGameObject()); } - @Subscribe - public void onDecorativeObjectDespawned(DecorativeObjectDespawned event) + private void onDecorativeObjectDespawned(DecorativeObjectDespawned event) { objects.remove(event.getDecorativeObject()); } - @Subscribe - public void onGameStateChanged(GameStateChanged gameStateChanged) + private void onGameStateChanged(GameStateChanged gameStateChanged) { GameState gameState = gameStateChanged.getGameState(); if (gameState == GameState.LOADING) @@ -227,8 +296,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener } } - @Subscribe - public void onMenuEntryAdded(MenuEntryAdded event) + private void onMenuEntryAdded(MenuEntryAdded event) { if (!hotKeyPressed || event.getType() != MenuAction.EXAMINE_OBJECT.getId()) { @@ -284,8 +352,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener client.setMenuEntries(menuEntries); } - @Subscribe - public void onMenuOptionClicked(MenuOptionClicked event) + private void onMenuOptionClicked(MenuOptionClicked event) { if (event.getMenuAction() != MenuAction.RUNELITE || (!event.getOption().equals(MARK) @@ -443,8 +510,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener }.getType()); } - @Subscribe - public void onConfigChanged(ConfigChanged event) + private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("objectindicators")) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runeliteplus/RuneLitePlusPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runeliteplus/RuneLitePlusPlugin.java index 0b7ffb8271..0cdcf529e1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runeliteplus/RuneLitePlusPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runeliteplus/RuneLitePlusPlugin.java @@ -39,7 +39,7 @@ import static net.runelite.api.widgets.WidgetInfo.*; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.RuneLitePlusConfig; import net.runelite.client.discord.DiscordService; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; @@ -105,6 +105,9 @@ public class RuneLitePlusPlugin extends Plugin @Inject private ClientThread clientThread; + @Inject + private EventBusImplementation eventbus; + private final RuneLitePlusKeyListener keyListener = new RuneLitePlusKeyListener(); private int entered = -1; private int enterIdx; @@ -113,6 +116,8 @@ public class RuneLitePlusPlugin extends Plugin @Override protected void startUp() throws Exception { + addSubscriptions(); + if (config.customPresence()) { ClientUI.currentPresenceName = ("RuneLitePlus"); @@ -127,8 +132,7 @@ public class RuneLitePlusPlugin extends Plugin expectInput = false; } - @Subscribe - protected void onConfigChanged(ConfigChanged event) + private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("runeliteplus")) { @@ -165,13 +169,29 @@ public class RuneLitePlusPlugin extends Plugin @Override protected void shutDown() throws Exception { + super.shutDown(); + entered = 0; enterIdx = 0; expectInput = false; keyManager.unregisterKeyListener(keyListener); } - @Subscribe + private void addSubscriptions() + { + this.addSubscription( + this.eventbus + .observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ScriptCallbackEvent.class) + .subscribe(this::onScriptCallbackEvent) + ); + } + private void onScriptCallbackEvent(ScriptCallbackEvent e) { if (!config.keyboardPin()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedloottracker/data/LootRecordWriter.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedloottracker/data/LootRecordWriter.java index 13b001151c..d4c340df67 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedloottracker/data/LootRecordWriter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedloottracker/data/LootRecordWriter.java @@ -41,6 +41,7 @@ import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import static net.runelite.client.RuneLite.RUNELITE_DIR; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.plugins.stonedloottracker.data.events.LootTrackerNameChange; import net.runelite.client.plugins.stonedloottracker.data.events.LootTrackerRecordStored; import net.runelite.http.api.RuneLiteAPI; @@ -55,10 +56,10 @@ public class LootRecordWriter // Data is stored in a folder with the players in-game username private File playerFolder = LOOT_RECORD_DIR; - private final EventBus bus; + private final EventBusImplementation bus; @Inject - public LootRecordWriter(EventBus bus) + public LootRecordWriter(EventBusImplementation bus) { this.bus = bus; playerFolder.mkdir(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java index 910b9ae241..bca3584121 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java @@ -54,7 +54,7 @@ import net.runelite.api.events.VarbitChanged; import net.runelite.client.Notifier; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.wintertodt.config.WintertodtNotifyMode; @@ -93,6 +93,9 @@ public class WintertodtPlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; + @Inject + private EventBusImplementation eventbus; + @Getter(AccessLevel.PACKAGE) private WintertodtActivity currentActivity = WintertodtActivity.IDLE; @@ -123,6 +126,8 @@ public class WintertodtPlugin extends Plugin this.notifyCondition = config.notifyCondition(); this.damageNotificationColor = config.damageNotificationColor(); + addSubscriptions(); + reset(); overlayManager.add(overlay); } @@ -130,12 +135,52 @@ public class WintertodtPlugin extends Plugin @Override protected void shutDown() throws Exception { + super.shutDown(); + overlayManager.remove(overlay); reset(); } - @Subscribe - public void onConfigChanged(ConfigChanged event) + private void addSubscriptions() + { + this.addSubscription( + this.eventbus + .observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(GameTick.class) + .subscribe(this::onGameTick) + ); + + this.addSubscription( + this.eventbus + .observableOfType(VarbitChanged.class) + .subscribe(this::onVarbitChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ChatMessage.class) + .subscribe(this::onChatMessage) + ); + + this.addSubscription( + this.eventbus + .observableOfType(AnimationChanged.class) + .subscribe(this::onAnimationChanged) + ); + + this.addSubscription( + this.eventbus + .observableOfType(ItemContainerChanged.class) + .subscribe(this::onItemContainerChanged) + ); + } + + private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("wintertodt")) { @@ -164,8 +209,7 @@ public class WintertodtPlugin extends Plugin return false; } - @Subscribe - public void onGameTick(GameTick gameTick) + private void onGameTick(GameTick gameTick) { if (!isInWintertodtRegion()) { @@ -189,8 +233,7 @@ public class WintertodtPlugin extends Plugin checkActionTimeout(); } - @Subscribe - public void onVarbitChanged(VarbitChanged varbitChanged) + private void onVarbitChanged(VarbitChanged varbitChanged) { int timerValue = client.getVar(Varbits.WINTERTODT_TIMER); if (timerValue != previousTimerValue) @@ -236,8 +279,7 @@ public class WintertodtPlugin extends Plugin } } - @Subscribe - public void onChatMessage(ChatMessage chatMessage) + private void onChatMessage(ChatMessage chatMessage) { if (!isInWintertodt) { @@ -380,8 +422,7 @@ public class WintertodtPlugin extends Plugin notifier.notify(notification); } - @Subscribe - public void onAnimationChanged(final AnimationChanged event) + private void onAnimationChanged(final AnimationChanged event) { if (!isInWintertodt) { @@ -429,8 +470,7 @@ public class WintertodtPlugin extends Plugin } } - @Subscribe - public void onItemContainerChanged(ItemContainerChanged event) + private void onItemContainerChanged(ItemContainerChanged event) { final ItemContainer container = event.getItemContainer(); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientToolbar.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientToolbar.java index 20bfe8897b..33adc900b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientToolbar.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientToolbar.java @@ -29,6 +29,7 @@ import java.util.Set; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.NavigationButtonAdded; import net.runelite.client.events.NavigationButtonRemoved; @@ -38,11 +39,11 @@ import net.runelite.client.events.NavigationButtonRemoved; @Singleton public class ClientToolbar { - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final Set buttons = new HashSet<>(); @Inject - private ClientToolbar(final EventBus eventBus) + private ClientToolbar(final EventBusImplementation eventBus) { this.eventBus = eventBus; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 8b3fc96130..7522520495 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -84,7 +84,7 @@ import net.runelite.client.config.ExpandResizeType; import net.runelite.client.config.Keybind; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.WarningOnExit; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.NavigationButtonAdded; import net.runelite.client.events.NavigationButtonRemoved; import net.runelite.client.input.KeyManager; @@ -158,7 +158,8 @@ public class ClientUI MouseManager mouseManager, @Nullable Applet client, ConfigManager configManager, - Provider clientThreadProvider) + Provider clientThreadProvider, + EventBusImplementation eventbus) { this.properties = properties; this.config = config; @@ -167,10 +168,21 @@ public class ClientUI this.client = client; this.configManager = configManager; this.clientThreadProvider = clientThreadProvider; + + eventbus.observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged); + + eventbus.observableOfType(NavigationButtonAdded.class) + .subscribe(this::onNavigationButtonAdded); + + eventbus.observableOfType(NavigationButtonRemoved.class) + .subscribe(this::onNavigationButtonRemoved); + + eventbus.observableOfType(GameStateChanged.class) + .subscribe(this::onGameStateChanged); } - @Subscribe - public void onConfigChanged(ConfigChanged event) + private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals(CONFIG_GROUP) && !(event.getGroup().equals(PLUS_CONFIG_GROUP) @@ -185,8 +197,7 @@ public class ClientUI SwingUtilities.invokeLater(() -> updateFrameConfig(event.getKey().equals("lockWindowSize"))); } - @Subscribe - public void onNavigationButtonAdded(final NavigationButtonAdded event) + private void onNavigationButtonAdded(final NavigationButtonAdded event) { SwingUtilities.invokeLater(() -> { @@ -252,8 +263,7 @@ public class ClientUI }); } - @Subscribe - public void onNavigationButtonRemoved(final NavigationButtonRemoved event) + private void onNavigationButtonRemoved(final NavigationButtonRemoved event) { SwingUtilities.invokeLater(() -> { @@ -270,8 +280,7 @@ public class ClientUI }); } - @Subscribe - public void onGameStateChanged(final GameStateChanged event) + private void onGameStateChanged(final GameStateChanged event) { if (event.getGameState() != GameState.LOGGED_IN || !(client instanceof Client) || !config.usernameInTitle()) { diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index 40d82c357d..d91e803cfc 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -47,7 +47,7 @@ import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.events.PluginChanged; @@ -104,24 +104,28 @@ public class OverlayManager private final Map> overlayLayers = new EnumMap<>(OverlayLayer.class); private final ConfigManager configManager; - private final EventBus eventBus; + private final EventBusImplementation eventBus; @Inject - private OverlayManager(final ConfigManager configManager, final EventBus eventBus) + private OverlayManager(final ConfigManager configManager, final EventBusImplementation eventBus) { this.configManager = configManager; this.eventBus = eventBus; + + eventBus.observableOfType(PluginChanged.class) + .subscribe(this::onPluginChanged); + + eventBus.observableOfType(MenuOptionClicked.class) + .subscribe(this::onMenuOptionClicked); } - @Subscribe - public void onPluginChanged(final PluginChanged event) + private void onPluginChanged(final PluginChanged event) { overlays.forEach(this::loadOverlay); rebuildOverlayLayers(); } - @Subscribe - public void onMenuOptionClicked(MenuOptionClicked event) + private void onMenuOptionClicked(MenuOptionClicked event) { if (event.getMenuAction() != MenuAction.RUNELITE_OVERLAY) { diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index 76d5a21386..83f81592d8 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -50,7 +50,7 @@ import net.runelite.api.events.FocusChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.RuneLiteConfig; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseAdapter; @@ -59,6 +59,7 @@ import net.runelite.client.ui.JagexColors; import net.runelite.client.util.ColorUtil; import net.runelite.client.ui.FontManager; import net.runelite.client.util.MiscUtils; +import net.runelite.http.api.ws.messages.party.UserPart; @Singleton public class OverlayRenderer extends MouseAdapter implements KeyListener @@ -101,7 +102,8 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener final OverlayManager overlayManager, final RuneLiteConfig runeLiteConfig, final MouseManager mouseManager, - final KeyManager keyManager) + final KeyManager keyManager, + final EventBusImplementation eventbus) { this.client = client; this.overlayManager = overlayManager; @@ -109,6 +111,18 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener this.updateConfig(); keyManager.registerKeyListener(this); mouseManager.registerMouseListener(this); + + eventbus.observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged); + + eventbus.observableOfType(FocusChanged.class) + .subscribe(this::onFocusChanged); + + eventbus.observableOfType(ClientTick.class) + .subscribe(this::onClientTick); + + eventbus.observableOfType(BeforeRender.class) + .subscribe(this::onBeforeRender); } private void updateConfig() @@ -120,8 +134,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener this.interfaceFont = FontManager.getFontFromType(clientFont, runeLiteConfig.interfaceFontType()); } - @Subscribe - public void onConfigChanged(ConfigChanged event) + private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("runelite")) { @@ -129,8 +142,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener } } - @Subscribe - public void onFocusChanged(FocusChanged event) + private void onFocusChanged(FocusChanged event) { if (!event.isFocused()) { @@ -140,7 +152,6 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener } } - @Subscribe protected void onClientTick(ClientTick t) { if (menuEntries == null) @@ -167,8 +178,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener client.setMenuEntries(newEntries); } - @Subscribe - public void onBeforeRender(BeforeRender event) + private void onBeforeRender(BeforeRender event) { menuEntries = null; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java index 56ef1a66fd..3f5f11356f 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java @@ -39,7 +39,7 @@ import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.events.ConfigChanged; import net.runelite.client.config.RuneLiteConfig; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.plugins.PluginDescriptor; @Singleton @@ -50,13 +50,14 @@ public class InfoBoxManager private final RuneLiteConfig runeLiteConfig; @Inject - private InfoBoxManager(final RuneLiteConfig runeLiteConfig) + private InfoBoxManager(final RuneLiteConfig runeLiteConfig, final EventBusImplementation eventbus) { this.runeLiteConfig = runeLiteConfig; + eventbus.observableOfType(ConfigChanged.class) + .subscribe(this::onConfigChanged); } - @Subscribe - public void onConfigChanged(ConfigChanged event) + private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("runelite") && event.getKey().equals("infoBoxSize")) { diff --git a/runelite-client/src/main/java/net/runelite/client/util/DeferredEventBus.java b/runelite-client/src/main/java/net/runelite/client/util/DeferredEventBus.java index 4ac1941d7f..a002334a2b 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/DeferredEventBus.java +++ b/runelite-client/src/main/java/net/runelite/client/util/DeferredEventBus.java @@ -28,35 +28,22 @@ import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import javax.inject.Inject; import javax.inject.Singleton; -import net.runelite.client.eventbus.EventBus; -import org.jetbrains.annotations.NotNull; +import net.runelite.client.eventbus.EventBusImplementation; @Singleton -public class DeferredEventBus extends EventBus +public class DeferredEventBus extends EventBusImplementation { - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final Queue pendingEvents = new ConcurrentLinkedQueue<>(); @Inject - private DeferredEventBus(EventBus eventBus) + private DeferredEventBus(EventBusImplementation eventBus) { this.eventBus = eventBus; } @Override - public void register(@NotNull Object object) - { - eventBus.register(object); - } - - @Override - public void unregister(@NotNull Object object) - { - eventBus.unregister(object); - } - - @Override - public void post(@NotNull Object object) + public void post(Object object) { pendingEvents.add(object); } diff --git a/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java b/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java index e837bb54d9..61b61d75e6 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java +++ b/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java @@ -51,11 +51,12 @@ import net.runelite.api.events.PlayerSpawned; import net.runelite.api.events.WallObjectSpawned; import net.runelite.client.callback.ClientThread; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; @Singleton public class GameEventManager { - private final EventBus eventBus = new EventBus(); + private final EventBusImplementation eventBus = new EventBusImplementation(); private final Client client; private final ClientThread clientThread; @@ -110,7 +111,7 @@ public class GameEventManager clientThread.invoke(() -> { - eventBus.register(subscriber); + // eventBus.register(subscriber); for (final InventoryID inventory : InventoryID.values()) { @@ -192,7 +193,7 @@ public class GameEventManager }); }); - eventBus.unregister(subscriber); + // eventBus.unregister(subscriber); }); } } diff --git a/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java b/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java index caec527320..dfe83b635b 100644 --- a/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java +++ b/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java @@ -33,10 +33,10 @@ import javax.inject.Singleton; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import net.runelite.api.events.GameStateChanged; import net.runelite.client.account.AccountSession; import net.runelite.client.account.SessionManager; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.client.events.PartyChanged; import net.runelite.http.api.ws.messages.party.Join; import net.runelite.http.api.ws.messages.party.Part; @@ -52,7 +52,7 @@ public class PartyService private final WSClient wsClient; private final SessionManager sessionManager; - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final List members = new ArrayList<>(); @Getter @@ -65,11 +65,17 @@ public class PartyService private String username; @Inject - private PartyService(final WSClient wsClient, final SessionManager sessionManager, final EventBus eventBus) + private PartyService(final WSClient wsClient, final SessionManager sessionManager, final EventBusImplementation eventBus) { this.wsClient = wsClient; this.sessionManager = sessionManager; this.eventBus = eventBus; + + eventBus.observableOfType(UserJoin.class) + .subscribe(this::onUserJoin); + + eventBus.observableOfType(UserPart.class) + .subscribe(this::onUserPart); } public void changeParty(UUID newParty) @@ -111,8 +117,7 @@ public class PartyService wsClient.send(new Join(partyId, username)); } - @Subscribe - public void onUserJoin(final UserJoin message) + private void onUserJoin(final UserJoin message) { if (!partyId.equals(message.getPartyId())) { @@ -135,8 +140,7 @@ public class PartyService } } - @Subscribe - public void onUserPart(final UserPart message) + private void onUserPart(final UserPart message) { members.removeIf(member -> member.getMemberId().equals(message.getMemberId())); } diff --git a/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java b/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java index 5b92f5c533..ca8d1ab739 100644 --- a/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java +++ b/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java @@ -35,6 +35,7 @@ import javax.inject.Singleton; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventBusImplementation; import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.ws.WebsocketGsonFactory; import net.runelite.http.api.ws.WebsocketMessage; @@ -49,7 +50,7 @@ import okhttp3.WebSocketListener; @Singleton public class WSClient extends WebSocketListener implements AutoCloseable { - private final EventBus eventBus; + private final EventBusImplementation eventBus; private final Collection> messages = new HashSet<>(); private volatile Gson gson; @@ -58,7 +59,7 @@ public class WSClient extends WebSocketListener implements AutoCloseable private WebSocket webSocket; @Inject - private WSClient(EventBus eventBus) + private WSClient(EventBusImplementation eventBus) { this.eventBus = eventBus; this.gson = WebsocketGsonFactory.build(WebsocketGsonFactory.factory(messages));