RxJava 'eventbus'

This commit is contained in:
Owain van Brakel
2019-07-13 07:19:52 +02:00
parent aa0014f5df
commit 3de05dec64
42 changed files with 775 additions and 596 deletions

View File

@@ -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> itemManager;
@Inject
private Provider<OverlayRenderer> overlayRenderer;
@Inject
private Provider<ClanManager> clanManager;
@Inject
private Provider<ChatMessageManager> chatMessageManager;
@Inject
private Provider<MenuManager> menuManager;
@Inject
private Provider<CommandManager> commandManager;
@Inject
private Provider<InfoBoxOverlay> infoBoxOverlay;
@@ -160,12 +122,6 @@ public class RuneLite
@Inject
private Provider<ArrowMinimapOverlay> arrowMinimapOverlay;
@Inject
private Provider<LootManager> lootManager;
@Inject
private Provider<ChatboxPanelManager> 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());

View File

@@ -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"))

View File

@@ -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());

View File

@@ -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;

View File

@@ -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<ChatMessage, String> 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)
{

View File

@@ -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();

View File

@@ -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<ChatboxInputListener> 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)

View File

@@ -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();

View File

@@ -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)
{

View File

@@ -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;
<T> Observable<T> observableOfType(Class<T> eventClass);
void invoke(final Object arg) throws Exception
{
if (lamda != null)
{
lamda.invoke(arg);
}
else
{
method.invoke(object, arg);
}
}
}
private final Consumer<Throwable> exceptionHandler;
private ImmutableMultimap<Class, Subscriber> 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<Class, Subscriber> 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<Class, Subscriber> 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;
}
}
<T> Observable<Object> observableOfTypes(List<Class<T>> eventClasses);
}

View File

@@ -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<Object> bus = PublishRelay.create().toSerialized();
@Override
public void post(Object event)
{
if (this.bus.hasObservers())
{
this.bus.accept(event);
}
}
@Override
public <T> Observable<T> observableOfType(Class<T> 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 <T> Observable<Object> observableOfTypes(List<Class<T>> 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
}
}

View File

@@ -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
{
}

View File

@@ -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();
}

View File

@@ -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());
}

View File

@@ -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<Integer, ItemStack> itemSpawns = ArrayListMultimap.create();
private final Set<LocalPoint> 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();

View File

@@ -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<ChatboxTextMenuInput> chatboxTextMenuInputProvider, Provider<ChatboxTextInput> 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);

View File

@@ -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<Integer, String> 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<WidgetMenuOption> 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())
{

View File

@@ -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<Disposable> 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()

View File

@@ -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(() ->

View File

@@ -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<WorldPoint> 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)
{

View File

@@ -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)

View File

@@ -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;
}

View File

@@ -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<Integer, Object> 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);
}
}

View File

@@ -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)
{

View File

@@ -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 "<html><body style = 'color:#a5a5a5'>" + key + "<span style = 'color:white'>" + value + "</span></body></html>";
}
@Subscribe
public void onSessionOpen(SessionOpen sessionOpen)
{
updateLoggedIn();
}
@Subscribe
public void onSessionClose(SessionClose e)
{
updateLoggedIn();

View File

@@ -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)
);
}
}

View File

@@ -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();

View File

@@ -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();

View File

@@ -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"))
{

View File

@@ -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())

View File

@@ -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();

View File

@@ -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();

View File

@@ -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<NavigationButton> buttons = new HashSet<>();
@Inject
private ClientToolbar(final EventBus eventBus)
private ClientToolbar(final EventBusImplementation eventBus)
{
this.eventBus = eventBus;
}

View File

@@ -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<ClientThread> clientThreadProvider)
Provider<ClientThread> 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())
{

View File

@@ -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<OverlayLayer, List<Overlay>> 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)
{

View File

@@ -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;
}

View File

@@ -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"))
{

View File

@@ -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<Object> 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);
}

View File

@@ -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);
});
}
}

View File

@@ -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<PartyMember> 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()));
}

View File

@@ -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<Class<? extends WebsocketMessage>> 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));