Properly use javax.inject.Provider

Instead of using providers in classes that should not be even used when
the optional dependencies are not present, move all Provider<> injects
to RuneLite (and to other top-level classes in other cases).

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-07-27 18:38:47 +02:00
parent 9ee6989aa3
commit bb55d9f52a
14 changed files with 129 additions and 229 deletions

View File

@@ -41,7 +41,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ChatMessageType; import net.runelite.api.ChatMessageType;
@@ -67,18 +66,18 @@ public class Notifier
private static final int FLASH_DURATION = 2000; private static final int FLASH_DURATION = 2000;
private static final String MESSAGE_COLOR = "FF0000"; private static final String MESSAGE_COLOR = "FF0000";
private final Provider<Client> client; private final Client client;
private final String appName; private final String appName;
private final RuneLiteConfig runeLiteConfig; private final RuneLiteConfig runeLiteConfig;
private final Provider<ClientUI> clientUI; private final ClientUI clientUI;
private final ScheduledExecutorService executorService; private final ScheduledExecutorService executorService;
private final Path notifyIconPath; private final Path notifyIconPath;
private Instant flashStart; private Instant flashStart;
@Inject @Inject
private Notifier( private Notifier(
final Provider<ClientUI> clientUI, final ClientUI clientUI,
final Provider<Client> client, final Client client,
final RuneLiteConfig runeliteConfig, final RuneLiteConfig runeliteConfig,
final RuneLiteProperties runeLiteProperties, final RuneLiteProperties runeLiteProperties,
final ScheduledExecutorService executorService) final ScheduledExecutorService executorService)
@@ -99,13 +98,6 @@ public class Notifier
public void notify(String message, TrayIcon.MessageType type) public void notify(String message, TrayIcon.MessageType type)
{ {
final ClientUI clientUI = this.clientUI.get();
if (clientUI == null)
{
return;
}
if (!runeLiteConfig.sendNotificationsWhenFocused() && clientUI.isFocused()) if (!runeLiteConfig.sendNotificationsWhenFocused() && clientUI.isFocused())
{ {
return; return;
@@ -128,9 +120,7 @@ public class Notifier
if (runeLiteConfig.enableGameMessageNotification()) if (runeLiteConfig.enableGameMessageNotification())
{ {
final Client client = this.client.get(); if (client.getGameState() == GameState.LOGGED_IN)
if (client != null && client.getGameState() == GameState.LOGGED_IN)
{ {
client.addChatMessage(ChatMessageType.GAME, appName, client.addChatMessage(ChatMessageType.GAME, appName,
"<col=" + MESSAGE_COLOR + ">" + message + "</col>", ""); "<col=" + MESSAGE_COLOR + ">" + message + "</col>", "");
@@ -150,9 +140,7 @@ public class Notifier
return; return;
} }
final Client client = this.client.get(); if (client.getGameCycle() % 40 >= 20)
if (client == null || client.getGameCycle() % 40 >= 20)
{ {
return; return;
} }
@@ -195,13 +183,6 @@ public class Notifier
final String message, final String message,
final TrayIcon.MessageType type) final TrayIcon.MessageType type)
{ {
final ClientUI clientUI = this.clientUI.get();
if (clientUI == null)
{
return;
}
if (clientUI.getTrayIcon() != null) if (clientUI.getTrayIcon() != null)
{ {
clientUI.getTrayIcon().displayMessage(title, message, type); clientUI.getTrayIcon().displayMessage(title, message, type);

View File

@@ -81,24 +81,12 @@ public class RuneLite
@Inject @Inject
private PluginManager pluginManager; private PluginManager pluginManager;
@Inject
private MenuManager menuManager;
@Inject @Inject
private EventBus eventBus; private EventBus eventBus;
@Inject @Inject
private ConfigManager configManager; private ConfigManager configManager;
@Inject
private ChatMessageManager chatMessageManager;
@Inject
private CommandManager commandManager;
@Inject
private OverlayRenderer overlayRenderer;
@Inject @Inject
private DrawManager drawManager; private DrawManager drawManager;
@@ -114,12 +102,6 @@ public class RuneLite
@Inject @Inject
private ClientUI clientUI; private ClientUI clientUI;
@Inject
private Provider<ItemManager> itemManager;
@Inject
private ClanManager clanManager;
@Inject @Inject
private InfoBoxManager infoBoxManager; private InfoBoxManager infoBoxManager;
@@ -127,13 +109,31 @@ public class RuneLite
private OverlayManager overlayManager; private OverlayManager overlayManager;
@Inject @Inject
private InfoBoxOverlay infoBoxOverlay; private Provider<ItemManager> itemManager;
@Inject @Inject
private TooltipOverlay tooltipOverlay; private Provider<OverlayRenderer> overlayRenderer;
@Inject @Inject
private WorldMapOverlay worldMapOverlay; private Provider<ClanManager> clanManager;
@Inject
private Provider<ChatMessageManager> chatMessageManager;
@Inject
private Provider<MenuManager> menuManager;
@Inject
private Provider<CommandManager> commandManager;
@Inject
private Provider<InfoBoxOverlay> infoBoxOverlay;
@Inject
private Provider<TooltipOverlay> tooltipOverlay;
@Inject
private Provider<WorldMapOverlay> worldMapOverlay;
@Inject @Inject
@Nullable @Nullable
@@ -243,35 +243,34 @@ public class RuneLite
// Initialize UI // Initialize UI
clientUI.open(this); clientUI.open(this);
// Initialize chat colors
chatMessageManager.loadColors();
// Initialize Discord service // Initialize Discord service
discordService.init(); discordService.init();
// Register event listeners // Register event listeners
eventBus.register(clientUI); eventBus.register(clientUI);
eventBus.register(pluginManager); eventBus.register(pluginManager);
eventBus.register(overlayRenderer);
eventBus.register(overlayManager); eventBus.register(overlayManager);
eventBus.register(drawManager); eventBus.register(drawManager);
eventBus.register(menuManager);
eventBus.register(chatMessageManager);
eventBus.register(commandManager);
eventBus.register(clanManager);
eventBus.register(infoBoxManager); eventBus.register(infoBoxManager);
if (!isOutdated) if (!isOutdated)
{ {
eventBus.register(itemManager.get()); // Initialize chat colors
WidgetOverlay.createOverlays(client).forEach(overlayManager::add); chatMessageManager.get().loadColors();
}
// Add core overlays after configuration has been loaded so their properties will be eventBus.register(overlayRenderer.get());
// loaded properly eventBus.register(clanManager.get());
overlayManager.add(infoBoxOverlay); eventBus.register(itemManager.get());
overlayManager.add(worldMapOverlay); eventBus.register(menuManager.get());
overlayManager.add(tooltipOverlay); eventBus.register(chatMessageManager.get());
eventBus.register(commandManager.get());
// Add core overlays
WidgetOverlay.createOverlays(client).forEach(overlayManager::add);
overlayManager.add(infoBoxOverlay.get());
overlayManager.add(worldMapOverlay.get());
overlayManager.add(tooltipOverlay.get());
}
// Start plugins // Start plugins
pluginManager.startCorePlugins(); pluginManager.startCorePlugins();

View File

@@ -38,7 +38,6 @@ import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ChatLineBuffer; import net.runelite.api.ChatLineBuffer;
@@ -57,17 +56,17 @@ import net.runelite.client.config.ChatColorConfig;
public class ChatMessageManager public class ChatMessageManager
{ {
private final Multimap<ChatMessageType, ChatColor> colorCache = HashMultimap.create(); private final Multimap<ChatMessageType, ChatColor> colorCache = HashMultimap.create();
private final Provider<Client> clientProvider; private final Client client;
private final ScheduledExecutorService executor; private final ScheduledExecutorService executor;
private final ChatColorConfig chatColorConfig; private final ChatColorConfig chatColorConfig;
private int transparencyVarbit = -1; private int transparencyVarbit = -1;
private final Queue<QueuedMessage> queuedMessages = new ConcurrentLinkedQueue<>(); private final Queue<QueuedMessage> queuedMessages = new ConcurrentLinkedQueue<>();
@Inject @Inject
private ChatMessageManager(Provider<Client> clientProvider, ScheduledExecutorService executor, private ChatMessageManager(Client client, ScheduledExecutorService executor,
ChatColorConfig chatColorConfig) ChatColorConfig chatColorConfig)
{ {
this.clientProvider = clientProvider; this.client = client;
this.executor = executor; this.executor = executor;
this.chatColorConfig = chatColorConfig; this.chatColorConfig = chatColorConfig;
} }
@@ -75,7 +74,7 @@ public class ChatMessageManager
@Subscribe @Subscribe
public void onVarbitChanged(VarbitChanged event) public void onVarbitChanged(VarbitChanged event)
{ {
int setting = clientProvider.get().getVar(Varbits.TRANSPARENT_CHATBOX); int setting = client.getVar(Varbits.TRANSPARENT_CHATBOX);
if (transparencyVarbit != setting) if (transparencyVarbit != setting)
{ {
@@ -103,7 +102,6 @@ public class ChatMessageManager
@Subscribe @Subscribe
public void onSetMessage(SetMessage setMessage) public void onSetMessage(SetMessage setMessage)
{ {
final Client client = clientProvider.get();
MessageNode messageNode = setMessage.getMessageNode(); MessageNode messageNode = setMessage.getMessageNode();
ChatMessageType chatMessageType = setMessage.getType(); ChatMessageType chatMessageType = setMessage.getType();
@@ -487,7 +485,7 @@ public class ChatMessageManager
} }
} }
private ChatMessageManager cacheColor(final ChatColor chatColor, final ChatMessageType... types) private void cacheColor(final ChatColor chatColor, final ChatMessageType... types)
{ {
for (ChatMessageType chatMessageType : types) for (ChatMessageType chatMessageType : types)
{ {
@@ -495,8 +493,6 @@ public class ChatMessageManager
colorCache.remove(chatMessageType, chatColor); colorCache.remove(chatMessageType, chatColor);
colorCache.put(chatMessageType, chatColor); colorCache.put(chatMessageType, chatColor);
} }
return this;
} }
public void queue(QueuedMessage message) public void queue(QueuedMessage message)
@@ -515,8 +511,6 @@ public class ChatMessageManager
private void add(QueuedMessage message) private void add(QueuedMessage message)
{ {
final Client client = clientProvider.get();
// this updates chat cycle // this updates chat cycle
client.addChatMessage( client.addChatMessage(
message.getType(), message.getType(),
@@ -541,7 +535,6 @@ public class ChatMessageManager
return; return;
} }
final Client client = clientProvider.get();
final boolean transparent = client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) != 0; final boolean transparent = client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) != 0;
final Collection<ChatColor> chatColors = colorCache.get(target.getType()); final Collection<ChatColor> chatColors = colorCache.get(target.getType());
@@ -571,10 +564,8 @@ public class ChatMessageManager
return resultMessage.get(); return resultMessage.get();
} }
public void refreshAll() private void refreshAll()
{ {
final Client client = clientProvider.get();
executor.submit(() -> executor.submit(() ->
{ {
client.getChatLineMap().values().stream() client.getChatLineMap().values().stream()

View File

@@ -31,7 +31,6 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
@@ -51,19 +50,19 @@ public class CommandManager
private static final String CHATBOX_INPUT = "chatboxInput"; private static final String CHATBOX_INPUT = "chatboxInput";
private static final String PRIVMATE_MESSAGE = "privateMessage"; private static final String PRIVMATE_MESSAGE = "privateMessage";
private final Provider<Client> clientProvider; private final Client client;
private final EventBus eventBus; private final EventBus eventBus;
private final Provider<ClientThread> clientThreadProvider; private final ClientThread clientThread;
private boolean sending; private boolean sending;
private final List<ChatboxInputListener> chatboxInputListenerList = new ArrayList<>(); private final List<ChatboxInputListener> chatboxInputListenerList = new ArrayList<>();
@Inject @Inject
public CommandManager(Provider<Client> clientProvider, EventBus eventBus, Provider<ClientThread> clientThreadProvider) private CommandManager(Client client, EventBus eventBus, ClientThread clientThread)
{ {
this.clientProvider = clientProvider; this.client = client;
this.eventBus = eventBus; this.eventBus = eventBus;
this.clientThreadProvider = clientThreadProvider; this.clientThread = clientThread;
} }
public void register(ChatboxInputListener chatboxInputListener) public void register(ChatboxInputListener chatboxInputListener)
@@ -100,7 +99,6 @@ public class CommandManager
private void runCommand() private void runCommand()
{ {
Client client = clientProvider.get();
String typedText = client.getVar(VarClientStr.CHATBOX_TYPED_TEXT).substring(2); // strip :: String typedText = client.getVar(VarClientStr.CHATBOX_TYPED_TEXT).substring(2); // strip ::
log.debug("Command: {}", typedText); log.debug("Command: {}", typedText);
@@ -122,7 +120,6 @@ public class CommandManager
private void handleInput(ScriptCallbackEvent event) private void handleInput(ScriptCallbackEvent event)
{ {
Client client = clientProvider.get();
final String[] stringStack = client.getStringStack(); final String[] stringStack = client.getStringStack();
final int[] intStack = client.getIntStack(); final int[] intStack = client.getIntStack();
int stringStackCount = client.getStringStackSize(); int stringStackCount = client.getStringStackSize();
@@ -144,7 +141,6 @@ public class CommandManager
} }
resumed = true; resumed = true;
ClientThread clientThread = clientThreadProvider.get();
clientThread.invokeLater(() -> sendChatboxInput(chatType, typedText)); clientThread.invokeLater(() -> sendChatboxInput(chatType, typedText));
} }
}; };
@@ -163,7 +159,6 @@ public class CommandManager
private void handlePrivateMessage(ScriptCallbackEvent event) private void handlePrivateMessage(ScriptCallbackEvent event)
{ {
Client client = clientProvider.get();
final String[] stringStack = client.getStringStack(); final String[] stringStack = client.getStringStack();
final int[] intStack = client.getIntStack(); final int[] intStack = client.getIntStack();
int stringStackCount = client.getStringStackSize(); int stringStackCount = client.getStringStackSize();
@@ -185,7 +180,6 @@ public class CommandManager
} }
resumed = true; resumed = true;
ClientThread clientThread = clientThreadProvider.get();
clientThread.invokeLater(() -> sendPrivmsg(target, message)); clientThread.invokeLater(() -> sendPrivmsg(target, message));
} }
}; };
@@ -205,7 +199,6 @@ public class CommandManager
private void sendChatboxInput(int chatType, String input) private void sendChatboxInput(int chatType, String input)
{ {
Client client = clientProvider.get();
sending = true; sending = true;
try try
{ {
@@ -219,7 +212,6 @@ public class CommandManager
private void sendPrivmsg(String target, String message) private void sendPrivmsg(String target, String message)
{ {
Client client = clientProvider.get();
client.runScript(ScriptID.PRIVMSG, target, message); client.runScript(ScriptID.PRIVMSG, target, message);
} }
} }

View File

@@ -39,7 +39,6 @@ import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ClanMember; import net.runelite.api.ClanMember;
@@ -66,7 +65,7 @@ public class ClanManager
private int modIconsLength; private int modIconsLength;
private final Provider<Client> clientProvider; private final Client client;
private final BufferedImage[] clanChatImages = new BufferedImage[CLANCHAT_IMAGES.length]; private final BufferedImage[] clanChatImages = new BufferedImage[CLANCHAT_IMAGES.length];
private final LoadingCache<String, ClanMemberRank> clanRanksCache = CacheBuilder.newBuilder() private final LoadingCache<String, ClanMemberRank> clanRanksCache = CacheBuilder.newBuilder()
@@ -77,7 +76,6 @@ public class ClanManager
@Override @Override
public ClanMemberRank load(String key) throws Exception public ClanMemberRank load(String key) throws Exception
{ {
final Client client = clientProvider.get();
final ClanMember[] clanMembersArr = client.getClanMembers(); final ClanMember[] clanMembersArr = client.getClanMembers();
if (clanMembersArr == null || clanMembersArr.length == 0) if (clanMembersArr == null || clanMembersArr.length == 0)
@@ -95,9 +93,9 @@ public class ClanManager
}); });
@Inject @Inject
public ClanManager(Provider<Client> clientProvider) private ClanManager(Client client)
{ {
this.clientProvider = clientProvider; this.client = client;
int i = 0; int i = 0;
for (String resource : CLANCHAT_IMAGES) for (String resource : CLANCHAT_IMAGES)
@@ -158,7 +156,6 @@ public class ClanManager
{ {
try try
{ {
final Client client = clientProvider.get();
final IndexedSprite[] modIcons = client.getModIcons(); final IndexedSprite[] modIcons = client.getModIcons();
final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + CLANCHAT_IMAGES.length); final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + CLANCHAT_IMAGES.length);
int curPosition = newModIcons.length - CLANCHAT_IMAGES.length; int curPosition = newModIcons.length - CLANCHAT_IMAGES.length;

View File

@@ -36,7 +36,6 @@ import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
@@ -63,7 +62,7 @@ public class MenuManager
private static final int IDX_LOWER = 4; private static final int IDX_LOWER = 4;
private static final int IDX_UPPER = 8; private static final int IDX_UPPER = 8;
private final Provider<Client> clientProvider; private final Client client;
private final EventBus eventBus; private final EventBus eventBus;
//Maps the indexes that are being used to the menu option. //Maps the indexes that are being used to the menu option.
@@ -73,9 +72,9 @@ public class MenuManager
private final Set<String> npcMenuOptions = new HashSet<>(); private final Set<String> npcMenuOptions = new HashSet<>();
@Inject @Inject
public MenuManager(Provider<Client> clientProvider, EventBus eventBus) private MenuManager(Client client, EventBus eventBus)
{ {
this.clientProvider = clientProvider; this.client = client;
this.eventBus = eventBus; this.eventBus = eventBus;
} }
@@ -84,13 +83,6 @@ public class MenuManager
npcMenuOptions.add(option); npcMenuOptions.add(option);
// add to surrounding npcs // add to surrounding npcs
Client client = clientProvider.get();
if (client == null)
{
return;
}
for (NPC npc : client.getNpcs()) for (NPC npc : client.getNpcs())
{ {
NPCComposition composition = npc.getComposition(); NPCComposition composition = npc.getComposition();
@@ -103,13 +95,6 @@ public class MenuManager
npcMenuOptions.remove(option); npcMenuOptions.remove(option);
// remove this option from all npc compositions // remove this option from all npc compositions
Client client = clientProvider.get();
if (client == null)
{
return;
}
for (NPC npc : client.getNpcs()) for (NPC npc : client.getNpcs())
{ {
NPCComposition composition = npc.getComposition(); NPCComposition composition = npc.getComposition();
@@ -141,13 +126,6 @@ public class MenuManager
private boolean menuContainsCustomMenu(WidgetMenuOption customMenuOption) private boolean menuContainsCustomMenu(WidgetMenuOption customMenuOption)
{ {
Client client = clientProvider.get();
if (client == null)
{
return false;
}
for (MenuEntry menuEntry : client.getMenuEntries()) for (MenuEntry menuEntry : client.getMenuEntries())
{ {
String option = menuEntry.getOption(); String option = menuEntry.getOption();
@@ -166,12 +144,6 @@ public class MenuManager
{ {
int widgetId = event.getActionParam1(); int widgetId = event.getActionParam1();
Collection<WidgetMenuOption> options = managedMenuOptions.get(widgetId); Collection<WidgetMenuOption> options = managedMenuOptions.get(widgetId);
Client client = clientProvider.get();
if (client == null)
{
return;
}
for (WidgetMenuOption currentMenu : options) for (WidgetMenuOption currentMenu : options)
{ {
@@ -332,13 +304,6 @@ public class MenuManager
private void addPlayerMenuItem(int playerOptionIndex, String menuText) private void addPlayerMenuItem(int playerOptionIndex, String menuText)
{ {
Client client = clientProvider.get();
if (client == null)
{
return;
}
client.getPlayerOptions()[playerOptionIndex] = menuText; client.getPlayerOptions()[playerOptionIndex] = menuText;
client.getPlayerOptionsPriorities()[playerOptionIndex] = true; client.getPlayerOptionsPriorities()[playerOptionIndex] = true;
client.getPlayerMenuTypes()[playerOptionIndex] = MenuAction.RUNELITE.getId(); client.getPlayerMenuTypes()[playerOptionIndex] = MenuAction.RUNELITE.getId();
@@ -348,31 +313,16 @@ public class MenuManager
private void removePlayerMenuItem(int playerOptionIndex) private void removePlayerMenuItem(int playerOptionIndex)
{ {
Client client = clientProvider.get();
if (client == null)
{
return;
}
client.getPlayerOptions()[playerOptionIndex] = null; client.getPlayerOptions()[playerOptionIndex] = null;
playerMenuIndexMap.remove(playerOptionIndex); playerMenuIndexMap.remove(playerOptionIndex);
} }
/** /**
* Find the next empty player menu slot index * Find the next empty player menu slot index
*
* @return
*/ */
private int findEmptyPlayerMenuIndex() private int findEmptyPlayerMenuIndex()
{ {
int index = IDX_LOWER; int index = IDX_LOWER;
Client client = clientProvider.get();
if (client == null)
{
return IDX_UPPER;
}
String[] playerOptions = client.getPlayerOptions(); String[] playerOptions = client.getPlayerOptions();
while (index < IDX_UPPER && playerOptions[index] != null) while (index < IDX_UPPER && playerOptions[index] != null)

View File

@@ -54,6 +54,7 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import lombok.Setter; import lombok.Setter;
@@ -85,7 +86,7 @@ public class PluginManager
private final Scheduler scheduler; private final Scheduler scheduler;
private final ConfigManager configManager; private final ConfigManager configManager;
private final ScheduledExecutorService executor; private final ScheduledExecutorService executor;
private final SceneTileManager sceneTileManager; private final Provider<SceneTileManager> sceneTileManager;
private final List<Plugin> plugins = new CopyOnWriteArrayList<>(); private final List<Plugin> plugins = new CopyOnWriteArrayList<>();
private final List<Plugin> activePlugins = new CopyOnWriteArrayList<>(); private final List<Plugin> activePlugins = new CopyOnWriteArrayList<>();
private final String runeliteGroupName = RuneLiteConfig.class private final String runeliteGroupName = RuneLiteConfig.class
@@ -102,7 +103,7 @@ public class PluginManager
final Scheduler scheduler, final Scheduler scheduler,
final ConfigManager configManager, final ConfigManager configManager,
final ScheduledExecutorService executor, final ScheduledExecutorService executor,
final SceneTileManager sceneTileManager) final Provider<SceneTileManager> sceneTileManager)
{ {
this.developerMode = developerMode; this.developerMode = developerMode;
this.eventBus = eventBus; this.eventBus = eventBus;
@@ -323,7 +324,15 @@ public class PluginManager
}); });
log.debug("Plugin {} is now running", plugin.getClass().getSimpleName()); log.debug("Plugin {} is now running", plugin.getClass().getSimpleName());
sceneTileManager.simulateObjectSpawns(plugin); if (!isOutdated && sceneTileManager != null)
{
final SceneTileManager sceneTileManager = this.sceneTileManager.get();
if (sceneTileManager != null)
{
sceneTileManager.simulateObjectSpawns(plugin);
}
}
eventBus.register(plugin); eventBus.register(plugin);
schedule(plugin); schedule(plugin);
eventBus.post(new PluginChanged(plugin, true)); eventBus.post(new PluginChanged(plugin, true));

View File

@@ -34,6 +34,7 @@ import java.util.concurrent.ScheduledExecutorService;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.MenuAction; import net.runelite.api.MenuAction;
@@ -69,10 +70,10 @@ public class HiscorePlugin extends Plugin
private Client client; private Client client;
@Inject @Inject
private ClientToolbar clientToolbar; private Provider<MenuManager> menuManager;
@Inject @Inject
private MenuManager menuManager; private ClientToolbar clientToolbar;
@Inject @Inject
private ScheduledExecutorService executor; private ScheduledExecutorService executor;
@@ -112,9 +113,9 @@ public class HiscorePlugin extends Plugin
clientToolbar.addNavigation(navButton); clientToolbar.addNavigation(navButton);
if (config.playerOption()) if (config.playerOption() && client != null)
{ {
menuManager.addPlayerMenuItem(LOOKUP); menuManager.get().addPlayerMenuItem(LOOKUP);
} }
if (config.autocomplete()) if (config.autocomplete())
{ {
@@ -127,7 +128,11 @@ public class HiscorePlugin extends Plugin
{ {
hiscorePanel.removeInputKeyListener(autocompleter); hiscorePanel.removeInputKeyListener(autocompleter);
clientToolbar.removeNavigation(navButton); clientToolbar.removeNavigation(navButton);
menuManager.removePlayerMenuItem(LOOKUP);
if (client != null)
{
menuManager.get().removePlayerMenuItem(LOOKUP);
}
} }
@Subscribe @Subscribe
@@ -135,11 +140,14 @@ public class HiscorePlugin extends Plugin
{ {
if (event.getGroup().equals("hiscore")) if (event.getGroup().equals("hiscore"))
{ {
menuManager.removePlayerMenuItem(LOOKUP); if (client != null)
if (config.playerOption())
{ {
menuManager.addPlayerMenuItem(LOOKUP); menuManager.get().removePlayerMenuItem(LOOKUP);
if (config.playerOption())
{
menuManager.get().addPlayerMenuItem(LOOKUP);
}
} }
if (event.getKey().equals("autocomplete")) if (event.getKey().equals("autocomplete"))

View File

@@ -35,7 +35,6 @@ import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -68,7 +67,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener
private static final Color SNAP_CORNER_ACTIVE_COLOR = new Color(0, 255, 0, 100); private static final Color SNAP_CORNER_ACTIVE_COLOR = new Color(0, 255, 0, 100);
private static final Color MOVING_OVERLAY_COLOR = new Color(255, 255, 0, 100); private static final Color MOVING_OVERLAY_COLOR = new Color(255, 255, 0, 100);
private static final Color MOVING_OVERLAY_ACTIVE_COLOR = new Color(255, 255, 0, 200); private static final Color MOVING_OVERLAY_ACTIVE_COLOR = new Color(255, 255, 0, 200);
private final Provider<Client> clientProvider; private final Client client;
private final OverlayManager overlayManager; private final OverlayManager overlayManager;
private final RuneLiteConfig runeLiteConfig; private final RuneLiteConfig runeLiteConfig;
@@ -87,13 +86,13 @@ public class OverlayRenderer extends MouseListener implements KeyListener
@Inject @Inject
private OverlayRenderer( private OverlayRenderer(
final Provider<Client> clientProvider, final Client client,
final OverlayManager overlayManager, final OverlayManager overlayManager,
final RuneLiteConfig runeLiteConfig, final RuneLiteConfig runeLiteConfig,
final MouseManager mouseManager, final MouseManager mouseManager,
final KeyManager keyManager) final KeyManager keyManager)
{ {
this.clientProvider = clientProvider; this.client = client;
this.overlayManager = overlayManager; this.overlayManager = overlayManager;
this.runeLiteConfig = runeLiteConfig; this.runeLiteConfig = runeLiteConfig;
keyManager.registerKeyListener(this); keyManager.registerKeyListener(this);
@@ -111,11 +110,9 @@ public class OverlayRenderer extends MouseListener implements KeyListener
public void render(Graphics2D graphics, final OverlayLayer layer) public void render(Graphics2D graphics, final OverlayLayer layer)
{ {
final Client client = clientProvider.get();
final List<Overlay> overlays = overlayManager.getLayer(layer); final List<Overlay> overlays = overlayManager.getLayer(layer);
if (client == null if (overlays == null
|| overlays == null
|| overlays.isEmpty() || overlays.isEmpty()
|| client.getGameState() != GameState.LOGGED_IN || client.getGameState() != GameState.LOGGED_IN
|| client.getWidget(WidgetInfo.LOGIN_CLICK_TO_PLAY_SCREEN) != null || client.getWidget(WidgetInfo.LOGIN_CLICK_TO_PLAY_SCREEN) != null
@@ -274,13 +271,6 @@ public class OverlayRenderer extends MouseListener implements KeyListener
return mouseEvent; return mouseEvent;
} }
final Client client = clientProvider.get();
if (client == null)
{
return mouseEvent;
}
final Point mousePoint = mouseEvent.getPoint(); final Point mousePoint = mouseEvent.getPoint();
mousePosition.setLocation(mousePoint); mousePosition.setLocation(mousePoint);
final Rectangle canvasRect = new Rectangle(client.getRealDimensions()); final Rectangle canvasRect = new Rectangle(client.getRealDimensions());
@@ -399,7 +389,6 @@ public class OverlayRenderer extends MouseListener implements KeyListener
private boolean shouldInvalidateBounds() private boolean shouldInvalidateBounds()
{ {
final Client client = clientProvider.get();
final Widget chatbox = client.getWidget(WidgetInfo.CHATBOX_MESSAGES); final Widget chatbox = client.getWidget(WidgetInfo.CHATBOX_MESSAGES);
final boolean resizeableChanged = isResizeable != client.isResized(); final boolean resizeableChanged = isResizeable != client.isResized();
boolean changed = false; boolean changed = false;

View File

@@ -32,7 +32,6 @@ import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.RuneLiteConfig;
@@ -51,19 +50,19 @@ public class InfoBoxOverlay extends Overlay
private final PanelComponent panelComponent = new PanelComponent(); private final PanelComponent panelComponent = new PanelComponent();
private final InfoBoxManager infoboxManager; private final InfoBoxManager infoboxManager;
private final TooltipManager tooltipManager; private final TooltipManager tooltipManager;
private final Provider<Client> clientProvider; private final Client client;
private final RuneLiteConfig config; private final RuneLiteConfig config;
@Inject @Inject
private InfoBoxOverlay( private InfoBoxOverlay(
InfoBoxManager infoboxManager, InfoBoxManager infoboxManager,
TooltipManager tooltipManager, TooltipManager tooltipManager,
Provider<Client> clientProvider, Client client,
RuneLiteConfig config) RuneLiteConfig config)
{ {
this.tooltipManager = tooltipManager; this.tooltipManager = tooltipManager;
this.infoboxManager = infoboxManager; this.infoboxManager = infoboxManager;
this.clientProvider = clientProvider; this.client = client;
this.config = config; this.config = config;
setPosition(OverlayPosition.TOP_LEFT); setPosition(OverlayPosition.TOP_LEFT);
@@ -105,34 +104,30 @@ public class InfoBoxOverlay extends Overlay
} }
final Dimension dimension = panelComponent.render(graphics); final Dimension dimension = panelComponent.render(graphics);
final Client client = clientProvider.get();
// Handle tooltips // Handle tooltips
if (client != null) final Point mouse = new Point(client.getMouseCanvasPosition().getX(), client.getMouseCanvasPosition().getY());
for (final LayoutableRenderableEntity child : panelComponent.getChildren())
{ {
final Point mouse = new Point(client.getMouseCanvasPosition().getX(), client.getMouseCanvasPosition().getY()); if (child instanceof InfoBoxComponent)
for (final LayoutableRenderableEntity child : panelComponent.getChildren())
{ {
if (child instanceof InfoBoxComponent) final InfoBoxComponent component = (InfoBoxComponent) child;
if (!Strings.isNullOrEmpty(component.getTooltip()))
{ {
final InfoBoxComponent component = (InfoBoxComponent) child; final Rectangle intersectionRectangle = new Rectangle(component.getPreferredLocation(), component.getPreferredSize());
if (!Strings.isNullOrEmpty(component.getTooltip())) // Move the intersection based on overlay position
intersectionRectangle.translate(getBounds().x, getBounds().y);
// Move the intersection based on overlay "orientation"
final Point transformed = OverlayUtil.transformPosition(getPosition(), intersectionRectangle.getSize());
intersectionRectangle.translate(transformed.x, transformed.y);
if (intersectionRectangle.contains(mouse))
{ {
final Rectangle intersectionRectangle = new Rectangle(component.getPreferredLocation(), component.getPreferredSize()); tooltipManager.add(new Tooltip(component.getTooltip()));
// Move the intersection based on overlay position
intersectionRectangle.translate(getBounds().x, getBounds().y);
// Move the intersection based on overlay "orientation"
final Point transformed = OverlayUtil.transformPosition(getPosition(), intersectionRectangle.getSize());
intersectionRectangle.translate(transformed.x, transformed.y);
if (intersectionRectangle.contains(mouse))
{
tooltipManager.add(new Tooltip(component.getTooltip()));
}
} }
} }
} }

View File

@@ -30,7 +30,6 @@ import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
@@ -47,12 +46,12 @@ public class TooltipOverlay extends Overlay
private static final int OFFSET = 24; private static final int OFFSET = 24;
private static final int PADDING = 2; private static final int PADDING = 2;
private final TooltipManager tooltipManager; private final TooltipManager tooltipManager;
private final Provider<Client> clientProvider; private final Client client;
@Inject @Inject
private TooltipOverlay(Provider<Client> clientProvider, TooltipManager tooltipManager) private TooltipOverlay(Client client, TooltipManager tooltipManager)
{ {
this.clientProvider = clientProvider; this.client = client;
this.tooltipManager = tooltipManager; this.tooltipManager = tooltipManager;
setPosition(OverlayPosition.TOOLTIP); setPosition(OverlayPosition.TOOLTIP);
setPriority(OverlayPriority.HIGHEST); setPriority(OverlayPriority.HIGHEST);
@@ -69,7 +68,6 @@ public class TooltipOverlay extends Overlay
return null; return null;
} }
final Client client = clientProvider.get();
final Rectangle clientCanvasBounds = new Rectangle(client.getRealDimensions()); final Rectangle clientCanvasBounds = new Rectangle(client.getRealDimensions());
final net.runelite.api.Point mouseCanvasPosition = client.getMouseCanvasPosition(); final net.runelite.api.Point mouseCanvasPosition = client.getMouseCanvasPosition();
final Point mousePosition = new Point(mouseCanvasPosition.getX(), mouseCanvasPosition.getY() + OFFSET); final Point mousePosition = new Point(mouseCanvasPosition.getX(), mouseCanvasPosition.getY() + OFFSET);

View File

@@ -33,7 +33,6 @@ import java.awt.Rectangle;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
@@ -60,16 +59,16 @@ public class WorldMapOverlay extends Overlay
private static final int TOOLTIP_PADDING_WIDTH = 2; private static final int TOOLTIP_PADDING_WIDTH = 2;
private final WorldMapPointManager worldMapPointManager; private final WorldMapPointManager worldMapPointManager;
private final Provider<Client> clientProvider; private final Client client;
@Inject @Inject
private WorldMapOverlay( private WorldMapOverlay(
Provider<Client> clientProvider, Client client,
WorldMapPointManager worldMapPointManager, WorldMapPointManager worldMapPointManager,
MouseManager mouseManager, MouseManager mouseManager,
WorldMapOverlayMouseListener worldMapOverlayMouseListener) WorldMapOverlayMouseListener worldMapOverlayMouseListener)
{ {
this.clientProvider = clientProvider; this.client = client;
this.worldMapPointManager = worldMapPointManager; this.worldMapPointManager = worldMapPointManager;
setPosition(OverlayPosition.DYNAMIC); setPosition(OverlayPosition.DYNAMIC);
setPriority(OverlayPriority.HIGHEST); setPriority(OverlayPriority.HIGHEST);
@@ -87,8 +86,6 @@ public class WorldMapOverlay extends Overlay
return null; return null;
} }
final Client client = clientProvider.get();
Widget widget = client.getWidget(WidgetInfo.WORLD_MAP_VIEW); Widget widget = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
if (widget == null) if (widget == null)
{ {
@@ -181,7 +178,7 @@ public class WorldMapOverlay extends Overlay
*/ */
public Point mapWorldPointToGraphicsPoint(WorldPoint worldPoint) public Point mapWorldPointToGraphicsPoint(WorldPoint worldPoint)
{ {
RenderOverview ro = clientProvider.get().getRenderOverview(); RenderOverview ro = client.getRenderOverview();
if (!ro.getWorldMapData().surfaceContainsPosition(worldPoint.getX(), worldPoint.getY())) if (!ro.getWorldMapData().surfaceContainsPosition(worldPoint.getX(), worldPoint.getY()))
{ {
@@ -190,7 +187,7 @@ public class WorldMapOverlay extends Overlay
Float pixelsPerTile = ro.getWorldMapZoom(); Float pixelsPerTile = ro.getWorldMapZoom();
Widget map = clientProvider.get().getWidget(WidgetInfo.WORLD_MAP_VIEW); Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);
if (map != null) if (map != null)
{ {
Rectangle worldMapRect = map.getBounds(); Rectangle worldMapRect = map.getBounds();
@@ -232,7 +229,7 @@ public class WorldMapOverlay extends Overlay
drawPoint = new Point(drawPoint.getX() + TOOLTIP_OFFSET_WIDTH, drawPoint.getY() + TOOLTIP_OFFSET_HEIGHT); drawPoint = new Point(drawPoint.getX() + TOOLTIP_OFFSET_WIDTH, drawPoint.getY() + TOOLTIP_OFFSET_HEIGHT);
graphics.setClip(0, 0, clientProvider.get().getCanvas().getWidth(), clientProvider.get().getCanvas().getHeight()); graphics.setClip(0, 0, client.getCanvas().getWidth(), client.getCanvas().getHeight());
graphics.setColor(TOOLTIP_BACKGROUND); graphics.setColor(TOOLTIP_BACKGROUND);
graphics.setFont(FontManager.getRunescapeFont()); graphics.setFont(FontManager.getRunescapeFont());
FontMetrics fm = graphics.getFontMetrics(); FontMetrics fm = graphics.getFontMetrics();

View File

@@ -28,7 +28,6 @@ import java.awt.Rectangle;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import net.runelite.api.Client; import net.runelite.api.Client;
@@ -42,14 +41,14 @@ import net.runelite.client.input.MouseListener;
@Singleton @Singleton
public class WorldMapOverlayMouseListener extends MouseListener public class WorldMapOverlayMouseListener extends MouseListener
{ {
private final Provider<Client> clientProvider; private final Client client;
private final WorldMapPointManager worldMapPointManager; private final WorldMapPointManager worldMapPointManager;
private WorldMapPoint tooltipPoint = null; private WorldMapPoint tooltipPoint = null;
@Inject @Inject
private WorldMapOverlayMouseListener(Provider<Client> clientProvider, WorldMapPointManager worldMapPointManager) private WorldMapOverlayMouseListener(Client client, WorldMapPointManager worldMapPointManager)
{ {
this.clientProvider = clientProvider; this.client = client;
this.worldMapPointManager = worldMapPointManager; this.worldMapPointManager = worldMapPointManager;
} }
@@ -60,7 +59,7 @@ public class WorldMapOverlayMouseListener extends MouseListener
if (SwingUtilities.isLeftMouseButton(e) && !worldMapPoints.isEmpty()) if (SwingUtilities.isLeftMouseButton(e) && !worldMapPoints.isEmpty())
{ {
Point mousePos = clientProvider.get().getMouseCanvasPosition(); Point mousePos = client.getMouseCanvasPosition();
for (WorldMapPoint worldMapPoint : worldMapPoints) for (WorldMapPoint worldMapPoint : worldMapPoints)
{ {
@@ -71,7 +70,6 @@ public class WorldMapOverlayMouseListener extends MouseListener
{ {
// jump map to position of point // jump map to position of point
WorldPoint target = worldMapPoint.getWorldPoint(); WorldPoint target = worldMapPoint.getWorldPoint();
Client client = clientProvider.get();
RenderOverview renderOverview = client.getRenderOverview(); RenderOverview renderOverview = client.getRenderOverview();
renderOverview.setWorldMapPositionTarget(target); renderOverview.setWorldMapPositionTarget(target);
} }
@@ -92,7 +90,6 @@ public class WorldMapOverlayMouseListener extends MouseListener
return mouseEvent; return mouseEvent;
} }
final Client client = clientProvider.get();
final Point mousePos = client.getMouseCanvasPosition(); final Point mousePos = client.getMouseCanvasPosition();
final Widget view = client.getWidget(WidgetInfo.WORLD_MAP_VIEW); final Widget view = client.getWidget(WidgetInfo.WORLD_MAP_VIEW);

View File

@@ -30,7 +30,6 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.function.Consumer; import java.util.function.Consumer;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.Constants; import net.runelite.api.Constants;
@@ -49,12 +48,12 @@ import net.runelite.api.events.WallObjectSpawned;
public class SceneTileManager public class SceneTileManager
{ {
private final EventBus eventBus = new EventBus(); private final EventBus eventBus = new EventBus();
private final Provider<Client> clientProvider; private final Client client;
@Inject @Inject
public SceneTileManager(Provider<Client> clientProvider) private SceneTileManager(Client client)
{ {
this.clientProvider = clientProvider; this.client = client;
} }
/** /**
@@ -64,9 +63,7 @@ public class SceneTileManager
*/ */
public void forEachTile(Consumer<Tile> consumer) public void forEachTile(Consumer<Tile> consumer)
{ {
final Client client = clientProvider.get(); if (client.getGameState() != GameState.LOGGED_IN)
if (client == null || client.getGameState() != GameState.LOGGED_IN)
{ {
return; return;
} }