Merge remote-tracking branch 'upstream/master' into runelite
This commit is contained in:
@@ -49,7 +49,6 @@ public class GraphicID
|
|||||||
public static final int BOOK_HOME_TELEPORT_3 = 803;
|
public static final int BOOK_HOME_TELEPORT_3 = 803;
|
||||||
public static final int BOOK_HOME_TELEPORT_4 = 804;
|
public static final int BOOK_HOME_TELEPORT_4 = 804;
|
||||||
public static final int STAFF_OF_THE_DEAD = 1228;
|
public static final int STAFF_OF_THE_DEAD = 1228;
|
||||||
public static final int IMBUED_HEART = 1316;
|
|
||||||
public static final int FLYING_FISH = 1387;
|
public static final int FLYING_FISH = 1387;
|
||||||
public static final int OLM_BURN = 1351;
|
public static final int OLM_BURN = 1351;
|
||||||
public static final int OLM_LIGHTNING = 1356;
|
public static final int OLM_LIGHTNING = 1356;
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ import net.runelite.api.TileObject;
|
|||||||
import net.runelite.api.WallObject;
|
import net.runelite.api.WallObject;
|
||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
import net.runelite.client.task.Schedule;
|
import net.runelite.client.task.Schedule;
|
||||||
|
import net.runelite.client.task.Scheduler;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class ModelOutlineRenderer
|
public class ModelOutlineRenderer
|
||||||
@@ -101,9 +102,10 @@ public class ModelOutlineRenderer
|
|||||||
private List<List<PixelDistanceAlpha>> precomputedDistancePriorities;
|
private List<List<PixelDistanceAlpha>> precomputedDistancePriorities;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ModelOutlineRenderer(Client client)
|
private ModelOutlineRenderer(Client client, Scheduler scheduler)
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.client = client;
|
||||||
|
scheduler.registerObject(this);
|
||||||
|
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import com.google.common.annotations.VisibleForTesting;
|
|||||||
import com.google.inject.Guice;
|
import com.google.inject.Guice;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import com.openosrs.client.graphics.ModelOutlineRenderer;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.management.ManagementFactory;
|
import java.lang.management.ManagementFactory;
|
||||||
import java.lang.management.RuntimeMXBean;
|
import java.lang.management.RuntimeMXBean;
|
||||||
@@ -59,34 +58,21 @@ import lombok.Getter;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.client.account.SessionManager;
|
import net.runelite.client.account.SessionManager;
|
||||||
import net.runelite.client.callback.Hooks;
|
|
||||||
import net.runelite.client.chat.ChatMessageManager;
|
|
||||||
import net.runelite.client.chat.CommandManager;
|
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.discord.DiscordService;
|
import net.runelite.client.discord.DiscordService;
|
||||||
import net.runelite.client.eventbus.EventBus;
|
import net.runelite.client.eventbus.EventBus;
|
||||||
import net.runelite.client.externalplugins.ExternalPluginManager;
|
import net.runelite.client.externalplugins.ExternalPluginManager;
|
||||||
import net.runelite.client.game.FriendChatManager;
|
|
||||||
import net.runelite.client.game.ItemManager;
|
|
||||||
import net.runelite.client.game.LootManager;
|
|
||||||
import net.runelite.client.game.chatbox.ChatboxPanelManager;
|
|
||||||
import net.runelite.client.menus.MenuManager;
|
|
||||||
import net.runelite.client.plugins.OPRSExternalPluginManager;
|
import net.runelite.client.plugins.OPRSExternalPluginManager;
|
||||||
import net.runelite.client.rs.ClientLoader;
|
import net.runelite.client.rs.ClientLoader;
|
||||||
import net.runelite.client.rs.ClientUpdateCheckMode;
|
import net.runelite.client.rs.ClientUpdateCheckMode;
|
||||||
import net.runelite.client.task.Scheduler;
|
|
||||||
import net.runelite.client.ui.ClientUI;
|
import net.runelite.client.ui.ClientUI;
|
||||||
import net.runelite.client.ui.DrawManager;
|
|
||||||
import net.runelite.client.ui.FatalErrorDialog;
|
import net.runelite.client.ui.FatalErrorDialog;
|
||||||
import com.openosrs.client.ui.OpenOSRSSplashScreen;
|
import com.openosrs.client.ui.OpenOSRSSplashScreen;
|
||||||
import net.runelite.client.ui.SplashScreen;
|
import net.runelite.client.ui.SplashScreen;
|
||||||
import net.runelite.client.ui.overlay.OverlayManager;
|
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.WidgetOverlay;
|
||||||
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
|
||||||
import net.runelite.client.ui.overlay.tooltip.TooltipOverlay;
|
import net.runelite.client.ui.overlay.tooltip.TooltipOverlay;
|
||||||
import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay;
|
import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay;
|
||||||
import net.runelite.client.ws.PartyService;
|
|
||||||
import net.runelite.http.api.RuneLiteAPI;
|
import net.runelite.http.api.RuneLiteAPI;
|
||||||
import okhttp3.Cache;
|
import okhttp3.Cache;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
@@ -125,9 +111,6 @@ public class RuneLite
|
|||||||
@Inject
|
@Inject
|
||||||
private ConfigManager configManager;
|
private ConfigManager configManager;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private DrawManager drawManager;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private SessionManager sessionManager;
|
private SessionManager sessionManager;
|
||||||
|
|
||||||
@@ -140,58 +123,19 @@ public class RuneLite
|
|||||||
@Inject
|
@Inject
|
||||||
private ClientUI clientUI;
|
private ClientUI clientUI;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<InfoBoxManager> infoBoxManager;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private OverlayManager overlayManager;
|
private OverlayManager overlayManager;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<PartyService> partyService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<ItemManager> itemManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<OverlayRenderer> overlayRenderer;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<FriendChatManager> friendsChatManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<ChatMessageManager> chatMessageManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<MenuManager> menuManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<CommandManager> commandManager;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Provider<TooltipOverlay> tooltipOverlay;
|
private Provider<TooltipOverlay> tooltipOverlay;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Provider<WorldMapOverlay> worldMapOverlay;
|
private Provider<WorldMapOverlay> worldMapOverlay;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<ModelOutlineRenderer> modelOutlineRenderer;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<LootManager> lootManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<ChatboxPanelManager> chatboxPanelManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<Hooks> hooks;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@Nullable
|
@Nullable
|
||||||
private Client client;
|
private Client client;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Scheduler scheduler;
|
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception
|
public static void main(String[] args) throws Exception
|
||||||
{
|
{
|
||||||
Locale.setDefault(Locale.ENGLISH);
|
Locale.setDefault(Locale.ENGLISH);
|
||||||
@@ -375,27 +319,11 @@ public class RuneLite
|
|||||||
eventBus.register(pluginManager);
|
eventBus.register(pluginManager);
|
||||||
eventBus.register(externalPluginManager);
|
eventBus.register(externalPluginManager);
|
||||||
eventBus.register(overlayManager);
|
eventBus.register(overlayManager);
|
||||||
eventBus.register(drawManager);
|
|
||||||
eventBus.register(configManager);
|
eventBus.register(configManager);
|
||||||
eventBus.register(discordService);
|
eventBus.register(discordService);
|
||||||
|
|
||||||
if (!isOutdated)
|
if (!isOutdated)
|
||||||
{
|
{
|
||||||
// Initialize chat colors
|
|
||||||
chatMessageManager.get().loadColors();
|
|
||||||
|
|
||||||
eventBus.register(infoBoxManager.get());
|
|
||||||
eventBus.register(partyService.get());
|
|
||||||
eventBus.register(overlayRenderer.get());
|
|
||||||
eventBus.register(friendsChatManager.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());
|
|
||||||
eventBus.register(hooks.get());
|
|
||||||
|
|
||||||
// Add core overlays
|
// Add core overlays
|
||||||
WidgetOverlay.createOverlays(client).forEach(overlayManager::add);
|
WidgetOverlay.createOverlays(client).forEach(overlayManager::add);
|
||||||
overlayManager.add(worldMapOverlay.get());
|
overlayManager.add(worldMapOverlay.get());
|
||||||
@@ -405,12 +333,6 @@ public class RuneLite
|
|||||||
// Start plugins
|
// Start plugins
|
||||||
pluginManager.startPlugins();
|
pluginManager.startPlugins();
|
||||||
|
|
||||||
// Register additional schedulers
|
|
||||||
if (this.client != null)
|
|
||||||
{
|
|
||||||
scheduler.registerObject(modelOutlineRenderer.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
SplashScreen.stop();
|
SplashScreen.stop();
|
||||||
|
|
||||||
clientUI.show();
|
clientUI.show();
|
||||||
|
|||||||
@@ -90,44 +90,19 @@ public class Hooks implements Callbacks
|
|||||||
private static final GameTick GAME_TICK = new GameTick();
|
private static final GameTick GAME_TICK = new GameTick();
|
||||||
private static final BeforeRender BEFORE_RENDER = new BeforeRender();
|
private static final BeforeRender BEFORE_RENDER = new BeforeRender();
|
||||||
|
|
||||||
private static final Injector injector = RuneLite.getInjector();
|
private final Client client;
|
||||||
private static final Client client = injector.getInstance(Client.class);
|
private final OverlayRenderer renderer;
|
||||||
|
private final EventBus eventBus;
|
||||||
public static final OverlayRenderer renderer = injector.getInstance(OverlayRenderer.class);
|
private final DeferredEventBus deferredEventBus;
|
||||||
private static final OverlayManager overlayManager = injector.getInstance(OverlayManager.class);
|
private final Scheduler scheduler;
|
||||||
|
private final InfoBoxManager infoBoxManager;
|
||||||
@Inject
|
private final ChatMessageManager chatMessageManager;
|
||||||
private EventBus eventBus;
|
private final MouseManager mouseManager;
|
||||||
|
private final KeyManager keyManager;
|
||||||
@Inject
|
private final ClientThread clientThread;
|
||||||
private DeferredEventBus deferredEventBus;
|
private final DrawManager drawManager;
|
||||||
|
private final Notifier notifier;
|
||||||
@Inject
|
private final ClientUI clientUi;
|
||||||
private Scheduler scheduler;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private InfoBoxManager infoBoxManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private ChatMessageManager chatMessageManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private MouseManager mouseManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private KeyManager keyManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private ClientThread clientThread;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private DrawManager drawManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Notifier notifier;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private ClientUI clientUi;
|
|
||||||
|
|
||||||
private Dimension lastStretchedDimensions;
|
private Dimension lastStretchedDimensions;
|
||||||
private VolatileImage stretchedImage;
|
private VolatileImage stretchedImage;
|
||||||
@@ -162,6 +137,39 @@ public class Hooks implements Callbacks
|
|||||||
return lastGraphics;
|
return lastGraphics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Hooks(
|
||||||
|
Client client,
|
||||||
|
OverlayRenderer renderer,
|
||||||
|
EventBus eventBus,
|
||||||
|
DeferredEventBus deferredEventBus,
|
||||||
|
Scheduler scheduler,
|
||||||
|
InfoBoxManager infoBoxManager,
|
||||||
|
ChatMessageManager chatMessageManager,
|
||||||
|
MouseManager mouseManager,
|
||||||
|
KeyManager keyManager,
|
||||||
|
ClientThread clientThread,
|
||||||
|
DrawManager drawManager,
|
||||||
|
Notifier notifier,
|
||||||
|
ClientUI clientUi
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.client = client;
|
||||||
|
this.renderer = renderer;
|
||||||
|
this.eventBus = eventBus;
|
||||||
|
this.deferredEventBus = deferredEventBus;
|
||||||
|
this.scheduler = scheduler;
|
||||||
|
this.infoBoxManager = infoBoxManager;
|
||||||
|
this.chatMessageManager = chatMessageManager;
|
||||||
|
this.mouseManager = mouseManager;
|
||||||
|
this.keyManager = keyManager;
|
||||||
|
this.clientThread = clientThread;
|
||||||
|
this.drawManager = drawManager;
|
||||||
|
this.notifier = notifier;
|
||||||
|
this.clientUi = clientUi;
|
||||||
|
eventBus.register(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void post(Object event)
|
public void post(Object event)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ import net.runelite.api.events.ScriptCallbackEvent;
|
|||||||
import net.runelite.api.events.VarbitChanged;
|
import net.runelite.api.events.VarbitChanged;
|
||||||
import net.runelite.client.callback.ClientThread;
|
import net.runelite.client.callback.ClientThread;
|
||||||
import net.runelite.client.config.ChatColorConfig;
|
import net.runelite.client.config.ChatColorConfig;
|
||||||
|
import net.runelite.client.eventbus.EventBus;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.events.ConfigChanged;
|
import net.runelite.client.events.ConfigChanged;
|
||||||
import net.runelite.client.ui.JagexColors;
|
import net.runelite.client.ui.JagexColors;
|
||||||
@@ -72,11 +73,14 @@ public class ChatMessageManager
|
|||||||
private ChatMessageManager(
|
private ChatMessageManager(
|
||||||
Client client,
|
Client client,
|
||||||
ChatColorConfig chatColorConfig,
|
ChatColorConfig chatColorConfig,
|
||||||
ClientThread clientThread)
|
ClientThread clientThread,
|
||||||
|
EventBus eventBus)
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.chatColorConfig = chatColorConfig;
|
this.chatColorConfig = chatColorConfig;
|
||||||
this.clientThread = clientThread;
|
this.clientThread = clientThread;
|
||||||
|
eventBus.register(this);
|
||||||
|
loadColors();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@@ -254,7 +258,7 @@ public class ChatMessageManager
|
|||||||
/**
|
/**
|
||||||
* Load all configured colors
|
* Load all configured colors
|
||||||
*/
|
*/
|
||||||
public void loadColors()
|
private void loadColors()
|
||||||
{
|
{
|
||||||
colorCache.clear();
|
colorCache.clear();
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ public class CommandManager
|
|||||||
this.client = client;
|
this.client = client;
|
||||||
this.eventBus = eventBus;
|
this.eventBus = eventBus;
|
||||||
this.clientThread = clientThread;
|
this.clientThread = clientThread;
|
||||||
|
eventBus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(ChatboxInputListener chatboxInputListener)
|
public void register(ChatboxInputListener chatboxInputListener)
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ package net.runelite.client.config;
|
|||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import com.google.common.collect.ComparisonChain;
|
import com.google.common.collect.ComparisonChain;
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.hash.Hasher;
|
import com.google.common.hash.Hasher;
|
||||||
import com.google.common.hash.Hashing;
|
import com.google.common.hash.Hashing;
|
||||||
@@ -128,9 +127,10 @@ public class ConfigManager
|
|||||||
private final Client client;
|
private final Client client;
|
||||||
|
|
||||||
private final ConfigInvocationHandler handler = new ConfigInvocationHandler(this);
|
private final ConfigInvocationHandler handler = new ConfigInvocationHandler(this);
|
||||||
private final Properties properties = new Properties();
|
|
||||||
private final Map<String, String> pendingChanges = new HashMap<>();
|
private final Map<String, String> pendingChanges = new HashMap<>();
|
||||||
|
|
||||||
|
private Properties properties = new Properties();
|
||||||
|
|
||||||
// null => we need to make a new profile
|
// null => we need to make a new profile
|
||||||
@Nullable
|
@Nullable
|
||||||
private String rsProfileKey;
|
private String rsProfileKey;
|
||||||
@@ -225,35 +225,14 @@ public class ConfigManager
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.invalidate();
|
Properties newProperties = new Properties();
|
||||||
properties.clear();
|
|
||||||
|
|
||||||
for (ConfigEntry entry : configuration.getConfig())
|
for (ConfigEntry entry : configuration.getConfig())
|
||||||
{
|
{
|
||||||
log.debug("Loading configuration value from client {}: {}", entry.getKey(), entry.getValue());
|
newProperties.setProperty(entry.getKey(), entry.getValue());
|
||||||
|
|
||||||
String[] split = splitKey(entry.getKey());
|
|
||||||
if (split == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final String groupName = split[KEY_SPLITTER_GROUP];
|
|
||||||
final String profile = split[KEY_SPLITTER_PROFILE];
|
|
||||||
final String key = split[KEY_SPLITTER_KEY];
|
|
||||||
final String value = entry.getValue();
|
|
||||||
final String oldValue = (String) properties.setProperty(entry.getKey(), value);
|
|
||||||
|
|
||||||
ConfigChanged configChanged = new ConfigChanged();
|
|
||||||
configChanged.setGroup(groupName);
|
|
||||||
configChanged.setProfile(profile);
|
|
||||||
configChanged.setKey(key);
|
|
||||||
configChanged.setOldValue(oldValue);
|
|
||||||
configChanged.setNewValue(value);
|
|
||||||
eventBus.post(configChanged);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
migrateConfig();
|
log.debug("Loading in config from server");
|
||||||
|
swapProperties(newProperties, false);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -267,7 +246,64 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void syncPropertiesFromFile(File propertiesFile)
|
private void swapProperties(Properties newProperties, boolean saveToServer)
|
||||||
|
{
|
||||||
|
Set<Object> allKeys = new HashSet<>(newProperties.keySet());
|
||||||
|
|
||||||
|
Properties oldProperties;
|
||||||
|
synchronized (this)
|
||||||
|
{
|
||||||
|
handler.invalidate();
|
||||||
|
oldProperties = properties;
|
||||||
|
this.properties = newProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateRSProfile();
|
||||||
|
|
||||||
|
allKeys.addAll(oldProperties.keySet());
|
||||||
|
|
||||||
|
for (Object wholeKey : allKeys)
|
||||||
|
{
|
||||||
|
String[] split = splitKey((String) wholeKey);
|
||||||
|
if (split == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
String groupName = split[KEY_SPLITTER_GROUP];
|
||||||
|
String profile = split[KEY_SPLITTER_PROFILE];
|
||||||
|
String key = split[KEY_SPLITTER_KEY];
|
||||||
|
String oldValue = (String) oldProperties.get(wholeKey);
|
||||||
|
String newValue = (String) newProperties.get(wholeKey);
|
||||||
|
|
||||||
|
if (Objects.equals(oldValue, newValue))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("Loading configuration value {}: {}", wholeKey, newValue);
|
||||||
|
|
||||||
|
ConfigChanged configChanged = new ConfigChanged();
|
||||||
|
configChanged.setGroup(groupName);
|
||||||
|
configChanged.setProfile(profile);
|
||||||
|
configChanged.setKey(key);
|
||||||
|
configChanged.setOldValue(oldValue);
|
||||||
|
configChanged.setNewValue(newValue);
|
||||||
|
eventBus.post(configChanged);
|
||||||
|
|
||||||
|
if (saveToServer)
|
||||||
|
{
|
||||||
|
synchronized (pendingChanges)
|
||||||
|
{
|
||||||
|
pendingChanges.put((String) wholeKey, newValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
migrateConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void syncPropertiesFromFile(File propertiesFile)
|
||||||
{
|
{
|
||||||
final Properties properties = new Properties();
|
final Properties properties = new Properties();
|
||||||
try (FileInputStream in = new FileInputStream(propertiesFile))
|
try (FileInputStream in = new FileInputStream(propertiesFile))
|
||||||
@@ -276,44 +312,12 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
log.debug("Malformed properties, skipping update");
|
log.warn("Malformed properties, skipping update");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Map<String, String> copy = (Map) ImmutableMap.copyOf(this.properties);
|
log.debug("Loading in config from disk for upload");
|
||||||
copy.forEach((wholeKey, value) ->
|
swapProperties(properties, true);
|
||||||
{
|
|
||||||
if (!properties.containsKey(wholeKey))
|
|
||||||
{
|
|
||||||
String[] split = splitKey(wholeKey);
|
|
||||||
if (split == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String groupName = split[KEY_SPLITTER_GROUP];
|
|
||||||
String profile = split[KEY_SPLITTER_PROFILE];
|
|
||||||
String key = split[KEY_SPLITTER_KEY];
|
|
||||||
unsetConfiguration(groupName, profile, key);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
properties.forEach((wholeKey, objValue) ->
|
|
||||||
{
|
|
||||||
String[] split = splitKey((String) wholeKey);
|
|
||||||
if (split == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String groupName = split[KEY_SPLITTER_GROUP];
|
|
||||||
String profile = split[KEY_SPLITTER_PROFILE];
|
|
||||||
String key = split[KEY_SPLITTER_KEY];
|
|
||||||
String value = String.valueOf(objValue);
|
|
||||||
setConfiguration(groupName, profile, key, value);
|
|
||||||
});
|
|
||||||
|
|
||||||
migrateConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Future<Void> importLocal()
|
public Future<Void> importLocal()
|
||||||
@@ -343,12 +347,10 @@ public class ConfigManager
|
|||||||
|
|
||||||
private synchronized void loadFromFile()
|
private synchronized void loadFromFile()
|
||||||
{
|
{
|
||||||
handler.invalidate();
|
Properties newProperties = new Properties();
|
||||||
properties.clear();
|
|
||||||
|
|
||||||
try (FileInputStream in = new FileInputStream(propertiesFile))
|
try (FileInputStream in = new FileInputStream(propertiesFile))
|
||||||
{
|
{
|
||||||
properties.load(new InputStreamReader(in, StandardCharsets.UTF_8));
|
newProperties.load(new InputStreamReader(in, StandardCharsets.UTF_8));
|
||||||
}
|
}
|
||||||
catch (FileNotFoundException ex)
|
catch (FileNotFoundException ex)
|
||||||
{
|
{
|
||||||
@@ -359,38 +361,8 @@ public class ConfigManager
|
|||||||
log.warn("Unable to load settings", ex);
|
log.warn("Unable to load settings", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
log.debug("Loading in config from disk");
|
||||||
{
|
swapProperties(newProperties, false);
|
||||||
Map<String, String> copy = (Map) ImmutableMap.copyOf(properties);
|
|
||||||
copy.forEach((wholeKey, value) ->
|
|
||||||
{
|
|
||||||
String[] split = splitKey(wholeKey);
|
|
||||||
if (split == null)
|
|
||||||
{
|
|
||||||
log.debug("Properties key malformed!: {}", wholeKey);
|
|
||||||
properties.remove(wholeKey);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String groupName = split[KEY_SPLITTER_GROUP];
|
|
||||||
String profile = split[KEY_SPLITTER_PROFILE];
|
|
||||||
String key = split[KEY_SPLITTER_KEY];
|
|
||||||
|
|
||||||
ConfigChanged configChanged = new ConfigChanged();
|
|
||||||
configChanged.setGroup(groupName);
|
|
||||||
configChanged.setProfile(profile);
|
|
||||||
configChanged.setKey(key);
|
|
||||||
configChanged.setOldValue(null);
|
|
||||||
configChanged.setNewValue(value);
|
|
||||||
eventBus.post(configChanged);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.warn("Error posting config events", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
migrateConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveToFile(final File propertiesFile) throws IOException
|
private void saveToFile(final File propertiesFile) throws IOException
|
||||||
@@ -519,7 +491,11 @@ public class ConfigManager
|
|||||||
|
|
||||||
assert !key.startsWith(RSPROFILE_GROUP + ".");
|
assert !key.startsWith(RSPROFILE_GROUP + ".");
|
||||||
String wholeKey = getWholeKey(groupName, profile, key);
|
String wholeKey = getWholeKey(groupName, profile, key);
|
||||||
String oldValue = (String) properties.setProperty(wholeKey, value);
|
String oldValue;
|
||||||
|
synchronized (this)
|
||||||
|
{
|
||||||
|
oldValue = (String) properties.setProperty(wholeKey, value);
|
||||||
|
}
|
||||||
|
|
||||||
if (Objects.equals(oldValue, value))
|
if (Objects.equals(oldValue, value))
|
||||||
{
|
{
|
||||||
@@ -599,7 +575,11 @@ public class ConfigManager
|
|||||||
{
|
{
|
||||||
assert !key.startsWith(RSPROFILE_GROUP + ".");
|
assert !key.startsWith(RSPROFILE_GROUP + ".");
|
||||||
String wholeKey = getWholeKey(groupName, profile, key);
|
String wholeKey = getWholeKey(groupName, profile, key);
|
||||||
String oldValue = (String) properties.remove(wholeKey);
|
String oldValue;
|
||||||
|
synchronized (this)
|
||||||
|
{
|
||||||
|
oldValue = (String) properties.remove(wholeKey);
|
||||||
|
}
|
||||||
|
|
||||||
if (oldValue == null)
|
if (oldValue == null)
|
||||||
{
|
{
|
||||||
@@ -768,7 +748,7 @@ public class ConfigManager
|
|||||||
{
|
{
|
||||||
return Boolean.parseBoolean(str);
|
return Boolean.parseBoolean(str);
|
||||||
}
|
}
|
||||||
if (type == int.class)
|
if (type == int.class || type == Integer.class)
|
||||||
{
|
{
|
||||||
return Integer.parseInt(str);
|
return Integer.parseInt(str);
|
||||||
}
|
}
|
||||||
@@ -977,6 +957,7 @@ public class ConfigManager
|
|||||||
salt = new byte[15];
|
salt = new byte[15];
|
||||||
new SecureRandom()
|
new SecureRandom()
|
||||||
.nextBytes(salt);
|
.nextBytes(salt);
|
||||||
|
log.info("creating new salt as there is no existing one {}", Base64.getUrlEncoder().encodeToString(salt));
|
||||||
setConfiguration(RSPROFILE_GROUP, RSPROFILE_LOGIN_SALT, salt);
|
setConfiguration(RSPROFILE_GROUP, RSPROFILE_LOGIN_SALT, salt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1013,7 +994,7 @@ public class ConfigManager
|
|||||||
String keyStr = RSPROFILE_GROUP + "." + Base64.getUrlEncoder().encodeToString(key);
|
String keyStr = RSPROFILE_GROUP + "." + Base64.getUrlEncoder().encodeToString(key);
|
||||||
if (!keys.contains(keyStr))
|
if (!keys.contains(keyStr))
|
||||||
{
|
{
|
||||||
log.info("creating new profile {} for user {}", key, username);
|
log.info("creating new profile {} for user {} ({}) salt {}", keyStr, username, type, Base64.getUrlEncoder().encodeToString(salt));
|
||||||
|
|
||||||
setConfiguration(RSPROFILE_GROUP, keyStr, RSPROFILE_LOGIN_HASH, loginHash);
|
setConfiguration(RSPROFILE_GROUP, keyStr, RSPROFILE_LOGIN_HASH, loginHash);
|
||||||
setConfiguration(RSPROFILE_GROUP, keyStr, RSPROFILE_TYPE, type);
|
setConfiguration(RSPROFILE_GROUP, keyStr, RSPROFILE_TYPE, type);
|
||||||
@@ -1071,6 +1052,7 @@ public class ConfigManager
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Split a config key into (group, profile, key)
|
* Split a config key into (group, profile, key)
|
||||||
|
*
|
||||||
* @param key in form group.(rsprofile.profile.)?key
|
* @param key in form group.(rsprofile.profile.)?key
|
||||||
* @return an array of {group, profile, key}
|
* @return an array of {group, profile, key}
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ public enum AgilityShortcut
|
|||||||
BRIMHAVEN_DUNGEON_MEDIUM_PIPE(34, "Pipe Squeeze", null, new WorldPoint(2698, 9501, 0), PIPE_21727),
|
BRIMHAVEN_DUNGEON_MEDIUM_PIPE(34, "Pipe Squeeze", null, new WorldPoint(2698, 9501, 0), PIPE_21727),
|
||||||
KOUREND_CATACOMBS_NORTH_EAST_CREVICE_NORTH(34, "Crevice", new WorldPoint(1715, 10057, 0), CRACK_28892),
|
KOUREND_CATACOMBS_NORTH_EAST_CREVICE_NORTH(34, "Crevice", new WorldPoint(1715, 10057, 0), CRACK_28892),
|
||||||
KOUREND_CATACOMBS_NORTH_EAST_CREVICE_SOUTH(34, "Crevice", new WorldPoint(1705, 10077, 0), CRACK_28892),
|
KOUREND_CATACOMBS_NORTH_EAST_CREVICE_SOUTH(34, "Crevice", new WorldPoint(1705, 10077, 0), CRACK_28892),
|
||||||
CATHERBY_OBELISK_GRAPPLE(36, "Grapple Rock", new WorldPoint(2841, 3434, 0), CROSSBOW_TREE_17062),
|
CATHERBY_OBELISK_GRAPPLE(36, "Grapple Rock", null, CROSSBOW_TREE_17062),
|
||||||
GNOME_STRONGHOLD_ROCKS(37, "Rocks", new WorldPoint(2485, 3515, 0), ROCKS_16534, ROCKS_16535),
|
GNOME_STRONGHOLD_ROCKS(37, "Rocks", new WorldPoint(2485, 3515, 0), ROCKS_16534, ROCKS_16535),
|
||||||
AL_KHARID_MINING_PITCLIFF_SCRAMBLE(38, "Rocks", new WorldPoint(3305, 3315, 0), ROCKS_16549, ROCKS_16550),
|
AL_KHARID_MINING_PITCLIFF_SCRAMBLE(38, "Rocks", new WorldPoint(3305, 3315, 0), ROCKS_16549, ROCKS_16550),
|
||||||
YANILLE_WALL_GRAPPLE(39, "Grapple Wall", new WorldPoint(2552, 3072, 0), WALL_17047),
|
YANILLE_WALL_GRAPPLE(39, "Grapple Wall", new WorldPoint(2552, 3072, 0), WALL_17047),
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import net.runelite.api.IndexedSprite;
|
|||||||
import net.runelite.api.SpriteID;
|
import net.runelite.api.SpriteID;
|
||||||
import net.runelite.api.events.FriendsChatChanged;
|
import net.runelite.api.events.FriendsChatChanged;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
|
import net.runelite.client.eventbus.EventBus;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.util.ImageUtil;
|
import net.runelite.client.util.ImageUtil;
|
||||||
import net.runelite.client.util.Text;
|
import net.runelite.client.util.Text;
|
||||||
@@ -93,10 +94,11 @@ public class FriendChatManager
|
|||||||
private int offset;
|
private int offset;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private FriendChatManager(Client client, SpriteManager spriteManager)
|
private FriendChatManager(Client client, SpriteManager spriteManager, EventBus eventBus)
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.spriteManager = spriteManager;
|
this.spriteManager = spriteManager;
|
||||||
|
eventBus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMember(String name)
|
public boolean isMember(String name)
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ import net.runelite.api.SpritePixels;
|
|||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.PostItemComposition;
|
import net.runelite.api.events.PostItemComposition;
|
||||||
import net.runelite.client.callback.ClientThread;
|
import net.runelite.client.callback.ClientThread;
|
||||||
|
import net.runelite.client.eventbus.EventBus;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.util.AsyncBufferedImage;
|
import net.runelite.client.util.AsyncBufferedImage;
|
||||||
import net.runelite.http.api.item.ItemClient;
|
import net.runelite.http.api.item.ItemClient;
|
||||||
@@ -169,7 +170,7 @@ public class ItemManager
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ItemManager(Client client, ScheduledExecutorService scheduledExecutorService, ClientThread clientThread,
|
public ItemManager(Client client, ScheduledExecutorService scheduledExecutorService, ClientThread clientThread,
|
||||||
OkHttpClient okHttpClient)
|
OkHttpClient okHttpClient, EventBus eventBus)
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.clientThread = clientThread;
|
this.clientThread = clientThread;
|
||||||
@@ -213,6 +214,8 @@ public class ItemManager
|
|||||||
return loadItemOutline(key.itemId, key.itemQuantity, key.outlineColor);
|
return loadItemOutline(key.itemId, key.itemQuantity, key.outlineColor);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
eventBus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadPrices()
|
private void loadPrices()
|
||||||
|
|||||||
@@ -281,6 +281,14 @@ public enum ItemMapping
|
|||||||
ITEM_GRACEFUL_BOOTS(MARK_OF_GRACE, true, 32L, GRACEFUL_BOOTS),
|
ITEM_GRACEFUL_BOOTS(MARK_OF_GRACE, true, 32L, GRACEFUL_BOOTS),
|
||||||
ITEM_GRACEFUL_CAPE(MARK_OF_GRACE, true, 32L, GRACEFUL_CAPE),
|
ITEM_GRACEFUL_CAPE(MARK_OF_GRACE, true, 32L, GRACEFUL_CAPE),
|
||||||
|
|
||||||
|
// Trailblazer Graceful Ornament Kit
|
||||||
|
ITEM_TRAILBLAZER_GRACEFUL_HOOD(TRAILBLAZER_GRACEFUL_ORNAMENT_KIT, GRACEFUL_HOOD_25069),
|
||||||
|
ITEM_TRAILBLAZER_GRACEFUL_TOP(TRAILBLAZER_GRACEFUL_ORNAMENT_KIT, GRACEFUL_TOP_25075),
|
||||||
|
ITEM_TRAILBLAZER_GRACEFUL_LEGS(TRAILBLAZER_GRACEFUL_ORNAMENT_KIT, GRACEFUL_LEGS_25078),
|
||||||
|
ITEM_TRAILBLAZER_GRACEFUL_GLOVES(TRAILBLAZER_GRACEFUL_ORNAMENT_KIT, GRACEFUL_GLOVES_25081),
|
||||||
|
ITEM_TRAILBLAZER_GRACEFUL_BOOTS(TRAILBLAZER_GRACEFUL_ORNAMENT_KIT, GRACEFUL_BOOTS_25084),
|
||||||
|
ITEM_TRAILBLAZER_GRACEFUL_CAPE(TRAILBLAZER_GRACEFUL_ORNAMENT_KIT, GRACEFUL_CAPE_25072),
|
||||||
|
|
||||||
// 10 golden nuggets = 100 soft clay
|
// 10 golden nuggets = 100 soft clay
|
||||||
ITEM_GOLDEN_NUGGET(SOFT_CLAY, true, 10L, GOLDEN_NUGGET),
|
ITEM_GOLDEN_NUGGET(SOFT_CLAY, true, 10L, GOLDEN_NUGGET),
|
||||||
ITEM_PROSPECTOR_HELMET(GOLDEN_NUGGET, true, 32L, PROSPECTOR_HELMET),
|
ITEM_PROSPECTOR_HELMET(GOLDEN_NUGGET, true, 32L, PROSPECTOR_HELMET),
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ public class LootManager
|
|||||||
{
|
{
|
||||||
this.eventBus = eventBus;
|
this.eventBus = eventBus;
|
||||||
this.client = client;
|
this.client = client;
|
||||||
|
eventBus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|||||||
@@ -79,6 +79,8 @@ public class ChatboxPanelManager
|
|||||||
|
|
||||||
this.chatboxTextMenuInputProvider = chatboxTextMenuInputProvider;
|
this.chatboxTextMenuInputProvider = chatboxTextMenuInputProvider;
|
||||||
this.chatboxTextInputProvider = chatboxTextInputProvider;
|
this.chatboxTextInputProvider = chatboxTextInputProvider;
|
||||||
|
|
||||||
|
eventBus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close()
|
public void close()
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.menus;
|
package net.runelite.client.menus;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.google.common.collect.LinkedHashMultimap;
|
import com.google.common.collect.LinkedHashMultimap;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
@@ -65,11 +64,11 @@ public class MenuManager
|
|||||||
private final Multimap<Integer, WidgetMenuOption> managedMenuOptions = LinkedHashMultimap.create();
|
private final Multimap<Integer, WidgetMenuOption> managedMenuOptions = LinkedHashMultimap.create();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@VisibleForTesting
|
private MenuManager(Client client, EventBus eventBus)
|
||||||
MenuManager(Client client, EventBus eventBus)
|
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.eventBus = eventBus;
|
this.eventBus = eventBus;
|
||||||
|
eventBus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ import net.runelite.api.Item;
|
|||||||
import net.runelite.api.ItemContainer;
|
import net.runelite.api.ItemContainer;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
import net.runelite.api.SpriteID;
|
import net.runelite.api.SpriteID;
|
||||||
import net.runelite.client.events.ConfigChanged;
|
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
|
import net.runelite.api.events.WidgetClosed;
|
||||||
import net.runelite.api.events.WidgetLoaded;
|
import net.runelite.api.events.WidgetLoaded;
|
||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
import net.runelite.api.widgets.WidgetID;
|
import net.runelite.api.widgets.WidgetID;
|
||||||
@@ -49,6 +49,7 @@ import net.runelite.client.chat.ChatMessageManager;
|
|||||||
import net.runelite.client.chat.QueuedMessage;
|
import net.runelite.client.chat.QueuedMessage;
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
|
import net.runelite.client.events.ConfigChanged;
|
||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.game.SpriteManager;
|
import net.runelite.client.game.SpriteManager;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
@@ -159,8 +160,6 @@ public class BarrowsPlugin extends Plugin
|
|||||||
if (event.getGameState() == GameState.LOADING)
|
if (event.getGameState() == GameState.LOADING)
|
||||||
{
|
{
|
||||||
wasInCrypt = isInCrypt();
|
wasInCrypt = isInCrypt();
|
||||||
// on region changes the tiles get set to null
|
|
||||||
puzzleAnswer = null;
|
|
||||||
}
|
}
|
||||||
else if (event.getGameState() == GameState.LOGGED_IN)
|
else if (event.getGameState() == GameState.LOGGED_IN)
|
||||||
{
|
{
|
||||||
@@ -221,6 +220,15 @@ public class BarrowsPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onWidgetClosed(WidgetClosed widgetClosed)
|
||||||
|
{
|
||||||
|
if (widgetClosed.getGroupId() == WidgetID.BARROWS_PUZZLE_GROUP_ID)
|
||||||
|
{
|
||||||
|
puzzleAnswer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void startPrayerDrainTimer()
|
private void startPrayerDrainTimer()
|
||||||
{
|
{
|
||||||
if (config.showPrayerDrainTimer())
|
if (config.showPrayerDrainTimer())
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll, Nam
|
|||||||
new SkillChallengeClue("Steal from a chest in Ardougne Castle."),
|
new SkillChallengeClue("Steal from a chest in Ardougne Castle."),
|
||||||
new SkillChallengeClue("Craft a green dragonhide body.", xOfItem(ItemID.GREEN_DRAGON_LEATHER, 3), item(ItemID.NEEDLE), item(ItemID.THREAD)),
|
new SkillChallengeClue("Craft a green dragonhide body.", xOfItem(ItemID.GREEN_DRAGON_LEATHER, 3), item(ItemID.NEEDLE), item(ItemID.THREAD)),
|
||||||
new SkillChallengeClue("String a yew longbow.", item(ItemID.YEW_LONGBOW_U), item(ItemID.BOW_STRING)),
|
new SkillChallengeClue("String a yew longbow.", item(ItemID.YEW_LONGBOW_U), item(ItemID.BOW_STRING)),
|
||||||
new SkillChallengeClue("Kill a Dust Devil.", "slay a dust devil.", true, any("Facemask or Slayer Helmet", item(ItemID.FACEMASK), item(ItemID.SLAYER_HELMET), item(ItemID. SLAYER_HELMET_I), item(ItemID. BLACK_SLAYER_HELMET), item(ItemID. BLACK_SLAYER_HELMET_I), item(ItemID. PURPLE_SLAYER_HELMET), item(ItemID. PURPLE_SLAYER_HELMET_I), item(ItemID. RED_SLAYER_HELMET), item(ItemID. RED_SLAYER_HELMET_I), item(ItemID.GREEN_SLAYER_HELMET), item(ItemID. GREEN_SLAYER_HELMET_I), item(ItemID. TURQUOISE_SLAYER_HELMET), item(ItemID. TURQUOISE_SLAYER_HELMET_I), item(ItemID. HYDRA_SLAYER_HELMET), item(ItemID. HYDRA_SLAYER_HELMET_I))),
|
new SkillChallengeClue("Kill a Dust Devil.", "slay a dust devil.", true, any("Facemask or Slayer Helmet", item(ItemID.FACEMASK), item(ItemID.SLAYER_HELMET), item(ItemID. SLAYER_HELMET_I), item(ItemID. BLACK_SLAYER_HELMET), item(ItemID. BLACK_SLAYER_HELMET_I), item(ItemID. PURPLE_SLAYER_HELMET), item(ItemID. PURPLE_SLAYER_HELMET_I), item(ItemID. RED_SLAYER_HELMET), item(ItemID. RED_SLAYER_HELMET_I), item(ItemID.GREEN_SLAYER_HELMET), item(ItemID. GREEN_SLAYER_HELMET_I), item(ItemID. TURQUOISE_SLAYER_HELMET), item(ItemID. TURQUOISE_SLAYER_HELMET_I), item(ItemID. HYDRA_SLAYER_HELMET), item(ItemID. HYDRA_SLAYER_HELMET_I), item(ItemID.TWISTED_SLAYER_HELMET), item(ItemID.TWISTED_SLAYER_HELMET_I))),
|
||||||
new SkillChallengeClue("Catch a black warlock.", item(ItemID.BUTTERFLY_JAR), any("Butterfly Net", item(ItemID.BUTTERFLY_NET), item(ItemID.MAGIC_BUTTERFLY_NET))),
|
new SkillChallengeClue("Catch a black warlock.", item(ItemID.BUTTERFLY_JAR), any("Butterfly Net", item(ItemID.BUTTERFLY_NET), item(ItemID.MAGIC_BUTTERFLY_NET))),
|
||||||
new SkillChallengeClue("Catch a red chinchompa.", item(ItemID.BOX_TRAP)),
|
new SkillChallengeClue("Catch a red chinchompa.", item(ItemID.BOX_TRAP)),
|
||||||
new SkillChallengeClue("Mine a mithril ore.", ANY_PICKAXE),
|
new SkillChallengeClue("Mine a mithril ore.", ANY_PICKAXE),
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public enum HotColdLocation
|
|||||||
FREMENNIK_PROVINCE_LUNAR_VILLAGE(new WorldPoint(2084, 3916, 0), FREMENNIK_PROVINCE, "Lunar Isle, inside the village.", ANCIENT_WIZARDS),
|
FREMENNIK_PROVINCE_LUNAR_VILLAGE(new WorldPoint(2084, 3916, 0), FREMENNIK_PROVINCE, "Lunar Isle, inside the village.", ANCIENT_WIZARDS),
|
||||||
FREMENNIK_PROVINCE_LUNAR_NORTH(new WorldPoint(2106, 3949, 0), FREMENNIK_PROVINCE, "Lunar Isle, north of the village.", ANCIENT_WIZARDS),
|
FREMENNIK_PROVINCE_LUNAR_NORTH(new WorldPoint(2106, 3949, 0), FREMENNIK_PROVINCE, "Lunar Isle, north of the village.", ANCIENT_WIZARDS),
|
||||||
ICE_MOUNTAIN(new WorldPoint(3007, 3475, 0), MISTHALIN, "Atop Ice Mountain"),
|
ICE_MOUNTAIN(new WorldPoint(3007, 3475, 0), MISTHALIN, "Atop Ice Mountain"),
|
||||||
ISLE_OF_SOULS_MINE(new WorldPoint(2189, 2794, 0), KANDARIN, "Isle of Souls Mine, south of the Soul Wars lobby"),
|
ISLE_OF_SOULS_MINE(new WorldPoint(2189, 2794, 0), KANDARIN, "Isle of Souls Mine, south of the Soul Wars lobby", BRASSICAN_MAGE),
|
||||||
KANDARIN_SINCLAR_MANSION(new WorldPoint(2730, 3588, 0), KANDARIN, "North-west of the Sinclair Mansion, near the log balance shortcut.", BRASSICAN_MAGE),
|
KANDARIN_SINCLAR_MANSION(new WorldPoint(2730, 3588, 0), KANDARIN, "North-west of the Sinclair Mansion, near the log balance shortcut.", BRASSICAN_MAGE),
|
||||||
KANDARIN_CATHERBY(new WorldPoint(2774, 3436, 0), KANDARIN, "Catherby, between the bank and the beehives, near small rock formation.", BRASSICAN_MAGE),
|
KANDARIN_CATHERBY(new WorldPoint(2774, 3436, 0), KANDARIN, "Catherby, between the bank and the beehives, near small rock formation.", BRASSICAN_MAGE),
|
||||||
KANDARIN_GRAND_TREE(new WorldPoint(2448, 3503, 0), KANDARIN, "Grand Tree, just east of the terrorchick gnome enclosure.", BRASSICAN_MAGE),
|
KANDARIN_GRAND_TREE(new WorldPoint(2448, 3503, 0), KANDARIN, "Grand Tree, just east of the terrorchick gnome enclosure.", BRASSICAN_MAGE),
|
||||||
|
|||||||
@@ -174,9 +174,16 @@ public class CookingPlugin extends Plugin
|
|||||||
|
|
||||||
if (message.startsWith("You successfully cook")
|
if (message.startsWith("You successfully cook")
|
||||||
|| message.startsWith("You successfully bake")
|
|| message.startsWith("You successfully bake")
|
||||||
|
|| message.startsWith("You successfully fry")
|
||||||
|| message.startsWith("You manage to cook")
|
|| message.startsWith("You manage to cook")
|
||||||
|| message.startsWith("You roast a")
|
|| message.startsWith("You roast a")
|
||||||
|
|| message.startsWith("You spit-roast")
|
||||||
|| message.startsWith("You cook")
|
|| message.startsWith("You cook")
|
||||||
|
|| message.startsWith("Eventually the Jubbly")
|
||||||
|
|| message.startsWith("You half-cook")
|
||||||
|
|| message.startsWith("The undead meat is now cooked")
|
||||||
|
|| message.startsWith("The undead chicken is now cooked")
|
||||||
|
|| message.startsWith("You successfully scramble")
|
||||||
|| message.startsWith("You dry a piece of meat"))
|
|| message.startsWith("You dry a piece of meat"))
|
||||||
{
|
{
|
||||||
if (session == null)
|
if (session == null)
|
||||||
@@ -189,6 +196,8 @@ public class CookingPlugin extends Plugin
|
|||||||
|
|
||||||
}
|
}
|
||||||
else if (message.startsWith("You accidentally burn")
|
else if (message.startsWith("You accidentally burn")
|
||||||
|
|| message.startsWith("You burn")
|
||||||
|
|| message.startsWith("Unfortunately the Jubbly")
|
||||||
|| message.startsWith("You accidentally spoil"))
|
|| message.startsWith("You accidentally spoil"))
|
||||||
{
|
{
|
||||||
if (session == null)
|
if (session == null)
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import net.runelite.api.events.HitsplatApplied;
|
|||||||
import net.runelite.api.events.InteractingChanged;
|
import net.runelite.api.events.InteractingChanged;
|
||||||
import net.runelite.api.events.NpcDespawned;
|
import net.runelite.api.events.NpcDespawned;
|
||||||
import net.runelite.api.events.NpcSpawned;
|
import net.runelite.api.events.NpcSpawned;
|
||||||
|
import net.runelite.api.events.VarbitChanged;
|
||||||
import net.runelite.client.chat.ChatColorType;
|
import net.runelite.client.chat.ChatColorType;
|
||||||
import net.runelite.client.chat.ChatMessageBuilder;
|
import net.runelite.client.chat.ChatMessageBuilder;
|
||||||
import net.runelite.client.chat.ChatMessageManager;
|
import net.runelite.client.chat.ChatMessageManager;
|
||||||
@@ -191,12 +192,6 @@ public class CorpPlugin extends Plugin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int myDamage = client.getVar(Varbits.CORP_DAMAGE);
|
|
||||||
// sometimes hitsplats are applied after the damage counter has been reset
|
|
||||||
if (myDamage > 0)
|
|
||||||
{
|
|
||||||
yourDamage = myDamage;
|
|
||||||
}
|
|
||||||
totalDamage += hitsplatApplied.getHitsplat().getAmount();
|
totalDamage += hitsplatApplied.getHitsplat().getAmount();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,4 +208,18 @@ public class CorpPlugin extends Plugin
|
|||||||
|
|
||||||
players.add(source);
|
players.add(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onVarbitChanged(VarbitChanged varbitChanged)
|
||||||
|
{
|
||||||
|
if (corp != null)
|
||||||
|
{
|
||||||
|
int myDamage = client.getVar(Varbits.CORP_DAMAGE);
|
||||||
|
// avoid resetting our counter when the client's is reset
|
||||||
|
if (myDamage > 0)
|
||||||
|
{
|
||||||
|
yourDamage = myDamage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,10 +75,19 @@ public class CrowdsourcingCooking
|
|||||||
// Message prefixes taken from CookingPlugin
|
// Message prefixes taken from CookingPlugin
|
||||||
if (message.startsWith("You successfully cook")
|
if (message.startsWith("You successfully cook")
|
||||||
|| message.startsWith("You successfully bake")
|
|| message.startsWith("You successfully bake")
|
||||||
|
|| message.startsWith("You successfully fry")
|
||||||
|| message.startsWith("You manage to cook")
|
|| message.startsWith("You manage to cook")
|
||||||
|| message.startsWith("You roast a")
|
|| message.startsWith("You roast a")
|
||||||
|
|| message.startsWith("You spit-roast")
|
||||||
|| message.startsWith("You cook")
|
|| message.startsWith("You cook")
|
||||||
|
|| message.startsWith("You burn")
|
||||||
|
|| message.startsWith("Eventually the Jubbly")
|
||||||
|
|| message.startsWith("Unfortunately the Jubbly")
|
||||||
|| message.startsWith("You accidentally burn")
|
|| message.startsWith("You accidentally burn")
|
||||||
|
|| message.startsWith("You half-cook")
|
||||||
|
|| message.startsWith("The undead meat is now cooked")
|
||||||
|
|| message.startsWith("The undead chicken is now cooked")
|
||||||
|
|| message.startsWith("You successfully scramble")
|
||||||
|| message.startsWith("You accidentally spoil"))
|
|| message.startsWith("You accidentally spoil"))
|
||||||
{
|
{
|
||||||
boolean inHosidiusKitchen = false;
|
boolean inHosidiusKitchen = false;
|
||||||
|
|||||||
@@ -55,25 +55,85 @@ public class CrowdsourcingWoodcutting
|
|||||||
private static final String INVENTORY_FULL_MESSAGE = "Your inventory is too full to hold any more logs.";
|
private static final String INVENTORY_FULL_MESSAGE = "Your inventory is too full to hold any more logs.";
|
||||||
private static final String NEST_MESSAGE = "A bird's nest falls out of the tree";
|
private static final String NEST_MESSAGE = "A bird's nest falls out of the tree";
|
||||||
private static final Set<Integer> TREE_OBJECTS = new ImmutableSet.Builder<Integer>().
|
private static final Set<Integer> TREE_OBJECTS = new ImmutableSet.Builder<Integer>().
|
||||||
|
add(ObjectID.OAK).
|
||||||
add(ObjectID.OAK_10820).
|
add(ObjectID.OAK_10820).
|
||||||
|
add(ObjectID.OAK_8467).
|
||||||
|
add(ObjectID.OAK_9734).
|
||||||
|
|
||||||
add(ObjectID.YEW).
|
add(ObjectID.YEW).
|
||||||
|
add(ObjectID.YEW_TREE_8513).
|
||||||
|
|
||||||
add(ObjectID.TREE).
|
add(ObjectID.TREE).
|
||||||
|
add(ObjectID.TREE_1277).
|
||||||
add(ObjectID.TREE_1278).
|
add(ObjectID.TREE_1278).
|
||||||
|
add(ObjectID.TREE_1279).
|
||||||
|
add(ObjectID.TREE_1280).
|
||||||
|
add(ObjectID.DEAD_TREE).
|
||||||
|
add(ObjectID.DEAD_TREE_1283).
|
||||||
|
add(ObjectID.DEAD_TREE_1284).
|
||||||
|
add(ObjectID.DEAD_TREE_1285).
|
||||||
|
add(ObjectID.DEAD_TREE_1286).
|
||||||
|
add(ObjectID.DEAD_TREE_1289).
|
||||||
|
add(ObjectID.DEAD_TREE_1290).
|
||||||
|
add(ObjectID.DEAD_TREE_1291).
|
||||||
|
add(ObjectID.EVERGREEN).
|
||||||
|
add(ObjectID.EVERGREEN_1319).
|
||||||
|
add(ObjectID.TREE_1330).
|
||||||
|
add(ObjectID.TREE_1331).
|
||||||
|
add(ObjectID.TREE_1332).
|
||||||
|
add(ObjectID.DEAD_TREE_1365).
|
||||||
|
add(ObjectID.DEAD_TREE_1383).
|
||||||
|
add(ObjectID.DEAD_TREE_1384).
|
||||||
|
add(ObjectID.EVERGREEN_2091).
|
||||||
|
add(ObjectID.EVERGREEN_2092).
|
||||||
|
add(ObjectID.TREE_2409).
|
||||||
|
add(ObjectID.TREE_3879).
|
||||||
|
add(ObjectID.TREE_3881).
|
||||||
|
add(ObjectID.TREE_3882).
|
||||||
|
add(ObjectID.TREE_3883).
|
||||||
|
add(ObjectID.DEAD_TREE_5902).
|
||||||
|
add(ObjectID.DEAD_TREE_5903).
|
||||||
|
add(ObjectID.DEAD_TREE_5904).
|
||||||
|
add(ObjectID.TREE_9730).
|
||||||
|
add(ObjectID.TREE_9731).
|
||||||
|
add(ObjectID.TREE_9732).
|
||||||
|
add(ObjectID.TREE_9733).
|
||||||
|
add(ObjectID.TREE_10041).
|
||||||
|
add(ObjectID.TREE_14308).
|
||||||
|
add(ObjectID.TREE_14309).
|
||||||
|
add(ObjectID.TREE_16264).
|
||||||
|
add(ObjectID.TREE_16265).
|
||||||
|
add(ObjectID.EVERGREEN_27060).
|
||||||
|
add(ObjectID.BURNT_TREE).
|
||||||
|
add(ObjectID.BURNT_TREE_30854).
|
||||||
|
|
||||||
|
add(ObjectID.MATURE_JUNIPER_TREE).
|
||||||
|
|
||||||
add(ObjectID.WILLOW).
|
add(ObjectID.WILLOW).
|
||||||
add(ObjectID.WILLOW_10829).
|
add(ObjectID.WILLOW_10829).
|
||||||
add(ObjectID.WILLOW_10831).
|
add(ObjectID.WILLOW_10831).
|
||||||
add(ObjectID.WILLOW_10833).
|
add(ObjectID.WILLOW_10833).
|
||||||
|
add(ObjectID.WILLOW_TREE_8488).
|
||||||
add(ObjectID.SCRAPEY_TREE).
|
add(ObjectID.SCRAPEY_TREE).
|
||||||
add(ObjectID.JUNGLE_TREE_15951).
|
add(ObjectID.JUNGLE_TREE_15951).
|
||||||
add(ObjectID.JUNGLE_TREE_15954).
|
add(ObjectID.JUNGLE_TREE_15954).
|
||||||
add(ObjectID.JUNGLE_TREE_15948).
|
add(ObjectID.JUNGLE_TREE_15948).
|
||||||
add(ObjectID.MAPLE_TREE_10832).
|
add(ObjectID.MAPLE_TREE_10832).
|
||||||
|
add(ObjectID.MAPLE_TREE_4674).
|
||||||
|
add(ObjectID.MAPLE_TREE_8444).
|
||||||
add(ObjectID.MAHOGANY).
|
add(ObjectID.MAHOGANY).
|
||||||
add(ObjectID.TEAK).
|
add(ObjectID.TEAK).
|
||||||
|
add(ObjectID.TEAK_15062).
|
||||||
add(ObjectID.MAGIC_TREE_10834).
|
add(ObjectID.MAGIC_TREE_10834).
|
||||||
|
add(ObjectID.MAGIC_TREE_8409).
|
||||||
add(ObjectID.HOLLOW_TREE_10821).
|
add(ObjectID.HOLLOW_TREE_10821).
|
||||||
add(ObjectID.HOLLOW_TREE_10830).
|
add(ObjectID.HOLLOW_TREE_10830).
|
||||||
add(ObjectID.ACHEY_TREE).
|
add(ObjectID.ACHEY_TREE).
|
||||||
|
add(ObjectID.REDWOOD).
|
||||||
|
add(ObjectID.REDWOOD_29670).
|
||||||
|
add(ObjectID.BRUMA_ROOTS).
|
||||||
|
add(ObjectID.ARCTIC_PINE).
|
||||||
|
add(ObjectID.SULLIUSCEP).
|
||||||
build();
|
build();
|
||||||
|
|
||||||
private static final Map<Integer, Integer> AXE_ANIMS = new ImmutableMap.Builder<Integer, Integer>().
|
private static final Map<Integer, Integer> AXE_ANIMS = new ImmutableMap.Builder<Integer, Integer>().
|
||||||
@@ -103,8 +163,13 @@ public class CrowdsourcingWoodcutting
|
|||||||
add("You get some mahogany logs and give them to Carpenter Kjallak.").
|
add("You get some mahogany logs and give them to Carpenter Kjallak.").
|
||||||
add("You get some yew logs.").
|
add("You get some yew logs.").
|
||||||
add("You get some magic logs.").
|
add("You get some magic logs.").
|
||||||
|
add("You get some redwood logs.").
|
||||||
add("You get some scrapey tree logs.").
|
add("You get some scrapey tree logs.").
|
||||||
add("You get some bark.").
|
add("You get some bark.").
|
||||||
|
add("You get a bruma root.").
|
||||||
|
add("You get an arctic pine log").
|
||||||
|
add("You get some juniper logs.").
|
||||||
|
add("You get some mushrooms.").
|
||||||
build();
|
build();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|||||||
@@ -33,8 +33,10 @@ import javax.inject.Inject;
|
|||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.GameState;
|
||||||
import net.runelite.api.MenuAction;
|
import net.runelite.api.MenuAction;
|
||||||
import net.runelite.client.Notifier;
|
import net.runelite.client.Notifier;
|
||||||
|
import net.runelite.client.callback.ClientThread;
|
||||||
import net.runelite.client.ui.ColorScheme;
|
import net.runelite.client.ui.ColorScheme;
|
||||||
import net.runelite.client.ui.PluginPanel;
|
import net.runelite.client.ui.PluginPanel;
|
||||||
import net.runelite.client.ui.overlay.OverlayMenuEntry;
|
import net.runelite.client.ui.overlay.OverlayMenuEntry;
|
||||||
@@ -45,6 +47,7 @@ import net.runelite.client.util.ImageUtil;
|
|||||||
class DevToolsPanel extends PluginPanel
|
class DevToolsPanel extends PluginPanel
|
||||||
{
|
{
|
||||||
private final Client client;
|
private final Client client;
|
||||||
|
private final ClientThread clientThread;
|
||||||
private final Notifier notifier;
|
private final Notifier notifier;
|
||||||
private final DevToolsPlugin plugin;
|
private final DevToolsPlugin plugin;
|
||||||
|
|
||||||
@@ -58,6 +61,7 @@ class DevToolsPanel extends PluginPanel
|
|||||||
@Inject
|
@Inject
|
||||||
private DevToolsPanel(
|
private DevToolsPanel(
|
||||||
Client client,
|
Client client,
|
||||||
|
ClientThread clientThread,
|
||||||
DevToolsPlugin plugin,
|
DevToolsPlugin plugin,
|
||||||
WidgetInspector widgetInspector,
|
WidgetInspector widgetInspector,
|
||||||
VarInspector varInspector,
|
VarInspector varInspector,
|
||||||
@@ -69,6 +73,7 @@ class DevToolsPanel extends PluginPanel
|
|||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
this.client = client;
|
this.client = client;
|
||||||
|
this.clientThread = clientThread;
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.widgetInspector = widgetInspector;
|
this.widgetInspector = widgetInspector;
|
||||||
this.varInspector = varInspector;
|
this.varInspector = varInspector;
|
||||||
@@ -205,6 +210,10 @@ class DevToolsPanel extends PluginPanel
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final JButton disconnectBtn = new JButton("Disconnect");
|
||||||
|
disconnectBtn.addActionListener(e -> clientThread.invoke(() -> client.setGameState(GameState.CONNECTION_LOST)));
|
||||||
|
container.add(disconnectBtn);
|
||||||
|
|
||||||
return container;
|
return container;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -287,7 +287,8 @@ enum DiscordGameEventType
|
|||||||
MG_HALLOWED_SEPULCHRE("Hallowed Sepulchre", DiscordAreaType.MINIGAMES, 8797, 9051, 9052, 9053, 9054, 9309, 9563, 9565, 9821, 10074, 10075, 10077),
|
MG_HALLOWED_SEPULCHRE("Hallowed Sepulchre", DiscordAreaType.MINIGAMES, 8797, 9051, 9052, 9053, 9054, 9309, 9563, 9565, 9821, 10074, 10075, 10077),
|
||||||
MG_INFERNO("The Inferno", DiscordAreaType.MINIGAMES, 9043),
|
MG_INFERNO("The Inferno", DiscordAreaType.MINIGAMES, 9043),
|
||||||
MG_KELDAGRIM_RAT_PITS("Keldagrim Rat Pits", DiscordAreaType.MINIGAMES, 7753),
|
MG_KELDAGRIM_RAT_PITS("Keldagrim Rat Pits", DiscordAreaType.MINIGAMES, 7753),
|
||||||
MG_LAST_MAN_STANDING("Last Man Standing", DiscordAreaType.MINIGAMES, 13660, 13659, 13658, 13916, 13915, 13914),
|
MG_LAST_MAN_STANDING_DESERTED_ISLAND("LMS - Deserted Island", DiscordAreaType.MINIGAMES, 13658, 13659, 13660, 13914, 13915, 13916),
|
||||||
|
MG_LAST_MAN_STANDING_WILD_VARROCK("LMS - Wild Varrock", DiscordAreaType.MINIGAMES, 13918, 13919, 13920, 14174, 14175, 14176, 14430, 14431, 14432),
|
||||||
MG_MAGE_TRAINING_ARENA("Mage Training Arena", DiscordAreaType.MINIGAMES, 13462, 13463),
|
MG_MAGE_TRAINING_ARENA("Mage Training Arena", DiscordAreaType.MINIGAMES, 13462, 13463),
|
||||||
MG_NIGHTMARE_ZONE("Nightmare Zone", DiscordAreaType.MINIGAMES, 9033),
|
MG_NIGHTMARE_ZONE("Nightmare Zone", DiscordAreaType.MINIGAMES, 9033),
|
||||||
MG_PEST_CONTROL("Pest Control", DiscordAreaType.MINIGAMES, 10536),
|
MG_PEST_CONTROL("Pest Control", DiscordAreaType.MINIGAMES, 10536),
|
||||||
@@ -385,7 +386,7 @@ enum DiscordGameEventType
|
|||||||
REGION_MCGRUBORS_WOOD("McGrubor's Wood", DiscordAreaType.REGIONS, 10550),
|
REGION_MCGRUBORS_WOOD("McGrubor's Wood", DiscordAreaType.REGIONS, 10550),
|
||||||
REGION_MIME_STAGE("Mime's Stage", DiscordAreaType.REGIONS, 8010),
|
REGION_MIME_STAGE("Mime's Stage", DiscordAreaType.REGIONS, 8010),
|
||||||
REGION_MIND_ALTAR("Mind Altar", DiscordAreaType.REGIONS, 11083),
|
REGION_MIND_ALTAR("Mind Altar", DiscordAreaType.REGIONS, 11083),
|
||||||
REGION_MISTHALIN("Misthalin", DiscordAreaType.REGIONS, 12594, 12595),
|
REGION_MISTHALIN("Misthalin", DiscordAreaType.REGIONS, 12594, 12595, 12851),
|
||||||
REGION_MOLCH("Molch", DiscordAreaType.REGIONS, 5177),
|
REGION_MOLCH("Molch", DiscordAreaType.REGIONS, 5177),
|
||||||
REGION_MOLCH_ISLAND("Molch Island", DiscordAreaType.REGIONS, 5432),
|
REGION_MOLCH_ISLAND("Molch Island", DiscordAreaType.REGIONS, 5432),
|
||||||
REGION_MORYTANIA("Morytania", DiscordAreaType.REGIONS, 13619, 13620, 13621, 13622, 13876, 13877, 13879, 14133, 14134, 14389, 14390, 14391, 14645, 14647),
|
REGION_MORYTANIA("Morytania", DiscordAreaType.REGIONS, 13619, 13620, 13621, 13622, 13876, 13877, 13879, 14133, 14134, 14389, 14390, 14391, 14645, 14647),
|
||||||
|
|||||||
@@ -172,10 +172,9 @@ public class DiscordPlugin extends Plugin
|
|||||||
resetState();
|
resetState();
|
||||||
checkForGameStateUpdate();
|
checkForGameStateUpdate();
|
||||||
}
|
}
|
||||||
|
checkForAreaUpdate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkForAreaUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|||||||
@@ -45,8 +45,34 @@ enum ItemIdentification
|
|||||||
LANTADYME_SEED(Type.SEED, "Lanta", "L", ItemID.LANTADYME_SEED),
|
LANTADYME_SEED(Type.SEED, "Lanta", "L", ItemID.LANTADYME_SEED),
|
||||||
DWARF_WEED_SEED(Type.SEED, "Dwarf", "D", ItemID.DWARF_WEED_SEED),
|
DWARF_WEED_SEED(Type.SEED, "Dwarf", "D", ItemID.DWARF_WEED_SEED),
|
||||||
TORSTOL_SEED(Type.SEED, "Torstol", "TOR", ItemID.TORSTOL_SEED),
|
TORSTOL_SEED(Type.SEED, "Torstol", "TOR", ItemID.TORSTOL_SEED),
|
||||||
|
|
||||||
POISON_IVY_SEED(Type.SEED, "Ivy", "I", ItemID.POISON_IVY_SEED),
|
POISON_IVY_SEED(Type.SEED, "Ivy", "I", ItemID.POISON_IVY_SEED),
|
||||||
WHITEBERRY_SEED(Type.SEED, "White", "W", ItemID.WHITEBERRY_SEED),
|
WHITEBERRY_SEED(Type.SEED, "White", "W", ItemID.WHITEBERRY_SEED),
|
||||||
|
SEAWEED_SPORE(Type.SEED, "Seaweed", "SW", ItemID.SEAWEED_SPORE),
|
||||||
|
|
||||||
|
HESPORI_SEED(Type.SEED, "Hespori", "HES", ItemID.HESPORI_SEED),
|
||||||
|
KRONOS_SEED(Type.SEED, "Kronos", "KRO", ItemID.KRONOS_SEED),
|
||||||
|
IASOR_SEED(Type.SEED, "Iasor", "IA", ItemID.IASOR_SEED),
|
||||||
|
ATTAS_SEED(Type.SEED, "Attas", "AT", ItemID.ATTAS_SEED),
|
||||||
|
CELASTRUS_SEED(Type.SEED, "Celas", "CEL", ItemID.CELASTRUS_SEED),
|
||||||
|
SPIRIT_SEED(Type.SEED, "Spirit", "SPI", ItemID.SPIRIT_SEED),
|
||||||
|
CALQUAT_SEED(Type.SEED, "Calquat", "CAL", ItemID.CALQUAT_TREE_SEED),
|
||||||
|
|
||||||
|
ACORN(Type.SEED, "Oak", "OAK", ItemID.ACORN),
|
||||||
|
WILLOW_SEED(Type.SEED, "Willow", "WIL", ItemID.WILLOW_SEED),
|
||||||
|
MAPLE_SEED(Type.SEED, "Maple", "MAP", ItemID.MAPLE_SEED),
|
||||||
|
YEW_SEED(Type.SEED, "Yew", "YEW", ItemID.YEW_SEED),
|
||||||
|
MAGIC_SEED(Type.SEED, "Magic", "MAG", ItemID.MAGIC_SEED),
|
||||||
|
REDWOOD_SEED(Type.SEED, "Red", "RED", ItemID.REDWOOD_TREE_SEED),
|
||||||
|
TEAK_SEED(Type.SEED, "Teak", "TEAK", ItemID.TEAK_SEED),
|
||||||
|
MAHOGANY_SEED(Type.SEED, "Mahog", "MAH", ItemID.MAHOGANY_SEED),
|
||||||
|
CRYSTAL_ACORN(Type.SEED, "Crystal", "CRY", ItemID.CRYSTAL_ACORN),
|
||||||
|
|
||||||
|
//Sacks
|
||||||
|
SACK(Type.SACK, "Empty", "EMP", ItemID.EMPTY_SACK),
|
||||||
|
CABBAGE_SACK(Type.SACK, "Cabbage", "CAB", ItemID.CABBAGES1, ItemID.CABBAGES2, ItemID.CABBAGES3, ItemID.CABBAGES4, ItemID.CABBAGES5, ItemID.CABBAGES6, ItemID.CABBAGES7, ItemID.CABBAGES8, ItemID.CABBAGES9, ItemID.CABBAGES10),
|
||||||
|
ONION_SACK(Type.SACK, "Onion", "ONI", ItemID.ONIONS1, ItemID.ONIONS2, ItemID.ONIONS3, ItemID.ONIONS4, ItemID.ONIONS5, ItemID.ONIONS6, ItemID.ONIONS7, ItemID.ONIONS8, ItemID.ONIONS9, ItemID.ONIONS10),
|
||||||
|
POTATO_SACK(Type.SACK, "Potato", "POT", ItemID.POTATOES1, ItemID.POTATOES2, ItemID.POTATOES3, ItemID.POTATOES4, ItemID.POTATOES5, ItemID.POTATOES6, ItemID.POTATOES7, ItemID.POTATOES8, ItemID.POTATOES9, ItemID.POTATOES10),
|
||||||
|
|
||||||
//Herbs
|
//Herbs
|
||||||
GUAM(Type.HERB, "Guam", "G", ItemID.GUAM_LEAF, ItemID.GRIMY_GUAM_LEAF),
|
GUAM(Type.HERB, "Guam", "G", ItemID.GUAM_LEAF, ItemID.GRIMY_GUAM_LEAF),
|
||||||
@@ -69,6 +95,48 @@ enum ItemIdentification
|
|||||||
SITO_FOIL(Type.HERB, "Sito", "SF", ItemID.SITO_FOIL, ItemID.GRIMY_SITO_FOIL),
|
SITO_FOIL(Type.HERB, "Sito", "SF", ItemID.SITO_FOIL, ItemID.GRIMY_SITO_FOIL),
|
||||||
SNAKE_WEED(Type.HERB, "Snake", "SW", ItemID.SNAKE_WEED, ItemID.GRIMY_SNAKE_WEED),
|
SNAKE_WEED(Type.HERB, "Snake", "SW", ItemID.SNAKE_WEED, ItemID.GRIMY_SNAKE_WEED),
|
||||||
VOLENCIA_MOSS(Type.HERB, "Volenc", "V", ItemID.VOLENCIA_MOSS, ItemID.GRIMY_VOLENCIA_MOSS),
|
VOLENCIA_MOSS(Type.HERB, "Volenc", "V", ItemID.VOLENCIA_MOSS, ItemID.GRIMY_VOLENCIA_MOSS),
|
||||||
|
|
||||||
|
//Logs
|
||||||
|
RED_LOGS(Type.LOGS, "Red", "RED", ItemID.RED_LOGS),
|
||||||
|
GREEN_LOGS(Type.LOGS, "Green", "GRE", ItemID.GREEN_LOGS),
|
||||||
|
BLUE_LOGS(Type.LOGS, "Blue", "BLU", ItemID.BLUE_LOGS),
|
||||||
|
WHITE_LOGS(Type.LOGS, "White", "WHI", ItemID.WHITE_LOGS),
|
||||||
|
PURPLE_LOGS(Type.LOGS, "Purple", "PUR", ItemID.PURPLE_LOGS),
|
||||||
|
|
||||||
|
SCRAPEY_TREE_LOGS(Type.LOGS, "Scrapey", "SCRAP", ItemID.SCRAPEY_TREE_LOGS),
|
||||||
|
|
||||||
|
LOG(Type.LOGS, "Log", "LOG", ItemID.LOGS),
|
||||||
|
ACHEY_TREE_LOG(Type.LOGS, "Achey", "ACH", ItemID.ACHEY_TREE_LOGS),
|
||||||
|
OAK_LOG(Type.LOGS, "Oak", "OAK", ItemID.OAK_LOGS),
|
||||||
|
WILLOW_LOG(Type.LOGS, "Willow", "WIL", ItemID.WILLOW_LOGS),
|
||||||
|
TEAK_LOG(Type.LOGS, "Teak", "TEAK", ItemID.TEAK_LOGS),
|
||||||
|
JUNIPER_LOG(Type.LOGS, "Juniper", "JUN", ItemID.JUNIPER_LOGS),
|
||||||
|
MAPLE_LOG(Type.LOGS, "Maple", "MAP", ItemID.MAPLE_LOGS),
|
||||||
|
MAHOGANY_LOG(Type.LOGS, "Mahog", "MAH", ItemID.MAHOGANY_LOGS),
|
||||||
|
ARCTIC_PINE_LOG(Type.LOGS, "Arctic", "ARC", ItemID.ARCTIC_PINE_LOGS),
|
||||||
|
YEW_LOG(Type.LOGS, "Yew", "YEW", ItemID.YEW_LOGS),
|
||||||
|
BLISTERWOOD_LOG(Type.LOGS, "Blister", "BLI", ItemID.BLISTERWOOD_LOGS),
|
||||||
|
MAGIC_LOG(Type.LOGS, "Magic", "MAG", ItemID.MAGIC_LOGS),
|
||||||
|
REDWOOD_LOG(Type.LOGS, "Red", "RED", ItemID.REDWOOD_LOGS),
|
||||||
|
|
||||||
|
PYRE_LOGS(Type.LOGS, "Pyre", "P", ItemID.PYRE_LOGS),
|
||||||
|
ARCTIC_PYRE_LOGS(Type.LOGS, "Art P", "AP", ItemID.ARCTIC_PYRE_LOGS),
|
||||||
|
OAK_PYRE_LOGS(Type.LOGS, "Oak P", "OAKP", ItemID.OAK_PYRE_LOGS),
|
||||||
|
WILLOW_PYRE_LOGS(Type.LOGS, "Wil P", "WILP", ItemID.WILLOW_PYRE_LOGS),
|
||||||
|
TEAK_PYRE_LOGS(Type.LOGS, "Teak P", "TEAKP", ItemID.TEAK_PYRE_LOGS),
|
||||||
|
MAPLE_PYRE_LOGS(Type.LOGS, "Map P", "MAPP", ItemID.MAPLE_PYRE_LOGS),
|
||||||
|
MAHOGANY_PYRE_LOGS(Type.LOGS, "Mah P", "MAHP", ItemID.MAHOGANY_PYRE_LOGS),
|
||||||
|
YEW_PYRE_LOGS(Type.LOGS, "Yew P", "YEWP", ItemID.YEW_PYRE_LOGS),
|
||||||
|
MAGIC_PYRE_LOGS(Type.LOGS, "Mag P", "MAGP", ItemID.MAGIC_PYRE_LOGS),
|
||||||
|
REDWOOD_PYRE_LOGS(Type.LOGS, "Red P", "REDP", ItemID.REDWOOD_PYRE_LOGS),
|
||||||
|
|
||||||
|
//Planks
|
||||||
|
PLANK(Type.PLANK, "Plank", "PLANK", ItemID.PLANK),
|
||||||
|
OAK_PLANK(Type.PLANK, "Oak", "OAK", ItemID.OAK_PLANK),
|
||||||
|
TEAK_PLANK(Type.PLANK, "Teak", "TEAK", ItemID.TEAK_PLANK),
|
||||||
|
MAHOGANY_PLANK(Type.PLANK, "Mahog", "MAH", ItemID.MAHOGANY_PLANK),
|
||||||
|
WAXWOOD_PLANK(Type.PLANK, "Wax", "WAX", ItemID.WAXWOOD_PLANK),
|
||||||
|
MALLIGNUM_ROOT_PLANK(Type.PLANK, "Mallig", "MALL", ItemID.MALLIGNUM_ROOT_PLANK),
|
||||||
|
|
||||||
//Saplings
|
//Saplings
|
||||||
OAK_SAPLING(Type.SAPLING, "Oak", "OAK", ItemID.OAK_SAPLING, ItemID.OAK_SEEDLING, ItemID.OAK_SEEDLING_W),
|
OAK_SAPLING(Type.SAPLING, "Oak", "OAK", ItemID.OAK_SAPLING, ItemID.OAK_SEEDLING, ItemID.OAK_SEEDLING_W),
|
||||||
@@ -94,6 +162,11 @@ enum ItemIdentification
|
|||||||
CALQUAT_SAPLING(Type.SAPLING, "Calquat", "CALQ", ItemID.CALQUAT_SAPLING, ItemID.CALQUAT_SEEDLING, ItemID.CALQUAT_SEEDLING_W),
|
CALQUAT_SAPLING(Type.SAPLING, "Calquat", "CALQ", ItemID.CALQUAT_SAPLING, ItemID.CALQUAT_SEEDLING, ItemID.CALQUAT_SEEDLING_W),
|
||||||
CELASTRUS_SAPLING(Type.SAPLING, "Celas", "CEL", ItemID.CELASTRUS_SAPLING, ItemID.CELASTRUS_SEEDLING, ItemID.CELASTRUS_SEEDLING_W),
|
CELASTRUS_SAPLING(Type.SAPLING, "Celas", "CEL", ItemID.CELASTRUS_SAPLING, ItemID.CELASTRUS_SEEDLING, ItemID.CELASTRUS_SEEDLING_W),
|
||||||
|
|
||||||
|
//Compost
|
||||||
|
COMPOST(Type.COMPOST, "Compost", "COM", ItemID.COMPOST),
|
||||||
|
SUPERCOMPOST(Type.COMPOST, "Sup Com", "SCOM", ItemID.SUPERCOMPOST),
|
||||||
|
ULTRACOMPOST(Type.COMPOST, "Ult Com", "UCOM", ItemID.ULTRACOMPOST),
|
||||||
|
|
||||||
//Ores
|
//Ores
|
||||||
COPPER_ORE(Type.ORE, "Copper", "COP", ItemID.COPPER_ORE),
|
COPPER_ORE(Type.ORE, "Copper", "COP", ItemID.COPPER_ORE),
|
||||||
TIN_ORE(Type.ORE, "Tin", "TIN", ItemID.TIN_ORE),
|
TIN_ORE(Type.ORE, "Tin", "TIN", ItemID.TIN_ORE),
|
||||||
@@ -116,6 +189,16 @@ enum ItemIdentification
|
|||||||
DAEYALT_ORE(Type.ORE, "Daeyalt", "DAE", ItemID.DAEYALT_ORE),
|
DAEYALT_ORE(Type.ORE, "Daeyalt", "DAE", ItemID.DAEYALT_ORE),
|
||||||
LUNAR_ORE(Type.ORE, "Lunar", "LUN", ItemID.LUNAR_ORE),
|
LUNAR_ORE(Type.ORE, "Lunar", "LUN", ItemID.LUNAR_ORE),
|
||||||
|
|
||||||
|
//Bars
|
||||||
|
BRONZE_BAR(Type.BAR, "Bronze", "BRO", ItemID.BRONZE_BAR),
|
||||||
|
IRON_BAR(Type.BAR, "Iron", "IRO", ItemID.IRON_BAR),
|
||||||
|
SILVER_BAR(Type.BAR, "Silver", "SIL", ItemID.SILVER_BAR),
|
||||||
|
STEEL_BAR(Type.BAR, "Steel", "STE", ItemID.STEEL_BAR),
|
||||||
|
GOLD_BAR(Type.BAR, "Gold", "GOL", ItemID.GOLD_BAR),
|
||||||
|
MITHRIL_BAR(Type.BAR, "Mithril", "MIT", ItemID.MITHRIL_BAR),
|
||||||
|
ADAMANTITE_BAR(Type.BAR, "Adaman", "ADA", ItemID.ADAMANTITE_BAR),
|
||||||
|
RUNITE_BAR(Type.BAR, "Runite", "RUN", ItemID.RUNITE_BAR),
|
||||||
|
|
||||||
//Gems
|
//Gems
|
||||||
SAPPHIRE(Type.GEM, "Sapphir", "S", ItemID.UNCUT_SAPPHIRE, ItemID.SAPPHIRE),
|
SAPPHIRE(Type.GEM, "Sapphir", "S", ItemID.UNCUT_SAPPHIRE, ItemID.SAPPHIRE),
|
||||||
EMERALD(Type.GEM, "Emerald", "E", ItemID.UNCUT_EMERALD, ItemID.EMERALD),
|
EMERALD(Type.GEM, "Emerald", "E", ItemID.UNCUT_EMERALD, ItemID.EMERALD),
|
||||||
@@ -183,7 +266,7 @@ enum ItemIdentification
|
|||||||
|
|
||||||
SERUM_207(Type.POTION, "Ser207", "S7", ItemID.SERUM_207_4, ItemID.SERUM_207_3, ItemID.SERUM_207_2, ItemID.SERUM_207_1),
|
SERUM_207(Type.POTION, "Ser207", "S7", ItemID.SERUM_207_4, ItemID.SERUM_207_3, ItemID.SERUM_207_2, ItemID.SERUM_207_1),
|
||||||
SERUM_208(Type.POTION, "Ser208", "S8", ItemID.SERUM_208_4, ItemID.SERUM_208_3, ItemID.SERUM_208_2, ItemID.SERUM_208_1),
|
SERUM_208(Type.POTION, "Ser208", "S8", ItemID.SERUM_208_4, ItemID.SERUM_208_3, ItemID.SERUM_208_2, ItemID.SERUM_208_1),
|
||||||
COMPOST(Type.POTION, "Compost", "Cp", ItemID.COMPOST_POTION4, ItemID.COMPOST_POTION3, ItemID.COMPOST_POTION2, ItemID.COMPOST_POTION1),
|
COMPOST_POTION(Type.POTION, "Compost", "COM", ItemID.COMPOST_POTION4, ItemID.COMPOST_POTION3, ItemID.COMPOST_POTION2, ItemID.COMPOST_POTION1),
|
||||||
|
|
||||||
AGILITY(Type.POTION, "Agility", "Ag", ItemID.AGILITY_POTION4, ItemID.AGILITY_POTION3, ItemID.AGILITY_POTION2, ItemID.AGILITY_POTION1),
|
AGILITY(Type.POTION, "Agility", "Ag", ItemID.AGILITY_POTION4, ItemID.AGILITY_POTION3, ItemID.AGILITY_POTION2, ItemID.AGILITY_POTION1),
|
||||||
FISHING(Type.POTION, "Fishing", "Fi", ItemID.FISHING_POTION4, ItemID.FISHING_POTION3, ItemID.FISHING_POTION2, ItemID.FISHING_POTION1),
|
FISHING(Type.POTION, "Fishing", "Fi", ItemID.FISHING_POTION4, ItemID.FISHING_POTION3, ItemID.FISHING_POTION2, ItemID.FISHING_POTION1),
|
||||||
@@ -227,15 +310,18 @@ enum ItemIdentification
|
|||||||
ARDOUGNE_TELEPORT(Type.TABLET, "Ardoug", "ARD", ItemID.ARDOUGNE_TELEPORT),
|
ARDOUGNE_TELEPORT(Type.TABLET, "Ardoug", "ARD", ItemID.ARDOUGNE_TELEPORT),
|
||||||
WATCHTOWER_TELEPORT(Type.TABLET, "W.tow", "WT", ItemID.WATCHTOWER_TELEPORT),
|
WATCHTOWER_TELEPORT(Type.TABLET, "W.tow", "WT", ItemID.WATCHTOWER_TELEPORT),
|
||||||
TELEPORT_TO_HOUSE(Type.TABLET, "House", "POH", ItemID.TELEPORT_TO_HOUSE),
|
TELEPORT_TO_HOUSE(Type.TABLET, "House", "POH", ItemID.TELEPORT_TO_HOUSE),
|
||||||
|
|
||||||
ENCHANT_SAPPHIRE_OR_OPAL(Type.TABLET, "E.Saph", "E SO", ItemID.ENCHANT_SAPPHIRE_OR_OPAL),
|
ENCHANT_SAPPHIRE_OR_OPAL(Type.TABLET, "E.Saph", "E SO", ItemID.ENCHANT_SAPPHIRE_OR_OPAL),
|
||||||
ENCHANT_EMERALD_OR_JADE(Type.TABLET, "E.Emer", "E EJ", ItemID.ENCHANT_EMERALD_OR_JADE),
|
ENCHANT_EMERALD_OR_JADE(Type.TABLET, "E.Emer", "E EJ", ItemID.ENCHANT_EMERALD_OR_JADE),
|
||||||
ENCHANT_RUBY_OR_TOPAZ(Type.TABLET, "E.Ruby", "E RT", ItemID.ENCHANT_RUBY_OR_TOPAZ),
|
ENCHANT_RUBY_OR_TOPAZ(Type.TABLET, "E.Ruby", "E RT", ItemID.ENCHANT_RUBY_OR_TOPAZ),
|
||||||
ENCHANT_DIAMOND(Type.TABLET, "E.Diam", "E DIA", ItemID.ENCHANT_DIAMOND),
|
ENCHANT_DIAMOND(Type.TABLET, "E.Diam", "E DIA", ItemID.ENCHANT_DIAMOND),
|
||||||
ENCHANT_DRAGONSTONE(Type.TABLET, "E.Dstn", "E DS", ItemID.ENCHANT_DRAGONSTONE),
|
ENCHANT_DRAGONSTONE(Type.TABLET, "E.Dstn", "E DS", ItemID.ENCHANT_DRAGONSTONE),
|
||||||
ENCHANT_ONYX(Type.TABLET, "E.Onyx", "E ONX", ItemID.ENCHANT_ONYX),
|
ENCHANT_ONYX(Type.TABLET, "E.Onyx", "E ONX", ItemID.ENCHANT_ONYX),
|
||||||
|
|
||||||
TELEKINETIC_GRAB(Type.TABLET, "T.grab", "T.GRB", ItemID.TELEKINETIC_GRAB),
|
TELEKINETIC_GRAB(Type.TABLET, "T.grab", "T.GRB", ItemID.TELEKINETIC_GRAB),
|
||||||
BONES_TO_PEACHES(Type.TABLET, "Peach", "BtP", ItemID.BONES_TO_PEACHES_8015),
|
BONES_TO_PEACHES(Type.TABLET, "Peach", "BtP", ItemID.BONES_TO_PEACHES_8015),
|
||||||
BONES_TO_BANANAS(Type.TABLET, "Banana", "BtB", ItemID.BONES_TO_BANANAS),
|
BONES_TO_BANANAS(Type.TABLET, "Banana", "BtB", ItemID.BONES_TO_BANANAS),
|
||||||
|
|
||||||
RIMMINGTON_TELEPORT(Type.TABLET, "Rimmi", "RIM", ItemID.RIMMINGTON_TELEPORT),
|
RIMMINGTON_TELEPORT(Type.TABLET, "Rimmi", "RIM", ItemID.RIMMINGTON_TELEPORT),
|
||||||
TAVERLEY_TELEPORT(Type.TABLET, "Taver", "TAV", ItemID.TAVERLEY_TELEPORT),
|
TAVERLEY_TELEPORT(Type.TABLET, "Taver", "TAV", ItemID.TAVERLEY_TELEPORT),
|
||||||
POLLNIVNEACH_TELEPORT(Type.TABLET, "Pollnv", "POL", ItemID.POLLNIVNEACH_TELEPORT),
|
POLLNIVNEACH_TELEPORT(Type.TABLET, "Pollnv", "POL", ItemID.POLLNIVNEACH_TELEPORT),
|
||||||
@@ -245,6 +331,7 @@ enum ItemIdentification
|
|||||||
TROLLHEIM_TELEPORT(Type.TABLET, "Trollh", "T.HM", ItemID.TROLLHEIM_TELEPORT),
|
TROLLHEIM_TELEPORT(Type.TABLET, "Trollh", "T.HM", ItemID.TROLLHEIM_TELEPORT),
|
||||||
PRIFDDINAS_TELEPORT(Type.TABLET, "Prifd", "PRIF", ItemID.PRIFDDINAS_TELEPORT),
|
PRIFDDINAS_TELEPORT(Type.TABLET, "Prifd", "PRIF", ItemID.PRIFDDINAS_TELEPORT),
|
||||||
HOSIDIUS_TELEPORT(Type.TABLET, "Hosid", "HOS", ItemID.HOSIDIUS_TELEPORT),
|
HOSIDIUS_TELEPORT(Type.TABLET, "Hosid", "HOS", ItemID.HOSIDIUS_TELEPORT),
|
||||||
|
|
||||||
ANNAKARL_TELEPORT(Type.TABLET, "Annak", "GDZ", ItemID.ANNAKARL_TELEPORT),
|
ANNAKARL_TELEPORT(Type.TABLET, "Annak", "GDZ", ItemID.ANNAKARL_TELEPORT),
|
||||||
CARRALLANGAR_TELEPORT(Type.TABLET, "Carra", "CAR", ItemID.CARRALLANGAR_TELEPORT),
|
CARRALLANGAR_TELEPORT(Type.TABLET, "Carra", "CAR", ItemID.CARRALLANGAR_TELEPORT),
|
||||||
DAREEYAK_TELEPORT(Type.TABLET, "Dareey", "DAR", ItemID.DAREEYAK_TELEPORT),
|
DAREEYAK_TELEPORT(Type.TABLET, "Dareey", "DAR", ItemID.DAREEYAK_TELEPORT),
|
||||||
@@ -252,6 +339,7 @@ enum ItemIdentification
|
|||||||
LASSAR_TELEPORT(Type.TABLET, "Lass", "LSR", ItemID.LASSAR_TELEPORT),
|
LASSAR_TELEPORT(Type.TABLET, "Lass", "LSR", ItemID.LASSAR_TELEPORT),
|
||||||
PADDEWWA_TELEPORT(Type.TABLET, "Paddew", "PDW", ItemID.PADDEWWA_TELEPORT),
|
PADDEWWA_TELEPORT(Type.TABLET, "Paddew", "PDW", ItemID.PADDEWWA_TELEPORT),
|
||||||
SENNTISTEN_TELEPORT(Type.TABLET, "Sennt", "SNT", ItemID.SENNTISTEN_TELEPORT),
|
SENNTISTEN_TELEPORT(Type.TABLET, "Sennt", "SNT", ItemID.SENNTISTEN_TELEPORT),
|
||||||
|
|
||||||
LUMBRIDGE_GRAVEYARD_TELEPORT(Type.TABLET, "L.Grave", "L.GRV", ItemID.LUMBRIDGE_GRAVEYARD_TELEPORT),
|
LUMBRIDGE_GRAVEYARD_TELEPORT(Type.TABLET, "L.Grave", "L.GRV", ItemID.LUMBRIDGE_GRAVEYARD_TELEPORT),
|
||||||
DRAYNOR_MANOR_TELEPORT(Type.TABLET, "D.Manor", "D.MNR", ItemID.DRAYNOR_MANOR_TELEPORT),
|
DRAYNOR_MANOR_TELEPORT(Type.TABLET, "D.Manor", "D.MNR", ItemID.DRAYNOR_MANOR_TELEPORT),
|
||||||
MIND_ALTAR_TELEPORT(Type.TABLET, "M.Altar", "M.ALT", ItemID.MIND_ALTAR_TELEPORT),
|
MIND_ALTAR_TELEPORT(Type.TABLET, "M.Altar", "M.ALT", ItemID.MIND_ALTAR_TELEPORT),
|
||||||
@@ -263,6 +351,16 @@ enum ItemIdentification
|
|||||||
BARROWS_TELEPORT(Type.TABLET, "Barrow", "BAR", ItemID.BARROWS_TELEPORT),
|
BARROWS_TELEPORT(Type.TABLET, "Barrow", "BAR", ItemID.BARROWS_TELEPORT),
|
||||||
APE_ATOLL_TELEPORT(Type.TABLET, "Atoll", "APE", ItemID.APE_ATOLL_TELEPORT),
|
APE_ATOLL_TELEPORT(Type.TABLET, "Atoll", "APE", ItemID.APE_ATOLL_TELEPORT),
|
||||||
BATTLEFRONT_TELEPORT(Type.TABLET, "B.Front", "BF", ItemID.BATTLEFRONT_TELEPORT),
|
BATTLEFRONT_TELEPORT(Type.TABLET, "B.Front", "BF", ItemID.BATTLEFRONT_TELEPORT),
|
||||||
|
|
||||||
|
MOONCLAN_TELEPORT(Type.TABLET, "Moon", "MOON", ItemID.MOONCLAN_TELEPORT),
|
||||||
|
OURANIA_TELEPORT(Type.TABLET, "Ourania", "ZMI", ItemID.OURANIA_TELEPORT),
|
||||||
|
WATERBIRTH_TELEPORT(Type.TABLET, "W.Birth", "WAT", ItemID.WATERBIRTH_TELEPORT),
|
||||||
|
BARBARIAN_TELEPORT(Type.TABLET, "Barb", "BARB", ItemID.BARBARIAN_TELEPORT),
|
||||||
|
KHAZARD_TELEPORT(Type.TABLET, "Khaz", "KHA", ItemID.KHAZARD_TELEPORT),
|
||||||
|
FISHING_GUILD_TELEPORT(Type.TABLET, "Fish G.", "FIS", ItemID.FISHING_GUILD_TELEPORT),
|
||||||
|
CATHERBY_TELEPORT(Type.TABLET, "Cathy", "CATH", ItemID.CATHERBY_TELEPORT),
|
||||||
|
ICE_PLATEAU(Type.TABLET, "Ice Pl.", "ICE", ItemID.ICE_PLATEAU_TELEPORT),
|
||||||
|
|
||||||
TARGET_TELEPORT(Type.TABLET, "Target", "TRG", ItemID.TARGET_TELEPORT),
|
TARGET_TELEPORT(Type.TABLET, "Target", "TRG", ItemID.TARGET_TELEPORT),
|
||||||
VOLCANIC_MINE_TELEPORT(Type.TABLET, "V.Mine", "VM", ItemID.VOLCANIC_MINE_TELEPORT),
|
VOLCANIC_MINE_TELEPORT(Type.TABLET, "V.Mine", "VM", ItemID.VOLCANIC_MINE_TELEPORT),
|
||||||
WILDERNESS_CRABS_TELEPORT(Type.TABLET, "W.Crab", "CRAB", ItemID.WILDERNESS_CRABS_TELEPORT);
|
WILDERNESS_CRABS_TELEPORT(Type.TABLET, "W.Crab", "CRAB", ItemID.WILDERNESS_CRABS_TELEPORT);
|
||||||
@@ -305,9 +403,14 @@ enum ItemIdentification
|
|||||||
enum Type
|
enum Type
|
||||||
{
|
{
|
||||||
SEED,
|
SEED,
|
||||||
|
SACK,
|
||||||
HERB,
|
HERB,
|
||||||
|
LOGS,
|
||||||
|
PLANK,
|
||||||
SAPLING,
|
SAPLING,
|
||||||
|
COMPOST,
|
||||||
ORE,
|
ORE,
|
||||||
|
BAR,
|
||||||
GEM,
|
GEM,
|
||||||
POTION,
|
POTION,
|
||||||
IMPLING_JAR,
|
IMPLING_JAR,
|
||||||
|
|||||||
@@ -73,6 +73,16 @@ public interface ItemIdentificationConfig extends Config
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "showSacks",
|
||||||
|
name = "Sacks",
|
||||||
|
description = "Show identification on Sacks"
|
||||||
|
)
|
||||||
|
default boolean showSacks()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "showHerbs",
|
keyName = "showHerbs",
|
||||||
name = "Herbs",
|
name = "Herbs",
|
||||||
@@ -84,6 +94,28 @@ public interface ItemIdentificationConfig extends Config
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "showLogs",
|
||||||
|
name = "Logs",
|
||||||
|
description = "Show identification on Logs",
|
||||||
|
section = identificationSection
|
||||||
|
)
|
||||||
|
default boolean showLogs()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "showPlanks",
|
||||||
|
name = "Planks",
|
||||||
|
description = "Show identification on Planks",
|
||||||
|
section = identificationSection
|
||||||
|
)
|
||||||
|
default boolean showPlanks()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "showSaplings",
|
keyName = "showSaplings",
|
||||||
name = "Saplings",
|
name = "Saplings",
|
||||||
@@ -95,6 +127,17 @@ public interface ItemIdentificationConfig extends Config
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "showComposts",
|
||||||
|
name = "Composts",
|
||||||
|
description = "Show identification on Composts",
|
||||||
|
section = identificationSection
|
||||||
|
)
|
||||||
|
default boolean showComposts()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "showOres",
|
keyName = "showOres",
|
||||||
name = "Ores",
|
name = "Ores",
|
||||||
@@ -106,6 +149,17 @@ public interface ItemIdentificationConfig extends Config
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "showBars",
|
||||||
|
name = "Bars",
|
||||||
|
description = "Show identification on Bars",
|
||||||
|
section = identificationSection
|
||||||
|
)
|
||||||
|
default boolean showBars()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "showGems",
|
keyName = "showGems",
|
||||||
name = "Gems",
|
name = "Gems",
|
||||||
|
|||||||
@@ -71,24 +71,54 @@ class ItemIdentificationOverlay extends WidgetItemOverlay
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SACK:
|
||||||
|
if (!config.showSacks())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case HERB:
|
case HERB:
|
||||||
if (!config.showHerbs())
|
if (!config.showHerbs())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case LOGS:
|
||||||
|
if (!config.showLogs())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PLANK:
|
||||||
|
if (!config.showPlanks())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SAPLING:
|
case SAPLING:
|
||||||
if (!config.showSaplings())
|
if (!config.showSaplings())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case COMPOST:
|
||||||
|
if (!config.showComposts())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ORE:
|
case ORE:
|
||||||
if (!config.showOres())
|
if (!config.showOres())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case BAR:
|
||||||
|
if (!config.showBars())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case GEM:
|
case GEM:
|
||||||
if (!config.showGems())
|
if (!config.showGems())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -162,12 +162,9 @@ public class KeyRemappingPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
case SCRIPT_EVENT_SET_CHATBOX_INPUT:
|
case SCRIPT_EVENT_SET_CHATBOX_INPUT:
|
||||||
Widget chatboxInput = client.getWidget(WidgetInfo.CHATBOX_INPUT);
|
Widget chatboxInput = client.getWidget(WidgetInfo.CHATBOX_INPUT);
|
||||||
if (chatboxInput != null)
|
if (chatboxInput != null && !typing)
|
||||||
{
|
{
|
||||||
if (chatboxFocused() && !typing)
|
setChatboxWidgetInput(chatboxInput, PRESS_ENTER_TO_CHAT);
|
||||||
{
|
|
||||||
setChatboxWidgetInput(chatboxInput, PRESS_ENTER_TO_CHAT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SCRIPT_EVENT_BLOCK_CHAT_INPUT:
|
case SCRIPT_EVENT_BLOCK_CHAT_INPUT:
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ public class LootTrackerPlugin extends Plugin
|
|||||||
private static final Set<Integer> HALLOWED_SEPULCHRE_MAP_REGIONS = ImmutableSet.of(8797, 10077, 9308, 10074, 9050); // one map region per floor
|
private static final Set<Integer> HALLOWED_SEPULCHRE_MAP_REGIONS = ImmutableSet.of(8797, 10077, 9308, 10074, 9050); // one map region per floor
|
||||||
|
|
||||||
// Last man standing map regions
|
// Last man standing map regions
|
||||||
private static final Set<Integer> LAST_MAN_STANDING_REGIONS = ImmutableSet.of(13658, 13659, 13914, 13915, 13916);
|
private static final Set<Integer> LAST_MAN_STANDING_REGIONS = ImmutableSet.of(13658, 13659, 13660, 13914, 13915, 13916, 13918, 13919, 13920, 14174, 14175, 14176, 14430, 14431, 14432);
|
||||||
|
|
||||||
private static final Pattern PICKPOCKET_REGEX = Pattern.compile("You pick (the )?(?<target>.+)'s? pocket.*");
|
private static final Pattern PICKPOCKET_REGEX = Pattern.compile("You pick (the )?(?<target>.+)'s? pocket.*");
|
||||||
|
|
||||||
|
|||||||
@@ -287,6 +287,17 @@ public interface MenuEntrySwapperConfig extends Config
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "swapBait",
|
||||||
|
name = "Bait",
|
||||||
|
description = "Swap Lure, Small Net with Bait on Fishing spot",
|
||||||
|
section = objectSection
|
||||||
|
)
|
||||||
|
default boolean swapBait()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "swapHelp",
|
keyName = "swapHelp",
|
||||||
name = "Help",
|
name = "Help",
|
||||||
@@ -342,6 +353,17 @@ public interface MenuEntrySwapperConfig extends Config
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "swapPortalNexus",
|
||||||
|
name = "Portal Nexus",
|
||||||
|
description = "Swap Teleport options with Teleport Menu on the Portal Nexus",
|
||||||
|
section = objectSection
|
||||||
|
)
|
||||||
|
default boolean swapPortalNexus()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "swapPrivate",
|
keyName = "swapPrivate",
|
||||||
name = "Private",
|
name = "Private",
|
||||||
@@ -628,4 +650,15 @@ public interface MenuEntrySwapperConfig extends Config
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "swapRowboatDive",
|
||||||
|
name = "Fossil Island Rowboat Dive",
|
||||||
|
description = "Swap Travel with Dive on the rowboat found on the small island north-east of Fossil Island",
|
||||||
|
section = objectSection
|
||||||
|
)
|
||||||
|
default boolean swapRowboatDive()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -238,6 +238,10 @@ public class MenuEntrySwapperPlugin extends Plugin
|
|||||||
swap("big net", "harpoon", config::swapHarpoon);
|
swap("big net", "harpoon", config::swapHarpoon);
|
||||||
swap("net", "harpoon", config::swapHarpoon);
|
swap("net", "harpoon", config::swapHarpoon);
|
||||||
|
|
||||||
|
swap("lure", "bait", config::swapBait);
|
||||||
|
swap("net", "bait", config::swapBait);
|
||||||
|
swap("small net", "bait", config::swapBait);
|
||||||
|
|
||||||
swap("enter", "portal", "home", () -> config.swapHomePortal() == HouseMode.HOME);
|
swap("enter", "portal", "home", () -> config.swapHomePortal() == HouseMode.HOME);
|
||||||
swap("enter", "portal", "build mode", () -> config.swapHomePortal() == HouseMode.BUILD_MODE);
|
swap("enter", "portal", "build mode", () -> config.swapHomePortal() == HouseMode.BUILD_MODE);
|
||||||
swap("enter", "portal", "friend's house", () -> config.swapHomePortal() == HouseMode.FRIENDS_HOUSE);
|
swap("enter", "portal", "friend's house", () -> config.swapHomePortal() == HouseMode.FRIENDS_HOUSE);
|
||||||
@@ -304,6 +308,14 @@ public class MenuEntrySwapperPlugin extends Plugin
|
|||||||
swap("teleport menu", "draynor village", config::swapJewelleryBox);
|
swap("teleport menu", "draynor village", config::swapJewelleryBox);
|
||||||
swap("teleport menu", "al kharid", config::swapJewelleryBox);
|
swap("teleport menu", "al kharid", config::swapJewelleryBox);
|
||||||
|
|
||||||
|
Arrays.asList(
|
||||||
|
"annakarl", "ape atoll dungeon", "ardougne", "barrows", "battlefront", "camelot", "carrallangar",
|
||||||
|
"catherby", "cemetery", "draynor manor", "falador", "fenkenstrain's castle", "fishing guild", "ghorrock",
|
||||||
|
"grand exchange", "great kourend", "harmony island", "kharyrll", "lumbridge", "lumbridge graveyard",
|
||||||
|
"lunar isle", "marim", "mind altar", "salve graveyard", "seers' village", "senntisten", "troll stronghold",
|
||||||
|
"varrock", "watchtower", "waterbirth island", "weiss", "west ardougne", "yanille"
|
||||||
|
).forEach(location -> swap(location, "portal nexus", "teleport menu", config::swapPortalNexus));
|
||||||
|
|
||||||
swap("shared", "private", config::swapPrivate);
|
swap("shared", "private", config::swapPrivate);
|
||||||
|
|
||||||
swap("pick", "pick-lots", config::swapPick);
|
swap("pick", "pick-lots", config::swapPick);
|
||||||
@@ -361,6 +373,8 @@ public class MenuEntrySwapperPlugin extends Plugin
|
|||||||
swapTeleport("teleport to house", "outside");
|
swapTeleport("teleport to house", "outside");
|
||||||
|
|
||||||
swap("eat", "guzzle", config::swapRockCake);
|
swap("eat", "guzzle", config::swapRockCake);
|
||||||
|
|
||||||
|
swap("travel", "dive", config::swapRowboatDive);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void swap(String option, String swappedOption, Supplier<Boolean> enabled)
|
public void swap(String option, String swappedOption, Supplier<Boolean> enabled)
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import net.runelite.api.ChatMessageType;
|
|||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.GameObject;
|
import net.runelite.api.GameObject;
|
||||||
import net.runelite.api.GameState;
|
import net.runelite.api.GameState;
|
||||||
|
import static net.runelite.api.HintArrowType.WORLD_POSITION;
|
||||||
import net.runelite.api.MenuAction;
|
import net.runelite.api.MenuAction;
|
||||||
import static net.runelite.api.ObjectID.DEPLETED_VEIN_26665;
|
import static net.runelite.api.ObjectID.DEPLETED_VEIN_26665;
|
||||||
import static net.runelite.api.ObjectID.DEPLETED_VEIN_26666;
|
import static net.runelite.api.ObjectID.DEPLETED_VEIN_26666;
|
||||||
@@ -133,6 +134,7 @@ public class MiningPlugin extends Plugin
|
|||||||
pickaxe = null;
|
pickaxe = null;
|
||||||
overlayManager.remove(overlay);
|
overlayManager.remove(overlay);
|
||||||
overlayManager.remove(rocksOverlay);
|
overlayManager.remove(rocksOverlay);
|
||||||
|
respawns.forEach(respawn -> clearHintArrowAt(respawn.getWorldPoint()));
|
||||||
respawns.clear();
|
respawns.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,7 +202,7 @@ public class MiningPlugin extends Plugin
|
|||||||
@Subscribe
|
@Subscribe
|
||||||
public void onGameTick(GameTick gameTick)
|
public void onGameTick(GameTick gameTick)
|
||||||
{
|
{
|
||||||
respawns.removeIf(RockRespawn::isExpired);
|
clearExpiredRespawns();
|
||||||
recentlyLoggedIn = false;
|
recentlyLoggedIn = false;
|
||||||
|
|
||||||
if (session == null || session.getLastMined() == null)
|
if (session == null || session.getLastMined() == null)
|
||||||
@@ -223,6 +225,24 @@ public class MiningPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears expired respawns and removes the hint arrow from expired Daeyalt essence rocks.
|
||||||
|
*/
|
||||||
|
private void clearExpiredRespawns()
|
||||||
|
{
|
||||||
|
respawns.removeIf(rockRespawn ->
|
||||||
|
{
|
||||||
|
final boolean expired = rockRespawn.isExpired();
|
||||||
|
|
||||||
|
if (expired && rockRespawn.getRock() == Rock.DAEYALT_ESSENCE)
|
||||||
|
{
|
||||||
|
clearHintArrowAt(rockRespawn.getWorldPoint());
|
||||||
|
}
|
||||||
|
|
||||||
|
return expired;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public void resetSession()
|
public void resetSession()
|
||||||
{
|
{
|
||||||
session = null;
|
session = null;
|
||||||
@@ -243,19 +263,29 @@ public class MiningPlugin extends Plugin
|
|||||||
Rock rock = Rock.getRock(object.getId());
|
Rock rock = Rock.getRock(object.getId());
|
||||||
if (rock != null)
|
if (rock != null)
|
||||||
{
|
{
|
||||||
|
final WorldPoint point = object.getWorldLocation();
|
||||||
|
|
||||||
if (rock == Rock.DAEYALT_ESSENCE)
|
if (rock == Rock.DAEYALT_ESSENCE)
|
||||||
{
|
{
|
||||||
final WorldPoint point = object.getWorldLocation();
|
|
||||||
respawns.removeIf(rockRespawn -> rockRespawn.getWorldPoint().equals(point));
|
respawns.removeIf(rockRespawn -> rockRespawn.getWorldPoint().equals(point));
|
||||||
|
clearHintArrowAt(point);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset());
|
RockRespawn rockRespawn = new RockRespawn(rock, point, Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset());
|
||||||
respawns.add(rockRespawn);
|
respawns.add(rockRespawn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void clearHintArrowAt(WorldPoint worldPoint)
|
||||||
|
{
|
||||||
|
if (client.getHintArrowType() == WORLD_POSITION && client.getHintArrowPoint().equals(worldPoint))
|
||||||
|
{
|
||||||
|
client.clearHintArrow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onGameObjectSpawned(GameObjectSpawned event)
|
public void onGameObjectSpawned(GameObjectSpawned event)
|
||||||
{
|
{
|
||||||
@@ -273,6 +303,7 @@ public class MiningPlugin extends Plugin
|
|||||||
final int region = client.getLocalPlayer().getWorldLocation().getRegionID();
|
final int region = client.getLocalPlayer().getWorldLocation().getRegionID();
|
||||||
RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset());
|
RockRespawn rockRespawn = new RockRespawn(rock, object.getWorldLocation(), Instant.now(), (int) rock.getRespawnTime(region).toMillis(), rock.getZOffset());
|
||||||
respawns.add(rockRespawn);
|
respawns.add(rockRespawn);
|
||||||
|
client.setHintArrow(object.getWorldLocation());
|
||||||
}
|
}
|
||||||
// If the Lovakite ore respawns before the timer is up, remove it
|
// If the Lovakite ore respawns before the timer is up, remove it
|
||||||
else if (rock == Rock.LOVAKITE)
|
else if (rock == Rock.LOVAKITE)
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.objectindicators;
|
|||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
import net.runelite.api.ObjectComposition;
|
||||||
import net.runelite.api.TileObject;
|
import net.runelite.api.TileObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -38,5 +39,13 @@ import net.runelite.api.TileObject;
|
|||||||
class ColorTileObject
|
class ColorTileObject
|
||||||
{
|
{
|
||||||
private final TileObject tileObject;
|
private final TileObject tileObject;
|
||||||
|
/**
|
||||||
|
* Non-transformed object composition for the object
|
||||||
|
*/
|
||||||
|
private final ObjectComposition composition;
|
||||||
|
/**
|
||||||
|
* Name to highlight for multilocs
|
||||||
|
*/
|
||||||
|
private final String name;
|
||||||
private final Color color;
|
private final Color color;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import net.runelite.api.Client;
|
|||||||
import net.runelite.api.DecorativeObject;
|
import net.runelite.api.DecorativeObject;
|
||||||
import net.runelite.api.GameObject;
|
import net.runelite.api.GameObject;
|
||||||
import net.runelite.api.GroundObject;
|
import net.runelite.api.GroundObject;
|
||||||
|
import net.runelite.api.ObjectComposition;
|
||||||
import net.runelite.api.TileObject;
|
import net.runelite.api.TileObject;
|
||||||
import net.runelite.api.WallObject;
|
import net.runelite.api.WallObject;
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
import net.runelite.client.ui.overlay.Overlay;
|
||||||
@@ -71,6 +72,18 @@ class ObjectIndicatorsOverlay extends Overlay
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ObjectComposition composition = colorTileObject.getComposition();
|
||||||
|
if (composition.getImpostorIds() != null)
|
||||||
|
{
|
||||||
|
// This is a multiloc
|
||||||
|
composition = composition.getImpostor();
|
||||||
|
// Only mark the object if the name still matches
|
||||||
|
if (composition == null || !composition.getName().equals(colorTileObject.getName()))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (color == null || !config.rememberObjectColors())
|
if (color == null || !config.rememberObjectColors())
|
||||||
{
|
{
|
||||||
// Fallback to the current config if the object is marked before the addition of multiple colors
|
// Fallback to the current config if the object is marked before the addition of multiple colors
|
||||||
|
|||||||
@@ -292,16 +292,15 @@ public class ObjectIndicatorsPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
if (worldPoint.getRegionX() == objectPoint.getRegionX()
|
if (worldPoint.getRegionX() == objectPoint.getRegionX()
|
||||||
&& worldPoint.getRegionY() == objectPoint.getRegionY()
|
&& worldPoint.getRegionY() == objectPoint.getRegionY()
|
||||||
&& worldPoint.getPlane() == objectPoint.getZ())
|
&& worldPoint.getPlane() == objectPoint.getZ()
|
||||||
|
&& objectPoint.getId() == object.getId())
|
||||||
{
|
{
|
||||||
// Transform object to get the name which matches against what we've stored
|
log.debug("Marking object {} due to matching {}", object, objectPoint);
|
||||||
ObjectComposition composition = getObjectComposition(object.getId());
|
objects.add(new ColorTileObject(object,
|
||||||
if (composition != null && objectPoint.getName().equals(composition.getName()))
|
client.getObjectDefinition(object.getId()),
|
||||||
{
|
objectPoint.getName(),
|
||||||
log.debug("Marking object {} due to matching {}", object, objectPoint);
|
objectPoint.getColor()));
|
||||||
objects.add(new ColorTileObject(object, objectPoint.getColor()));
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -415,7 +414,10 @@ public class ObjectIndicatorsPlugin extends Plugin
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
objectPoints.add(point);
|
objectPoints.add(point);
|
||||||
objects.add(new ColorTileObject(object, color));
|
objects.add(new ColorTileObject(object,
|
||||||
|
client.getObjectDefinition(object.getId()),
|
||||||
|
name,
|
||||||
|
color));
|
||||||
log.debug("Marking object: {}", point);
|
log.debug("Marking object: {}", point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ enum GameTimer
|
|||||||
ICEBURST(SpriteID.SPELL_ICE_BURST, GameTimerImageType.SPRITE, "Ice burst", GraphicID.ICE_BURST, 16, GAME_TICKS, true),
|
ICEBURST(SpriteID.SPELL_ICE_BURST, GameTimerImageType.SPRITE, "Ice burst", GraphicID.ICE_BURST, 16, GAME_TICKS, true),
|
||||||
ICEBLITZ(SpriteID.SPELL_ICE_BLITZ, GameTimerImageType.SPRITE, "Ice blitz", GraphicID.ICE_BLITZ, 24, GAME_TICKS, true),
|
ICEBLITZ(SpriteID.SPELL_ICE_BLITZ, GameTimerImageType.SPRITE, "Ice blitz", GraphicID.ICE_BLITZ, 24, GAME_TICKS, true),
|
||||||
ICEBARRAGE(SpriteID.SPELL_ICE_BARRAGE, GameTimerImageType.SPRITE, "Ice barrage", GraphicID.ICE_BARRAGE, 32, GAME_TICKS, true),
|
ICEBARRAGE(SpriteID.SPELL_ICE_BARRAGE, GameTimerImageType.SPRITE, "Ice barrage", GraphicID.ICE_BARRAGE, 32, GAME_TICKS, true),
|
||||||
IMBUEDHEART(ItemID.IMBUED_HEART, GameTimerImageType.ITEM, "Imbued heart", GraphicID.IMBUED_HEART, 420, ChronoUnit.SECONDS, true),
|
IMBUEDHEART(ItemID.IMBUED_HEART, GameTimerImageType.ITEM, "Imbued heart", 420, ChronoUnit.SECONDS, true),
|
||||||
VENGEANCE(SpriteID.SPELL_VENGEANCE, GameTimerImageType.SPRITE, "Vengeance", 30, ChronoUnit.SECONDS),
|
VENGEANCE(SpriteID.SPELL_VENGEANCE, GameTimerImageType.SPRITE, "Vengeance", 30, ChronoUnit.SECONDS),
|
||||||
EXSUPERANTIFIRE(ItemID.EXTENDED_SUPER_ANTIFIRE4, GameTimerImageType.ITEM, "Extended Super AntiFire", 6, ChronoUnit.MINUTES),
|
EXSUPERANTIFIRE(ItemID.EXTENDED_SUPER_ANTIFIRE4, GameTimerImageType.ITEM, "Extended Super AntiFire", 6, ChronoUnit.MINUTES),
|
||||||
OVERLOAD_RAID(ItemID.OVERLOAD_4_20996, GameTimerImageType.ITEM, "Overload", 5, ChronoUnit.MINUTES, true),
|
OVERLOAD_RAID(ItemID.OVERLOAD_4_20996, GameTimerImageType.ITEM, "Overload", 5, ChronoUnit.MINUTES, true),
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import net.runelite.api.ChatMessageType;
|
|||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.Constants;
|
import net.runelite.api.Constants;
|
||||||
import net.runelite.api.EquipmentInventorySlot;
|
import net.runelite.api.EquipmentInventorySlot;
|
||||||
|
import net.runelite.api.GameState;
|
||||||
import net.runelite.api.InventoryID;
|
import net.runelite.api.InventoryID;
|
||||||
import net.runelite.api.Item;
|
import net.runelite.api.Item;
|
||||||
import net.runelite.api.ItemContainer;
|
import net.runelite.api.ItemContainer;
|
||||||
@@ -48,11 +49,13 @@ import static net.runelite.api.ItemID.INFERNAL_CAPE;
|
|||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
import net.runelite.api.NpcID;
|
import net.runelite.api.NpcID;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
|
import net.runelite.api.Skill;
|
||||||
import net.runelite.api.VarPlayer;
|
import net.runelite.api.VarPlayer;
|
||||||
import net.runelite.api.Varbits;
|
import net.runelite.api.Varbits;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import net.runelite.api.events.ActorDeath;
|
import net.runelite.api.events.ActorDeath;
|
||||||
import net.runelite.api.events.AnimationChanged;
|
import net.runelite.api.events.AnimationChanged;
|
||||||
|
import net.runelite.api.events.StatChanged;
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.GameTick;
|
import net.runelite.api.events.GameTick;
|
||||||
@@ -141,6 +144,8 @@ public class TimersPlugin extends Plugin
|
|||||||
private int lastAnimation;
|
private int lastAnimation;
|
||||||
private boolean widgetHiddenChangedOnPvpWorld;
|
private boolean widgetHiddenChangedOnPvpWorld;
|
||||||
private ElapsedTimer tzhaarTimer;
|
private ElapsedTimer tzhaarTimer;
|
||||||
|
private int imbuedHeartClickTick = -1;
|
||||||
|
private int lastBoostedMagicLevel = -1;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ItemManager itemManager;
|
private ItemManager itemManager;
|
||||||
@@ -163,6 +168,15 @@ public class TimersPlugin extends Plugin
|
|||||||
return configManager.getConfig(TimersConfig.class);
|
return configManager.getConfig(TimersConfig.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startUp()
|
||||||
|
{
|
||||||
|
if (client.getGameState() == GameState.LOGGED_IN)
|
||||||
|
{
|
||||||
|
lastBoostedMagicLevel = client.getBoostedSkillLevel(Skill.MAGIC);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void shutDown() throws Exception
|
protected void shutDown() throws Exception
|
||||||
{
|
{
|
||||||
@@ -176,6 +190,8 @@ public class TimersPlugin extends Plugin
|
|||||||
nextPoisonTick = 0;
|
nextPoisonTick = 0;
|
||||||
removeTzhaarTimer();
|
removeTzhaarTimer();
|
||||||
staminaTimer = null;
|
staminaTimer = null;
|
||||||
|
imbuedHeartClickTick = -1;
|
||||||
|
lastBoostedMagicLevel = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@@ -435,6 +451,12 @@ public class TimersPlugin extends Plugin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (event.getMenuOption().contains("Invigorate")
|
||||||
|
&& event.getId() == ItemID.IMBUED_HEART)
|
||||||
|
{
|
||||||
|
imbuedHeartClickTick = client.getTickCount();
|
||||||
|
}
|
||||||
|
|
||||||
TeleportWidget teleportWidget = TeleportWidget.of(event.getWidgetId());
|
TeleportWidget teleportWidget = TeleportWidget.of(event.getWidgetId());
|
||||||
if (teleportWidget != null)
|
if (teleportWidget != null)
|
||||||
{
|
{
|
||||||
@@ -796,8 +818,10 @@ public class TimersPlugin extends Plugin
|
|||||||
config.tzhaarLastTime(null);
|
config.tzhaarLastTime(null);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HOPPING:
|
|
||||||
case LOGIN_SCREEN:
|
case LOGIN_SCREEN:
|
||||||
|
lastBoostedMagicLevel = -1;
|
||||||
|
// fall through
|
||||||
|
case HOPPING:
|
||||||
// pause tzhaar timer if logged out without pausing
|
// pause tzhaar timer if logged out without pausing
|
||||||
if (config.tzhaarStartTime() != null && config.tzhaarLastTime() == null)
|
if (config.tzhaarStartTime() != null && config.tzhaarLastTime() == null)
|
||||||
{
|
{
|
||||||
@@ -856,11 +880,6 @@ public class TimersPlugin extends Plugin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.showImbuedHeart() && actor.getGraphic() == IMBUEDHEART.getGraphicId())
|
|
||||||
{
|
|
||||||
createGameTimer(IMBUEDHEART);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.showFreezes())
|
if (config.showFreezes())
|
||||||
{
|
{
|
||||||
if (actor.getGraphic() == BIND.getGraphicId())
|
if (actor.getGraphic() == BIND.getGraphicId())
|
||||||
@@ -978,6 +997,37 @@ public class TimersPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onStatChanged(StatChanged statChanged)
|
||||||
|
{
|
||||||
|
if (statChanged.getSkill() != Skill.MAGIC)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int boostedMagicLevel = statChanged.getBoostedLevel();
|
||||||
|
|
||||||
|
if (imbuedHeartClickTick < 0
|
||||||
|
|| client.getTickCount() > imbuedHeartClickTick + 3 // allow for 2 ticks of lag
|
||||||
|
|| !config.showImbuedHeart())
|
||||||
|
{
|
||||||
|
lastBoostedMagicLevel = boostedMagicLevel;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int boostAmount = boostedMagicLevel - statChanged.getLevel();
|
||||||
|
final int boostChange = boostedMagicLevel - lastBoostedMagicLevel;
|
||||||
|
final int heartBoost = 1 + (statChanged.getLevel() / 10);
|
||||||
|
|
||||||
|
if ((boostAmount == heartBoost || (lastBoostedMagicLevel != -1 && boostChange == heartBoost))
|
||||||
|
&& boostChange > 0)
|
||||||
|
{
|
||||||
|
createGameTimer(IMBUEDHEART);
|
||||||
|
}
|
||||||
|
|
||||||
|
lastBoostedMagicLevel = boostedMagicLevel;
|
||||||
|
}
|
||||||
|
|
||||||
private void createStaminaTimer()
|
private void createStaminaTimer()
|
||||||
{
|
{
|
||||||
Duration duration = Duration.ofMinutes(wasWearingEndurance ? 4 : 2);
|
Duration duration = Duration.ofMinutes(wasWearingEndurance ? 4 : 2);
|
||||||
|
|||||||
@@ -122,17 +122,18 @@ enum TransportationPointLocation
|
|||||||
CHARTER_PRIFDDINAS_INSTANCE("Charter Ship", new WorldPoint(3180, 6083, 0)),
|
CHARTER_PRIFDDINAS_INSTANCE("Charter Ship", new WorldPoint(3180, 6083, 0)),
|
||||||
|
|
||||||
//Minecarts/Carts
|
//Minecarts/Carts
|
||||||
MINE_CART_ARCEUUS("Minecart", new WorldPoint(1673, 3832, 0)),
|
MINE_CART_ARCEUUS("Lovakengj Minecart Network", new WorldPoint(1673, 3832, 0)),
|
||||||
MINE_CART_GRANDEXCHANGE("Minecart to Keldagrim", new WorldPoint(3139, 3504, 0)),
|
MINE_CART_GRANDEXCHANGE("Minecart to Keldagrim", new WorldPoint(3139, 3504, 0)),
|
||||||
MINE_CART_HOSIDIUS("Minecart", new WorldPoint(1656, 3542, 0)),
|
MINE_CART_HOSIDIUS("Lovakengj Minecart Network", new WorldPoint(1656, 3542, 0)),
|
||||||
MINE_CART_KELDAGRIM("Minecart", new WorldPoint(2908, 10170, 0)),
|
MINE_CART_ICE_MOUNTAIN("Minecart to Keldagrim", new WorldPoint(2995, 9836, 0)),
|
||||||
MINE_CART_LOVAKENGJ("Minecart", new WorldPoint(1524, 3721, 0)),
|
MINE_CART_KELDAGRIM("Keldagrim Minecart System", new WorldPoint(2908, 10170, 0)),
|
||||||
MINE_CART_PORT_PISCARILIUS("Minecart", new WorldPoint(1760, 3708, 0)),
|
MINE_CART_LOVAKENGJ("Lovakengj Minecart Network", new WorldPoint(1524, 3721, 0)),
|
||||||
MINE_CART_QUIDAMORTEM("Minecart", new WorldPoint(1253, 3550, 0)),
|
MINE_CART_PORT_PISCARILIUS("Lovakengj Minecart Network", new WorldPoint(1760, 3708, 0)),
|
||||||
MINE_CART_SHAYZIEN("Minecart", new WorldPoint(1586, 3622, 0)),
|
MINE_CART_QUIDAMORTEM("Lovakengj Minecart Network", new WorldPoint(1253, 3550, 0)),
|
||||||
MINE_CART_TAVERLEY_UNDERGROUND("Minecart", new WorldPoint(2874, 9870, 0)),
|
MINE_CART_SHAYZIEN("Lovakengj Minecart Network", new WorldPoint(1586, 3622, 0)),
|
||||||
|
MINE_CART_WHITE_WOLF_MOUNTAIN("Minecart to Keldagrim", new WorldPoint(2874, 9870, 0)),
|
||||||
CART_TO_BRIMHAVEN("Cart to Brimhaven", new WorldPoint(2833, 2958, 0), new WorldPoint(2780, 3214, 0)),
|
CART_TO_BRIMHAVEN("Cart to Brimhaven", new WorldPoint(2833, 2958, 0), new WorldPoint(2780, 3214, 0)),
|
||||||
CART_TO_SHILO("Cart to Shilo", new WorldPoint(2780, 3214, 0), new WorldPoint(2833, 2958, 0)),
|
CART_TO_SHILO("Cart to Shilo Village", new WorldPoint(2780, 3214, 0), new WorldPoint(2833, 2958, 0)),
|
||||||
|
|
||||||
//Canoes
|
//Canoes
|
||||||
CANOE_BARBVILLAGE("Canoe", new WorldPoint(3111, 3409, 0)),
|
CANOE_BARBVILLAGE("Canoe", new WorldPoint(3111, 3409, 0)),
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ import net.runelite.api.widgets.Widget;
|
|||||||
import net.runelite.api.widgets.WidgetInfo;
|
import net.runelite.api.widgets.WidgetInfo;
|
||||||
import net.runelite.api.widgets.WidgetItem;
|
import net.runelite.api.widgets.WidgetItem;
|
||||||
import net.runelite.client.config.RuneLiteConfig;
|
import net.runelite.client.config.RuneLiteConfig;
|
||||||
|
import net.runelite.client.eventbus.EventBus;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.input.KeyListener;
|
import net.runelite.client.input.KeyListener;
|
||||||
import net.runelite.client.input.KeyManager;
|
import net.runelite.client.input.KeyManager;
|
||||||
@@ -113,7 +114,8 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener
|
|||||||
final RuneLiteConfig runeLiteConfig,
|
final RuneLiteConfig runeLiteConfig,
|
||||||
final MouseManager mouseManager,
|
final MouseManager mouseManager,
|
||||||
final KeyManager keyManager,
|
final KeyManager keyManager,
|
||||||
final ClientUI clientUI)
|
final ClientUI clientUI,
|
||||||
|
final EventBus eventBus)
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.overlayManager = overlayManager;
|
this.overlayManager = overlayManager;
|
||||||
@@ -121,6 +123,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener
|
|||||||
this.clientUI = clientUI;
|
this.clientUI = clientUI;
|
||||||
keyManager.registerKeyListener(this);
|
keyManager.registerKeyListener(this);
|
||||||
mouseManager.registerMouseListener(this);
|
mouseManager.registerMouseListener(this);
|
||||||
|
eventBus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ public class InfoBoxManager
|
|||||||
this.eventBus = eventBus;
|
this.eventBus = eventBus;
|
||||||
this.overlayManager = overlayManager;
|
this.overlayManager = overlayManager;
|
||||||
this.configManager = configManager;
|
this.configManager = configManager;
|
||||||
|
eventBus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ public class PartyService
|
|||||||
this.sessionManager = sessionManager;
|
this.sessionManager = sessionManager;
|
||||||
this.eventBus = eventBus;
|
this.eventBus = eventBus;
|
||||||
this.chat = chat;
|
this.chat = chat;
|
||||||
|
eventBus.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeParty(UUID newParty)
|
public void changeParty(UUID newParty)
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import net.runelite.api.MessageNode;
|
|||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
import net.runelite.client.config.ChatColorConfig;
|
import net.runelite.client.config.ChatColorConfig;
|
||||||
|
import net.runelite.client.events.ConfigChanged;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -62,8 +63,6 @@ public class ChatMessageManagerTest
|
|||||||
public void before()
|
public void before()
|
||||||
{
|
{
|
||||||
Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
|
Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
|
||||||
|
|
||||||
chatMessageManager.loadColors();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -71,7 +70,10 @@ public class ChatMessageManagerTest
|
|||||||
{
|
{
|
||||||
when(chatColorConfig.opaqueServerMessage()).thenReturn(Color.decode("#b20000"));
|
when(chatColorConfig.opaqueServerMessage()).thenReturn(Color.decode("#b20000"));
|
||||||
|
|
||||||
chatMessageManager.loadColors();
|
// rebuild color cache
|
||||||
|
ConfigChanged configChanged = new ConfigChanged();
|
||||||
|
configChanged.setGroup("textrecolor");
|
||||||
|
chatMessageManager.onConfigChanged(configChanged);
|
||||||
|
|
||||||
ChatMessage chatMessage = new ChatMessage();
|
ChatMessage chatMessage = new ChatMessage();
|
||||||
chatMessage.setType(ChatMessageType.GAMEMESSAGE);
|
chatMessage.setType(ChatMessageType.GAMEMESSAGE);
|
||||||
@@ -93,8 +95,6 @@ public class ChatMessageManagerTest
|
|||||||
|
|
||||||
when(chatColorConfig.opaquePublicFriendUsernames()).thenReturn(Color.decode("#b20000"));
|
when(chatColorConfig.opaquePublicFriendUsernames()).thenReturn(Color.decode("#b20000"));
|
||||||
|
|
||||||
chatMessageManager.loadColors();
|
|
||||||
|
|
||||||
// Setup message
|
// Setup message
|
||||||
ChatMessage chatMessage = new ChatMessage();
|
ChatMessage chatMessage = new ChatMessage();
|
||||||
chatMessage.setType(ChatMessageType.PUBLICCHAT);
|
chatMessage.setType(ChatMessageType.PUBLICCHAT);
|
||||||
@@ -125,8 +125,6 @@ public class ChatMessageManagerTest
|
|||||||
|
|
||||||
when(chatColorConfig.opaquePublicFriendUsernames()).thenReturn(Color.decode("#b20000"));
|
when(chatColorConfig.opaquePublicFriendUsernames()).thenReturn(Color.decode("#b20000"));
|
||||||
|
|
||||||
chatMessageManager.loadColors();
|
|
||||||
|
|
||||||
// Setup message
|
// Setup message
|
||||||
ChatMessage chatMessage = new ChatMessage();
|
ChatMessage chatMessage = new ChatMessage();
|
||||||
chatMessage.setType(ChatMessageType.PUBLICCHAT);
|
chatMessage.setType(ChatMessageType.PUBLICCHAT);
|
||||||
|
|||||||
@@ -32,10 +32,15 @@ import java.time.Duration;
|
|||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import net.runelite.api.ChatMessageType;
|
import net.runelite.api.ChatMessageType;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Experience;
|
||||||
import net.runelite.api.InventoryID;
|
import net.runelite.api.InventoryID;
|
||||||
import net.runelite.api.ItemContainer;
|
import net.runelite.api.ItemContainer;
|
||||||
|
import net.runelite.api.ItemID;
|
||||||
|
import net.runelite.api.Skill;
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
import net.runelite.api.events.ItemContainerChanged;
|
import net.runelite.api.events.ItemContainerChanged;
|
||||||
|
import net.runelite.api.events.MenuOptionClicked;
|
||||||
|
import net.runelite.api.events.StatChanged;
|
||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.game.SpriteManager;
|
import net.runelite.client.game.SpriteManager;
|
||||||
import net.runelite.client.ui.overlay.infobox.InfoBox;
|
import net.runelite.client.ui.overlay.infobox.InfoBox;
|
||||||
@@ -53,9 +58,11 @@ import static org.mockito.ArgumentMatchers.nullable;
|
|||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import static org.mockito.Mockito.atLeastOnce;
|
import static org.mockito.Mockito.atLeastOnce;
|
||||||
import static org.mockito.Mockito.doAnswer;
|
import static org.mockito.Mockito.doAnswer;
|
||||||
|
import static org.mockito.Mockito.lenient;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.verifyNoInteractions;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
import org.mockito.junit.MockitoJUnitRunner;
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
@@ -369,4 +376,125 @@ public class TimersPluginTest
|
|||||||
ElapsedTimer timer = (ElapsedTimer) captor.getValue();
|
ElapsedTimer timer = (ElapsedTimer) captor.getValue();
|
||||||
assertEquals("00:06", timer.getText());
|
assertEquals("00:06", timer.getText());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@Test
|
||||||
|
public void testImbuedHeartBoost()
|
||||||
|
{
|
||||||
|
when(timersConfig.showImbuedHeart()).thenReturn(true);
|
||||||
|
when(client.getTickCount()).thenReturn(100);
|
||||||
|
StatChanged event;
|
||||||
|
|
||||||
|
final MenuOptionClicked imbuedHeartClick = new MenuOptionClicked();
|
||||||
|
imbuedHeartClick.setMenuOption("Invigorate");
|
||||||
|
imbuedHeartClick.setId(ItemID.IMBUED_HEART);
|
||||||
|
timersPlugin.onMenuOptionClicked(imbuedHeartClick);
|
||||||
|
|
||||||
|
when(client.getTickCount()).thenReturn(101);
|
||||||
|
|
||||||
|
for (int level = 1, i = 0; level <= Experience.MAX_REAL_LEVEL; level++, i++)
|
||||||
|
{
|
||||||
|
event = new StatChanged(Skill.MAGIC, 0, level, heartBoostedLevel(level));
|
||||||
|
timersPlugin.onStatChanged(event);
|
||||||
|
|
||||||
|
ArgumentCaptor<InfoBox> captor = ArgumentCaptor.forClass(InfoBox.class);
|
||||||
|
verify(infoBoxManager, times(i + 1)).addInfoBox(captor.capture());
|
||||||
|
TimerTimer infoBox = (TimerTimer) captor.getValue();
|
||||||
|
assertEquals(GameTimer.IMBUEDHEART, infoBox.getTimer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testImbuedHeartBoostFromDrained()
|
||||||
|
{
|
||||||
|
when(timersConfig.showImbuedHeart()).thenReturn(true);
|
||||||
|
when(client.getTickCount()).thenReturn(100);
|
||||||
|
|
||||||
|
final MenuOptionClicked imbuedHeartClick = new MenuOptionClicked();
|
||||||
|
imbuedHeartClick.setMenuOption("Invigorate");
|
||||||
|
imbuedHeartClick.setId(ItemID.IMBUED_HEART);
|
||||||
|
timersPlugin.onMenuOptionClicked(imbuedHeartClick);
|
||||||
|
|
||||||
|
when(client.getTickCount()).thenReturn(101);
|
||||||
|
|
||||||
|
for (int level = 1, i = 0; level <= Experience.MAX_REAL_LEVEL; level++, i++)
|
||||||
|
{
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, level, level - 1));
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, level, heartBoostedLevel(level) - 1));
|
||||||
|
|
||||||
|
ArgumentCaptor<InfoBox> captor = ArgumentCaptor.forClass(InfoBox.class);
|
||||||
|
verify(infoBoxManager, times(i + 1)).addInfoBox(captor.capture());
|
||||||
|
TimerTimer infoBox = (TimerTimer) captor.getValue();
|
||||||
|
assertEquals(GameTimer.IMBUEDHEART, infoBox.getTimer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testImbuedHeartBoostFromPartialBoost()
|
||||||
|
{
|
||||||
|
when(timersConfig.showImbuedHeart()).thenReturn(true);
|
||||||
|
when(client.getTickCount()).thenReturn(100);
|
||||||
|
|
||||||
|
final MenuOptionClicked imbuedHeartClick = new MenuOptionClicked();
|
||||||
|
imbuedHeartClick.setMenuOption("Invigorate");
|
||||||
|
imbuedHeartClick.setId(ItemID.IMBUED_HEART);
|
||||||
|
timersPlugin.onMenuOptionClicked(imbuedHeartClick);
|
||||||
|
|
||||||
|
when(client.getTickCount()).thenReturn(101);
|
||||||
|
|
||||||
|
for (int level = 10, i = 0; level <= Experience.MAX_REAL_LEVEL; level++, i++)
|
||||||
|
{
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, level, level + 1));
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, level, heartBoostedLevel(level)));
|
||||||
|
|
||||||
|
ArgumentCaptor<InfoBox> captor = ArgumentCaptor.forClass(InfoBox.class);
|
||||||
|
verify(infoBoxManager, times(i + 1)).addInfoBox(captor.capture());
|
||||||
|
TimerTimer infoBox = (TimerTimer) captor.getValue();
|
||||||
|
assertEquals(GameTimer.IMBUEDHEART, infoBox.getTimer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNonImbuedHeartBoost()
|
||||||
|
{
|
||||||
|
lenient().when(timersConfig.showImbuedHeart()).thenReturn(true);
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, 1, 1));
|
||||||
|
|
||||||
|
// Simulate stat changes of imbued heart boost amount without having clicked the imbued heart
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, 29, 34)); // equal to magic essence
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, 39, 43)); // equal to magic potion
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, 49, 54)); // equal to spicy stew
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, 99, 109));
|
||||||
|
|
||||||
|
verifyNoInteractions(infoBoxManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMagicLevelDrain()
|
||||||
|
{
|
||||||
|
lenient().when(timersConfig.showImbuedHeart()).thenReturn(true);
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, 1, 1));
|
||||||
|
when(client.getTickCount()).thenReturn(100);
|
||||||
|
|
||||||
|
final MenuOptionClicked imbuedHeartClick = new MenuOptionClicked();
|
||||||
|
imbuedHeartClick.setMenuOption("Invigorate");
|
||||||
|
imbuedHeartClick.setId(ItemID.IMBUED_HEART);
|
||||||
|
timersPlugin.onMenuOptionClicked(imbuedHeartClick);
|
||||||
|
|
||||||
|
when(client.getTickCount()).thenReturn(101);
|
||||||
|
|
||||||
|
// Simulate stat changes draining to the imbued heart boost amount
|
||||||
|
for (int level = 1; level <= Experience.MAX_REAL_LEVEL; level++)
|
||||||
|
{
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, level, level));
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, level, heartBoostedLevel(level) + 1));
|
||||||
|
timersPlugin.onStatChanged(new StatChanged(Skill.MAGIC, 0, level, heartBoostedLevel(level)));
|
||||||
|
}
|
||||||
|
|
||||||
|
verifyNoInteractions(infoBoxManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int heartBoostedLevel(final int level)
|
||||||
|
{
|
||||||
|
return level + 1 + (level / 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user