Merge branch 'master' into rr
This commit is contained in:
@@ -33,10 +33,6 @@ import io.sigpipe.jbsdiff.Patch;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.LoaderClassPath;
|
||||
import org.objectweb.asm.AnnotationVisitor;
|
||||
import org.objectweb.asm.ClassWriter;
|
||||
import org.objectweb.asm.FieldVisitor;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import us.runelitepl.mixinprocessor.generators.AnnotationProcessor;
|
||||
import us.runelitepl.mixinprocessor.generators.PatchGenerator;
|
||||
@@ -50,14 +46,11 @@ import us.runelitepl.mixinprocessor.util.JavassistUtils;
|
||||
import us.runelitepl.mixinprocessor.util.RefUtils;
|
||||
import org.apache.maven.plugin.AbstractMojo;
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
|
||||
import org.apache.maven.plugin.MojoFailureException;
|
||||
import org.apache.maven.plugins.annotations.LifecyclePhase;
|
||||
import org.apache.maven.plugins.annotations.Mojo;
|
||||
import org.apache.maven.plugins.annotations.Parameter;
|
||||
import org.apache.maven.plugins.annotations.ResolutionScope;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
@@ -111,9 +104,9 @@ public class MixinProcessorMojo
|
||||
|
||||
public static HashMap<String, MethodGarbageValue> methodGarbageValues = new HashMap<>();
|
||||
|
||||
public static HashMap<String, byte[]> gamepack = new HashMap<>();
|
||||
private static HashMap<String, byte[]> gamepack = new HashMap<>();
|
||||
|
||||
public static final int BUFFER_SIZE = 1024 * 1024 * 4;
|
||||
private static final int BUFFER_SIZE = 1024 * 1024 * 4;
|
||||
|
||||
public void execute()
|
||||
throws MojoExecutionException
|
||||
@@ -257,7 +250,7 @@ public class MixinProcessorMojo
|
||||
|
||||
}
|
||||
|
||||
public void stderr(String s, Object... format)
|
||||
private void stderr(String s, Object... format)
|
||||
{
|
||||
getLog().info(String.format(s, format));
|
||||
}
|
||||
@@ -267,7 +260,7 @@ public class MixinProcessorMojo
|
||||
INST.stderr(s, format);
|
||||
}
|
||||
|
||||
static void deleteDir(File file) throws IOException
|
||||
private static void deleteDir(File file) throws IOException
|
||||
{
|
||||
if (!file.exists())
|
||||
{
|
||||
|
||||
@@ -31,5 +31,5 @@ public enum InjectionType
|
||||
APPEND,
|
||||
OVERWRITE,
|
||||
PREPEND,
|
||||
PROVIDED;
|
||||
PROVIDED
|
||||
}
|
||||
|
||||
@@ -26,8 +26,6 @@
|
||||
package us.runelitepl.mixinprocessor.generators;
|
||||
|
||||
import us.runelitepl.mixinprocessor.transformers.AnnotationRemoverTransformer;
|
||||
import us.runelitepl.mixinprocessor.transformers.AsmMethodGarbageTransformer;
|
||||
import us.runelitepl.mixinprocessor.transformers.AsmMethodSignatureTransformer;
|
||||
import us.runelitepl.mixinprocessor.transformers.AsmNameTransformer;
|
||||
import us.runelitepl.mixinprocessor.transformers.AsmStaticUsageTransformer;
|
||||
import us.runelitepl.mixinprocessor.transformers.DoNothingTransformer;
|
||||
|
||||
@@ -25,18 +25,12 @@
|
||||
|
||||
package us.runelitepl.mixinprocessor.generators;
|
||||
|
||||
import javassist.CannotCompileException;
|
||||
import javassist.CtClass;
|
||||
import javassist.NotFoundException;
|
||||
import us.runelitepl.mixinprocessor.MixinProcessorMojo;
|
||||
import us.runelitepl.mixinprocessor.util.JavassistUtils;
|
||||
import us.runelitepl.mixinprocessor.util.RefUtils;
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import org.objectweb.asm.tree.FieldNode;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
@@ -45,11 +39,11 @@ import java.util.Set;
|
||||
public class StaticGenerator
|
||||
{
|
||||
|
||||
public static HashMap<String, ArrayList<MethodNode>> staticMethods = new HashMap<>();
|
||||
public static HashMap<String, ArrayList<FieldNode>> staticFields = new HashMap<>();
|
||||
public static Set<String> modifiedClasses = new HashSet<>();
|
||||
static HashMap<String, ArrayList<MethodNode>> staticMethods = new HashMap<>();
|
||||
static HashMap<String, ArrayList<FieldNode>> staticFields = new HashMap<>();
|
||||
static Set<String> modifiedClasses = new HashSet<>();
|
||||
|
||||
public void run(byte[] bytecode) throws NotFoundException, IOException, CannotCompileException
|
||||
public void run(byte[] bytecode)
|
||||
{
|
||||
ClassReader cr = new ClassReader(bytecode);
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@ import org.objectweb.asm.tree.AnnotationNode;
|
||||
import org.objectweb.asm.tree.FieldNode;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
import org.objectweb.asm.tree.TypeAnnotationNode;
|
||||
import us.runelitepl.mixinprocessor.MixinProcessorMojo;
|
||||
import us.runelitepl.mixinprocessor.parsers.MethodReflector;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
@@ -56,7 +56,7 @@ public class GamepackDownloader
|
||||
continue;
|
||||
}
|
||||
String key = entry.getName().replace(".class", "");
|
||||
int len = 0;
|
||||
int len;
|
||||
while ((len = zipInputStream.read(buffer)) > 0)
|
||||
{
|
||||
fileContent.write(buffer, 0, len);
|
||||
@@ -83,7 +83,7 @@ public class GamepackDownloader
|
||||
}
|
||||
}
|
||||
|
||||
public static String getGamepackUrl()
|
||||
private static String getGamepackUrl()
|
||||
{
|
||||
return codebase + initial_jar;
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ public class AnnotationRemoverTransformer extends AsmBaseTransformer
|
||||
return cw.toByteArray();
|
||||
}
|
||||
|
||||
public static String makeAnnotationDescriptor(String s)
|
||||
static String makeAnnotationDescriptor(String s)
|
||||
{
|
||||
return "Lus/runelitepl/mixinprocessor/annotations/" + s + ";";
|
||||
}
|
||||
|
||||
@@ -35,9 +35,10 @@ public abstract class AsmBaseTransformer implements Opcodes
|
||||
protected final ArrayList<String> validMethods = new ArrayList<>();
|
||||
protected final ArrayList<String> validFields = new ArrayList<>();
|
||||
|
||||
// CHECKSTYLE:OFF
|
||||
protected void buildMethodList(){}
|
||||
|
||||
protected void buildFieldList(){}
|
||||
// CHECKSTYLE:ON
|
||||
|
||||
public abstract byte[] transform();
|
||||
|
||||
|
||||
@@ -32,8 +32,6 @@ import org.objectweb.asm.MethodVisitor;
|
||||
import us.runelitepl.mixinprocessor.MethodGarbageValue;
|
||||
import us.runelitepl.mixinprocessor.MixinProcessorMojo;
|
||||
import us.runelitepl.mixinprocessor.util.RefUtils;
|
||||
|
||||
import java.sql.Ref;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class AsmMethodGarbageTransformer extends AsmBaseTransformer
|
||||
|
||||
@@ -32,11 +32,6 @@ import org.objectweb.asm.MethodVisitor;
|
||||
import us.runelitepl.mixinprocessor.MixinProcessorMojo;
|
||||
import us.runelitepl.mixinprocessor.util.RefUtils;
|
||||
|
||||
import static org.objectweb.asm.Opcodes.ASM6;
|
||||
import static org.objectweb.asm.Opcodes.GETSTATIC;
|
||||
import static org.objectweb.asm.Opcodes.INVOKESTATIC;
|
||||
import static org.objectweb.asm.Opcodes.PUTSTATIC;
|
||||
|
||||
public class AsmStaticUsageTransformer extends AsmBaseTransformer
|
||||
{
|
||||
|
||||
|
||||
@@ -47,10 +47,10 @@ public class DoNothingTransformer extends AsmBaseTransformer
|
||||
|
||||
ClassReader cr = new ClassReader(bytecode);
|
||||
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES);
|
||||
|
||||
// CHECKSTYLE:OFF
|
||||
cr.accept(new ClassVisitor(ASM6, cw)
|
||||
{}, 0);
|
||||
|
||||
//CHECKSTYLE:ON
|
||||
return cw.toByteArray();
|
||||
}
|
||||
}
|
||||
@@ -169,11 +169,7 @@ public class RefUtils
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (i == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return i == 1;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@@ -187,11 +183,7 @@ public class RefUtils
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (i == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return i == 1;
|
||||
}
|
||||
|
||||
public static boolean shouldReobField(String owner, String deob, String desc)
|
||||
@@ -275,7 +267,7 @@ public class RefUtils
|
||||
{
|
||||
obbedName = className;
|
||||
}
|
||||
deobbed.append("L" + obbedName + ";");
|
||||
deobbed.append("L").append(obbedName ).append(";");
|
||||
strIndex += sigPart.length();
|
||||
}
|
||||
catch (StringIndexOutOfBoundsException ex)
|
||||
|
||||
@@ -50,14 +50,17 @@ public class WebUtils
|
||||
return pageText;
|
||||
}
|
||||
|
||||
public static byte[] downloadFile(String urlText) throws IOException {
|
||||
public static byte[] downloadFile(String urlText) throws IOException
|
||||
{
|
||||
URL url = new URL(urlText);
|
||||
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
||||
|
||||
try (InputStream inputStream = url.openStream()) {
|
||||
int n = 0;
|
||||
try (InputStream inputStream = url.openStream())
|
||||
{
|
||||
int n;
|
||||
byte [] buffer = new byte[ 1024 ];
|
||||
while (-1 != (n = inputStream.read(buffer))) {
|
||||
while (-1 != (n = inputStream.read(buffer)))
|
||||
{
|
||||
output.write(buffer, 0, n);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -533,8 +533,7 @@ public class Client
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void invokeMenuAction(int actionParam, int widgetId, int opcode, int targetId, String menuOption,
|
||||
String menuTarget, int mouseX, int mouseY)
|
||||
public void invokeMenuAction(int actionParam, int widgetId, int opcode, int targetId, String menuOption, String menuTarget, int mouseX, int mouseY)
|
||||
{
|
||||
_Statics_.menuAction(actionParam, widgetId, opcode, targetId, menuOption,
|
||||
menuTarget, mouseX, mouseY);
|
||||
|
||||
@@ -1614,7 +1614,18 @@ public interface Client extends GameEngine
|
||||
|
||||
void toggleRenderSelf();
|
||||
|
||||
void invokeMenuAction(int var1, int var2, int var3, int var4, String var5, String var6, int var7, int var8);
|
||||
/**
|
||||
*
|
||||
* @param param0 This is SceneX for gameObject, index for items, and 0 for npc.
|
||||
* @param param1 This is SceneY for gameObject, static for items, and 0 for npc.
|
||||
* @param type Menu entry Action type.
|
||||
* @param id Targets ID
|
||||
* @param menuEntry Do these actually matter?
|
||||
* @param targetString Do these actually matter?
|
||||
* @param canvasX Canvas X Point
|
||||
* @param canvasY Canvas Y Point
|
||||
*/
|
||||
void invokeMenuAction(int param0, int param1, int type, int id, String menuEntry, String targetString, int canvasX, int canvasY);
|
||||
|
||||
MouseRecorder getMouseRecorder();
|
||||
|
||||
|
||||
@@ -49,6 +49,8 @@ public class ProjectileID
|
||||
public static final int OLM_FALLING_CRYSTAL_TRAIL = 1352;
|
||||
public static final int OLM_ACID_TRAIL = 1354;
|
||||
public static final int OLM_FIRE_LINE = 1347;
|
||||
public static final int OLM_MAGE_ATTACK = 1339;
|
||||
public static final int OLM_RANGE_ATTACK = 1340;
|
||||
|
||||
public static final int VORKATH_BOMB_AOE = 1481;
|
||||
public static final int VORKATH_POISON_POOL_AOE = 1483;
|
||||
|
||||
@@ -523,6 +523,14 @@ public enum Varbits
|
||||
*/
|
||||
QUEST_TAB(8168),
|
||||
|
||||
/**
|
||||
* Explorer ring
|
||||
*/
|
||||
EXPLORER_RING_ALCHTYPE(5398),
|
||||
EXPLORER_RING_TELEPORTS(4552),
|
||||
EXPLORER_RING_ALCHS(4554),
|
||||
EXPLORER_RING_RUNENERGY(4553),
|
||||
|
||||
/**
|
||||
* Temple Trekking
|
||||
*/
|
||||
@@ -559,7 +567,7 @@ public enum Varbits
|
||||
QUEST_THE_EYES_OF_GLOUPHRIE(2497),
|
||||
QUEST_FAIRYTALE_I_GROWING_PAINS(1803),
|
||||
QUEST_FAIRYTALE_II_CURE_A_QUEEN(2326),
|
||||
QUEST_THE_FEUD(334),
|
||||
QUEST_THE_FEUD(334), // 14 = able to pickpocket
|
||||
QUEST_FORGETTABLE_TALE(822),
|
||||
QUEST_GARDEN_OF_TRANQUILLITY(961),
|
||||
QUEST_GHOSTS_AHOY(217),
|
||||
@@ -628,7 +636,12 @@ public enum Varbits
|
||||
/**
|
||||
* Spellbook filtering (1 = unfiltered, 0 = filtered)
|
||||
*/
|
||||
FILTER_SPELLBOOK(6718);
|
||||
FILTER_SPELLBOOK(6718),
|
||||
|
||||
/**
|
||||
* POH Building mode (1 = yes, 0 = no)
|
||||
*/
|
||||
BUILDING_MODE(2176);
|
||||
|
||||
/**
|
||||
* The raw varbit ID.
|
||||
|
||||
@@ -41,6 +41,7 @@ public class WidgetID
|
||||
public static final int LOGOUT_PANEL_ID = 182;
|
||||
public static final int BANK_GROUP_ID = 12;
|
||||
public static final int BANK_INVENTORY_GROUP_ID = 15;
|
||||
public static final int BANK_PIN_GROUP_ID = 213;
|
||||
public static final int GRAND_EXCHANGE_INVENTORY_GROUP_ID = 467;
|
||||
public static final int GRAND_EXCHANGE_GROUP_ID = 465;
|
||||
public static final int DEPOSIT_BOX_GROUP_ID = 192;
|
||||
@@ -353,6 +354,7 @@ public class WidgetID
|
||||
static final int MINIMAP = 3;
|
||||
static final int MINIMAP_DRAW_AREA = 8;
|
||||
static final int MULTICOMBAT_INDICATOR = 20;
|
||||
static final int BANK_PIN = 21;
|
||||
static final int CLAN_CHAT_TAB = 31;
|
||||
static final int FRIENDS_TAB = 33;
|
||||
static final int IGNORES_TAB = 32;
|
||||
@@ -390,6 +392,7 @@ public class WidgetID
|
||||
static class ResizableViewport
|
||||
{
|
||||
static final int ITEMS_KEPT_ON_DEATH = 13;
|
||||
static final int BANK_PIN = 13;
|
||||
static final int MULTICOMBAT_INDICATOR = 16;
|
||||
static final int CLAN_CHAT_TAB = 35;
|
||||
static final int FRIENDS_TAB = 37;
|
||||
@@ -425,6 +428,7 @@ public class WidgetID
|
||||
|
||||
static class ResizableViewportBottomLine
|
||||
{
|
||||
static final int BANK_PIN = 13;
|
||||
static final int LOGOUT_BUTTON_OVERLAY = 29;
|
||||
static final int CMB_TAB = 50;
|
||||
static final int CMB_ICON = 57;
|
||||
@@ -1034,7 +1038,8 @@ public class WidgetID
|
||||
static final int CUSTOM_TEXT_CONTAINER = 33;
|
||||
}
|
||||
|
||||
public static class TradeScreen {
|
||||
public static class TradeScreen
|
||||
{
|
||||
public static final int SECOND_GROUP_ID = 334;
|
||||
public static final int SECOND_TRADING_WITH = 30;
|
||||
public static final int SECOND_MY_OFFER = 23;
|
||||
@@ -1043,7 +1048,8 @@ public class WidgetID
|
||||
public static final int SECOND_ACCEPT_TEXT = 25;
|
||||
}
|
||||
|
||||
public static class DuelConfig {
|
||||
public static class DuelConfig
|
||||
{
|
||||
public static final int CONFIG_GROUP_IP = 482;
|
||||
public static final int TITLE = 35;
|
||||
public static final int OPPONENT_ATT = 9;
|
||||
@@ -1052,11 +1058,26 @@ public class WidgetID
|
||||
public static final int OPPONENT_HP = 21;
|
||||
}
|
||||
|
||||
public static class DuelResult {
|
||||
public static class DuelResult
|
||||
{
|
||||
public static final int RESULT_GROUP_ID = 372;
|
||||
public static final int TITLE = 16;
|
||||
public static final int TOTAL_STAKED = 32;
|
||||
public static final int TOTAL_TAX = 39;
|
||||
public static final int WINNINGS = 40;
|
||||
}
|
||||
|
||||
public static class BankPin
|
||||
{
|
||||
public static final int BUTTON_1 = 16;
|
||||
public static final int BUTTON_2 = 18;
|
||||
public static final int BUTTON_3 = 20;
|
||||
public static final int BUTTON_4 = 22;
|
||||
public static final int BUTTON_5 = 24;
|
||||
public static final int BUTTON_6 = 26;
|
||||
public static final int BUTTON_7 = 28;
|
||||
public static final int BUTTON_8 = 30;
|
||||
public static final int BUTTON_9 = 32;
|
||||
public static final int BUTTON_0 = 34;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -705,7 +705,21 @@ public enum WidgetInfo
|
||||
ITEMS_KEPT_SAFE_ZONE_CONTAINER(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.SAFE_ZONE_CONTAINER),
|
||||
ITEMS_KEPT_CUSTOM_TEXT_CONTAINER(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.CUSTOM_TEXT_CONTAINER),
|
||||
ITEMS_LOST_VALUE(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.LOST_ITEMS_VALUE),
|
||||
ITEMS_KEPT_MAX(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.MAX_ITEMS_KEPT_ON_DEATH);
|
||||
ITEMS_KEPT_MAX(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.MAX_ITEMS_KEPT_ON_DEATH),
|
||||
|
||||
FIXED_BANK_PIN(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.BANK_PIN),
|
||||
RESIZABLE_BANK_PIN(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.BANK_PIN),
|
||||
RESIZABLE_BOTTOM_LINE_BANK_PIN(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.BANK_PIN),
|
||||
BANK_PIN_1(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_1),
|
||||
BANK_PIN_2(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_2),
|
||||
BANK_PIN_3(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_3),
|
||||
BANK_PIN_4(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_4),
|
||||
BANK_PIN_5(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_5),
|
||||
BANK_PIN_6(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_6),
|
||||
BANK_PIN_7(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_7),
|
||||
BANK_PIN_8(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_8),
|
||||
BANK_PIN_9(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_9),
|
||||
BANK_PIN_0(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.BUTTON_0);
|
||||
|
||||
private final int groupId;
|
||||
private final int childId;
|
||||
|
||||
@@ -59,7 +59,6 @@ import net.runelite.client.menus.MenuManager;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginInstantiationException;
|
||||
import net.runelite.client.plugins.PluginManager;
|
||||
import net.runelite.client.plugins.config.ConfigPanel;
|
||||
import net.runelite.client.rs.ClientUpdateCheckMode;
|
||||
import net.runelite.client.task.Scheduler;
|
||||
import net.runelite.client.ui.ClientUI;
|
||||
@@ -86,7 +85,7 @@ public class RuneLite
|
||||
public static final File PROFILES_DIR = new File(RUNELITE_DIR, "profiles");
|
||||
public static final File PLUGIN_DIR = new File(RUNELITE_DIR, "plugins");
|
||||
public static final File SCREENSHOT_DIR = new File(RUNELITE_DIR, "screenshots");
|
||||
public static RuneLiteSplashScreen splashScreen = new RuneLiteSplashScreen();
|
||||
static final RuneLiteSplashScreen splashScreen = new RuneLiteSplashScreen();
|
||||
|
||||
|
||||
@Getter
|
||||
|
||||
@@ -80,9 +80,12 @@ public class RuneLiteProperties
|
||||
|
||||
public String getDiscordAppId()
|
||||
{
|
||||
if (RuneLitePlusPlugin.customPresenceEnabled) {
|
||||
if (RuneLitePlusPlugin.customPresenceEnabled)
|
||||
{
|
||||
return properties.getProperty(RuneLitePlusPlugin.rlPlusDiscordApp);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return properties.getProperty(DISCORD_APP_ID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,12 +36,12 @@ import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.client.events.SessionClose;
|
||||
import net.runelite.client.events.SessionOpen;
|
||||
import net.runelite.client.RuneLite;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.eventbus.EventBus;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.events.SessionClose;
|
||||
import net.runelite.client.events.SessionOpen;
|
||||
import net.runelite.client.util.LinkBrowser;
|
||||
import net.runelite.client.ws.WSClient;
|
||||
import net.runelite.http.api.account.AccountClient;
|
||||
@@ -147,7 +147,7 @@ public class SessionManager
|
||||
{
|
||||
// Initialize config for new session
|
||||
// If the session isn't logged in yet, don't switch to the new config
|
||||
configManager.switchSession(session);
|
||||
configManager.switchSession();
|
||||
}
|
||||
|
||||
eventBus.post(new SessionOpen());
|
||||
@@ -177,7 +177,7 @@ public class SessionManager
|
||||
accountSession = null; // No more account
|
||||
|
||||
// Restore config
|
||||
configManager.switchSession(null);
|
||||
configManager.switchSession();
|
||||
|
||||
eventBus.post(new SessionClose());
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ import net.runelite.api.Client;
|
||||
import net.runelite.api.Constants;
|
||||
import net.runelite.api.MainBufferProvider;
|
||||
import net.runelite.api.NullItemID;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.api.RenderOverview;
|
||||
import net.runelite.api.Renderable;
|
||||
import net.runelite.api.WorldMapManager;
|
||||
@@ -374,6 +375,7 @@ public class Hooks implements Callbacks
|
||||
|
||||
/**
|
||||
* Copy an image
|
||||
*
|
||||
* @param src
|
||||
* @return
|
||||
*/
|
||||
@@ -395,6 +397,18 @@ public class Hooks implements Callbacks
|
||||
BufferedImage image = (BufferedImage) bufferProvider.getImage();
|
||||
Graphics2D graphics2d = image.createGraphics();
|
||||
|
||||
// Update selected scene tile
|
||||
if (!client.isMenuOpen())
|
||||
{
|
||||
Point p = client.getMouseCanvasPosition();
|
||||
p = new Point(
|
||||
p.getX() - client.getViewportXOffset(),
|
||||
p.getY() - client.getViewportYOffset());
|
||||
|
||||
client.setCheckClick(true);
|
||||
client.setMouseCanvasHoverPosition(p);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
renderer.render(graphics2d, OverlayLayer.ABOVE_SCENE);
|
||||
|
||||
@@ -49,4 +49,7 @@ public @interface ConfigItem
|
||||
|
||||
String group() default "";
|
||||
|
||||
String unhide() default "";
|
||||
|
||||
String parent() default "";
|
||||
}
|
||||
|
||||
@@ -24,10 +24,10 @@
|
||||
*/
|
||||
package net.runelite.client.config;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
|
||||
public class ConfigItemsGroup
|
||||
{
|
||||
|
||||
@@ -62,7 +62,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
import net.runelite.api.events.ConfigChanged;
|
||||
import net.runelite.client.RuneLite;
|
||||
import net.runelite.client.account.AccountSession;
|
||||
import static net.runelite.client.RuneLite.PROFILES_DIR;
|
||||
import net.runelite.client.eventbus.EventBus;
|
||||
import net.runelite.client.util.ColorUtil;
|
||||
|
||||
@@ -71,14 +71,14 @@ import net.runelite.client.util.ColorUtil;
|
||||
public class ConfigManager
|
||||
{
|
||||
private static final String SETTINGS_FILE_NAME = "runeliteplus.properties";
|
||||
private static final String STANDARD_SETTINGS_FILE_NAME = "settings.properties";
|
||||
private static final File SETTINGS_FILE = new File(RuneLite.RUNELITE_DIR, SETTINGS_FILE_NAME);
|
||||
private static final File STANDARD_SETTINGS_FILE = new File(RuneLite.RUNELITE_DIR, "settings.properties");
|
||||
private static final File STANDARD_SETTINGS_FILE = new File(RuneLite.RUNELITE_DIR, STANDARD_SETTINGS_FILE_NAME);
|
||||
|
||||
@Inject
|
||||
EventBus eventBus;
|
||||
|
||||
private final ScheduledExecutorService executor;
|
||||
|
||||
private final ConfigInvocationHandler handler = new ConfigInvocationHandler(this);
|
||||
private final Properties properties = new Properties();
|
||||
private final Map<String, String> pendingChanges = new HashMap<>();
|
||||
@@ -91,7 +91,7 @@ public class ConfigManager
|
||||
executor.scheduleWithFixedDelay(this::sendConfig, 30, 30, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
public final void switchSession(AccountSession session)
|
||||
public final void switchSession()
|
||||
{
|
||||
// Ensure existing config is saved
|
||||
load();
|
||||
@@ -164,7 +164,7 @@ public class ConfigManager
|
||||
catch (FileNotFoundException ex)
|
||||
{
|
||||
log.debug("Unable to load settings - no such file, syncing from standard settings");
|
||||
syncPropertiesFromFile(STANDARD_SETTINGS_FILE);
|
||||
syncLastModified();
|
||||
}
|
||||
catch (IllegalArgumentException | IOException ex)
|
||||
{
|
||||
@@ -201,11 +201,11 @@ public class ConfigManager
|
||||
}
|
||||
}
|
||||
|
||||
private void saveToFile(final File propertiesFile) throws IOException
|
||||
private void saveToFile() throws IOException
|
||||
{
|
||||
propertiesFile.getParentFile().mkdirs();
|
||||
ConfigManager.SETTINGS_FILE.getParentFile().mkdirs();
|
||||
|
||||
try (FileOutputStream out = new FileOutputStream(propertiesFile))
|
||||
try (FileOutputStream out = new FileOutputStream(ConfigManager.SETTINGS_FILE))
|
||||
{
|
||||
final FileLock lock = out.getChannel().lock();
|
||||
|
||||
@@ -589,7 +589,7 @@ public class ConfigManager
|
||||
{
|
||||
try
|
||||
{
|
||||
saveToFile(SETTINGS_FILE);
|
||||
saveToFile();
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
@@ -597,4 +597,32 @@ public class ConfigManager
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void syncLastModified()
|
||||
{
|
||||
File newestFile;
|
||||
|
||||
newestFile = STANDARD_SETTINGS_FILE;
|
||||
|
||||
for (File profileDir : PROFILES_DIR.listFiles())
|
||||
{
|
||||
if (!profileDir.isDirectory())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (File settings : profileDir.listFiles())
|
||||
{
|
||||
if (!settings.getName().equals(STANDARD_SETTINGS_FILE_NAME) ||
|
||||
settings.lastModified() < newestFile.lastModified())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
newestFile = settings;
|
||||
}
|
||||
}
|
||||
|
||||
syncPropertiesFromFile(newestFile);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Craftiii4 <craftiii4@gmail.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
|
||||
public class ConfigPanelItem
|
||||
{
|
||||
|
||||
@Getter(AccessLevel.PUBLIC)
|
||||
private ConfigPanelItem parent;
|
||||
|
||||
@Getter(AccessLevel.PUBLIC)
|
||||
private List<ConfigPanelItem> children;
|
||||
|
||||
@Getter(AccessLevel.PUBLIC)
|
||||
private ConfigItemDescriptor item;
|
||||
|
||||
public ConfigPanelItem(ConfigPanelItem parent, ConfigItemDescriptor item)
|
||||
{
|
||||
this.parent = parent;
|
||||
this.children = new ArrayList<>();
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
public List<ConfigPanelItem> getItemsAsList()
|
||||
{
|
||||
List<ConfigPanelItem> items = new ArrayList<>();
|
||||
|
||||
items.add(this);
|
||||
|
||||
for (ConfigPanelItem child : children)
|
||||
{
|
||||
items.addAll(child.getItemsAsList());
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
public int getDepth()
|
||||
{
|
||||
return (parent == null ? 0 : parent.getDepth() + 1);
|
||||
}
|
||||
|
||||
public boolean addChildIfMatchParent(ConfigItemDescriptor cid)
|
||||
{
|
||||
|
||||
if (item != null && item.getItem().keyName().equals(cid.getItem().parent()))
|
||||
{
|
||||
children.add(new ConfigPanelItem(this, cid));
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (ConfigPanelItem child : children)
|
||||
{
|
||||
if (child.addChildIfMatchParent(cid))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -24,11 +24,10 @@
|
||||
*/
|
||||
package net.runelite.client.config;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import net.runelite.client.ui.FontManager;
|
||||
|
||||
import java.awt.Font;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.runelite.client.ui.FontManager;
|
||||
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package net.runelite.client.config;
|
||||
|
||||
public class Stub
|
||||
{
|
||||
}
|
||||
@@ -106,7 +106,7 @@ public class DiscordService implements AutoCloseable
|
||||
discordEventHandlers.joinGame = this::joinGame;
|
||||
discordEventHandlers.spectateGame = this::spectateGame;
|
||||
discordEventHandlers.joinRequest = this::joinRequest;
|
||||
discordRPC.Discord_Initialize(runeLiteProperties.discordAppID, discordEventHandlers, true, null);
|
||||
discordRPC.Discord_Initialize(RuneLiteProperties.discordAppID, discordEventHandlers, true, null);
|
||||
executorService.scheduleAtFixedRate(discordRPC::Discord_RunCallbacks, 0, 2, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
|
||||
@@ -35,26 +35,32 @@ for mouse motion.
|
||||
package net.runelite.client.flexo;
|
||||
|
||||
import com.github.joonasvali.naturalmouse.api.MouseMotionFactory;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.client.ui.ClientUI;
|
||||
import sun.awt.ComponentFactory;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.AWTException;
|
||||
import java.awt.Color;
|
||||
import java.awt.GraphicsDevice;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.awt.Point;
|
||||
import java.awt.Robot;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.event.InputEvent;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.peer.RobotPeer;
|
||||
import java.util.Random;
|
||||
import java.util.logging.Logger;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.Constants;
|
||||
import net.runelite.client.ui.ClientUI;
|
||||
import sun.awt.ComponentFactory;
|
||||
|
||||
public class Flexo extends Robot {
|
||||
public class Flexo extends Robot
|
||||
{
|
||||
public ThreadGroup flexoThreads = new ThreadGroup("flexo");
|
||||
public static boolean isActive;
|
||||
public static double scale;
|
||||
public static Client client;
|
||||
public static ClientUI clientUI;
|
||||
public static int fixedWidth = 765;
|
||||
public static int fixedHeight = 503;
|
||||
public static int fixedWidth = Constants.GAME_FIXED_WIDTH;
|
||||
public static int fixedHeight = Constants.GAME_FIXED_HEIGHT;
|
||||
public static boolean isStretched;
|
||||
public static int minDelay = 45;
|
||||
public static MouseMotionFactory currentMouseMotionFactory;
|
||||
@@ -62,17 +68,21 @@ public class Flexo extends Robot {
|
||||
private Thread holdKeyThread;
|
||||
private RobotPeer peer;
|
||||
|
||||
public Flexo() throws AWTException {
|
||||
if (GraphicsEnvironment.isHeadless()) {
|
||||
public Flexo() throws AWTException
|
||||
{
|
||||
if (GraphicsEnvironment.isHeadless())
|
||||
{
|
||||
throw new AWTException("headless environment");
|
||||
}
|
||||
init(GraphicsEnvironment.getLocalGraphicsEnvironment()
|
||||
.getDefaultScreenDevice());
|
||||
}
|
||||
|
||||
private void init(GraphicsDevice screen) throws AWTException {
|
||||
private void init(GraphicsDevice screen) throws AWTException
|
||||
{
|
||||
Toolkit toolkit = Toolkit.getDefaultToolkit();
|
||||
if (toolkit instanceof ComponentFactory) {
|
||||
if (toolkit instanceof ComponentFactory)
|
||||
{
|
||||
peer = ((ComponentFactory) toolkit).createRobot(this, screen);
|
||||
RobotDisposer disposer = new RobotDisposer(peer);
|
||||
sun.java2d.Disposer.addRecord(anchor, disposer);
|
||||
@@ -81,24 +91,35 @@ public class Flexo extends Robot {
|
||||
|
||||
private transient Object anchor = new Object();
|
||||
|
||||
static class RobotDisposer implements sun.java2d.DisposerRecord {
|
||||
static class RobotDisposer implements sun.java2d.DisposerRecord
|
||||
{
|
||||
private final RobotPeer peer;
|
||||
private RobotDisposer(RobotPeer peer) {
|
||||
|
||||
private RobotDisposer(RobotPeer peer)
|
||||
{
|
||||
this.peer = peer;
|
||||
}
|
||||
public void dispose() {
|
||||
if (peer != null) {
|
||||
|
||||
public void dispose()
|
||||
{
|
||||
if (peer != null)
|
||||
{
|
||||
peer.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void pauseMS(int delayMS) {
|
||||
private void pauseMS(int delayMS)
|
||||
{
|
||||
long initialMS = System.currentTimeMillis();
|
||||
while (System.currentTimeMillis()<initialMS+delayMS) {
|
||||
try {
|
||||
while (System.currentTimeMillis() < initialMS + delayMS)
|
||||
{
|
||||
try
|
||||
{
|
||||
Thread.sleep(10);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -106,29 +127,39 @@ public class Flexo extends Robot {
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void mouseMove(int x, int y) {
|
||||
try {
|
||||
public synchronized void mouseMove(int x, int y)
|
||||
{
|
||||
try
|
||||
{
|
||||
//TODO: Must be better way to determine titlebar width
|
||||
currentMouseMotionFactory.build(ClientUI.frame.getX() + x + determineHorizontalOffset(), ClientUI.frame.getY() + y + determineVerticalOffset()).move();
|
||||
this.delay(getMinDelay());
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void mouseMove(Point p) {
|
||||
public synchronized void mouseMove(Point p)
|
||||
{
|
||||
Point p2 = p;
|
||||
mouseMove((int) p.getX(), (int) p.getY());
|
||||
try {
|
||||
try
|
||||
{
|
||||
Thread.sleep(150);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void mousePress(int buttonID) {
|
||||
if (buttonID<1 || buttonID >5) {
|
||||
public synchronized void mousePress(int buttonID)
|
||||
{
|
||||
if (buttonID < 1 || buttonID > 5)
|
||||
{
|
||||
Logger.getAnonymousLogger().warning("Invalid mouse button ID. please use 1-5.");
|
||||
return;
|
||||
}
|
||||
@@ -136,8 +167,10 @@ public class Flexo extends Robot {
|
||||
this.delay(getMinDelay());
|
||||
}
|
||||
|
||||
public synchronized void mousePressAndRelease(int buttonID) {
|
||||
if (buttonID<1 || buttonID >5) {
|
||||
public synchronized void mousePressAndRelease(int buttonID)
|
||||
{
|
||||
if (buttonID < 1 || buttonID > 5)
|
||||
{
|
||||
Logger.getAnonymousLogger().warning("Invalid mouse button ID. please use 1-5.");
|
||||
return;
|
||||
}
|
||||
@@ -148,11 +181,13 @@ public class Flexo extends Robot {
|
||||
}
|
||||
|
||||
//TODO: Symbols are nut supported at this time
|
||||
public synchronized void typeMessage(String message) {
|
||||
public synchronized void typeMessage(String message)
|
||||
{
|
||||
|
||||
Random r = new Random();
|
||||
char[] charArray = message.toCharArray();
|
||||
for (char c : charArray) {
|
||||
for (char c : charArray)
|
||||
{
|
||||
keyPress(KeyEvent.getExtendedKeyCodeForChar(c));
|
||||
this.delay(93 + r.nextInt(getMinDelay()));
|
||||
}
|
||||
@@ -162,10 +197,11 @@ public class Flexo extends Robot {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public synchronized void mouseRelease(int buttonID) {
|
||||
if (buttonID<1 || buttonID >5) {
|
||||
public synchronized void mouseRelease(int buttonID)
|
||||
{
|
||||
if (buttonID < 1 || buttonID > 5)
|
||||
{
|
||||
Logger.getAnonymousLogger().warning("Invalid mouse button ID. please use 1-5.");
|
||||
return;
|
||||
}
|
||||
@@ -173,19 +209,25 @@ public class Flexo extends Robot {
|
||||
this.delay(getMinDelay());
|
||||
}
|
||||
|
||||
private int getMinDelay() {
|
||||
private int getMinDelay()
|
||||
{
|
||||
Random random = new Random();
|
||||
int random1 = random.nextInt(minDelay);
|
||||
if (random1 < minDelay / 2)
|
||||
{
|
||||
random1 = random.nextInt(minDelay / 2) + minDelay / 2 + random.nextInt(minDelay / 2);
|
||||
}
|
||||
return random1;
|
||||
}
|
||||
|
||||
private int getWheelDelay() {
|
||||
private int getWheelDelay()
|
||||
{
|
||||
Random random = new Random();
|
||||
int random1 = random.nextInt(minDelay);
|
||||
if (random1 < minDelay / 2)
|
||||
{
|
||||
random1 = random.nextInt(minDelay / 2) + minDelay / 2 + random.nextInt(minDelay / 2);
|
||||
}
|
||||
return random1;
|
||||
}
|
||||
|
||||
@@ -195,12 +237,13 @@ public class Flexo extends Robot {
|
||||
* @param wheelAmt number of "notches" to move the mouse wheel
|
||||
* Negative values indicate movement up/away from the user,
|
||||
* positive values indicate movement down/towards the user.
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
@Override
|
||||
public synchronized void mouseWheel(int wheelAmt) {
|
||||
for (int i : new int[wheelAmt]) {
|
||||
public synchronized void mouseWheel(int wheelAmt)
|
||||
{
|
||||
for (int i : new int[wheelAmt])
|
||||
{
|
||||
peer.mouseWheel(wheelAmt);
|
||||
this.delay(getWheelDelay());
|
||||
}
|
||||
@@ -221,35 +264,47 @@ public class Flexo extends Robot {
|
||||
* @see java.awt.event.KeyEvent
|
||||
*/
|
||||
@Override
|
||||
public synchronized void keyPress(int keycode) {
|
||||
public synchronized void keyPress(int keycode)
|
||||
{
|
||||
peer.keyPress(keycode);
|
||||
this.delay(getMinDelay());
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void keyRelease(int keycode) {
|
||||
public synchronized void keyRelease(int keycode)
|
||||
{
|
||||
peer.keyRelease(keycode);
|
||||
this.delay(getMinDelay());
|
||||
}
|
||||
|
||||
public synchronized void holdKey(int keycode, int timeMS) {
|
||||
new Thread(() -> {
|
||||
public synchronized void holdKey(int keycode, int timeMS)
|
||||
{
|
||||
new Thread(() ->
|
||||
{
|
||||
peer.keyPress(keycode);
|
||||
long startTime = System.currentTimeMillis();
|
||||
while ((startTime + timeMS) > System.currentTimeMillis()) { }
|
||||
while ((startTime + timeMS) > System.currentTimeMillis())
|
||||
{
|
||||
}
|
||||
peer.keyRelease(keycode);
|
||||
this.delay(getMinDelay());
|
||||
}).start();
|
||||
}
|
||||
|
||||
public synchronized void holdKeyIndefinitely(int keycode) {
|
||||
holdKeyThread = new Thread(() -> {
|
||||
public synchronized void holdKeyIndefinitely(int keycode)
|
||||
{
|
||||
holdKeyThread = new Thread(() ->
|
||||
{
|
||||
pausedIndefinitely = true;
|
||||
peer.keyPress(keycode);
|
||||
while (pausedIndefinitely) {
|
||||
try {
|
||||
holdKeyThread.sleep(10);
|
||||
} catch (InterruptedException e) {
|
||||
while (pausedIndefinitely)
|
||||
{
|
||||
try
|
||||
{
|
||||
Thread.sleep(10);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -261,21 +316,25 @@ public class Flexo extends Robot {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getPixelColor(int x, int y) {
|
||||
public Color getPixelColor(int x, int y)
|
||||
{
|
||||
Color color = new Color(peer.getRGBPixel(x, y));
|
||||
return color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delay(int ms) {
|
||||
public void delay(int ms)
|
||||
{
|
||||
pauseMS(ms);
|
||||
}
|
||||
|
||||
public int determineHorizontalOffset() {
|
||||
public int determineHorizontalOffset()
|
||||
{
|
||||
return clientUI.getCanvasOffset().getX();
|
||||
}
|
||||
|
||||
public int determineVerticalOffset() {
|
||||
public int determineVerticalOffset()
|
||||
{
|
||||
return clientUI.getCanvasOffset().getY();
|
||||
}
|
||||
|
||||
|
||||
@@ -28,45 +28,56 @@
|
||||
|
||||
package net.runelite.client.flexo;
|
||||
|
||||
import net.runelite.client.ui.ClientUI;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.Point;
|
||||
import java.awt.Rectangle;
|
||||
import java.util.Random;
|
||||
import java.util.logging.Logger;
|
||||
import net.runelite.api.Constants;
|
||||
import net.runelite.client.ui.ClientUI;
|
||||
|
||||
public class FlexoMouse {
|
||||
public class FlexoMouse
|
||||
{
|
||||
|
||||
/*
|
||||
Should pass unstretched coords, handles all conversions here.
|
||||
*/
|
||||
public static Point getClickPoint(Rectangle rect)
|
||||
{
|
||||
if (rect!=null) {
|
||||
if (rect != null)
|
||||
{
|
||||
Random r = new Random();
|
||||
int x = -1;
|
||||
int y = -1;
|
||||
x = rect.x + r.nextInt(rect.width);
|
||||
y = rect.y + r.nextInt(rect.height);
|
||||
|
||||
if (Flexo.isStretched) {
|
||||
if (Flexo.isStretched)
|
||||
{
|
||||
double wScale;
|
||||
double hScale;
|
||||
|
||||
if (Flexo.client.isResized()) {
|
||||
wScale = (Flexo.client.getStretchedDimensions().width / Flexo.client.getRealDimensions().width);
|
||||
hScale = (Flexo.client.getStretchedDimensions().height / Flexo.client.getRealDimensions().height);
|
||||
if (Flexo.client.isResized())
|
||||
{
|
||||
wScale = (Flexo.client.getStretchedDimensions().width / (double) Flexo.client.getRealDimensions().width);
|
||||
hScale = (Flexo.client.getStretchedDimensions().height / (double) Flexo.client.getRealDimensions().height);
|
||||
int newX = (int) (x * wScale);
|
||||
int newY = (int) (y * hScale);
|
||||
if (newX>0 && newX< ClientUI.frame.getWidth()) {
|
||||
if (newY>0 && newY< ClientUI.frame.getHeight()) {
|
||||
if (newX > 0 && newX < ClientUI.frame.getWidth())
|
||||
{
|
||||
if (newY > 0 && newY < ClientUI.frame.getHeight())
|
||||
{
|
||||
return new Point(newX, newY);
|
||||
}
|
||||
}
|
||||
Logger.getAnonymousLogger().warning("[RuneLit]Flexo - Off screen point attempted. Split the step, or rotate the screen.");
|
||||
return null;
|
||||
} else {
|
||||
if (x>0 && x< ClientUI.frame.getWidth()) {
|
||||
if (y>0 && y< ClientUI.frame.getHeight()) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (x > 0 && x < ClientUI.frame.getWidth())
|
||||
{
|
||||
if (y > 0 && y < ClientUI.frame.getHeight())
|
||||
{
|
||||
return new Point(x, y);
|
||||
}
|
||||
}
|
||||
@@ -74,28 +85,38 @@ public class FlexoMouse {
|
||||
return null;
|
||||
}
|
||||
|
||||
} else if (!Flexo.client.isResized()) {
|
||||
int fixedWidth = 765;
|
||||
}
|
||||
else if (!Flexo.client.isResized())
|
||||
{
|
||||
final int fixedWidth = Constants.GAME_FIXED_WIDTH;
|
||||
int widthDif = ClientUI.frame.getWidth();
|
||||
|
||||
if (ClientUI.pluginToolbar.isVisible()) {
|
||||
if (ClientUI.pluginToolbar.isVisible())
|
||||
{
|
||||
widthDif -= ClientUI.pluginToolbar.getWidth();
|
||||
}
|
||||
if (ClientUI.pluginPanel != null)
|
||||
{
|
||||
widthDif -= ClientUI.pluginPanel.getWidth();
|
||||
}
|
||||
|
||||
widthDif -= fixedWidth;
|
||||
if (x+(widthDif/2)>0 && x+(widthDif/2)< ClientUI.frame.getWidth()) {
|
||||
if (y>0 && y< ClientUI.frame.getHeight()) {
|
||||
if (x + (widthDif / 2) > 0 && x + (widthDif / 2) < ClientUI.frame.getWidth())
|
||||
{
|
||||
if (y > 0 && y < ClientUI.frame.getHeight())
|
||||
{
|
||||
return new Point(x, y);
|
||||
}
|
||||
}
|
||||
Logger.getAnonymousLogger().warning("[RuneLit]Flexo - Off screen point attempted. Split the step, or rotate the screen.");
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
if (x>0 && x< ClientUI.frame.getWidth()) {
|
||||
if (y>0 && y< ClientUI.frame.getHeight()) {
|
||||
else
|
||||
{
|
||||
if (x > 0 && x < ClientUI.frame.getWidth())
|
||||
{
|
||||
if (y > 0 && y < ClientUI.frame.getHeight())
|
||||
{
|
||||
return new Point(x, y);
|
||||
}
|
||||
}
|
||||
@@ -113,12 +134,15 @@ public class FlexoMouse {
|
||||
double wScale;
|
||||
double hScale;
|
||||
|
||||
if (Flexo.client.isResized()) {
|
||||
wScale = (Flexo.client.getStretchedDimensions().width / Flexo.client.getRealDimensions().width);
|
||||
hScale = (Flexo.client.getStretchedDimensions().height / Flexo.client.getRealDimensions().height);
|
||||
} else {
|
||||
wScale = ((double) Flexo.client.getStretchedDimensions().width) / Flexo.fixedWidth;
|
||||
hScale = ((double) Flexo.client.getStretchedDimensions().height) / Flexo.fixedHeight;
|
||||
if (Flexo.client.isResized())
|
||||
{
|
||||
wScale = (Flexo.client.getStretchedDimensions().width / (double) Flexo.client.getRealDimensions().width);
|
||||
hScale = (Flexo.client.getStretchedDimensions().height / (double) Flexo.client.getRealDimensions().height);
|
||||
}
|
||||
else
|
||||
{
|
||||
wScale = (Flexo.client.getStretchedDimensions().width) / (double) Flexo.fixedWidth;
|
||||
hScale = (Flexo.client.getStretchedDimensions().height) / (double) Flexo.fixedHeight;
|
||||
}
|
||||
|
||||
int xPadding = (int) rect.getWidth() / 5;
|
||||
@@ -129,29 +153,37 @@ public class FlexoMouse {
|
||||
clickRect.height = rect.height - yPadding * 2;
|
||||
clickRect.x = rect.x + xPadding;
|
||||
clickRect.y = rect.y + yPadding;
|
||||
if (clickRect.width>0&&clickRect.height>0) {
|
||||
if (clickRect.width > 0 && clickRect.height > 0)
|
||||
{
|
||||
int x = clickRect.x + r.nextInt(clickRect.width);
|
||||
int y = clickRect.y + r.nextInt(clickRect.height);
|
||||
double tScale = 1 + (Flexo.scale / 100);
|
||||
|
||||
if (Flexo.client.isResized()) {
|
||||
if (Flexo.client.isResized())
|
||||
{
|
||||
return new Rectangle((int) (clickRect.x * wScale), (int) (clickRect.y * wScale), (int) (clickRect.width * wScale), (int) (clickRect.getHeight() * hScale));
|
||||
} else {
|
||||
return new Rectangle((int)(clickRect.x), (int)(clickRect.y), (int)(clickRect.width), (int)(clickRect.getHeight()));
|
||||
}
|
||||
else
|
||||
{
|
||||
return new Rectangle(clickRect.x, clickRect.y, clickRect.width, (int) (clickRect.getHeight()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//Fixed, not stretched
|
||||
else if (!Flexo.client.isResized()) {
|
||||
else if (!Flexo.client.isResized())
|
||||
{
|
||||
int fixedWidth = 765;
|
||||
int widthDif = ClientUI.frame.getWidth();
|
||||
|
||||
if (ClientUI.pluginToolbar.isVisible()) {
|
||||
if (ClientUI.pluginToolbar.isVisible())
|
||||
{
|
||||
widthDif -= ClientUI.pluginToolbar.getWidth();
|
||||
}
|
||||
if (ClientUI.pluginPanel != null)
|
||||
{
|
||||
widthDif -= ClientUI.pluginPanel.getWidth();
|
||||
}
|
||||
|
||||
widthDif -= fixedWidth;
|
||||
int xPadding = (int) rect.getWidth() / 5;
|
||||
@@ -162,14 +194,16 @@ public class FlexoMouse {
|
||||
clickRect.height = rect.height - yPadding;
|
||||
clickRect.x = rect.x + xPadding;
|
||||
clickRect.y = rect.y + yPadding;
|
||||
if (clickRect.height>0&&clickRect.width>0) {
|
||||
if (clickRect.height > 0 && clickRect.width > 0)
|
||||
{
|
||||
int x = clickRect.x + r.nextInt(clickRect.width);
|
||||
int y = clickRect.y + r.nextInt(clickRect.height);
|
||||
return new Rectangle((int) (clickRect.x), (int) (clickRect.y), (int) (clickRect.width), (int) (clickRect.getHeight()));
|
||||
return new Rectangle(clickRect.x, clickRect.y, clickRect.width, (int) (clickRect.getHeight()));
|
||||
}
|
||||
}
|
||||
//Resizable, not stretched
|
||||
else {
|
||||
else
|
||||
{
|
||||
int xPadding = (int) rect.getWidth() / 5;
|
||||
int yPadding = (int) rect.getHeight() / 5;
|
||||
Random r = new Random();
|
||||
@@ -178,10 +212,11 @@ public class FlexoMouse {
|
||||
clickRect.height = rect.height - yPadding * 2;
|
||||
clickRect.x = rect.x + xPadding;
|
||||
clickRect.y = rect.y + yPadding;
|
||||
if (clickRect.height>0&&clickRect.width>0) {
|
||||
if (clickRect.height > 0 && clickRect.width > 0)
|
||||
{
|
||||
int x = clickRect.x + r.nextInt(clickRect.width);
|
||||
int y = clickRect.y + r.nextInt(clickRect.height);
|
||||
return new Rectangle((int)(clickRect.x), (int)(clickRect.y), (int)(clickRect.width), (int)(clickRect.getHeight()));
|
||||
return new Rectangle(clickRect.x, clickRect.y, clickRect.width, (int) (clickRect.getHeight()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,8 +26,212 @@
|
||||
package net.runelite.client.game;
|
||||
|
||||
import lombok.Getter;
|
||||
import static net.runelite.api.NullObjectID.*;
|
||||
import static net.runelite.api.ObjectID.*;
|
||||
import static net.runelite.api.NullObjectID.NULL_25337;
|
||||
import static net.runelite.api.NullObjectID.NULL_26371;
|
||||
import static net.runelite.api.NullObjectID.NULL_26375;
|
||||
import static net.runelite.api.NullObjectID.NULL_26884;
|
||||
import static net.runelite.api.NullObjectID.NULL_26886;
|
||||
import static net.runelite.api.NullObjectID.NULL_29868;
|
||||
import static net.runelite.api.NullObjectID.NULL_29869;
|
||||
import static net.runelite.api.NullObjectID.NULL_29870;
|
||||
import static net.runelite.api.NullObjectID.NULL_31823;
|
||||
import static net.runelite.api.NullObjectID.NULL_31849;
|
||||
import static net.runelite.api.NullObjectID.NULL_33327;
|
||||
import static net.runelite.api.NullObjectID.NULL_33328;
|
||||
import static net.runelite.api.ObjectID.A_WOODEN_LOG;
|
||||
import static net.runelite.api.ObjectID.BALANCING_LEDGE_23548;
|
||||
import static net.runelite.api.ObjectID.BIG_WINDOW;
|
||||
import static net.runelite.api.ObjectID.BOULDER_27990;
|
||||
import static net.runelite.api.ObjectID.BROKEN_FENCE;
|
||||
import static net.runelite.api.ObjectID.BROKEN_FENCE_2618;
|
||||
import static net.runelite.api.ObjectID.BROKEN_RAFT;
|
||||
import static net.runelite.api.ObjectID.BROKEN_WALL_33344;
|
||||
import static net.runelite.api.ObjectID.CASTLE_WALL;
|
||||
import static net.runelite.api.ObjectID.CLIMBING_ROCKS;
|
||||
import static net.runelite.api.ObjectID.CLIMBING_ROCKS_11948;
|
||||
import static net.runelite.api.ObjectID.CLIMBING_ROCKS_11949;
|
||||
import static net.runelite.api.ObjectID.CREVICE_16465;
|
||||
import static net.runelite.api.ObjectID.CREVICE_16539;
|
||||
import static net.runelite.api.ObjectID.CREVICE_16543;
|
||||
import static net.runelite.api.ObjectID.CREVICE_19043;
|
||||
import static net.runelite.api.ObjectID.CREVICE_30198;
|
||||
import static net.runelite.api.ObjectID.CREVICE_9739;
|
||||
import static net.runelite.api.ObjectID.CREVICE_9740;
|
||||
import static net.runelite.api.ObjectID.CROSSBOW_TREE_17062;
|
||||
import static net.runelite.api.ObjectID.CRUMBLING_WALL_24222;
|
||||
import static net.runelite.api.ObjectID.DARK_TUNNEL_10047;
|
||||
import static net.runelite.api.ObjectID.DENSE_FOREST;
|
||||
import static net.runelite.api.ObjectID.DENSE_FOREST_3938;
|
||||
import static net.runelite.api.ObjectID.DENSE_FOREST_3939;
|
||||
import static net.runelite.api.ObjectID.DENSE_FOREST_3998;
|
||||
import static net.runelite.api.ObjectID.DENSE_FOREST_3999;
|
||||
import static net.runelite.api.ObjectID.FALLEN_TREE_33192;
|
||||
import static net.runelite.api.ObjectID.FENCE_16518;
|
||||
import static net.runelite.api.ObjectID.GAP;
|
||||
import static net.runelite.api.ObjectID.GAP_2831;
|
||||
import static net.runelite.api.ObjectID.GAP_29326;
|
||||
import static net.runelite.api.ObjectID.HOLE_16520;
|
||||
import static net.runelite.api.ObjectID.HOLE_30966;
|
||||
import static net.runelite.api.ObjectID.HOLE_31481;
|
||||
import static net.runelite.api.ObjectID.HOLE_31482;
|
||||
import static net.runelite.api.ObjectID.ICE_CHUNKS_31822;
|
||||
import static net.runelite.api.ObjectID.ICE_CHUNKS_31990;
|
||||
import static net.runelite.api.ObjectID.JUTTING_WALL_17002;
|
||||
import static net.runelite.api.ObjectID.LADDER_30938;
|
||||
import static net.runelite.api.ObjectID.LADDER_30939;
|
||||
import static net.runelite.api.ObjectID.LADDER_30940;
|
||||
import static net.runelite.api.ObjectID.LADDER_30941;
|
||||
import static net.runelite.api.ObjectID.LEAVES;
|
||||
import static net.runelite.api.ObjectID.LEAVES_3924;
|
||||
import static net.runelite.api.ObjectID.LEAVES_3925;
|
||||
import static net.runelite.api.ObjectID.LEDGE_33190;
|
||||
import static net.runelite.api.ObjectID.LITTLE_BOULDER;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_16540;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_16541;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_16542;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_16546;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_16547;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_16548;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_20882;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_20884;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_23274;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_3929;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_3930;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_3931;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_3932;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_3933;
|
||||
import static net.runelite.api.ObjectID.LOOSE_RAILING;
|
||||
import static net.runelite.api.ObjectID.LOOSE_RAILING_2186;
|
||||
import static net.runelite.api.ObjectID.LOOSE_RAILING_28849;
|
||||
import static net.runelite.api.ObjectID.LOW_FENCE;
|
||||
import static net.runelite.api.ObjectID.MONKEYBARS_23566;
|
||||
import static net.runelite.api.ObjectID.MONKEYBARS_23567;
|
||||
import static net.runelite.api.ObjectID.MYSTERIOUS_PIPE;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_30767;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_30962;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_30964;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_PIPE_16509;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_PIPE_16511;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_PIPE_23140;
|
||||
import static net.runelite.api.ObjectID.ORNATE_RAILING;
|
||||
import static net.runelite.api.ObjectID.ORNATE_RAILING_17000;
|
||||
import static net.runelite.api.ObjectID.PILE_OF_RUBBLE_23563;
|
||||
import static net.runelite.api.ObjectID.PILE_OF_RUBBLE_23564;
|
||||
import static net.runelite.api.ObjectID.PILLAR_31561;
|
||||
import static net.runelite.api.ObjectID.PILLAR_31809;
|
||||
import static net.runelite.api.ObjectID.PIPE_21727;
|
||||
import static net.runelite.api.ObjectID.PIPE_21728;
|
||||
import static net.runelite.api.ObjectID.ROCKS;
|
||||
import static net.runelite.api.ObjectID.ROCKSLIDE_33184;
|
||||
import static net.runelite.api.ObjectID.ROCKSLIDE_33185;
|
||||
import static net.runelite.api.ObjectID.ROCKSLIDE_33191;
|
||||
import static net.runelite.api.ObjectID.ROCKS_14106;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16464;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16514;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16515;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16521;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16522;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16523;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16524;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16534;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16535;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16545;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16549;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16550;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16998;
|
||||
import static net.runelite.api.ObjectID.ROCKS_16999;
|
||||
import static net.runelite.api.ObjectID.ROCKS_17042;
|
||||
import static net.runelite.api.ObjectID.ROCKS_19849;
|
||||
import static net.runelite.api.ObjectID.ROCKS_2231;
|
||||
import static net.runelite.api.ObjectID.ROCKS_27984;
|
||||
import static net.runelite.api.ObjectID.ROCKS_27985;
|
||||
import static net.runelite.api.ObjectID.ROCKS_27987;
|
||||
import static net.runelite.api.ObjectID.ROCKS_27988;
|
||||
import static net.runelite.api.ObjectID.ROCKS_31757;
|
||||
import static net.runelite.api.ObjectID.ROCKS_31758;
|
||||
import static net.runelite.api.ObjectID.ROCKS_31759;
|
||||
import static net.runelite.api.ObjectID.ROCKS_34396;
|
||||
import static net.runelite.api.ObjectID.ROCKS_34397;
|
||||
import static net.runelite.api.ObjectID.ROCKS_34741;
|
||||
import static net.runelite.api.ObjectID.ROCKS_3748;
|
||||
import static net.runelite.api.ObjectID.ROCKS_3790;
|
||||
import static net.runelite.api.ObjectID.ROCKS_3791;
|
||||
import static net.runelite.api.ObjectID.ROCKS_3803;
|
||||
import static net.runelite.api.ObjectID.ROCKS_3804;
|
||||
import static net.runelite.api.ObjectID.ROCKS_6673;
|
||||
import static net.runelite.api.ObjectID.ROCKY_HANDHOLDS_26400;
|
||||
import static net.runelite.api.ObjectID.ROCKY_HANDHOLDS_26401;
|
||||
import static net.runelite.api.ObjectID.ROCKY_HANDHOLDS_26402;
|
||||
import static net.runelite.api.ObjectID.ROCKY_HANDHOLDS_26404;
|
||||
import static net.runelite.api.ObjectID.ROCKY_HANDHOLDS_26405;
|
||||
import static net.runelite.api.ObjectID.ROCKY_HANDHOLDS_26406;
|
||||
import static net.runelite.api.ObjectID.ROCK_16115;
|
||||
import static net.runelite.api.ObjectID.ROPESWING_23568;
|
||||
import static net.runelite.api.ObjectID.ROPESWING_23569;
|
||||
import static net.runelite.api.ObjectID.ROPE_ANCHOR;
|
||||
import static net.runelite.api.ObjectID.ROPE_ANCHOR_30917;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21306;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21307;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21308;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21309;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21310;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21311;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21312;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21313;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21314;
|
||||
import static net.runelite.api.ObjectID.ROPE_BRIDGE_21315;
|
||||
import static net.runelite.api.ObjectID.RUBBER_CAP_MUSHROOM;
|
||||
import static net.runelite.api.ObjectID.SPIKEY_CHAIN;
|
||||
import static net.runelite.api.ObjectID.SPIKEY_CHAIN_16538;
|
||||
import static net.runelite.api.ObjectID.STAIRS_31485;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONES;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONES_23646;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONES_23647;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_10663;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_11768;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_13504;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_14917;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_14918;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_16466;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_16513;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_16533;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_19040;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_19042;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21738;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21739;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_29728;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_29729;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_29730;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_5948;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_5949;
|
||||
import static net.runelite.api.ObjectID.STEPS;
|
||||
import static net.runelite.api.ObjectID.STEPS_29993;
|
||||
import static net.runelite.api.ObjectID.STICKS;
|
||||
import static net.runelite.api.ObjectID.STILE;
|
||||
import static net.runelite.api.ObjectID.STILE_12982;
|
||||
import static net.runelite.api.ObjectID.STRANGE_FLOOR;
|
||||
import static net.runelite.api.ObjectID.STRANGE_FLOOR_16544;
|
||||
import static net.runelite.api.ObjectID.STRONG_TREE_17074;
|
||||
import static net.runelite.api.ObjectID.TIGHTGAP;
|
||||
import static net.runelite.api.ObjectID.TRELLIS_20056;
|
||||
import static net.runelite.api.ObjectID.TRIPWIRE;
|
||||
import static net.runelite.api.ObjectID.TUNNEL_30174;
|
||||
import static net.runelite.api.ObjectID.TUNNEL_30175;
|
||||
import static net.runelite.api.ObjectID.TUNNEL_30959;
|
||||
import static net.runelite.api.ObjectID.UNDERWALL_TUNNEL;
|
||||
import static net.runelite.api.ObjectID.UNDERWALL_TUNNEL_16528;
|
||||
import static net.runelite.api.ObjectID.UNDERWALL_TUNNEL_16529;
|
||||
import static net.runelite.api.ObjectID.UNDERWALL_TUNNEL_16530;
|
||||
import static net.runelite.api.ObjectID.UNDERWALL_TUNNEL_19032;
|
||||
import static net.runelite.api.ObjectID.UNDERWALL_TUNNEL_19036;
|
||||
import static net.runelite.api.ObjectID.VINE_26880;
|
||||
import static net.runelite.api.ObjectID.VINE_26882;
|
||||
import static net.runelite.api.ObjectID.WALL_17047;
|
||||
import static net.runelite.api.ObjectID.WALL_17049;
|
||||
import static net.runelite.api.ObjectID.WALL_17050;
|
||||
import static net.runelite.api.ObjectID.WEATHERED_WALL;
|
||||
import static net.runelite.api.ObjectID.WEATHERED_WALL_16526;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
|
||||
@Getter
|
||||
|
||||
@@ -36,6 +36,7 @@ import javax.swing.JLabel;
|
||||
public class AsyncBufferedImage extends BufferedImage
|
||||
{
|
||||
private final List<Runnable> listeners = new CopyOnWriteArrayList<>();
|
||||
|
||||
public AsyncBufferedImage(int width, int height, int imageType)
|
||||
{
|
||||
super(width, height, imageType);
|
||||
|
||||
@@ -48,7 +48,116 @@ import static net.runelite.api.Constants.CLIENT_DEFAULT_ZOOM;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.ItemComposition;
|
||||
import net.runelite.api.ItemID;
|
||||
import static net.runelite.api.ItemID.*;
|
||||
import static net.runelite.api.ItemID.AGILITY_CAPE;
|
||||
import static net.runelite.api.ItemID.AGILITY_CAPET;
|
||||
import static net.runelite.api.ItemID.AGILITY_CAPET_13341;
|
||||
import static net.runelite.api.ItemID.AGILITY_CAPE_13340;
|
||||
import static net.runelite.api.ItemID.BOOTS_OF_LIGHTNESS;
|
||||
import static net.runelite.api.ItemID.BOOTS_OF_LIGHTNESS_89;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_11861;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13589;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13590;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13601;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13602;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13613;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13614;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13625;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13626;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13637;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13638;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13677;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_13678;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_21076;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_BOOTS_21078;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_11853;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13581;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13582;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13593;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13594;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13605;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13606;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13617;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13618;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13629;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13630;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13669;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_13670;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_21064;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_CAPE_21066;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_11859;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13587;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13588;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13599;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13600;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13611;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13612;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13623;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13624;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13635;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13636;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13675;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_13676;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_21073;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_GLOVES_21075;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_11851;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13579;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13580;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13591;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13592;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13603;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13604;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13615;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13616;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13627;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13628;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13667;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_13668;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_21061;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_HOOD_21063;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_11857;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13585;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13586;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13597;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13598;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13609;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13610;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13621;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13622;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13633;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13634;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13673;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_13674;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_21070;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_LEGS_21072;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_11855;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13583;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13584;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13595;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13596;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13607;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13608;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13619;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13620;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13631;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13632;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13671;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_13672;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_21067;
|
||||
import static net.runelite.api.ItemID.GRACEFUL_TOP_21069;
|
||||
import static net.runelite.api.ItemID.MAX_CAPE;
|
||||
import static net.runelite.api.ItemID.MAX_CAPE_13342;
|
||||
import static net.runelite.api.ItemID.PENANCE_GLOVES;
|
||||
import static net.runelite.api.ItemID.PENANCE_GLOVES_10554;
|
||||
import static net.runelite.api.ItemID.SPOTTED_CAPE;
|
||||
import static net.runelite.api.ItemID.SPOTTED_CAPE_10073;
|
||||
import static net.runelite.api.ItemID.SPOTTIER_CAPE;
|
||||
import static net.runelite.api.ItemID.SPOTTIER_CAPE_10074;
|
||||
import net.runelite.api.SpritePixels;
|
||||
import net.runelite.api.events.GameStateChanged;
|
||||
import net.runelite.api.events.PostItemComposition;
|
||||
@@ -258,6 +367,7 @@ public class ItemManager
|
||||
|
||||
/**
|
||||
* Invalidates internal item manager item composition cache (but not client item composition cache)
|
||||
*
|
||||
* @see Client#getItemCompositionCache()
|
||||
*/
|
||||
public void invalidateItemCompositionCache()
|
||||
@@ -303,6 +413,7 @@ public class ItemManager
|
||||
|
||||
/**
|
||||
* Look up an item's stats
|
||||
*
|
||||
* @param itemId item id
|
||||
* @return item stats
|
||||
*/
|
||||
|
||||
@@ -29,7 +29,411 @@ import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import static net.runelite.api.ItemID.*;
|
||||
import static net.runelite.api.ItemID.ABYSSAL_TENTACLE;
|
||||
import static net.runelite.api.ItemID.ABYSSAL_WHIP;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_25;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_50;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_75;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_25;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_50;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_75;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_25;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_50;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_75;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_25;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_50;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_75;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_FURY;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_FURY_OR;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY1;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY2;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY3;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY5;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T1;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T2;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T3;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T5;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_TORTURE;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_TORTURE_OR;
|
||||
import static net.runelite.api.ItemID.ANCIENT_WYVERN_SHIELD;
|
||||
import static net.runelite.api.ItemID.ANCIENT_WYVERN_SHIELD_21634;
|
||||
import static net.runelite.api.ItemID.ANGUISH_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.ARCHERS_RING;
|
||||
import static net.runelite.api.ItemID.ARCHERS_RING_I;
|
||||
import static net.runelite.api.ItemID.ARMADYL_GODSWORD;
|
||||
import static net.runelite.api.ItemID.ARMADYL_GODSWORD_OR;
|
||||
import static net.runelite.api.ItemID.ARMADYL_GODSWORD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.BANDOS_GODSWORD;
|
||||
import static net.runelite.api.ItemID.BANDOS_GODSWORD_OR;
|
||||
import static net.runelite.api.ItemID.BANDOS_GODSWORD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.BERSERKER_RING;
|
||||
import static net.runelite.api.ItemID.BERSERKER_RING_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_1;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_10_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_1_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_2;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_2_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_3;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_3_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_4;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_4_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_5;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_5_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_6;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_6_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_7;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_7_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_8;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_8_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_9;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_9_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_I;
|
||||
import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.BONECRUSHER_NECKLACE;
|
||||
import static net.runelite.api.ItemID.BOTTOMLESS_COMPOST_BUCKET;
|
||||
import static net.runelite.api.ItemID.BOTTOMLESS_COMPOST_BUCKET_22997;
|
||||
import static net.runelite.api.ItemID.CRAWS_BOW;
|
||||
import static net.runelite.api.ItemID.CRAWS_BOW_U;
|
||||
import static net.runelite.api.ItemID.DARK_BOW;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_12765;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_12766;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_12767;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_12768;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_20408;
|
||||
import static net.runelite.api.ItemID.DARK_INFINITY_BOTTOMS;
|
||||
import static net.runelite.api.ItemID.DARK_INFINITY_COLOUR_KIT;
|
||||
import static net.runelite.api.ItemID.DARK_INFINITY_HAT;
|
||||
import static net.runelite.api.ItemID.DARK_INFINITY_TOP;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_25;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_50;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_75;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_25;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_50;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_75;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_25;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_50;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_75;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_25;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_50;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_75;
|
||||
import static net.runelite.api.ItemID.DRAGONBONE_NECKLACE;
|
||||
import static net.runelite.api.ItemID.DRAGONFIRE_SHIELD;
|
||||
import static net.runelite.api.ItemID.DRAGONFIRE_SHIELD_11284;
|
||||
import static net.runelite.api.ItemID.DRAGONFIRE_WARD;
|
||||
import static net.runelite.api.ItemID.DRAGONFIRE_WARD_22003;
|
||||
import static net.runelite.api.ItemID.DRAGON_BOOTS;
|
||||
import static net.runelite.api.ItemID.DRAGON_BOOTS_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_BOOTS_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_CHAINBODY_3140;
|
||||
import static net.runelite.api.ItemID.DRAGON_CHAINBODY_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_CHAINBODY_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_DEFENDER_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_DEFENDER_T;
|
||||
import static net.runelite.api.ItemID.DRAGON_FULL_HELM;
|
||||
import static net.runelite.api.ItemID.DRAGON_FULL_HELM_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_FULL_HELM_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_KITESHIELD;
|
||||
import static net.runelite.api.ItemID.DRAGON_KITESHIELD_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_KITESHIELD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_LEGSSKIRT_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_PICKAXE;
|
||||
import static net.runelite.api.ItemID.DRAGON_PICKAXE_12797;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATEBODY_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATEBODY_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATELEGS_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATESKIRT_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_SCIMITAR;
|
||||
import static net.runelite.api.ItemID.DRAGON_SCIMITAR_OR;
|
||||
import static net.runelite.api.ItemID.DRAGON_SCIMITAR_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD;
|
||||
import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.ENSOULED_ABYSSAL_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_ABYSSAL_HEAD_13508;
|
||||
import static net.runelite.api.ItemID.ENSOULED_AVIANSIE_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_AVIANSIE_HEAD_13505;
|
||||
import static net.runelite.api.ItemID.ENSOULED_BEAR_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_BEAR_HEAD_13463;
|
||||
import static net.runelite.api.ItemID.ENSOULED_BLOODVELD_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_BLOODVELD_HEAD_13496;
|
||||
import static net.runelite.api.ItemID.ENSOULED_CHAOS_DRUID_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_CHAOS_DRUID_HEAD_13472;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DAGANNOTH_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DAGANNOTH_HEAD_13493;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DEMON_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DEMON_HEAD_13502;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DOG_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DOG_HEAD_13469;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DRAGON_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DRAGON_HEAD_13511;
|
||||
import static net.runelite.api.ItemID.ENSOULED_ELF_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_ELF_HEAD_13481;
|
||||
import static net.runelite.api.ItemID.ENSOULED_GIANT_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_GIANT_HEAD_13475;
|
||||
import static net.runelite.api.ItemID.ENSOULED_GOBLIN_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_GOBLIN_HEAD_13448;
|
||||
import static net.runelite.api.ItemID.ENSOULED_HORROR_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_HORROR_HEAD_13487;
|
||||
import static net.runelite.api.ItemID.ENSOULED_IMP_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_IMP_HEAD_13454;
|
||||
import static net.runelite.api.ItemID.ENSOULED_KALPHITE_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_KALPHITE_HEAD_13490;
|
||||
import static net.runelite.api.ItemID.ENSOULED_MINOTAUR_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_MINOTAUR_HEAD_13457;
|
||||
import static net.runelite.api.ItemID.ENSOULED_MONKEY_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_MONKEY_HEAD_13451;
|
||||
import static net.runelite.api.ItemID.ENSOULED_OGRE_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_OGRE_HEAD_13478;
|
||||
import static net.runelite.api.ItemID.ENSOULED_SCORPION_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_SCORPION_HEAD_13460;
|
||||
import static net.runelite.api.ItemID.ENSOULED_TROLL_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_TROLL_HEAD_13484;
|
||||
import static net.runelite.api.ItemID.ENSOULED_TZHAAR_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_TZHAAR_HEAD_13499;
|
||||
import static net.runelite.api.ItemID.ENSOULED_UNICORN_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_UNICORN_HEAD_13466;
|
||||
import static net.runelite.api.ItemID.FEROCIOUS_GLOVES;
|
||||
import static net.runelite.api.ItemID.FROZEN_ABYSSAL_WHIP;
|
||||
import static net.runelite.api.ItemID.FURY_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE1;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE2;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE3;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE4;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE5;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE6;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE7;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE8;
|
||||
import static net.runelite.api.ItemID.GRANITE_MAUL;
|
||||
import static net.runelite.api.ItemID.GRANITE_MAUL_12848;
|
||||
import static net.runelite.api.ItemID.GRANITE_RING;
|
||||
import static net.runelite.api.ItemID.GRANITE_RING_I;
|
||||
import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_25;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_50;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_75;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_25;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_50;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_75;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_25;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_50;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_75;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_25;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_50;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_75;
|
||||
import static net.runelite.api.ItemID.HYDRA_LEATHER;
|
||||
import static net.runelite.api.ItemID.HYDRA_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.HYDRA_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.HYDRA_TAIL;
|
||||
import static net.runelite.api.ItemID.INFINITY_BOTTOMS;
|
||||
import static net.runelite.api.ItemID.INFINITY_BOTTOMS_20575;
|
||||
import static net.runelite.api.ItemID.INFINITY_HAT;
|
||||
import static net.runelite.api.ItemID.INFINITY_TOP;
|
||||
import static net.runelite.api.ItemID.INFINITY_TOP_10605;
|
||||
import static net.runelite.api.ItemID.INFINITY_TOP_20574;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_100;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_25;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_50;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_75;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_100;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_25;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_50;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_75;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_100;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_25;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_50;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_75;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_100;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_25;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_50;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_75;
|
||||
import static net.runelite.api.ItemID.KRAKEN_TENTACLE;
|
||||
import static net.runelite.api.ItemID.LAVA_BATTLESTAFF;
|
||||
import static net.runelite.api.ItemID.LAVA_BATTLESTAFF_21198;
|
||||
import static net.runelite.api.ItemID.LIGHT_INFINITY_BOTTOMS;
|
||||
import static net.runelite.api.ItemID.LIGHT_INFINITY_COLOUR_KIT;
|
||||
import static net.runelite.api.ItemID.LIGHT_INFINITY_HAT;
|
||||
import static net.runelite.api.ItemID.LIGHT_INFINITY_TOP;
|
||||
import static net.runelite.api.ItemID.MAGIC_SHORTBOW;
|
||||
import static net.runelite.api.ItemID.MAGIC_SHORTBOW_I;
|
||||
import static net.runelite.api.ItemID.MAGMA_HELM;
|
||||
import static net.runelite.api.ItemID.MAGMA_HELM_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.MALEDICTION_WARD;
|
||||
import static net.runelite.api.ItemID.MALEDICTION_WARD_12806;
|
||||
import static net.runelite.api.ItemID.NECKLACE_OF_ANGUISH;
|
||||
import static net.runelite.api.ItemID.NECKLACE_OF_ANGUISH_OR;
|
||||
import static net.runelite.api.ItemID.OCCULT_NECKLACE;
|
||||
import static net.runelite.api.ItemID.OCCULT_NECKLACE_OR;
|
||||
import static net.runelite.api.ItemID.OCCULT_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.ODIUM_WARD;
|
||||
import static net.runelite.api.ItemID.ODIUM_WARD_12807;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_1;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_2;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_4;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_5;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_6;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_7;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_8;
|
||||
import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.RED_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.RED_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING1;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING2;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING3;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING4;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING5;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING6;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING7;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING8;
|
||||
import static net.runelite.api.ItemID.RING_OF_SUFFERING;
|
||||
import static net.runelite.api.ItemID.RING_OF_SUFFERING_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_SUFFERING_R;
|
||||
import static net.runelite.api.ItemID.RING_OF_SUFFERING_RI;
|
||||
import static net.runelite.api.ItemID.RING_OF_THE_GODS;
|
||||
import static net.runelite.api.ItemID.RING_OF_THE_GODS_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_1;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_2;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_3;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_4;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I1;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I2;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I3;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I4;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I5;
|
||||
import static net.runelite.api.ItemID.SANGUINESTI_STAFF;
|
||||
import static net.runelite.api.ItemID.SANGUINESTI_STAFF_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.SARADOMINS_BLESSED_SWORD;
|
||||
import static net.runelite.api.ItemID.SARADOMINS_TEAR;
|
||||
import static net.runelite.api.ItemID.SARADOMIN_GODSWORD;
|
||||
import static net.runelite.api.ItemID.SARADOMIN_GODSWORD_OR;
|
||||
import static net.runelite.api.ItemID.SARADOMIN_GODSWORD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.SCYTHE_OF_VITUR;
|
||||
import static net.runelite.api.ItemID.SCYTHE_OF_VITUR_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.SEERS_RING;
|
||||
import static net.runelite.api.ItemID.SEERS_RING_I;
|
||||
import static net.runelite.api.ItemID.SERPENTINE_HELM;
|
||||
import static net.runelite.api.ItemID.SERPENTINE_HELM_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE1;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE2;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE3;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE5;
|
||||
import static net.runelite.api.ItemID.SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.STEAM_BATTLESTAFF;
|
||||
import static net.runelite.api.ItemID.STEAM_BATTLESTAFF_12795;
|
||||
import static net.runelite.api.ItemID.TANZANITE_HELM;
|
||||
import static net.runelite.api.ItemID.TANZANITE_HELM_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.THAMMARONS_SCEPTRE;
|
||||
import static net.runelite.api.ItemID.THAMMARONS_SCEPTRE_U;
|
||||
import static net.runelite.api.ItemID.TOME_OF_FIRE;
|
||||
import static net.runelite.api.ItemID.TOME_OF_FIRE_EMPTY;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_25;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_50;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_75;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_25;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_50;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_75;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_25;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_50;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_75;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_25;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_50;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_75;
|
||||
import static net.runelite.api.ItemID.TORTURE_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.TOXIC_BLOWPIPE;
|
||||
import static net.runelite.api.ItemID.TOXIC_BLOWPIPE_EMPTY;
|
||||
import static net.runelite.api.ItemID.TOXIC_STAFF_OF_THE_DEAD;
|
||||
import static net.runelite.api.ItemID.TOXIC_STAFF_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.TREASONOUS_RING;
|
||||
import static net.runelite.api.ItemID.TREASONOUS_RING_I;
|
||||
import static net.runelite.api.ItemID.TRIDENT_OF_THE_SEAS;
|
||||
import static net.runelite.api.ItemID.TRIDENT_OF_THE_SEAS_E;
|
||||
import static net.runelite.api.ItemID.TRIDENT_OF_THE_SWAMP;
|
||||
import static net.runelite.api.ItemID.TRIDENT_OF_THE_SWAMP_E;
|
||||
import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.TYRANNICAL_RING;
|
||||
import static net.runelite.api.ItemID.TYRANNICAL_RING_I;
|
||||
import static net.runelite.api.ItemID.UNCHARGED_TOXIC_TRIDENT;
|
||||
import static net.runelite.api.ItemID.UNCHARGED_TOXIC_TRIDENT_E;
|
||||
import static net.runelite.api.ItemID.UNCHARGED_TRIDENT;
|
||||
import static net.runelite.api.ItemID.UNCHARGED_TRIDENT_E;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_100;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_25;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_50;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_75;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_100;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_25;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_50;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_75;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_100;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_25;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_50;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_75;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_100;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_25;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_50;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_75;
|
||||
import static net.runelite.api.ItemID.VIGGORAS_CHAINMACE;
|
||||
import static net.runelite.api.ItemID.VIGGORAS_CHAINMACE_U;
|
||||
import static net.runelite.api.ItemID.VOLCANIC_ABYSSAL_WHIP;
|
||||
import static net.runelite.api.ItemID.WARRIOR_RING;
|
||||
import static net.runelite.api.ItemID.WARRIOR_RING_I;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_GODSWORD;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_GODSWORD_OR;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_GODSWORD_ORNAMENT_KIT;
|
||||
|
||||
/**
|
||||
* Converts untradeable items to it's tradeable counterparts
|
||||
|
||||
@@ -53,6 +53,7 @@ public class NPCManager
|
||||
|
||||
/**
|
||||
* Returns health for target NPC based on it's combat level and name
|
||||
*
|
||||
* @param name npc name
|
||||
* @param combatLevel npc combat level
|
||||
* @return health or null if HP is unknown
|
||||
|
||||
@@ -33,12 +33,12 @@ import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.FontID;
|
||||
import net.runelite.api.widgets.WidgetType;
|
||||
import net.runelite.api.widgets.JavaScriptCallback;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetPositionMode;
|
||||
import net.runelite.api.widgets.WidgetSizeMode;
|
||||
import net.runelite.api.widgets.WidgetTextAlignment;
|
||||
import net.runelite.api.widgets.WidgetType;
|
||||
import net.runelite.client.input.KeyListener;
|
||||
|
||||
@Slf4j
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
package net.runelite.client.menus;
|
||||
|
||||
import joptsimple.internal.Strings;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import static net.runelite.client.menus.MenuManager.LEVEL_PATTERN;
|
||||
import net.runelite.client.util.Text;
|
||||
|
||||
@EqualsAndHashCode
|
||||
public class AbstractMenuEntry
|
||||
{
|
||||
@Getter
|
||||
private String option;
|
||||
|
||||
@Getter
|
||||
private String target;
|
||||
|
||||
@Getter
|
||||
private int id;
|
||||
|
||||
@Getter
|
||||
private int type;
|
||||
|
||||
@Getter
|
||||
private boolean strictOption;
|
||||
|
||||
@Getter
|
||||
private boolean strictTarget;
|
||||
|
||||
public AbstractMenuEntry(String option, String target)
|
||||
{
|
||||
this(option, target, -1, -1, true, true);
|
||||
}
|
||||
|
||||
public AbstractMenuEntry(String option, String target, boolean strictTarget)
|
||||
{
|
||||
this(option, target, -1, -1, true, strictTarget);
|
||||
}
|
||||
|
||||
public AbstractMenuEntry(String option, String target, int id, int type, boolean strictOption, boolean strictTarget)
|
||||
{
|
||||
this.option = option;
|
||||
this.target = target;
|
||||
this.id = id;
|
||||
this.type = type;
|
||||
this.strictOption = strictOption;
|
||||
this.strictTarget = strictTarget;
|
||||
}
|
||||
|
||||
boolean matches(MenuEntry entry)
|
||||
{
|
||||
String opt = Text.standardize(entry.getOption());
|
||||
|
||||
if (strictOption && !opt.equals(option) || !strictOption && !opt.contains(option))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (strictTarget || !Strings.isNullOrEmpty(target))
|
||||
{
|
||||
String tgt = Text.standardize(LEVEL_PATTERN.matcher(entry.getTarget()).replaceAll(""));
|
||||
|
||||
if (strictTarget && !tgt.equals(target) || !strictTarget && !tgt.contains(target))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (id != -1)
|
||||
{
|
||||
int id = entry.getIdentifier();
|
||||
|
||||
if (this.id != id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (type != -1)
|
||||
{
|
||||
int type = entry.getType();
|
||||
|
||||
if (this.type != type)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*boolean equals(AbstractMenuEntry other)
|
||||
{
|
||||
return target.equals(other.getTarget())
|
||||
&& option.equals(other.getOption())
|
||||
&& id == other.getId()
|
||||
&& type == other.getType()
|
||||
&& strictOption == other.isStrictOption()
|
||||
&& strictTarget == other.isStrictTarget();
|
||||
}*/
|
||||
}
|
||||
@@ -26,13 +26,17 @@ package net.runelite.client.menus;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Multimap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -60,6 +64,20 @@ public class MenuManager
|
||||
*/
|
||||
private static final int IDX_LOWER = 4;
|
||||
private static final int IDX_UPPER = 8;
|
||||
static final Pattern LEVEL_PATTERN = Pattern.compile("\\(level-[0-9]*\\)");
|
||||
|
||||
private static MenuEntry CANCEL()
|
||||
{
|
||||
MenuEntry cancel = new MenuEntry();
|
||||
cancel.setOption("Cancel");
|
||||
cancel.setTarget("");
|
||||
cancel.setIdentifier(0);
|
||||
cancel.setType(MenuAction.CANCEL.getId());
|
||||
cancel.setParam0(0);
|
||||
cancel.setParam1(0);
|
||||
|
||||
return cancel;
|
||||
}
|
||||
|
||||
private final Client client;
|
||||
private final EventBus eventBus;
|
||||
@@ -70,6 +88,11 @@ public class MenuManager
|
||||
private final Multimap<Integer, WidgetMenuOption> managedMenuOptions = HashMultimap.create();
|
||||
private final Set<String> npcMenuOptions = new HashSet<>();
|
||||
|
||||
private final Set<AbstractMenuEntry> priorityEntries = new HashSet<>();
|
||||
private final Set<MenuEntry> currentPriorityEntries = new HashSet<>();
|
||||
|
||||
private final Map<AbstractMenuEntry, AbstractMenuEntry> swaps = new HashMap<>();
|
||||
|
||||
@Inject
|
||||
private MenuManager(Client client, EventBus eventBus)
|
||||
{
|
||||
@@ -119,12 +142,18 @@ public class MenuManager
|
||||
{
|
||||
int widgetId = event.getActionParam1();
|
||||
Collection<WidgetMenuOption> options = managedMenuOptions.get(widgetId);
|
||||
MenuEntry[] menuEntries = client.getMenuEntries();
|
||||
|
||||
if (menuEntries.length == 1)
|
||||
{
|
||||
// Menu entries reset, so priority entries should reset as well
|
||||
currentPriorityEntries.clear();
|
||||
}
|
||||
|
||||
for (WidgetMenuOption currentMenu : options)
|
||||
{
|
||||
if (!menuContainsCustomMenu(currentMenu))//Don't add if we have already added it to this widget
|
||||
{
|
||||
MenuEntry[] menuEntries = client.getMenuEntries();
|
||||
menuEntries = Arrays.copyOf(menuEntries, menuEntries.length + 1);
|
||||
|
||||
MenuEntry menuEntry = menuEntries[menuEntries.length - 1] = new MenuEntry();
|
||||
@@ -136,6 +165,74 @@ public class MenuManager
|
||||
client.setMenuEntries(menuEntries);
|
||||
}
|
||||
}
|
||||
|
||||
MenuEntry newestEntry = menuEntries[menuEntries.length - 1];
|
||||
|
||||
boolean isPrio = false;
|
||||
for (AbstractMenuEntry p : priorityEntries)
|
||||
{
|
||||
if (p.matches(newestEntry))
|
||||
{
|
||||
isPrio = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If the last entry was a priority entry, keep track of it
|
||||
if (isPrio)
|
||||
{
|
||||
currentPriorityEntries.add(newestEntry);
|
||||
}
|
||||
|
||||
// Make a copy of the menu entries, cause you can't remove from Arrays.asList()
|
||||
List<MenuEntry> copy = new ArrayList<>(Arrays.asList(menuEntries));
|
||||
|
||||
// If there are entries we want to prioritize, we have to remove the rest
|
||||
if (!currentPriorityEntries.isEmpty())
|
||||
{
|
||||
copy.retainAll(currentPriorityEntries);
|
||||
|
||||
copy.add(CANCEL());
|
||||
}
|
||||
|
||||
// Find the current entry in the swaps map
|
||||
AbstractMenuEntry swapEntry = null;
|
||||
for (AbstractMenuEntry e : swaps.keySet())
|
||||
{
|
||||
if (e.matches(newestEntry))
|
||||
{
|
||||
swapEntry = e;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (swapEntry != null)
|
||||
{
|
||||
AbstractMenuEntry swapTarget = swaps.get(swapEntry);
|
||||
|
||||
// Find the target for the swap in current menu entries
|
||||
MenuEntry foundSwap = null;
|
||||
for (MenuEntry entry : Lists.reverse(copy))
|
||||
{
|
||||
if (swapTarget.matches(entry))
|
||||
{
|
||||
foundSwap = entry;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (foundSwap != null)
|
||||
{
|
||||
// Swap
|
||||
int index = copy.indexOf(foundSwap);
|
||||
int newIndex = copy.indexOf(newestEntry);
|
||||
|
||||
copy.set(index, newestEntry);
|
||||
copy.set(newIndex, foundSwap);
|
||||
}
|
||||
}
|
||||
|
||||
client.setMenuEntries(copy.toArray(new MenuEntry[0]));
|
||||
}
|
||||
|
||||
public void addPlayerMenuItem(String menuText)
|
||||
@@ -307,4 +404,142 @@ public class MenuManager
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds to the set of menu entries which when present, will remove all entries except for this one
|
||||
*/
|
||||
public void addPriorityEntry(String option, String target)
|
||||
{
|
||||
option = Text.standardize(option);
|
||||
target = Text.standardize(target);
|
||||
|
||||
AbstractMenuEntry entry = new AbstractMenuEntry(option, target);
|
||||
|
||||
priorityEntries.add(entry);
|
||||
}
|
||||
|
||||
public void removePriorityEntry(String option, String target)
|
||||
{
|
||||
option = Text.standardize(option);
|
||||
target = Text.standardize(target);
|
||||
|
||||
AbstractMenuEntry entry = new AbstractMenuEntry(option, target);
|
||||
|
||||
Set<AbstractMenuEntry> toRemove = new HashSet<>();
|
||||
for (AbstractMenuEntry priorityEntry : priorityEntries)
|
||||
{
|
||||
if (entry.equals(priorityEntry))
|
||||
{
|
||||
toRemove.add(entry);
|
||||
}
|
||||
}
|
||||
|
||||
for (AbstractMenuEntry e : toRemove)
|
||||
{
|
||||
priorityEntries.remove(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds to the set of menu entries which when present, will remove all entries except for this one
|
||||
* This method will add one with strict option, but not-strict target (contains for target, equals for option)
|
||||
*/
|
||||
public void addPriorityEntry(String option)
|
||||
{
|
||||
option = Text.standardize(option);
|
||||
|
||||
AbstractMenuEntry entry = new AbstractMenuEntry(option, "", false);
|
||||
|
||||
priorityEntries.add(entry);
|
||||
}
|
||||
|
||||
public void removePriorityEntry(String option)
|
||||
{
|
||||
option = Text.standardize(option);
|
||||
|
||||
AbstractMenuEntry entry = new AbstractMenuEntry(option, "", false);
|
||||
|
||||
Set<AbstractMenuEntry> toRemove = new HashSet<>();
|
||||
for (AbstractMenuEntry priorityEntry : priorityEntries)
|
||||
{
|
||||
if (entry.equals(priorityEntry))
|
||||
{
|
||||
toRemove.add(entry);
|
||||
}
|
||||
}
|
||||
|
||||
for (AbstractMenuEntry e : toRemove)
|
||||
{
|
||||
priorityEntries.remove(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds to the map of swaps. - Strict option + target
|
||||
*/
|
||||
public void addSwap(String option, String target, String option2, String target2)
|
||||
{
|
||||
option = Text.standardize(option);
|
||||
target = Text.standardize(target);
|
||||
|
||||
option2 = Text.standardize(option2);
|
||||
target2 = Text.standardize(target2);
|
||||
|
||||
AbstractMenuEntry swapFrom = new AbstractMenuEntry(option, target);
|
||||
AbstractMenuEntry swapTo = new AbstractMenuEntry(option2, target2);
|
||||
|
||||
if (swapTo.equals(swapFrom))
|
||||
{
|
||||
log.warn("You shouldn't try swapping an entry for itself");
|
||||
return;
|
||||
}
|
||||
|
||||
swaps.put(swapFrom, swapTo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds to the map of swaps - Pre-baked Abstract entry
|
||||
*/
|
||||
public void addSwap(AbstractMenuEntry swapFrom, AbstractMenuEntry swapTo)
|
||||
{
|
||||
if (swapTo.equals(swapFrom))
|
||||
{
|
||||
log.warn("You shouldn't try swapping an entry for itself");
|
||||
return;
|
||||
}
|
||||
|
||||
swaps.put(swapFrom, swapTo);
|
||||
}
|
||||
|
||||
public void removeSwap(String option, String target, String option2, String target2)
|
||||
{
|
||||
option = Text.standardize(option);
|
||||
target = Text.standardize(target);
|
||||
|
||||
option2 = Text.standardize(option2);
|
||||
target2 = Text.standardize(target2);
|
||||
|
||||
AbstractMenuEntry swapFrom = new AbstractMenuEntry(option, target);
|
||||
AbstractMenuEntry swapTo = new AbstractMenuEntry(option2, target2);
|
||||
|
||||
removeSwap(swapFrom, swapTo);
|
||||
}
|
||||
|
||||
public void removeSwap(AbstractMenuEntry swapFrom, AbstractMenuEntry swapTo)
|
||||
{
|
||||
Set<AbstractMenuEntry> toRemove = new HashSet<>();
|
||||
for (Map.Entry<AbstractMenuEntry, AbstractMenuEntry> e : swaps.entrySet())
|
||||
{
|
||||
if (e.getKey().equals(swapFrom) && e.getValue().equals(swapTo))
|
||||
{
|
||||
toRemove.add(e.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
for (AbstractMenuEntry entry : toRemove)
|
||||
{
|
||||
swaps.remove(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,9 +24,8 @@
|
||||
*/
|
||||
package net.runelite.client.menus;
|
||||
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
|
||||
import java.awt.Color;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.client.ui.JagexColors;
|
||||
import net.runelite.client.util.ColorUtil;
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ package net.runelite.client.plugins;
|
||||
import com.google.inject.Binder;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Module;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public abstract class Plugin implements Module
|
||||
|
||||
@@ -57,8 +57,6 @@ import javax.inject.Singleton;
|
||||
import javax.swing.SwingUtilities;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.client.events.SessionClose;
|
||||
import net.runelite.client.events.SessionOpen;
|
||||
import net.runelite.client.RuneLite;
|
||||
import net.runelite.client.config.Config;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
@@ -67,6 +65,8 @@ import net.runelite.client.config.RuneLiteConfig;
|
||||
import net.runelite.client.eventbus.EventBus;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.events.PluginChanged;
|
||||
import net.runelite.client.events.SessionClose;
|
||||
import net.runelite.client.events.SessionOpen;
|
||||
import net.runelite.client.task.Schedule;
|
||||
import net.runelite.client.task.ScheduledMethod;
|
||||
import net.runelite.client.task.Scheduler;
|
||||
@@ -516,6 +516,7 @@ public class PluginManager
|
||||
|
||||
/**
|
||||
* Topologically sort a graph. Uses Kahn's algorithm.
|
||||
*
|
||||
* @param graph
|
||||
* @param <T>
|
||||
* @return
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.runelite.client.plugins;
|
||||
|
||||
public enum PluginType {
|
||||
public enum PluginType
|
||||
{
|
||||
|
||||
PVM,
|
||||
PVP,
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/package net.runelite.client.plugins.achievementdiary;
|
||||
*/
|
||||
package net.runelite.client.plugins.achievementdiary;
|
||||
|
||||
public interface Requirement
|
||||
{
|
||||
|
||||
@@ -27,10 +27,10 @@ package net.runelite.client.plugins.achievementdiary.diaries;
|
||||
import net.runelite.api.Favour;
|
||||
import net.runelite.api.Quest;
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.SkillRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.QuestRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.FavourRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.QuestRequirement;
|
||||
import net.runelite.client.plugins.achievementdiary.SkillRequirement;
|
||||
|
||||
public class KourendDiaryRequirement extends GenericDiaryRequirement
|
||||
{
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
package net.runelite.client.plugins.agility;
|
||||
|
||||
import com.google.inject.Provides;
|
||||
import java.awt.Color;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
@@ -37,6 +38,8 @@ import net.runelite.api.Client;
|
||||
import net.runelite.api.Item;
|
||||
import net.runelite.api.ItemID;
|
||||
import static net.runelite.api.ItemID.AGILITY_ARENA_TICKET;
|
||||
import net.runelite.api.MenuAction;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.Skill;
|
||||
import static net.runelite.api.Skill.AGILITY;
|
||||
@@ -72,10 +75,7 @@ import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.ui.overlay.OverlayManager;
|
||||
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.client.util.ColorUtil;
|
||||
import net.runelite.api.MenuAction;
|
||||
import java.awt.Color;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Agility",
|
||||
@@ -447,7 +447,8 @@ public class AgilityPlugin extends Plugin
|
||||
for (Obstacle nearbyObstacle : getObstacles().values())
|
||||
{
|
||||
AgilityShortcut shortcut = nearbyObstacle.getShortcut();
|
||||
if (shortcut != null && Arrays.stream(shortcut.getObstacleIds()).anyMatch(i -> i == entryId)) {
|
||||
if (shortcut != null && Arrays.stream(shortcut.getObstacleIds()).anyMatch(i -> i == entryId))
|
||||
{
|
||||
MenuEntry entry = menuEntries[menuEntries.length - 1];
|
||||
int level = shortcut.getLevel();
|
||||
Color color = level <= getAgilityLevel() ? Color.GREEN : Color.RED;
|
||||
|
||||
@@ -44,7 +44,210 @@ import static net.runelite.api.NullObjectID.NULL_18133;
|
||||
import static net.runelite.api.NullObjectID.NULL_18135;
|
||||
import static net.runelite.api.NullObjectID.NULL_18136;
|
||||
import static net.runelite.api.NullObjectID.NULL_3550;
|
||||
import static net.runelite.api.ObjectID.*;
|
||||
import static net.runelite.api.ObjectID.BALANCING_LEDGE;
|
||||
import static net.runelite.api.ObjectID.BALANCING_LEDGE_23547;
|
||||
import static net.runelite.api.ObjectID.BALANCING_LEDGE_3561;
|
||||
import static net.runelite.api.ObjectID.BALANCING_ROPE;
|
||||
import static net.runelite.api.ObjectID.BALANCING_ROPE_23557;
|
||||
import static net.runelite.api.ObjectID.BANNER_11382;
|
||||
import static net.runelite.api.ObjectID.BASKET_11380;
|
||||
import static net.runelite.api.ObjectID.BOAT_17961;
|
||||
import static net.runelite.api.ObjectID.BOILER_22635;
|
||||
import static net.runelite.api.ObjectID.CABLE;
|
||||
import static net.runelite.api.ObjectID.CABLE_22569;
|
||||
import static net.runelite.api.ObjectID.CABLE_22572;
|
||||
import static net.runelite.api.ObjectID.CLIMBING_ROCKS_10851;
|
||||
import static net.runelite.api.ObjectID.CLOTHES_LINE;
|
||||
import static net.runelite.api.ObjectID.CONSOLE;
|
||||
import static net.runelite.api.ObjectID.CRATE_10086;
|
||||
import static net.runelite.api.ObjectID.CRUMBLING_WALL_1948;
|
||||
import static net.runelite.api.ObjectID.DOORWAY_10855;
|
||||
import static net.runelite.api.ObjectID.DOOR_18091;
|
||||
import static net.runelite.api.ObjectID.DRYING_LINE;
|
||||
import static net.runelite.api.ObjectID.EDGE;
|
||||
import static net.runelite.api.ObjectID.EDGE_11371;
|
||||
import static net.runelite.api.ObjectID.EDGE_11377;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18071;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18072;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18073;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18089;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18090;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18093;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18094;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18097;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18098;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18109;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18110;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18111;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18112;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18113;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18114;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18117;
|
||||
import static net.runelite.api.ObjectID.FLOORBOARDS_18118;
|
||||
import static net.runelite.api.ObjectID.GAP_10085;
|
||||
import static net.runelite.api.ObjectID.GAP_10352;
|
||||
import static net.runelite.api.ObjectID.GAP_10642;
|
||||
import static net.runelite.api.ObjectID.GAP_10778;
|
||||
import static net.runelite.api.ObjectID.GAP_10779;
|
||||
import static net.runelite.api.ObjectID.GAP_10780;
|
||||
import static net.runelite.api.ObjectID.GAP_10820;
|
||||
import static net.runelite.api.ObjectID.GAP_10821;
|
||||
import static net.runelite.api.ObjectID.GAP_10822;
|
||||
import static net.runelite.api.ObjectID.GAP_10823;
|
||||
import static net.runelite.api.ObjectID.GAP_10828;
|
||||
import static net.runelite.api.ObjectID.GAP_10832;
|
||||
import static net.runelite.api.ObjectID.GAP_10859;
|
||||
import static net.runelite.api.ObjectID.GAP_10861;
|
||||
import static net.runelite.api.ObjectID.GAP_10882;
|
||||
import static net.runelite.api.ObjectID.GAP_10884;
|
||||
import static net.runelite.api.ObjectID.GAP_11161;
|
||||
import static net.runelite.api.ObjectID.GAP_11360;
|
||||
import static net.runelite.api.ObjectID.GAP_11365;
|
||||
import static net.runelite.api.ObjectID.GAP_11374;
|
||||
import static net.runelite.api.ObjectID.GAP_11375;
|
||||
import static net.runelite.api.ObjectID.GAP_11376;
|
||||
import static net.runelite.api.ObjectID.GAP_11383;
|
||||
import static net.runelite.api.ObjectID.GAP_11392;
|
||||
import static net.runelite.api.ObjectID.GAP_11395;
|
||||
import static net.runelite.api.ObjectID.GAP_11396;
|
||||
import static net.runelite.api.ObjectID.GAP_11406;
|
||||
import static net.runelite.api.ObjectID.GAP_11429;
|
||||
import static net.runelite.api.ObjectID.GAP_11430;
|
||||
import static net.runelite.api.ObjectID.GAP_11630;
|
||||
import static net.runelite.api.ObjectID.HAND_HOLDS_10836;
|
||||
import static net.runelite.api.ObjectID.HAND_HOLDS_3583;
|
||||
import static net.runelite.api.ObjectID.HURDLE;
|
||||
import static net.runelite.api.ObjectID.HURDLE_11639;
|
||||
import static net.runelite.api.ObjectID.HURDLE_11640;
|
||||
import static net.runelite.api.ObjectID.ICE;
|
||||
import static net.runelite.api.ObjectID.ICE_21149;
|
||||
import static net.runelite.api.ObjectID.ICE_21150;
|
||||
import static net.runelite.api.ObjectID.ICE_21151;
|
||||
import static net.runelite.api.ObjectID.ICE_21152;
|
||||
import static net.runelite.api.ObjectID.ICE_21153;
|
||||
import static net.runelite.api.ObjectID.ICE_21154;
|
||||
import static net.runelite.api.ObjectID.ICE_21155;
|
||||
import static net.runelite.api.ObjectID.ICE_21156;
|
||||
import static net.runelite.api.ObjectID.ICICLES;
|
||||
import static net.runelite.api.ObjectID.JUTTING_WALL_22552;
|
||||
import static net.runelite.api.ObjectID.LADDER_16682;
|
||||
import static net.runelite.api.ObjectID.LADDER_22564;
|
||||
import static net.runelite.api.ObjectID.LEDGE_10781;
|
||||
import static net.runelite.api.ObjectID.LEDGE_10860;
|
||||
import static net.runelite.api.ObjectID.LEDGE_10886;
|
||||
import static net.runelite.api.ObjectID.LEDGE_10888;
|
||||
import static net.runelite.api.ObjectID.LEDGE_11366;
|
||||
import static net.runelite.api.ObjectID.LEDGE_11367;
|
||||
import static net.runelite.api.ObjectID.LEDGE_11369;
|
||||
import static net.runelite.api.ObjectID.LEDGE_11370;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_23144;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_23145;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_23542;
|
||||
import static net.runelite.api.ObjectID.LOG_BALANCE_3557;
|
||||
import static net.runelite.api.ObjectID.LOW_WALL;
|
||||
import static net.runelite.api.ObjectID.LOW_WALL_10865;
|
||||
import static net.runelite.api.ObjectID.MARKET_STALL_11381;
|
||||
import static net.runelite.api.ObjectID.MONKEYBARS;
|
||||
import static net.runelite.api.ObjectID.MONKEYBARS_15417;
|
||||
import static net.runelite.api.ObjectID.MONKEY_BARS_3564;
|
||||
import static net.runelite.api.ObjectID.NARROW_WALL;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_NET_20211;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_NET_23134;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_NET_23135;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_PIPE_23137;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_PIPE_23138;
|
||||
import static net.runelite.api.ObjectID.OBSTACLE_PIPE_23139;
|
||||
import static net.runelite.api.ObjectID.PILE_OF_FISH;
|
||||
import static net.runelite.api.ObjectID.PILLAR_3578;
|
||||
import static net.runelite.api.ObjectID.PIPE_11657;
|
||||
import static net.runelite.api.ObjectID.PLANK_10868;
|
||||
import static net.runelite.api.ObjectID.PLANK_11631;
|
||||
import static net.runelite.api.ObjectID.PLANK_3570;
|
||||
import static net.runelite.api.ObjectID.PLANK_3571;
|
||||
import static net.runelite.api.ObjectID.PLANK_3572;
|
||||
import static net.runelite.api.ObjectID.POLEVAULT;
|
||||
import static net.runelite.api.ObjectID.PYLON_22664;
|
||||
import static net.runelite.api.ObjectID.ROCKS_23640;
|
||||
import static net.runelite.api.ObjectID.ROCK_17958;
|
||||
import static net.runelite.api.ObjectID.ROCK_17959;
|
||||
import static net.runelite.api.ObjectID.ROCK_17960;
|
||||
import static net.runelite.api.ObjectID.ROOF_TOP_BEAMS;
|
||||
import static net.runelite.api.ObjectID.ROPESWING_23131;
|
||||
import static net.runelite.api.ObjectID.ROPESWING_23132;
|
||||
import static net.runelite.api.ObjectID.ROPE_15487;
|
||||
import static net.runelite.api.ObjectID.ROPE_SWING;
|
||||
import static net.runelite.api.ObjectID.ROUGH_WALL;
|
||||
import static net.runelite.api.ObjectID.ROUGH_WALL_10093;
|
||||
import static net.runelite.api.ObjectID.ROUGH_WALL_10586;
|
||||
import static net.runelite.api.ObjectID.ROUGH_WALL_10833;
|
||||
import static net.runelite.api.ObjectID.ROUGH_WALL_11385;
|
||||
import static net.runelite.api.ObjectID.ROUGH_WALL_11391;
|
||||
import static net.runelite.api.ObjectID.SHELF_18086;
|
||||
import static net.runelite.api.ObjectID.SHELF_18087;
|
||||
import static net.runelite.api.ObjectID.SHELF_18095;
|
||||
import static net.runelite.api.ObjectID.SHELF_18096;
|
||||
import static net.runelite.api.ObjectID.SHELF_18105;
|
||||
import static net.runelite.api.ObjectID.SHELF_18106;
|
||||
import static net.runelite.api.ObjectID.SHELF_18107;
|
||||
import static net.runelite.api.ObjectID.SHELF_18108;
|
||||
import static net.runelite.api.ObjectID.SKULL_SLOPE;
|
||||
import static net.runelite.api.ObjectID.SKULL_SLOPE_15483;
|
||||
import static net.runelite.api.ObjectID.STAIRS_10857;
|
||||
import static net.runelite.api.ObjectID.STAIRS_22608;
|
||||
import static net.runelite.api.ObjectID.STAIRS_22609;
|
||||
import static net.runelite.api.ObjectID.STAIRS_22650;
|
||||
import static net.runelite.api.ObjectID.STAIRS_22651;
|
||||
import static net.runelite.api.ObjectID.STAIRS_DOWN;
|
||||
import static net.runelite.api.ObjectID.STEEP_ROOF;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_11643;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_15412;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21120;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21126;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21128;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21129;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21130;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21131;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21132;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_21133;
|
||||
import static net.runelite.api.ObjectID.STEPPING_STONE_23556;
|
||||
import static net.runelite.api.ObjectID.STILE_7527;
|
||||
import static net.runelite.api.ObjectID.TALL_TREE_10819;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE_10075;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE_10284;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE_10583;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE_10834;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE_11361;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE_11364;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE_11378;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE_11393;
|
||||
import static net.runelite.api.ObjectID.TIGHTROPE_11397;
|
||||
import static net.runelite.api.ObjectID.TREE_11384;
|
||||
import static net.runelite.api.ObjectID.TREE_11389;
|
||||
import static net.runelite.api.ObjectID.TREE_BRANCH_23559;
|
||||
import static net.runelite.api.ObjectID.TREE_BRANCH_23560;
|
||||
import static net.runelite.api.ObjectID.TROPICAL_TREE_10357;
|
||||
import static net.runelite.api.ObjectID.TROPICAL_TREE_15414;
|
||||
import static net.runelite.api.ObjectID.TROPICAL_TREE_16062;
|
||||
import static net.runelite.api.ObjectID.TUNNEL_18085;
|
||||
import static net.runelite.api.ObjectID.TUNNEL_22557;
|
||||
import static net.runelite.api.ObjectID.WALL_10084;
|
||||
import static net.runelite.api.ObjectID.WALL_10777;
|
||||
import static net.runelite.api.ObjectID.WALL_11373;
|
||||
import static net.runelite.api.ObjectID.WALL_17980;
|
||||
import static net.runelite.api.ObjectID.WALL_18078;
|
||||
import static net.runelite.api.ObjectID.WALL_18088;
|
||||
import static net.runelite.api.ObjectID.WALL_RUBBLE;
|
||||
import static net.runelite.api.ObjectID.WALL_RUBBLE_18038;
|
||||
import static net.runelite.api.ObjectID.WASHING_LINE_18099;
|
||||
import static net.runelite.api.ObjectID.WASHING_LINE_18100;
|
||||
import static net.runelite.api.ObjectID.WOODEN_BEAMS;
|
||||
import static net.runelite.api.ObjectID.ZIP_LINE;
|
||||
import static net.runelite.api.ObjectID.ZIP_LINE_11644;
|
||||
import static net.runelite.api.ObjectID.ZIP_LINE_11645;
|
||||
import static net.runelite.api.ObjectID.ZIP_LINE_11646;
|
||||
import net.runelite.client.game.AgilityShortcut;
|
||||
|
||||
class Obstacles
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.alchemicalhydra;
|
||||
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
@@ -140,6 +141,7 @@ class HydraPoisonOverlay extends Overlay
|
||||
}
|
||||
|
||||
graphics.setColor(color);
|
||||
graphics.setStroke(new BasicStroke(3));
|
||||
graphics.draw(poly);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* Copyright (c) 2018, DennisDeV <https://github.com/DevDennis>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -24,11 +24,10 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.antidrag;
|
||||
|
||||
import net.runelite.api.Constants;
|
||||
import java.awt.Color;
|
||||
import java.awt.event.KeyEvent;
|
||||
import net.runelite.client.config.Alpha;
|
||||
import net.runelite.api.Constants;
|
||||
import net.runelite.client.config.Alpha;
|
||||
import net.runelite.client.config.Config;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
import net.runelite.client.config.ConfigItem;
|
||||
|
||||
@@ -23,30 +23,7 @@
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.antidrag;
|
||||
/*
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import com.google.inject.Provides;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.Client;
|
||||
|
||||
@@ -32,7 +32,6 @@ import java.util.Map;
|
||||
import net.runelite.api.ProjectileID;
|
||||
|
||||
|
||||
|
||||
public enum AoeProjectileInfo
|
||||
{
|
||||
LIZARDMAN_SHAMAN_AOE(ProjectileID.LIZARDMAN_SHAMAN_AOE, 5),
|
||||
|
||||
@@ -145,18 +145,22 @@ public class AoeWarningOverlay extends Overlay
|
||||
return null;
|
||||
}
|
||||
|
||||
private void drawTile(Graphics2D graphics, WorldPoint point, Color color, int strokeWidth, int outlineAlpha, int fillAlpha) {
|
||||
private void drawTile(Graphics2D graphics, WorldPoint point, Color color, int strokeWidth, int outlineAlpha, int fillAlpha)
|
||||
{
|
||||
WorldPoint playerLocation = client.getLocalPlayer().getWorldLocation();
|
||||
if (point.distanceTo(playerLocation) >= 32) {
|
||||
if (point.distanceTo(playerLocation) >= 32)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LocalPoint lp = LocalPoint.fromWorld(client, point);
|
||||
if (lp == null) {
|
||||
if (lp == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Polygon poly = Perspective.getCanvasTilePoly(client, lp);
|
||||
if (poly == null) {
|
||||
if (poly == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
//OverlayUtil.renderPolygon(graphics, poly, color);
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.barbarianassault;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.inject.Provides;
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
|
||||
@@ -180,6 +180,7 @@ class BarrowsOverlay extends Overlay
|
||||
|
||||
/**
|
||||
* Get minimap dot color from client
|
||||
*
|
||||
* @param typeIndex index of minimap dot type (1 npcs, 2 players)
|
||||
* @return color
|
||||
*/
|
||||
|
||||
@@ -81,26 +81,6 @@ public interface BAToolsConfig extends Config
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "antiDrag",
|
||||
name = "Anti Drag",
|
||||
description = "asd"
|
||||
)
|
||||
default boolean antiDrag()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "antiDragDelay",
|
||||
name = "Anti Drag Delay",
|
||||
description = "asd"
|
||||
)
|
||||
default int antiDragDelay()
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "eggBoi",
|
||||
name = "Collector helper",
|
||||
|
||||
@@ -25,14 +25,14 @@
|
||||
package net.runelite.client.plugins.batools;
|
||||
|
||||
import java.awt.Color;
|
||||
import static java.awt.Color.GREEN;
|
||||
import static java.awt.Color.RED;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import javax.inject.Inject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.NPCComposition;
|
||||
import net.runelite.client.ui.overlay.Overlay;
|
||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||
@@ -42,16 +42,6 @@ import net.runelite.client.ui.overlay.OverlayUtil;
|
||||
|
||||
public class BAToolsOverlay extends Overlay
|
||||
{
|
||||
private static final Color RED = new Color(221, 44, 0);
|
||||
private static final Color GREEN = new Color(0, 200, 83);
|
||||
private static final Color ORANGE = new Color(255, 109, 0);
|
||||
private static final Color YELLOW = new Color(255, 214, 0);
|
||||
private static final Color CYAN = new Color(0, 184, 212);
|
||||
private static final Color BLUE = new Color(41, 98, 255);
|
||||
private static final Color DEEP_PURPLE = new Color(98, 0, 234);
|
||||
private static final Color PURPLE = new Color(170, 0, 255);
|
||||
private static final Color GRAY = new Color(158, 158, 158);
|
||||
|
||||
private final BAToolsConfig config;
|
||||
private BAToolsPlugin plugin;
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.batools;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.inject.Provides;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
@@ -61,9 +62,23 @@ import net.runelite.api.events.NpcSpawned;
|
||||
import net.runelite.api.events.VarbitChanged;
|
||||
import net.runelite.api.events.WidgetLoaded;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetID;
|
||||
import static net.runelite.api.widgets.WidgetID.BA_REWARD_GROUP_ID;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.client.chat.ChatMessageManager;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_ATK_CALL_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_ATK_LISTEN_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_ATK_ROLE_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_COLL_CALL_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_COLL_LISTEN_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_COLL_ROLE_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_DEF_CALL_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_DEF_ROLE_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_HEAL_CALL_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_HEAL_LISTEN_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.BA_REWARD_TEXT;
|
||||
import static net.runelite.api.widgets.WidgetInfo.COMBAT_STYLE_FOUR;
|
||||
import static net.runelite.api.widgets.WidgetInfo.COMBAT_STYLE_ONE;
|
||||
import static net.runelite.api.widgets.WidgetInfo.COMBAT_STYLE_THREE;
|
||||
import static net.runelite.api.widgets.WidgetInfo.COMBAT_STYLE_TWO;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.game.ItemManager;
|
||||
@@ -93,6 +108,7 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
private int currentWave = 1;
|
||||
private static final int BA_WAVE_NUM_INDEX = 2;
|
||||
private final List<MenuEntry> entries = new ArrayList<>();
|
||||
private ImmutableMap<WidgetInfo, Boolean> originalAttackStyles;
|
||||
private HashMap<Integer, Instant> foodPressed = new HashMap<>();
|
||||
private CycleCounter counter;
|
||||
private Actor lastInteracted;
|
||||
@@ -141,7 +157,6 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
wave_start = Instant.now();
|
||||
lastInteracted = null;
|
||||
foodPressed.clear();
|
||||
client.setInventoryDragDelay(config.antiDragDelay());
|
||||
keyManager.registerKeyListener(this);
|
||||
}
|
||||
|
||||
@@ -153,7 +168,6 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
inGameBit = 0;
|
||||
lastInteracted = null;
|
||||
overlayManager.remove(overlay);
|
||||
client.setInventoryDragDelay(5);
|
||||
keyManager.unregisterKeyListener(this);
|
||||
shiftDown = false;
|
||||
}
|
||||
@@ -161,9 +175,9 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
@Subscribe
|
||||
public void onWidgetLoaded(WidgetLoaded event)
|
||||
{
|
||||
if (event.getGroupId() == WidgetID.BA_REWARD_GROUP_ID)
|
||||
if (event.getGroupId() == BA_REWARD_GROUP_ID)
|
||||
{
|
||||
Widget rewardWidget = client.getWidget(WidgetInfo.BA_REWARD_TEXT);
|
||||
Widget rewardWidget = client.getWidget(BA_REWARD_TEXT);
|
||||
if (rewardWidget != null && rewardWidget.getText().contains("<br>5"))
|
||||
{
|
||||
tickNum = 0;
|
||||
@@ -174,11 +188,6 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
@Subscribe
|
||||
public void onGameTick(GameTick event)
|
||||
{
|
||||
if (config.antiDrag())
|
||||
{
|
||||
client.setInventoryDragDelay(config.antiDragDelay());
|
||||
}
|
||||
|
||||
Widget callWidget = getWidget();
|
||||
|
||||
if (callWidget != null)
|
||||
@@ -189,22 +198,21 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
}
|
||||
pastCall = callWidget.getTextColor();
|
||||
}
|
||||
if (inGameBit == 1)
|
||||
if (inGameBit == 1 && config.defTimer())
|
||||
{
|
||||
if (tickNum > 9)
|
||||
{
|
||||
tickNum = 0;
|
||||
}
|
||||
|
||||
if (counter == null)
|
||||
{
|
||||
addCounter();
|
||||
}
|
||||
counter.setCount(tickNum);
|
||||
if (config.defTimer())
|
||||
{
|
||||
|
||||
tickNum++;
|
||||
}
|
||||
}
|
||||
|
||||
Widget weapon = client.getWidget(593, 1);
|
||||
|
||||
@@ -212,61 +220,70 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
&& weapon != null
|
||||
&& inGameBit == 1
|
||||
&& weapon.getText().contains("Crystal halberd") || weapon.getText().contains("Dragon claws")
|
||||
&& client.getWidget(WidgetInfo.BA_ATK_LISTEN_TEXT) != null)
|
||||
&& client.getWidget(BA_ATK_LISTEN_TEXT) != null)
|
||||
{
|
||||
String style = client.getWidget(WidgetInfo.BA_ATK_LISTEN_TEXT).getText();
|
||||
if (originalAttackStyles == null)
|
||||
{
|
||||
ImmutableMap.Builder<WidgetInfo, Boolean> builder = new ImmutableMap.Builder<>();
|
||||
|
||||
builder.put(COMBAT_STYLE_ONE, client.getWidget(COMBAT_STYLE_ONE).isHidden());
|
||||
builder.put(COMBAT_STYLE_TWO, client.getWidget(COMBAT_STYLE_TWO).isHidden());
|
||||
builder.put(COMBAT_STYLE_THREE, client.getWidget(COMBAT_STYLE_THREE).isHidden());
|
||||
builder.put(COMBAT_STYLE_FOUR, client.getWidget(COMBAT_STYLE_FOUR).isHidden());
|
||||
|
||||
originalAttackStyles = builder.build();
|
||||
}
|
||||
|
||||
String style = client.getWidget(BA_ATK_LISTEN_TEXT).getText();
|
||||
|
||||
if (style.contains("Defensive"))
|
||||
{
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_ONE).setHidden(true);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_TWO).setHidden(true);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_THREE).setHidden(true);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_FOUR).setHidden(false);
|
||||
client.getWidget(COMBAT_STYLE_ONE).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_TWO).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_THREE).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_FOUR).setHidden(false);
|
||||
}
|
||||
else if (style.contains("Aggressive"))
|
||||
{
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_ONE).setHidden(true);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_TWO).setHidden(false);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_THREE).setHidden(true);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_FOUR).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_ONE).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_TWO).setHidden(false);
|
||||
client.getWidget(COMBAT_STYLE_THREE).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_FOUR).setHidden(true);
|
||||
}
|
||||
else if (style.contains("Controlled"))
|
||||
{
|
||||
if (weapon.getText().contains("Crystal halberd"))
|
||||
{
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_ONE).setHidden(false);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_THREE).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_ONE).setHidden(false);
|
||||
client.getWidget(COMBAT_STYLE_THREE).setHidden(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_ONE).setHidden(true);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_THREE).setHidden(false);
|
||||
client.getWidget(COMBAT_STYLE_ONE).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_THREE).setHidden(false);
|
||||
}
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_TWO).setHidden(true);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_FOUR).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_TWO).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_FOUR).setHidden(true);
|
||||
}
|
||||
else if (style.contains("Accurate") && weapon.getText().contains("Dragon claws"))
|
||||
{
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_ONE).setHidden(false);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_TWO).setHidden(true);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_THREE).setHidden(true);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_FOUR).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_ONE).setHidden(false);
|
||||
client.getWidget(COMBAT_STYLE_TWO).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_THREE).setHidden(true);
|
||||
client.getWidget(COMBAT_STYLE_FOUR).setHidden(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_ONE).setHidden(false);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_TWO).setHidden(false);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_THREE).setHidden(false);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_FOUR).setHidden(false);
|
||||
client.getWidget(COMBAT_STYLE_ONE).setHidden(false);
|
||||
client.getWidget(COMBAT_STYLE_TWO).setHidden(false);
|
||||
client.getWidget(COMBAT_STYLE_THREE).setHidden(false);
|
||||
client.getWidget(COMBAT_STYLE_FOUR).setHidden(false);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
else if (originalAttackStyles != null)
|
||||
{
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_ONE).setHidden(false);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_TWO).setHidden(false);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_THREE).setHidden(false);
|
||||
client.getWidget(WidgetInfo.COMBAT_STYLE_FOUR).setHidden(false);
|
||||
originalAttackStyles.forEach((w, b) -> client.getWidget(w).setHidden(b));
|
||||
}
|
||||
|
||||
if (config.prayerMetronome() && isAnyPrayerActive())
|
||||
@@ -280,21 +297,21 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
|
||||
private Widget getWidget()
|
||||
{
|
||||
if (client.getWidget(WidgetInfo.BA_DEF_CALL_TEXT) != null)
|
||||
if (client.getWidget(BA_DEF_CALL_TEXT) != null)
|
||||
{
|
||||
return client.getWidget(WidgetInfo.BA_DEF_CALL_TEXT);
|
||||
return client.getWidget(BA_DEF_CALL_TEXT);
|
||||
}
|
||||
else if (client.getWidget(WidgetInfo.BA_ATK_CALL_TEXT) != null)
|
||||
else if (client.getWidget(BA_ATK_CALL_TEXT) != null)
|
||||
{
|
||||
return client.getWidget(WidgetInfo.BA_ATK_CALL_TEXT);
|
||||
return client.getWidget(BA_ATK_CALL_TEXT);
|
||||
}
|
||||
else if (client.getWidget(WidgetInfo.BA_COLL_CALL_TEXT) != null)
|
||||
else if (client.getWidget(BA_COLL_CALL_TEXT) != null)
|
||||
{
|
||||
return client.getWidget(WidgetInfo.BA_COLL_CALL_TEXT);
|
||||
return client.getWidget(BA_COLL_CALL_TEXT);
|
||||
}
|
||||
else if (client.getWidget(WidgetInfo.BA_HEAL_CALL_TEXT) != null)
|
||||
else if (client.getWidget(BA_HEAL_CALL_TEXT) != null)
|
||||
{
|
||||
return client.getWidget(WidgetInfo.BA_HEAL_CALL_TEXT);
|
||||
return client.getWidget(BA_HEAL_CALL_TEXT);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -306,7 +323,9 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
|
||||
if (inGameBit != inGame)
|
||||
{
|
||||
if (inGameBit == 1)
|
||||
inGameBit = inGame;
|
||||
|
||||
if (inGameBit == 0)
|
||||
{
|
||||
pastCall = 0;
|
||||
removeCounter();
|
||||
@@ -317,8 +336,6 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
addCounter();
|
||||
}
|
||||
}
|
||||
|
||||
inGameBit = inGame;
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@@ -371,10 +388,7 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
@Subscribe
|
||||
public void onNpcDespawned(NpcDespawned event)
|
||||
{
|
||||
if (healers.remove(event.getNpc()) != null && healers.isEmpty())
|
||||
{
|
||||
healers.clear();
|
||||
}
|
||||
healers.remove(event.getNpc());
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@@ -440,33 +454,34 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
|
||||
if (config.swapLadder() && option.equals("climb-down") && target.equals("ladder"))
|
||||
{
|
||||
swap(client, "quick-start", option, target, true);
|
||||
swap(client, "quick-start", option, target);
|
||||
}
|
||||
else if (config.removeBA() && client.getVar(Varbits.IN_GAME_BA) == 1 && !option.contains("tell-"))//if in barbarian assault and menu isnt from a horn
|
||||
{
|
||||
if (itemId == ItemID.LOGS && !target.contains("healing vial"))
|
||||
{
|
||||
if (client.getWidget(WidgetInfo.BA_DEF_ROLE_TEXT) == null)
|
||||
if (client.getWidget(BA_DEF_ROLE_TEXT) == null)
|
||||
{
|
||||
remove(new String[]{"take", "light"}, target, true);
|
||||
remove(new String[]{"take", "light"}, target);
|
||||
}
|
||||
else //remove "Light" option (and "Take" option if not defender).
|
||||
{
|
||||
remove("light", target, true);
|
||||
remove("light", target);
|
||||
}
|
||||
}
|
||||
else if (option.equals("use"))
|
||||
{
|
||||
if (config.removeHealWrongFood())
|
||||
{
|
||||
Widget healer = client.getWidget(WidgetInfo.BA_HEAL_LISTEN_TEXT);
|
||||
Widget healer = client.getWidget(BA_HEAL_LISTEN_TEXT);
|
||||
if (healer != null)
|
||||
{
|
||||
String item = target.split("-")[0].trim();
|
||||
List<String> poison = Arrays.asList("poisoned tofu", "poisoned meat", "poisoned worms");
|
||||
List<String> vials = Arrays.asList("healing vial", "healing vial(1)", "healing vial(2)", "healing vial(3)", "healing vial(4)");//"healing vial(4)"
|
||||
if (poison.contains(item))
|
||||
{//if item is a poison item
|
||||
{
|
||||
//if item is a poison item
|
||||
int calledPoison = 0;
|
||||
switch (healer.getText())//choose which poison to hide the use/destroy option for
|
||||
{
|
||||
@@ -485,12 +500,12 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
{
|
||||
if (calledPoison != 0 && itemId != calledPoison)//if no call or chosen item is not the called one
|
||||
{
|
||||
remove(new String[]{"use", "destroy", "examine"}, target, true);//remove options
|
||||
remove(new String[]{"use", "destroy", "examine"}, target);//remove options
|
||||
}
|
||||
}
|
||||
else if (!target.contains("penance healer"))
|
||||
{
|
||||
remove(option, target, true);
|
||||
remove(option, target);
|
||||
}
|
||||
}
|
||||
else if (vials.contains(item))//if item is the healer's healing vial
|
||||
@@ -501,28 +516,30 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
|
||||
if (!target.contains("level") || target.contains("penance") || target.contains("queen spawn"))//if someone has "penance" or "queen spawn" in their name, gg...
|
||||
{
|
||||
remove(option, target, true);
|
||||
remove(option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (option.equals("attack") && client.getWidget(WidgetInfo.BA_ATK_ROLE_TEXT) == null && !target.equals("queen spawn"))//if not attacker
|
||||
{//remove attack option from everything but queen spawns
|
||||
remove(option, target, true);
|
||||
}
|
||||
else if ((option.equals("fix") || (option.equals("block") && target.equals("penance cave"))) && client.getWidget(WidgetInfo.BA_DEF_ROLE_TEXT) == null)//if not defender
|
||||
{//the check for option requires checking target as well because defensive attack style option is also called "block".
|
||||
remove(option, target, true);
|
||||
}
|
||||
else if ((option.equals("load")) && client.getWidget(WidgetInfo.BA_COLL_ROLE_TEXT) == null)//if not collector, remove hopper options
|
||||
else if (option.equals("attack") && client.getWidget(BA_ATK_ROLE_TEXT) == null && !target.equals("queen spawn"))//if not attacker
|
||||
{
|
||||
remove(new String[]{option, "look-in"}, target, true);
|
||||
//remove attack option from everything but queen spawns
|
||||
remove(option, target);
|
||||
}
|
||||
else if ((option.equals("fix") || (option.equals("block") && target.equals("penance cave"))) && client.getWidget(BA_DEF_ROLE_TEXT) == null)//if not defender
|
||||
{
|
||||
//the check for option requires checking target as well because defensive attack style option is also called "block".
|
||||
remove(option, target);
|
||||
}
|
||||
else if ((option.equals("load")) && client.getWidget(BA_COLL_ROLE_TEXT) == null)//if not collector, remove hopper options
|
||||
{
|
||||
remove(new String[]{option, "look-in"}, target);
|
||||
}
|
||||
else if (config.removeWrongEggs() && option.equals("take"))
|
||||
{
|
||||
Widget eggToColl = client.getWidget(WidgetInfo.BA_COLL_LISTEN_TEXT);
|
||||
Widget eggToColl = client.getWidget(BA_COLL_LISTEN_TEXT);
|
||||
if (eggToColl != null)//if we're a collector
|
||||
{
|
||||
List<Integer> eggsToHide = new ArrayList<>();
|
||||
@@ -544,15 +561,15 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
}
|
||||
if (eggsToHide.contains(itemId))
|
||||
{
|
||||
remove(option, target, true);//hide wrong eggs
|
||||
remove(option, target);//hide wrong eggs
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
List<Integer> defenderItems = Arrays.asList(ItemID.HAMMER, ItemID.TOFU, ItemID.CRACKERS, ItemID.WORMS);//logs are handled separately due to hiding "light" option too.
|
||||
if (client.getWidget(WidgetInfo.BA_DEF_ROLE_TEXT) == null || !defenderItems.contains(itemId))//if not defender, or item is not a defenderItem
|
||||
if (client.getWidget(BA_DEF_ROLE_TEXT) == null || !defenderItems.contains(itemId))//if not defender, or item is not a defenderItem
|
||||
{
|
||||
remove(option, target, true);//hide everything except hammer/logs and bait if Defender
|
||||
remove(option, target);//hide everything except hammer/logs and bait if Defender
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -583,9 +600,9 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
client.setMenuEntries(menuEntries);
|
||||
}
|
||||
|
||||
if (client.getWidget(WidgetInfo.BA_COLL_LISTEN_TEXT) != null && inGameBit == 1 && config.eggBoi() && event.getTarget().endsWith("egg") && shiftDown)
|
||||
if (client.getWidget(BA_COLL_LISTEN_TEXT) != null && inGameBit == 1 && config.eggBoi() && event.getTarget().endsWith("egg") && shiftDown)
|
||||
{
|
||||
String[] currentCall = client.getWidget(WidgetInfo.BA_COLL_LISTEN_TEXT).getText().split(" ");
|
||||
String[] currentCall = client.getWidget(BA_COLL_LISTEN_TEXT).getText().split(" ");
|
||||
|
||||
MenuEntry[] menuEntries = client.getMenuEntries();
|
||||
MenuEntry correctEgg = null;
|
||||
@@ -609,9 +626,9 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
client.setMenuEntries(entries.toArray(new MenuEntry[0]));
|
||||
}
|
||||
|
||||
if (client.getWidget(WidgetInfo.BA_HEAL_LISTEN_TEXT) != null && inGameBit == 1 && config.osHelp() && event.getTarget().equals("<col=ffff>Healer item machine") && shiftDown)
|
||||
if (client.getWidget(BA_HEAL_LISTEN_TEXT) != null && inGameBit == 1 && config.osHelp() && event.getTarget().equals("<col=ffff>Healer item machine") && shiftDown)
|
||||
{
|
||||
String[] currentCall = client.getWidget(WidgetInfo.BA_HEAL_LISTEN_TEXT).getText().split(" ");
|
||||
String[] currentCall = client.getWidget(BA_HEAL_LISTEN_TEXT).getText().split(" ");
|
||||
|
||||
if (!currentCall[0].contains("Pois."))
|
||||
{
|
||||
@@ -632,7 +649,7 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
if (correctEgg != null)
|
||||
{
|
||||
entries.add(correctEgg);
|
||||
client.setMenuEntries(entries.toArray(new MenuEntry[entries.size()]));
|
||||
client.setMenuEntries(entries.toArray(new MenuEntry[0]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -641,12 +658,12 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
@Subscribe
|
||||
public void onMenuOptionClicked(MenuOptionClicked event)
|
||||
{
|
||||
if (!config.healerMenuOption() || !event.getMenuTarget().contains("Penance Healer") || client.getWidget(WidgetInfo.BA_HEAL_CALL_TEXT) == null)
|
||||
if (!config.healerMenuOption() || !event.getMenuTarget().contains("Penance Healer") || client.getWidget(BA_HEAL_CALL_TEXT) == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
String currentCall = client.getWidget(WidgetInfo.BA_HEAL_CALL_TEXT).getText();
|
||||
String currentCall = client.getWidget(BA_HEAL_CALL_TEXT).getText();
|
||||
String target = event.getMenuTarget();
|
||||
|
||||
if ((currentCall.equals("Pois. Worms") && (target.contains("Poisoned worms") && target.contains("->") && target.contains("Penance Healer")))
|
||||
@@ -662,12 +679,11 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onConfigChanged(ConfigChanged event)
|
||||
{
|
||||
if (config.antiDrag())
|
||||
if (counter != null && !config.defTimer())
|
||||
{
|
||||
client.setInventoryDragDelay(config.antiDragDelay());
|
||||
removeCounter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -697,10 +713,10 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
counter = null;
|
||||
}
|
||||
|
||||
private void remove(String option, String target, boolean strict)
|
||||
private void remove(String option, String target)
|
||||
{
|
||||
MenuEntry[] entries = client.getMenuEntries();
|
||||
int idx = searchIndex(entries, option, target, strict);
|
||||
int idx = searchIndex(entries, option, target);
|
||||
if (idx >= 0 && entries[idx] != null)
|
||||
{
|
||||
entries = ArrayUtils.removeElement(entries, entries[idx]);
|
||||
@@ -708,12 +724,12 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
}
|
||||
}
|
||||
|
||||
private void remove(String[] options, String target, boolean strict)
|
||||
private void remove(String[] options, String target)
|
||||
{
|
||||
MenuEntry[] entries = client.getMenuEntries();
|
||||
for (String option : options)
|
||||
{
|
||||
int idx = searchIndex(entries, option, target, strict);
|
||||
int idx = searchIndex(entries, option, target);
|
||||
if (idx >= 0 && entries[idx] != null)
|
||||
{
|
||||
entries = ArrayUtils.removeElement(entries, entries[idx]);
|
||||
@@ -723,7 +739,7 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
client.setMenuEntries(entries);
|
||||
}
|
||||
|
||||
private int searchIndex(MenuEntry[] entries, String option, String target, boolean strict)
|
||||
private int searchIndex(MenuEntry[] entries, String option, String target)
|
||||
{
|
||||
for (int i = entries.length - 1; i >= 0; i--)
|
||||
{
|
||||
@@ -731,21 +747,11 @@ public class BAToolsPlugin extends Plugin implements KeyListener
|
||||
String entryOption = Text.removeTags(entry.getOption()).toLowerCase();
|
||||
String entryTarget = Text.removeTags(entry.getTarget()).toLowerCase();
|
||||
|
||||
if (strict)
|
||||
{
|
||||
if (entryOption.equals(option) && entryTarget.equals(target))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (entryOption.contains(option.toLowerCase()) && entryTarget.equals(target))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -24,10 +24,10 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.batools;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum Calls
|
||||
{
|
||||
|
||||
@@ -24,11 +24,10 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.batools;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.ui.overlay.infobox.Counter;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
class CycleCounter extends Counter
|
||||
{
|
||||
CycleCounter(BufferedImage img, Plugin plugin, int tick)
|
||||
|
||||
@@ -27,9 +27,7 @@ package net.runelite.client.plugins.batools;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import net.runelite.api.NPC;
|
||||
import net.runelite.api.Actor;
|
||||
|
||||
|
||||
class Healer
|
||||
@@ -97,7 +95,8 @@ class Healer
|
||||
return HealerCode.WAVENINE;
|
||||
case 10:
|
||||
return HealerCode.WAVETEN;
|
||||
default: return null;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,20 +27,20 @@ package net.runelite.client.plugins.blackjack;
|
||||
import com.google.inject.Binder;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.ChatMessageType;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.Quest;
|
||||
import net.runelite.api.QuestState;
|
||||
import static net.runelite.api.Varbits.QUEST_THE_FEUD;
|
||||
import net.runelite.api.events.ChatMessage;
|
||||
import net.runelite.api.events.GameTick;
|
||||
import net.runelite.api.events.MenuEntryAdded;
|
||||
import net.runelite.api.events.VarbitChanged;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.menus.MenuManager;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.plugins.PluginType;
|
||||
import static net.runelite.client.util.MenuUtil.swap;
|
||||
|
||||
/**
|
||||
* Authors gazivodag longstreet
|
||||
@@ -53,81 +53,113 @@ import net.runelite.client.plugins.PluginType;
|
||||
)
|
||||
@Singleton
|
||||
@Slf4j
|
||||
public class BlackjackPlugin extends Plugin {
|
||||
public class BlackjackPlugin extends Plugin
|
||||
{
|
||||
private static final String PICKPOCKET = "Pickpocket";
|
||||
private static final String KNOCK_OUT = "Knock-out";
|
||||
private static final String LURE = "Lure";
|
||||
private static final String BANDIT = "Bandit";
|
||||
private static final String MENAPHITE = "Menaphite Thug";
|
||||
|
||||
@Inject
|
||||
Client client;
|
||||
private Client client;
|
||||
|
||||
private static long timeSinceKnockout;
|
||||
private static long timeSinceAggro;
|
||||
@Inject
|
||||
private MenuManager menuManager;
|
||||
|
||||
@Getter
|
||||
private static long currentGameTick;
|
||||
private int lastKnockout;
|
||||
private boolean pickpocketing;
|
||||
private boolean ableToBlackJack;
|
||||
|
||||
@Override
|
||||
public void configure(Binder binder) {
|
||||
public void configure(Binder binder)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void startUp() throws Exception {
|
||||
currentGameTick = 0;
|
||||
protected void startUp() throws Exception
|
||||
{
|
||||
menuManager.addPriorityEntry(LURE, BANDIT);
|
||||
menuManager.addPriorityEntry(LURE, MENAPHITE);
|
||||
|
||||
menuManager.addPriorityEntry(KNOCK_OUT, BANDIT);
|
||||
menuManager.addPriorityEntry(KNOCK_OUT, MENAPHITE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void shutDown() throws Exception {
|
||||
currentGameTick = 0;
|
||||
protected void shutDown() throws Exception
|
||||
{
|
||||
menuManager.removePriorityEntry(LURE, BANDIT);
|
||||
menuManager.removePriorityEntry(LURE, MENAPHITE);
|
||||
|
||||
menuManager.removePriorityEntry(PICKPOCKET, BANDIT);
|
||||
menuManager.removePriorityEntry(PICKPOCKET, MENAPHITE);
|
||||
|
||||
menuManager.removePriorityEntry(KNOCK_OUT, BANDIT);
|
||||
menuManager.removePriorityEntry(KNOCK_OUT, MENAPHITE);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onGameTick(GameTick gameTick) {
|
||||
currentGameTick++;
|
||||
}
|
||||
public void onGameTick(GameTick gameTick)
|
||||
{
|
||||
if (ableToBlackJack && pickpocketing && client.getTickCount() >= lastKnockout + 4)
|
||||
{
|
||||
pickpocketing = false;
|
||||
|
||||
menuManager.removePriorityEntry(PICKPOCKET, BANDIT);
|
||||
menuManager.removePriorityEntry(PICKPOCKET, MENAPHITE);
|
||||
|
||||
menuManager.addPriorityEntry(KNOCK_OUT, BANDIT);
|
||||
menuManager.addPriorityEntry(KNOCK_OUT, MENAPHITE);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onChatMessage(ChatMessage chatMessage) {
|
||||
if (chatMessage.getType() == ChatMessageType.SPAM) {
|
||||
if (chatMessage.getMessage().equals("You smack the bandit over the head and render them unconscious.")) {
|
||||
timeSinceKnockout = getCurrentGameTick();
|
||||
public void onMenuEntryAdded(MenuEntryAdded event)
|
||||
{
|
||||
// Lure has higher priority than knock-out
|
||||
if (event.getTarget().contains(MENAPHITE) || event.getTarget().contains(BANDIT)
|
||||
&& event.getOption().equals(LURE))
|
||||
{
|
||||
swap(client, KNOCK_OUT, LURE, event.getTarget(), false);
|
||||
}
|
||||
if (chatMessage.getMessage().equals("Your blow only glances off the bandit's head.")) {
|
||||
timeSinceAggro = getCurrentGameTick();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onChatMessage(ChatMessage chatMessage)
|
||||
{
|
||||
if (chatMessage.getType() == ChatMessageType.SPAM)
|
||||
{
|
||||
if (chatMessage.getMessage().equals("You smack the bandit over the head and render them unconscious.")
|
||||
|| chatMessage.getMessage().equals("Your blow only glances off the bandit's head."))
|
||||
{
|
||||
menuManager.removePriorityEntry(KNOCK_OUT, BANDIT);
|
||||
menuManager.removePriorityEntry(KNOCK_OUT, MENAPHITE);
|
||||
|
||||
menuManager.addPriorityEntry(PICKPOCKET, BANDIT);
|
||||
menuManager.addPriorityEntry(PICKPOCKET, MENAPHITE);
|
||||
|
||||
lastKnockout = client.getTickCount();
|
||||
pickpocketing = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onMenuEntryAdded(MenuEntryAdded menuEntryAdded) {
|
||||
String target = menuEntryAdded.getTarget().toLowerCase();
|
||||
if ((target.contains("bandit") | target.contains("menaphite thug"))) {
|
||||
Quest quest = Quest.THE_FEUD;
|
||||
if (quest.getState(client) == QuestState.FINISHED) {
|
||||
if (currentGameTick < (timeSinceKnockout + 4)) {
|
||||
stripSpecificEntries("pickpocket");
|
||||
}
|
||||
if (currentGameTick < (timeSinceAggro + 4)) {
|
||||
stripSpecificEntries("pickpocket");
|
||||
}
|
||||
stripSpecificEntries("knock-out");
|
||||
}
|
||||
}
|
||||
}
|
||||
public void onVarbitChanged(VarbitChanged event)
|
||||
{
|
||||
ableToBlackJack = client.getVar(QUEST_THE_FEUD) >= 13;
|
||||
|
||||
private void stripSpecificEntries(String exceptFor) {
|
||||
MenuEntry[] currentEntires = client.getMenuEntries();
|
||||
MenuEntry[] newEntries = new MenuEntry[2];
|
||||
if (!ableToBlackJack)
|
||||
{
|
||||
menuManager.removePriorityEntry(LURE, BANDIT);
|
||||
menuManager.removePriorityEntry(LURE, MENAPHITE);
|
||||
|
||||
for (MenuEntry currentEntry : currentEntires) {
|
||||
if (currentEntry.getOption().toLowerCase().equals(exceptFor.toLowerCase())) {
|
||||
newEntries[1] = currentEntry;
|
||||
}
|
||||
if (currentEntry.getOption().toLowerCase().equals("lure")) {
|
||||
newEntries[0] = currentEntry;
|
||||
}
|
||||
}
|
||||
menuManager.removePriorityEntry(KNOCK_OUT, BANDIT);
|
||||
menuManager.removePriorityEntry(KNOCK_OUT, MENAPHITE);
|
||||
|
||||
if (newEntries[0] != null && newEntries[1] != null) {
|
||||
client.setMenuEntries(newEntries);
|
||||
menuManager.removePriorityEntry(PICKPOCKET, BANDIT);
|
||||
menuManager.removePriorityEntry(PICKPOCKET, MENAPHITE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,6 @@ import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.client.game.ItemManager;
|
||||
import net.runelite.client.ui.overlay.Overlay;
|
||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||
import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE;
|
||||
import net.runelite.client.ui.overlay.OverlayMenuEntry;
|
||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||
|
||||
@@ -24,12 +24,11 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.blastmine;
|
||||
|
||||
import java.awt.Color;
|
||||
import net.runelite.client.config.Config;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
import net.runelite.client.config.ConfigItem;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
@ConfigGroup("blastmine")
|
||||
public interface BlastMinePluginConfig extends Config
|
||||
{
|
||||
|
||||
@@ -356,7 +356,7 @@ public class BoostsPlugin extends Plugin
|
||||
* section it will "activate" adding an additional 15 second section
|
||||
* to the boost timing. If again the preserve prayer is active for that
|
||||
* entire section a second 15 second section will be added.
|
||||
*
|
||||
* <p>
|
||||
* Preserve is only required to be on for the 4th and 5th sections of the boost timer
|
||||
* to gain full effect (seconds 45-75).
|
||||
*
|
||||
@@ -406,6 +406,7 @@ public class BoostsPlugin extends Plugin
|
||||
|
||||
/**
|
||||
* Converts tick-based time to accurate second time
|
||||
*
|
||||
* @param time tick-based time
|
||||
* @return second-based time
|
||||
*/
|
||||
|
||||
@@ -77,7 +77,7 @@ enum Boss
|
||||
bosses = builder.build();
|
||||
}
|
||||
|
||||
private Boss(int id, long period, ChronoUnit unit, int itemSpriteId)
|
||||
Boss(int id, long period, ChronoUnit unit, int itemSpriteId)
|
||||
{
|
||||
this.id = id;
|
||||
this.spawnTime = Duration.of(period, unit);
|
||||
|
||||
@@ -29,6 +29,7 @@ import net.runelite.client.config.Alpha;
|
||||
import net.runelite.client.config.Config;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
import net.runelite.client.config.ConfigItem;
|
||||
import net.runelite.client.config.Range;
|
||||
|
||||
@ConfigGroup("cannon")
|
||||
public interface CannonConfig extends Config
|
||||
@@ -84,6 +85,9 @@ public interface CannonConfig extends Config
|
||||
return true;
|
||||
}
|
||||
|
||||
@Range(
|
||||
max = 29
|
||||
)
|
||||
@ConfigItem(
|
||||
keyName = "ammoAmount",
|
||||
name = "Ammo left",
|
||||
|
||||
@@ -104,6 +104,7 @@ class CannonOverlay extends Overlay
|
||||
|
||||
/**
|
||||
* Draw the double hit spots on a 6 by 6 grid around the cannon
|
||||
*
|
||||
* @param startTile The position of the cannon
|
||||
*/
|
||||
private void drawDoubleHitSpots(Graphics2D graphics, LocalPoint startTile, Color color)
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.cannon;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.Provides;
|
||||
import java.awt.Color;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
@@ -38,7 +39,6 @@ import net.runelite.api.ChatMessageType;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GameObject;
|
||||
import net.runelite.api.InventoryID;
|
||||
import net.runelite.api.Item;
|
||||
import net.runelite.api.ItemID;
|
||||
import static net.runelite.api.ObjectID.CANNON_BASE;
|
||||
import net.runelite.api.Player;
|
||||
@@ -62,6 +62,7 @@ import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.task.Schedule;
|
||||
import net.runelite.client.ui.overlay.OverlayManager;
|
||||
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
||||
import net.runelite.client.util.ItemUtil;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Cannon",
|
||||
@@ -72,6 +73,9 @@ public class CannonPlugin extends Plugin
|
||||
{
|
||||
private static final Pattern NUMBER_PATTERN = Pattern.compile("([0-9]+)");
|
||||
private static final int MAX_CBALLS = 30;
|
||||
private static final ImmutableSet<Integer> CANNON_PARTS = ImmutableSet.of(
|
||||
ItemID.CANNON_BASE, ItemID.CANNON_STAND, ItemID.CANNON_BARRELS, ItemID.CANNON_FURNACE
|
||||
);
|
||||
|
||||
private CannonCounter counter;
|
||||
private boolean skipProjectileCheckThisTick;
|
||||
@@ -157,46 +161,7 @@ public class CannonPlugin extends Plugin
|
||||
return;
|
||||
}
|
||||
|
||||
boolean hasBase = false;
|
||||
boolean hasStand = false;
|
||||
boolean hasBarrels = false;
|
||||
boolean hasFurnace = false;
|
||||
boolean hasAll = false;
|
||||
|
||||
if (!cannonPlaced)
|
||||
{
|
||||
for (Item item : event.getItemContainer().getItems())
|
||||
{
|
||||
if (item == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (item.getId())
|
||||
{
|
||||
case ItemID.CANNON_BASE:
|
||||
hasBase = true;
|
||||
break;
|
||||
case ItemID.CANNON_STAND:
|
||||
hasStand = true;
|
||||
break;
|
||||
case ItemID.CANNON_BARRELS:
|
||||
hasBarrels = true;
|
||||
break;
|
||||
case ItemID.CANNON_FURNACE:
|
||||
hasFurnace = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (hasBase && hasStand && hasBarrels && hasFurnace)
|
||||
{
|
||||
hasAll = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cannonSpotOverlay.setHidden(!hasAll);
|
||||
cannonSpotOverlay.setHidden(!ItemUtil.containsAllItemIds(event.getItemContainer().getItems(), CANNON_PARTS));
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
|
||||
@@ -60,6 +60,7 @@ public enum CerberusGhost
|
||||
|
||||
/**
|
||||
* Try to identify if NPC is ghost
|
||||
*
|
||||
* @param npc npc
|
||||
* @return optional ghost
|
||||
*/
|
||||
|
||||
@@ -26,12 +26,12 @@ package net.runelite.client.plugins.chatboxperformance;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.widgets.WidgetType;
|
||||
import net.runelite.api.events.WidgetPositioned;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.api.widgets.WidgetPositionMode;
|
||||
import net.runelite.api.widgets.WidgetSizeMode;
|
||||
import net.runelite.api.widgets.WidgetType;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
|
||||
@@ -187,6 +187,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener
|
||||
|
||||
/**
|
||||
* Small hack to prevent plugins checking for specific messages to match
|
||||
*
|
||||
* @param message message
|
||||
* @return message with nbsp
|
||||
*/
|
||||
|
||||
@@ -33,13 +33,11 @@ import java.awt.Color;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Deque;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.ChatLineBuffer;
|
||||
@@ -49,9 +47,7 @@ import net.runelite.api.ClanMemberRank;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.MessageNode;
|
||||
import net.runelite.api.Opcodes;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.Script;
|
||||
import net.runelite.api.ScriptID;
|
||||
import net.runelite.api.SpriteID;
|
||||
import net.runelite.api.VarClientStr;
|
||||
@@ -65,10 +61,7 @@ import net.runelite.api.events.GameStateChanged;
|
||||
import net.runelite.api.events.GameTick;
|
||||
import net.runelite.api.events.PlayerDespawned;
|
||||
import net.runelite.api.events.PlayerSpawned;
|
||||
import net.runelite.api.events.ScriptCallbackEvent;
|
||||
import net.runelite.api.events.VarClientStrChanged;
|
||||
import net.runelite.api.events.WidgetMenuOptionClicked;
|
||||
import net.runelite.api.widgets.JavaScriptCallback;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.api.widgets.WidgetType;
|
||||
@@ -78,8 +71,6 @@ import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.game.ClanManager;
|
||||
import net.runelite.client.game.SpriteManager;
|
||||
import net.runelite.client.menus.MenuManager;
|
||||
import net.runelite.client.menus.WidgetMenuOption;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_OPAQUE_BACKGROUND;
|
||||
@@ -97,8 +88,8 @@ import net.runelite.client.util.Text;
|
||||
public class ClanChatPlugin extends Plugin
|
||||
{
|
||||
private static final int MAX_CHATS = 20;
|
||||
private static final String CLAN_CHAT_TITLE = " Clan Chat";
|
||||
private static final String RECENT_TITLE = " Recent Clan Chats";
|
||||
private static final String CLAN_CHAT_TITLE = "CC";
|
||||
private static final String RECENT_TITLE = "Recent CCs";
|
||||
private static final int JOIN_LEAVE_DURATION = 20;
|
||||
private static final int MESSAGE_DELAY = 10;
|
||||
|
||||
@@ -120,9 +111,6 @@ public class ClanChatPlugin extends Plugin
|
||||
@Inject
|
||||
private ClientThread clientThread;
|
||||
|
||||
@Inject
|
||||
private MenuManager menuManager;
|
||||
|
||||
private List<String> chats = new ArrayList<>();
|
||||
|
||||
public static CopyOnWriteArrayList<Player> getClanMembers()
|
||||
@@ -139,8 +127,6 @@ public class ClanChatPlugin extends Plugin
|
||||
private Map<String, ClanMemberActivity> activityBuffer = new HashMap<>();
|
||||
private int clanJoinedTick;
|
||||
|
||||
private ConcurrentHashMap<Widget, WidgetMenuOption> ccWidgetMap = new ConcurrentHashMap<Widget, WidgetMenuOption>();
|
||||
|
||||
@Provides
|
||||
ClanChatConfig getConfig(ConfigManager configManager)
|
||||
{
|
||||
@@ -561,13 +547,14 @@ public class ClanChatPlugin extends Plugin
|
||||
private void loadClanChats()
|
||||
{
|
||||
Widget clanChatList = client.getWidget(WidgetInfo.CLAN_CHAT_LIST);
|
||||
clanChatList.setScrollHeight( 14 * chats.size());
|
||||
clanChatList.revalidateScroll();
|
||||
if (clanChatList == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
clanChatList.setScrollHeight(14 * chats.size());
|
||||
clanChatList.revalidateScroll();
|
||||
|
||||
int y = 2;
|
||||
clanChatList.setChildren(null);
|
||||
for (String chat : Lists.reverse(chats))
|
||||
|
||||
@@ -7,7 +7,6 @@ import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.client.game.ClanManager;
|
||||
import net.runelite.client.ui.FontManager;
|
||||
import net.runelite.client.ui.overlay.Overlay;
|
||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||
@@ -49,7 +48,8 @@ public class ClanManModeOverlay extends Overlay
|
||||
|
||||
if (textLocation != null)
|
||||
{
|
||||
if (config.getClanAttackableColor().equals(color) && config.ShowBold()) {
|
||||
if (config.getClanAttackableColor().equals(color) && config.ShowBold())
|
||||
{
|
||||
graphics.setFont(FontManager.getRunescapeBoldFont());
|
||||
}
|
||||
OverlayUtil.renderTextLocation(graphics, textLocation, name, color);
|
||||
|
||||
@@ -70,14 +70,16 @@ public class ClanManModePlugin extends Plugin
|
||||
Map<String, Integer> clan = new HashMap<>();
|
||||
|
||||
@Override
|
||||
protected void startUp() throws Exception {
|
||||
protected void startUp() throws Exception
|
||||
{
|
||||
overlayManager.add(ClanManModeOverlay);
|
||||
overlayManager.add(ClanManModeTileOverlay);
|
||||
overlayManager.add(ClanManModeMinimapOverlay);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void shutDown() throws Exception {
|
||||
protected void shutDown() throws Exception
|
||||
{
|
||||
overlayManager.remove(ClanManModeOverlay);
|
||||
overlayManager.remove(ClanManModeTileOverlay);
|
||||
overlayManager.remove(ClanManModeMinimapOverlay);
|
||||
@@ -90,17 +92,21 @@ public class ClanManModePlugin extends Plugin
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onGameStateChanged(GameStateChanged gameStateChanged) {
|
||||
if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN || gameStateChanged.getGameState() == GameState.HOPPING) {
|
||||
public void onGameStateChanged(GameStateChanged gameStateChanged)
|
||||
{
|
||||
if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN || gameStateChanged.getGameState() == GameState.HOPPING)
|
||||
{
|
||||
ticks = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onGameTick(GameTick event) {
|
||||
public void onGameTick(GameTick event)
|
||||
{
|
||||
ticks++;
|
||||
final Player localPlayer = client.getLocalPlayer();
|
||||
if (!clan.containsKey(localPlayer.getName())) {
|
||||
if (!clan.containsKey(localPlayer.getName()))
|
||||
{
|
||||
clan.put(localPlayer.getName(), localPlayer.getCombatLevel());
|
||||
}
|
||||
WorldPoint a = localPlayer.getWorldLocation();
|
||||
@@ -108,30 +114,38 @@ public class ClanManModePlugin extends Plugin
|
||||
int upperLevel = ((a.getY() - 3520) / 8) + 1;
|
||||
wildernessLevel = a.getY() > 6400 ? underLevel : upperLevel;
|
||||
inwildy = client.getVar(Varbits.IN_WILDERNESS);
|
||||
if (clan.size() > 0) {
|
||||
if (clan.size() > 0)
|
||||
{
|
||||
clanmin = Collections.min(clan.values());
|
||||
clanmax = Collections.max(clan.values());
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onMenuEntryAdded(MenuEntryAdded event) {
|
||||
if (!config.hideAtkOpt()) {
|
||||
public void onMenuEntryAdded(MenuEntryAdded event)
|
||||
{
|
||||
if (!config.hideAtkOpt())
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (client.getGameState() != GameState.LOGGED_IN) {
|
||||
if (client.getGameState() != GameState.LOGGED_IN)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final String option = Text.removeTags(event.getOption()).toLowerCase();
|
||||
|
||||
if (option.equals("attack")) {
|
||||
if (option.equals("attack"))
|
||||
{
|
||||
final Pattern ppattern = Pattern.compile("<col=ffffff>(.+?)<col=");
|
||||
final Matcher pmatch = ppattern.matcher(event.getTarget());
|
||||
|
||||
if (pmatch.find() && pmatch.matches()) {
|
||||
if (pmatch.group(1) != null) {
|
||||
if (clan.containsKey(pmatch.group(1).replace(" ", " "))) {
|
||||
if (pmatch.find() && pmatch.matches())
|
||||
{
|
||||
if (pmatch.group(1) != null)
|
||||
{
|
||||
if (clan.containsKey(pmatch.group(1).replace(" ", " ")))
|
||||
{
|
||||
MenuEntry[] entries = client.getMenuEntries();
|
||||
entries = ArrayUtils.removeElement(entries, entries[entries.length - 1]);
|
||||
client.setMenuEntries(entries);
|
||||
|
||||
@@ -39,52 +39,70 @@ public class ClanManModeService
|
||||
int selfmax = localPlayer.getCombatLevel() + plugin.wildernessLevel;
|
||||
for (Player player : client.getPlayers())
|
||||
{
|
||||
if (player == null || player.getName() == null) {
|
||||
if (player == null || player.getName() == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player == localPlayer) {
|
||||
if (player == localPlayer)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean isClanMember = player.isClanMember();
|
||||
Actor interacting = player.getInteracting();
|
||||
Player interactor = null;
|
||||
if (interacting != null && !(interacting instanceof NPC)) {
|
||||
if (interacting != null && !(interacting instanceof NPC))
|
||||
{
|
||||
interactor = ((Player) interacting);
|
||||
}
|
||||
|
||||
if (config.showAttackers()) {
|
||||
if (interactor != null) {
|
||||
if (interactor.getName().equals(localName)) {
|
||||
if (config.showAttackers())
|
||||
{
|
||||
if (interactor != null)
|
||||
{
|
||||
if (interactor.getName().equals(localName))
|
||||
{
|
||||
consumer.accept(player, config.getAttackerColor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (plugin.inwildy == 1) {
|
||||
if (isClanMember) {
|
||||
if (!plugin.clan.containsKey(player.getName())) {
|
||||
if (plugin.inwildy == 1)
|
||||
{
|
||||
if (isClanMember)
|
||||
{
|
||||
if (!plugin.clan.containsKey(player.getName()))
|
||||
{
|
||||
plugin.clan.put(player.getName(), player.getCombatLevel());
|
||||
}
|
||||
if (config.highlightAttacked()) {
|
||||
if (interactor != null) {
|
||||
if (!interactors.containsKey(interactor.getName())) {
|
||||
if (config.highlightAttacked())
|
||||
{
|
||||
if (interactor != null)
|
||||
{
|
||||
if (!interactors.containsKey(interactor.getName()))
|
||||
{
|
||||
WorldPoint a = interactor.getWorldLocation();
|
||||
int underLevel = ((a.getY() - 9920) / 8) + 1;
|
||||
int upperLevel = ((a.getY() - 3520) / 8) + 1;
|
||||
int wildernessLevel = a.getY() > 6400 ? underLevel : upperLevel;
|
||||
int wildydiff = plugin.wildernessLevel - wildernessLevel;
|
||||
if (wildydiff < 0) {
|
||||
if (wildydiff < 0)
|
||||
{
|
||||
wildydiff = 0;
|
||||
}
|
||||
if (config.CalcSelfCB()) {
|
||||
if (interacting.getCombatLevel() <= selfmax && interacting.getCombatLevel() - wildydiff >= selfmin && !interactor.isClanMember()) {
|
||||
if (config.CalcSelfCB())
|
||||
{
|
||||
if (interacting.getCombatLevel() <= selfmax && interacting.getCombatLevel() - wildydiff >= selfmin && !interactor.isClanMember())
|
||||
{
|
||||
interactors.put(interactor.getName(), player.getName());
|
||||
consumer.accept(interactor, config.getClanAttackableColor());
|
||||
}
|
||||
} else {
|
||||
if (interacting.getCombatLevel() <= maxatk && interacting.getCombatLevel() - wildydiff >= minatk && !interactor.isClanMember()) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (interacting.getCombatLevel() <= maxatk && interacting.getCombatLevel() - wildydiff >= minatk && !interactor.isClanMember())
|
||||
{
|
||||
interactors.put(interactor.getName(), player.getName());
|
||||
consumer.accept(interactor, config.getClanAttackableColor());
|
||||
}
|
||||
@@ -92,43 +110,61 @@ public class ClanManModeService
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (config.PersistentClan()) {
|
||||
if (plugin.clan.containsKey(player.getName())) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (config.PersistentClan())
|
||||
{
|
||||
if (plugin.clan.containsKey(player.getName()))
|
||||
{
|
||||
consumer.accept(player, config.getClanMemberColor());
|
||||
}
|
||||
}
|
||||
if (config.highlightAttacked()) {
|
||||
if (interactors.containsKey(player.getName())) {
|
||||
if (config.highlightAttacked())
|
||||
{
|
||||
if (interactors.containsKey(player.getName()))
|
||||
{
|
||||
String attackername = interactors.get(player.getName());
|
||||
boolean found = false;
|
||||
for (Player attacker : client.getPlayers()) {
|
||||
if (attacker == null || attacker.getName() == null) {
|
||||
for (Player attacker : client.getPlayers())
|
||||
{
|
||||
if (attacker == null || attacker.getName() == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (attacker.getName().equals(attackername)) {
|
||||
if (attacker.getName().equals(attackername))
|
||||
{
|
||||
found = true;
|
||||
Actor ainteract = attacker.getInteracting();
|
||||
if (ainteract != null) {
|
||||
if (ainteract.getName().equals(player.getName())) {
|
||||
if (ainteract != null)
|
||||
{
|
||||
if (ainteract.getName().equals(player.getName()))
|
||||
{
|
||||
consumer.accept(player, config.getClanAttackableColor());
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
interactors.remove(player.getName());
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
interactors.remove(player.getName());
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
if (!found)
|
||||
{
|
||||
interactors.remove(player.getName());
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (config.highlightAttackable()) {
|
||||
if ((config.hideAttackable() && plugin.ticks >= config.hideTime()) || plugin.clan.containsKey(player.getName())) {
|
||||
if (config.highlightAttackable())
|
||||
{
|
||||
if ((config.hideAttackable() && plugin.ticks >= config.hideTime()) || plugin.clan.containsKey(player.getName()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
WorldPoint a = player.getWorldLocation();
|
||||
@@ -136,15 +172,21 @@ public class ClanManModeService
|
||||
int upperLevel = ((a.getY() - 3520) / 8) + 1;
|
||||
int wildernessLevel = a.getY() > 6400 ? underLevel : upperLevel;
|
||||
int wildydiff = plugin.wildernessLevel - wildernessLevel;
|
||||
if (wildydiff < 0) {
|
||||
if (wildydiff < 0)
|
||||
{
|
||||
wildydiff = 0;
|
||||
}
|
||||
if (config.CalcSelfCB()) {
|
||||
if (player.getCombatLevel() <= selfmax && player.getCombatLevel() - wildydiff >= selfmin) {
|
||||
if (config.CalcSelfCB())
|
||||
{
|
||||
if (player.getCombatLevel() <= selfmax && player.getCombatLevel() - wildydiff >= selfmin)
|
||||
{
|
||||
consumer.accept(player, config.getAttackableColor());
|
||||
}
|
||||
} else {
|
||||
if (player.getCombatLevel() <= maxatk && player.getCombatLevel() - wildydiff >= minatk) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (player.getCombatLevel() <= maxatk && player.getCombatLevel() - wildydiff >= minatk)
|
||||
{
|
||||
consumer.accept(player, config.getAttackableColor());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
package net.runelite.client.plugins.climbupclimbdown;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.events.MenuEntryAdded;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.input.KeyManager;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.plugins.PluginType;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Climb Up Climb Down",
|
||||
description = "Hold Shift to Climb up, Ctrl to Climb down",
|
||||
tags = {"climb", "stairs", "ladder", "swap", "key", "input"},
|
||||
type = PluginType.UTILITY
|
||||
)
|
||||
@Slf4j
|
||||
@Singleton
|
||||
public class ClimbPlugin extends Plugin
|
||||
{
|
||||
|
||||
@Inject
|
||||
Client client;
|
||||
|
||||
@Inject
|
||||
KeyManager keyManager;
|
||||
|
||||
@Inject
|
||||
ShiftCtrlInputListener inputListener;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private boolean isHoldingShift;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private boolean isHoldingCtrl;
|
||||
|
||||
@Override
|
||||
protected void startUp() throws Exception
|
||||
{
|
||||
enableCustomization();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void shutDown() throws Exception
|
||||
{
|
||||
disableCustomization();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onMenuEntryAdded(MenuEntryAdded menuEntryAdded)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (menuEntryAdded.getOption().equalsIgnoreCase("climb"))
|
||||
{
|
||||
if (isHoldingCtrl ^ isHoldingShift)
|
||||
{
|
||||
if (isHoldingShift)
|
||||
{
|
||||
stripExceptFor("climb-up");
|
||||
}
|
||||
if (isHoldingCtrl)
|
||||
{
|
||||
stripExceptFor("climb-down");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
log.error("Uh oh!", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void enableCustomization()
|
||||
{
|
||||
keyManager.registerKeyListener(inputListener);
|
||||
}
|
||||
|
||||
private void disableCustomization()
|
||||
{
|
||||
keyManager.unregisterKeyListener(inputListener);
|
||||
}
|
||||
|
||||
private void stripExceptFor(String option)
|
||||
{
|
||||
MenuEntry[] newEntries = new MenuEntry[1];
|
||||
|
||||
for (MenuEntry entry : client.getMenuEntries())
|
||||
{
|
||||
if (entry.getOption().equalsIgnoreCase(option))
|
||||
{
|
||||
newEntries[0] = entry;
|
||||
}
|
||||
}
|
||||
|
||||
if (newEntries[0] != null)
|
||||
{
|
||||
client.setMenuEntries(newEntries);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
package net.runelite.client.plugins.climbupclimbdown;
|
||||
|
||||
import java.awt.event.KeyEvent;
|
||||
import javax.inject.Inject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.client.input.KeyListener;
|
||||
|
||||
@Slf4j
|
||||
public class ShiftCtrlInputListener implements KeyListener
|
||||
{
|
||||
@Inject
|
||||
ClimbPlugin plugin;
|
||||
|
||||
@Override
|
||||
public void keyTyped(KeyEvent e)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e)
|
||||
{
|
||||
switch (e.getKeyCode())
|
||||
{
|
||||
case KeyEvent.VK_SHIFT:
|
||||
if (plugin.isHoldingShift())
|
||||
{
|
||||
return;
|
||||
}
|
||||
plugin.setHoldingShift(true);
|
||||
break;
|
||||
case KeyEvent.VK_CONTROL:
|
||||
if (plugin.isHoldingCtrl())
|
||||
{
|
||||
return;
|
||||
}
|
||||
plugin.setHoldingCtrl(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e)
|
||||
{
|
||||
switch (e.getKeyCode())
|
||||
{
|
||||
case KeyEvent.VK_SHIFT:
|
||||
if (!plugin.isHoldingShift())
|
||||
{
|
||||
return;
|
||||
}
|
||||
plugin.setHoldingShift(false);
|
||||
break;
|
||||
case KeyEvent.VK_CONTROL:
|
||||
if (!plugin.isHoldingCtrl())
|
||||
{
|
||||
return;
|
||||
}
|
||||
plugin.setHoldingCtrl(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,10 +36,8 @@ import java.awt.Rectangle;
|
||||
import java.awt.geom.Area;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Stream;
|
||||
import javax.inject.Inject;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -97,6 +95,7 @@ import net.runelite.client.ui.overlay.OverlayUtil;
|
||||
import net.runelite.client.ui.overlay.components.TextComponent;
|
||||
import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager;
|
||||
import net.runelite.client.util.ImageUtil;
|
||||
import net.runelite.client.util.ItemUtil;
|
||||
import net.runelite.client.util.Text;
|
||||
|
||||
@PluginDescriptor(
|
||||
@@ -254,10 +253,8 @@ public class ClueScrollPlugin extends Plugin
|
||||
// Check if item was removed from inventory
|
||||
if (clue != null && clueItemId != null)
|
||||
{
|
||||
final Stream<Item> items = Arrays.stream(event.getItemContainer().getItems());
|
||||
|
||||
// Check if clue was removed from inventory
|
||||
if (items.noneMatch(item -> itemManager.getItemComposition(item.getId()).getId() == clueItemId))
|
||||
if (!ItemUtil.containsItemId(event.getItemContainer().getItems(), clueItemId))
|
||||
{
|
||||
resetClue(true);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,56 @@ import lombok.Getter;
|
||||
import net.runelite.api.NPC;
|
||||
import static net.runelite.api.NullObjectID.NULL_1293;
|
||||
import net.runelite.api.ObjectComposition;
|
||||
import static net.runelite.api.ObjectID.*;
|
||||
import static net.runelite.api.ObjectID.BOOKCASE_12539;
|
||||
import static net.runelite.api.ObjectID.BOOKCASE_380;
|
||||
import static net.runelite.api.ObjectID.BOOKCASE_394;
|
||||
import static net.runelite.api.ObjectID.BOOKCASE_9523;
|
||||
import static net.runelite.api.ObjectID.BOXES;
|
||||
import static net.runelite.api.ObjectID.BOXES_360;
|
||||
import static net.runelite.api.ObjectID.BOXES_361;
|
||||
import static net.runelite.api.ObjectID.BOXES_3686;
|
||||
import static net.runelite.api.ObjectID.BOXES_5111;
|
||||
import static net.runelite.api.ObjectID.BOXES_6176;
|
||||
import static net.runelite.api.ObjectID.BUCKET_9568;
|
||||
import static net.runelite.api.ObjectID.BUSH_2357;
|
||||
import static net.runelite.api.ObjectID.CLOSED_CHEST_25592;
|
||||
import static net.runelite.api.ObjectID.CLOSED_CHEST_375;
|
||||
import static net.runelite.api.ObjectID.CLOSED_CHEST_5108;
|
||||
import static net.runelite.api.ObjectID.COFFIN;
|
||||
import static net.runelite.api.ObjectID.CRATES_11600;
|
||||
import static net.runelite.api.ObjectID.CRATES_24088;
|
||||
import static net.runelite.api.ObjectID.CRATE_11485;
|
||||
import static net.runelite.api.ObjectID.CRATE_12963;
|
||||
import static net.runelite.api.ObjectID.CRATE_18204;
|
||||
import static net.runelite.api.ObjectID.CRATE_18506;
|
||||
import static net.runelite.api.ObjectID.CRATE_18889;
|
||||
import static net.runelite.api.ObjectID.CRATE_24344;
|
||||
import static net.runelite.api.ObjectID.CRATE_25775;
|
||||
import static net.runelite.api.ObjectID.CRATE_26635;
|
||||
import static net.runelite.api.ObjectID.CRATE_27532;
|
||||
import static net.runelite.api.ObjectID.CRATE_27533;
|
||||
import static net.runelite.api.ObjectID.CRATE_354;
|
||||
import static net.runelite.api.ObjectID.CRATE_355;
|
||||
import static net.runelite.api.ObjectID.CRATE_356;
|
||||
import static net.runelite.api.ObjectID.CRATE_357;
|
||||
import static net.runelite.api.ObjectID.CRATE_358;
|
||||
import static net.runelite.api.ObjectID.CRATE_366;
|
||||
import static net.runelite.api.ObjectID.CRATE_5106;
|
||||
import static net.runelite.api.ObjectID.CRATE_5107;
|
||||
import static net.runelite.api.ObjectID.CRATE_5113;
|
||||
import static net.runelite.api.ObjectID.CRATE_9534;
|
||||
import static net.runelite.api.ObjectID.DRAWERS;
|
||||
import static net.runelite.api.ObjectID.DRAWERS_25766;
|
||||
import static net.runelite.api.ObjectID.DRAWERS_350;
|
||||
import static net.runelite.api.ObjectID.DRAWERS_352;
|
||||
import static net.runelite.api.ObjectID.DRAWERS_5618;
|
||||
import static net.runelite.api.ObjectID.DRAWERS_7194;
|
||||
import static net.runelite.api.ObjectID.HAYSTACK;
|
||||
import static net.runelite.api.ObjectID.JUNA;
|
||||
import static net.runelite.api.ObjectID.MINE_CART_6045;
|
||||
import static net.runelite.api.ObjectID.STONES_26633;
|
||||
import static net.runelite.api.ObjectID.WARDROBE_5622;
|
||||
import static net.runelite.api.ObjectID.WHEELBARROW_9625;
|
||||
import net.runelite.api.TileObject;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
|
||||
@@ -31,11 +31,395 @@ import java.util.Set;
|
||||
import javax.annotation.Nonnull;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.EquipmentInventorySlot;
|
||||
import static net.runelite.api.EquipmentInventorySlot.*;
|
||||
import static net.runelite.api.EquipmentInventorySlot.AMMO;
|
||||
import static net.runelite.api.EquipmentInventorySlot.AMULET;
|
||||
import static net.runelite.api.EquipmentInventorySlot.BODY;
|
||||
import static net.runelite.api.EquipmentInventorySlot.BOOTS;
|
||||
import static net.runelite.api.EquipmentInventorySlot.CAPE;
|
||||
import static net.runelite.api.EquipmentInventorySlot.GLOVES;
|
||||
import static net.runelite.api.EquipmentInventorySlot.HEAD;
|
||||
import static net.runelite.api.EquipmentInventorySlot.LEGS;
|
||||
import static net.runelite.api.EquipmentInventorySlot.RING;
|
||||
import static net.runelite.api.EquipmentInventorySlot.SHIELD;
|
||||
import static net.runelite.api.EquipmentInventorySlot.WEAPON;
|
||||
import net.runelite.api.Item;
|
||||
import net.runelite.api.ItemID;
|
||||
import static net.runelite.api.ItemID.*;
|
||||
import static net.runelite.api.ItemID.ABYSSAL_WHIP;
|
||||
import static net.runelite.api.ItemID.ADAMANT_2H_SWORD;
|
||||
import static net.runelite.api.ItemID.ADAMANT_BOOTS;
|
||||
import static net.runelite.api.ItemID.ADAMANT_DAGGER;
|
||||
import static net.runelite.api.ItemID.ADAMANT_FULL_HELM;
|
||||
import static net.runelite.api.ItemID.ADAMANT_HALBERD;
|
||||
import static net.runelite.api.ItemID.ADAMANT_MED_HELM;
|
||||
import static net.runelite.api.ItemID.ADAMANT_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.ADAMANT_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.ADAMANT_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.ADAMANT_SQ_SHIELD;
|
||||
import static net.runelite.api.ItemID.ADAMANT_SWORD;
|
||||
import static net.runelite.api.ItemID.ADAMANT_WARHAMMER;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_0;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_0;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_0;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_0;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_100;
|
||||
import static net.runelite.api.ItemID.AIR_TIARA;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY1;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY2;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY3;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY4;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY5;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY6;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_POWER;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_STRENGTH;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_THE_DAMNED;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_THE_DAMNED_FULL;
|
||||
import static net.runelite.api.ItemID.ANCIENT_CROZIER;
|
||||
import static net.runelite.api.ItemID.ANCIENT_MITRE;
|
||||
import static net.runelite.api.ItemID.ANCIENT_STOLE;
|
||||
import static net.runelite.api.ItemID.ARCLIGHT;
|
||||
import static net.runelite.api.ItemID.ARMADYL_CROZIER;
|
||||
import static net.runelite.api.ItemID.ARMADYL_MITRE;
|
||||
import static net.runelite.api.ItemID.ARMADYL_STOLE;
|
||||
import static net.runelite.api.ItemID.BANDOS_BOOTS;
|
||||
import static net.runelite.api.ItemID.BANDOS_CLOAK;
|
||||
import static net.runelite.api.ItemID.BANDOS_CROZIER;
|
||||
import static net.runelite.api.ItemID.BANDOS_GODSWORD;
|
||||
import static net.runelite.api.ItemID.BANDOS_MITRE;
|
||||
import static net.runelite.api.ItemID.BANDOS_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.BANDOS_STOLE;
|
||||
import static net.runelite.api.ItemID.BARROWS_GLOVES;
|
||||
import static net.runelite.api.ItemID.BLACK_AXE;
|
||||
import static net.runelite.api.ItemID.BLACK_BOATER;
|
||||
import static net.runelite.api.ItemID.BLACK_CAPE;
|
||||
import static net.runelite.api.ItemID.BLACK_DHIDE_BODY;
|
||||
import static net.runelite.api.ItemID.BLACK_DHIDE_CHAPS;
|
||||
import static net.runelite.api.ItemID.BLACK_DHIDE_VAMB;
|
||||
import static net.runelite.api.ItemID.BLACK_DRAGON_MASK;
|
||||
import static net.runelite.api.ItemID.BLACK_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.BLACK_SALAMANDER;
|
||||
import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.BLUE_BOATER;
|
||||
import static net.runelite.api.ItemID.BLUE_BOOTS;
|
||||
import static net.runelite.api.ItemID.BLUE_DHIDE_BODY;
|
||||
import static net.runelite.api.ItemID.BLUE_DHIDE_CHAPS;
|
||||
import static net.runelite.api.ItemID.BLUE_DHIDE_VAMB;
|
||||
import static net.runelite.api.ItemID.BLUE_ROBE_TOP;
|
||||
import static net.runelite.api.ItemID.BLUE_WIZARD_HAT;
|
||||
import static net.runelite.api.ItemID.BLUE_WIZARD_ROBE;
|
||||
import static net.runelite.api.ItemID.BOBS_PURPLE_SHIRT;
|
||||
import static net.runelite.api.ItemID.BOBS_RED_SHIRT;
|
||||
import static net.runelite.api.ItemID.BODY_TIARA;
|
||||
import static net.runelite.api.ItemID.BONE_DAGGER;
|
||||
import static net.runelite.api.ItemID.BONE_SPEAR;
|
||||
import static net.runelite.api.ItemID.BOOK_OF_BALANCE;
|
||||
import static net.runelite.api.ItemID.BOOK_OF_DARKNESS;
|
||||
import static net.runelite.api.ItemID.BOOK_OF_LAW;
|
||||
import static net.runelite.api.ItemID.BOOK_OF_WAR;
|
||||
import static net.runelite.api.ItemID.BRINE_SABRE;
|
||||
import static net.runelite.api.ItemID.BRONZE_2H_SWORD;
|
||||
import static net.runelite.api.ItemID.BRONZE_AXE;
|
||||
import static net.runelite.api.ItemID.BRONZE_CHAINBODY;
|
||||
import static net.runelite.api.ItemID.BRONZE_DAGGER;
|
||||
import static net.runelite.api.ItemID.BRONZE_FULL_HELM;
|
||||
import static net.runelite.api.ItemID.BRONZE_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.BRONZE_SPEAR;
|
||||
import static net.runelite.api.ItemID.BRONZE_SQ_SHIELD;
|
||||
import static net.runelite.api.ItemID.BROWN_APRON;
|
||||
import static net.runelite.api.ItemID.BROWN_HEADBAND;
|
||||
import static net.runelite.api.ItemID.BRUISE_BLUE_SNELM_3343;
|
||||
import static net.runelite.api.ItemID.CAPE_OF_LEGENDS;
|
||||
import static net.runelite.api.ItemID.CASTLE_WARS_BRACELET1;
|
||||
import static net.runelite.api.ItemID.CASTLE_WARS_BRACELET3;
|
||||
import static net.runelite.api.ItemID.CHEFS_HAT;
|
||||
import static net.runelite.api.ItemID.CLIMBING_BOOTS;
|
||||
import static net.runelite.api.ItemID.COIF;
|
||||
import static net.runelite.api.ItemID.COMBAT_BRACELET;
|
||||
import static net.runelite.api.ItemID.COMBAT_BRACELET4;
|
||||
import static net.runelite.api.ItemID.CREAM_ROBE_TOP;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_110_I;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_210_I;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_310_I;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_410_I;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_510_I;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_610_I;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_710_I;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_810_I;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_910_I;
|
||||
import static net.runelite.api.ItemID.CRYSTAL_BOW_FULL_I;
|
||||
import static net.runelite.api.ItemID.DEATH_TIARA;
|
||||
import static net.runelite.api.ItemID.DESERT_SHIRT;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_0;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_0;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_0;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_0;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_100;
|
||||
import static net.runelite.api.ItemID.DIAMOND_BRACELET;
|
||||
import static net.runelite.api.ItemID.DIAMOND_RING;
|
||||
import static net.runelite.api.ItemID.DRAGONSTONE_AMULET;
|
||||
import static net.runelite.api.ItemID.DRAGONSTONE_RING;
|
||||
import static net.runelite.api.ItemID.DRAGON_2H_SWORD;
|
||||
import static net.runelite.api.ItemID.DRAGON_AXE;
|
||||
import static net.runelite.api.ItemID.DRAGON_BATTLEAXE;
|
||||
import static net.runelite.api.ItemID.DRAGON_BOOTS;
|
||||
import static net.runelite.api.ItemID.DRAGON_CHAINBODY_3140;
|
||||
import static net.runelite.api.ItemID.DRAGON_DEFENDER;
|
||||
import static net.runelite.api.ItemID.DRAGON_MED_HELM;
|
||||
import static net.runelite.api.ItemID.DRAGON_NECKLACE;
|
||||
import static net.runelite.api.ItemID.DRAGON_PICKAXE;
|
||||
import static net.runelite.api.ItemID.DRAGON_PICKAXE_12797;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.DRAGON_SPEAR;
|
||||
import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD;
|
||||
import static net.runelite.api.ItemID.ELEMENTAL_SHIELD;
|
||||
import static net.runelite.api.ItemID.EMERALD_AMULET;
|
||||
import static net.runelite.api.ItemID.EMERALD_RING;
|
||||
import static net.runelite.api.ItemID.FIRE_BATTLESTAFF;
|
||||
import static net.runelite.api.ItemID.FIRE_CAPE;
|
||||
import static net.runelite.api.ItemID.FIRE_MAX_CAPE;
|
||||
import static net.runelite.api.ItemID.FLARED_TROUSERS;
|
||||
import static net.runelite.api.ItemID.FROZEN_ABYSSAL_WHIP;
|
||||
import static net.runelite.api.ItemID.GOLD_NECKLACE;
|
||||
import static net.runelite.api.ItemID.GOLD_RING;
|
||||
import static net.runelite.api.ItemID.GRANITE_SHIELD;
|
||||
import static net.runelite.api.ItemID.GREEN_BOATER;
|
||||
import static net.runelite.api.ItemID.GREEN_BOOTS;
|
||||
import static net.runelite.api.ItemID.GREEN_DHIDE_BODY;
|
||||
import static net.runelite.api.ItemID.GREEN_DHIDE_CHAPS;
|
||||
import static net.runelite.api.ItemID.GREEN_HAT;
|
||||
import static net.runelite.api.ItemID.GREEN_HEADBAND;
|
||||
import static net.runelite.api.ItemID.GREEN_ROBE_BOTTOMS;
|
||||
import static net.runelite.api.ItemID.GREEN_ROBE_TOP;
|
||||
import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_0;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_0;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_0;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_0;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_100;
|
||||
import static net.runelite.api.ItemID.GUTHIX_MITRE;
|
||||
import static net.runelite.api.ItemID.GUTHIX_STOLE;
|
||||
import static net.runelite.api.ItemID.HAM_BOOTS;
|
||||
import static net.runelite.api.ItemID.HAM_ROBE;
|
||||
import static net.runelite.api.ItemID.HARDLEATHER_BODY;
|
||||
import static net.runelite.api.ItemID.HELM_OF_NEITIZNOT;
|
||||
import static net.runelite.api.ItemID.HOLY_BOOK;
|
||||
import static net.runelite.api.ItemID.HYDRA_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.HYDRA_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.IBANS_STAFF;
|
||||
import static net.runelite.api.ItemID.IBANS_STAFF_U;
|
||||
import static net.runelite.api.ItemID.INFERNAL_PICKAXE;
|
||||
import static net.runelite.api.ItemID.INFERNAL_PICKAXE_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.IRON_2H_SWORD;
|
||||
import static net.runelite.api.ItemID.IRON_CHAINBODY;
|
||||
import static net.runelite.api.ItemID.IRON_FULL_HELM;
|
||||
import static net.runelite.api.ItemID.IRON_KITESHIELD;
|
||||
import static net.runelite.api.ItemID.IRON_MED_HELM;
|
||||
import static net.runelite.api.ItemID.IRON_PICKAXE;
|
||||
import static net.runelite.api.ItemID.IRON_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.IRON_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.IRON_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.IRON_SCIMITAR;
|
||||
import static net.runelite.api.ItemID.IRON_WARHAMMER;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_0;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_100;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_0;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_100;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_0;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_100;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_0;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_100;
|
||||
import static net.runelite.api.ItemID.LAVA_BATTLESTAFF;
|
||||
import static net.runelite.api.ItemID.LEATHER_BOOTS;
|
||||
import static net.runelite.api.ItemID.LEATHER_CHAPS;
|
||||
import static net.runelite.api.ItemID.LEATHER_COWL;
|
||||
import static net.runelite.api.ItemID.LEATHER_GLOVES;
|
||||
import static net.runelite.api.ItemID.LOCKPICK;
|
||||
import static net.runelite.api.ItemID.LONGBOW;
|
||||
import static net.runelite.api.ItemID.MAGIC_LONGBOW;
|
||||
import static net.runelite.api.ItemID.MAPLE_LONGBOW;
|
||||
import static net.runelite.api.ItemID.MAPLE_SHORTBOW;
|
||||
import static net.runelite.api.ItemID.MENAPHITE_PURPLE_HAT;
|
||||
import static net.runelite.api.ItemID.MENAPHITE_PURPLE_KILT;
|
||||
import static net.runelite.api.ItemID.MENAPHITE_PURPLE_ROBE;
|
||||
import static net.runelite.api.ItemID.MENAPHITE_PURPLE_TOP;
|
||||
import static net.runelite.api.ItemID.MENAPHITE_RED_HAT;
|
||||
import static net.runelite.api.ItemID.MENAPHITE_RED_KILT;
|
||||
import static net.runelite.api.ItemID.MENAPHITE_RED_ROBE;
|
||||
import static net.runelite.api.ItemID.MENAPHITE_RED_TOP;
|
||||
import static net.runelite.api.ItemID.MIND_SHIELD;
|
||||
import static net.runelite.api.ItemID.MITHRIL_BOOTS;
|
||||
import static net.runelite.api.ItemID.MITHRIL_CHAINBODY;
|
||||
import static net.runelite.api.ItemID.MITHRIL_FULL_HELM;
|
||||
import static net.runelite.api.ItemID.MITHRIL_MED_HELM;
|
||||
import static net.runelite.api.ItemID.MITHRIL_PICKAXE;
|
||||
import static net.runelite.api.ItemID.MITHRIL_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.MITHRIL_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.MITHRIL_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.MITHRIL_SCIMITAR;
|
||||
import static net.runelite.api.ItemID.MYSTIC_FIRE_STAFF;
|
||||
import static net.runelite.api.ItemID.MYSTIC_GLOVES;
|
||||
import static net.runelite.api.ItemID.MYSTIC_HAT;
|
||||
import static net.runelite.api.ItemID.MYSTIC_ROBE_BOTTOM;
|
||||
import static net.runelite.api.ItemID.MYSTIC_ROBE_BOTTOM_DARK;
|
||||
import static net.runelite.api.ItemID.MYSTIC_ROBE_TOP;
|
||||
import static net.runelite.api.ItemID.MYSTIC_ROBE_TOP_DARK;
|
||||
import static net.runelite.api.ItemID.NEW_CRYSTAL_BOW_I;
|
||||
import static net.runelite.api.ItemID.OAK_LONGBOW;
|
||||
import static net.runelite.api.ItemID.OAK_SHORTBOW;
|
||||
import static net.runelite.api.ItemID.OBSIDIAN_CAPE;
|
||||
import static net.runelite.api.ItemID.ORANGE_BOATER;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_1;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_2;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_3;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_4;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_5;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_6;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_7;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_8;
|
||||
import static net.runelite.api.ItemID.PINK_BOATER;
|
||||
import static net.runelite.api.ItemID.PINK_ROBE_TOP;
|
||||
import static net.runelite.api.ItemID.PINK_SKIRT;
|
||||
import static net.runelite.api.ItemID.PIRATE_BANDANA;
|
||||
import static net.runelite.api.ItemID.PIRATE_BANDANA_7124;
|
||||
import static net.runelite.api.ItemID.PIRATE_BANDANA_7130;
|
||||
import static net.runelite.api.ItemID.PIRATE_BANDANA_7136;
|
||||
import static net.runelite.api.ItemID.PROSELYTE_HAUBERK;
|
||||
import static net.runelite.api.ItemID.PURPLE_BOATER;
|
||||
import static net.runelite.api.ItemID.PURPLE_GLOVES;
|
||||
import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.RED_BOATER;
|
||||
import static net.runelite.api.ItemID.RED_CAPE;
|
||||
import static net.runelite.api.ItemID.RED_DHIDE_CHAPS;
|
||||
import static net.runelite.api.ItemID.RED_HEADBAND;
|
||||
import static net.runelite.api.ItemID.RED_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.RED_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING1;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING2;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING3;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING4;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING5;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING6;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING7;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING8;
|
||||
import static net.runelite.api.ItemID.RING_OF_FORGING;
|
||||
import static net.runelite.api.ItemID.RING_OF_LIFE;
|
||||
import static net.runelite.api.ItemID.RING_OF_VISIBILITY;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_1;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_2;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_3;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_4;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_5;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I1;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I2;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I3;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I4;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I5;
|
||||
import static net.runelite.api.ItemID.ROLLING_PIN;
|
||||
import static net.runelite.api.ItemID.RUBY_AMULET;
|
||||
import static net.runelite.api.ItemID.RUBY_RING;
|
||||
import static net.runelite.api.ItemID.RUNE_AXE;
|
||||
import static net.runelite.api.ItemID.RUNE_BOOTS;
|
||||
import static net.runelite.api.ItemID.RUNE_CROSSBOW;
|
||||
import static net.runelite.api.ItemID.RUNE_FULL_HELM;
|
||||
import static net.runelite.api.ItemID.RUNE_HALBERD;
|
||||
import static net.runelite.api.ItemID.RUNE_HELM_H1;
|
||||
import static net.runelite.api.ItemID.RUNE_HELM_H5;
|
||||
import static net.runelite.api.ItemID.RUNE_KITESHIELD;
|
||||
import static net.runelite.api.ItemID.RUNE_LONGSWORD;
|
||||
import static net.runelite.api.ItemID.RUNE_PICKAXE;
|
||||
import static net.runelite.api.ItemID.RUNE_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.RUNE_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.RUNE_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.RUNE_SHIELD_H1;
|
||||
import static net.runelite.api.ItemID.RUNE_SHIELD_H2;
|
||||
import static net.runelite.api.ItemID.RUNE_SHIELD_H3;
|
||||
import static net.runelite.api.ItemID.RUNE_SHIELD_H4;
|
||||
import static net.runelite.api.ItemID.RUNE_SHIELD_H5;
|
||||
import static net.runelite.api.ItemID.RUNE_SPEAR;
|
||||
import static net.runelite.api.ItemID.RUNE_WARHAMMER;
|
||||
import static net.runelite.api.ItemID.SAPPHIRE_AMULET;
|
||||
import static net.runelite.api.ItemID.SAPPHIRE_NECKLACE;
|
||||
import static net.runelite.api.ItemID.SAPPHIRE_RING;
|
||||
import static net.runelite.api.ItemID.SARADOMIN_CROZIER;
|
||||
import static net.runelite.api.ItemID.SARADOMIN_MITRE;
|
||||
import static net.runelite.api.ItemID.SARADOMIN_STOLE;
|
||||
import static net.runelite.api.ItemID.SEERCULL;
|
||||
import static net.runelite.api.ItemID.SHADOW_SWORD;
|
||||
import static net.runelite.api.ItemID.SILVER_SICKLE;
|
||||
import static net.runelite.api.ItemID.SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.SLED_4084;
|
||||
import static net.runelite.api.ItemID.SNAKESKIN_BOOTS;
|
||||
import static net.runelite.api.ItemID.SNAKESKIN_CHAPS;
|
||||
import static net.runelite.api.ItemID.SPINED_CHAPS;
|
||||
import static net.runelite.api.ItemID.SPLITBARK_BODY;
|
||||
import static net.runelite.api.ItemID.SPLITBARK_LEGS;
|
||||
import static net.runelite.api.ItemID.SPOTTED_CAPE;
|
||||
import static net.runelite.api.ItemID.SPOTTED_CAPE_10073;
|
||||
import static net.runelite.api.ItemID.STAFF;
|
||||
import static net.runelite.api.ItemID.STAFF_OF_AIR;
|
||||
import static net.runelite.api.ItemID.STAFF_OF_WATER;
|
||||
import static net.runelite.api.ItemID.STEEL_AXE;
|
||||
import static net.runelite.api.ItemID.STEEL_FULL_HELM;
|
||||
import static net.runelite.api.ItemID.STEEL_KITESHIELD;
|
||||
import static net.runelite.api.ItemID.STEEL_LONGSWORD;
|
||||
import static net.runelite.api.ItemID.STEEL_MACE;
|
||||
import static net.runelite.api.ItemID.STEEL_MED_HELM;
|
||||
import static net.runelite.api.ItemID.STEEL_PICKAXE;
|
||||
import static net.runelite.api.ItemID.STEEL_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.STEEL_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.STEEL_SQ_SHIELD;
|
||||
import static net.runelite.api.ItemID.STUDDED_BODY;
|
||||
import static net.runelite.api.ItemID.STUDDED_CHAPS;
|
||||
import static net.runelite.api.ItemID.TEAM1_CAPE;
|
||||
import static net.runelite.api.ItemID.TEAM50_CAPE;
|
||||
import static net.runelite.api.ItemID.TIARA;
|
||||
import static net.runelite.api.ItemID.TOKTZKETXIL;
|
||||
import static net.runelite.api.ItemID.TOKTZXILUL;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_0;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_0;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_0;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_0;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_100;
|
||||
import static net.runelite.api.ItemID.TURQUOISE_ROBE_BOTTOMS;
|
||||
import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.UNHOLY_BOOK;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_0;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_100;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_0;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_100;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_0;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_100;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_0;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_100;
|
||||
import static net.runelite.api.ItemID.VOLCANIC_ABYSSAL_WHIP;
|
||||
import static net.runelite.api.ItemID.WHITE_APRON;
|
||||
import static net.runelite.api.ItemID.WHITE_BOATER;
|
||||
import static net.runelite.api.ItemID.WHITE_HEADBAND;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_CROZIER;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_FULL_HELM;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_GODSWORD;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_MITRE;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_STOLE;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR;
|
||||
@@ -43,12 +427,143 @@ import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
||||
import net.runelite.client.plugins.cluescrolls.clues.emote.AllRequirementsCollection;
|
||||
import net.runelite.client.plugins.cluescrolls.clues.emote.AnyRequirementCollection;
|
||||
import net.runelite.client.plugins.cluescrolls.clues.emote.Emote;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.*;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.ANGRY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BECKON;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BLOW_KISS;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BOW;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BULL_ROARER;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.CHEER;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.CLAP;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.CRY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.DANCE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.FLAP;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.GOBLIN_SALUTE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.HEADBANG;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.JIG;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.JUMP_FOR_JOY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.LAUGH;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.NO;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.PANIC;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.PUSH_UP;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.RASPBERRY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.SALUTE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.SHRUG;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.SLAP_HEAD;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.SPIN;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.STOMP;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.THINK;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.WAVE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.YAWN;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.YES;
|
||||
import net.runelite.client.plugins.cluescrolls.clues.emote.ItemRequirement;
|
||||
import net.runelite.client.plugins.cluescrolls.clues.emote.RangeItemRequirement;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.*;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.AGILITY_PYRAMID;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.AL_KHARID_SCORPION_MINE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.AUBURYS_SHOP_IN_VARROCK;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.BARBARIAN_OUTPOST_OBSTACLE_COURSE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.BARROWS_CHEST;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.BEHIND_MISS_SCHISM_IN_DRAYNOR_VILLAGE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.BOB_AXES_ENTRANCE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.BY_THE_BEAR_CAGE_IN_VARROCK_PALACE_GARDENS;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.CASTLE_WARS_BANK;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.CATHERBY_BEEHIVE_FIELD;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.CENTRE_OF_CANIFIS;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.CENTRE_OF_THE_CATACOMBS_OF_KOUREND;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.CHAOS_TEMPLE_IN_THE_SOUTHEASTERN_WILDERNESS;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.CHAPEL_IN_WEST_ARDOUGNE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.CROSSROADS_NORTH_OF_DRAYNOR_VILLAGE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.DEATH_ALTAR;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.DIGSITE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.DRAYNOR_MANOR_BY_THE_FOUNTAIN;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.DRAYNOR_VILLAGE_MARKET;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.EAST_OF_THE_BARBARIAN_VILLAGE_BRIDGE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.ENTRANA_CHAPEL;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.ENTRANCE_OF_THE_ARCEUUS_LIBRARY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.ENTRANCE_OF_THE_CAVERN_UNDER_THE_WHIRLPOOL;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.ENTRANCE_OF_THE_CAVE_OF_DAMIS;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.FINE_CLOTHES_ENTRANCE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.FISHING_GUILD_BANK;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.FOUNTAIN_OF_HEROES;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.GNOME_GLIDER_ON_WHITE_WOLF_MOUNTAIN;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.GNOME_STRONGHOLD_BALANCING_ROPE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.GYPSY_TENT_ENTRANCE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.HALFWAY_DOWN_TROLLWEISS_MOUNTAIN;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.HICKTONS_ARCHERY_EMPORIUM;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.HOSIDIUS_MESS;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.INSIDE_THE_DIGSITE_EXAM_CENTRE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.IN_THE_MIDDLE_OF_JIGGIG;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.KING_BLACK_DRAGONS_LAIR;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.LIMESTONE_MINE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.LUMBRIDGE_SWAMP_CAVES;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.MAUSOLEUM_OFF_THE_MORYTANIA_COAST;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.MOUNTAIN_CAMP_GOAT_ENCLOSURE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.MUBARIZS_ROOM_AT_THE_DUEL_ARENA;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.MUDSKIPPER_POINT;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NEAR_A_LADDER_IN_THE_WILDERNESS_LAVA_MAZE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NEAR_A_RUNITE_ROCK_IN_THE_FREMENNIK_ISLES;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NEAR_A_SHED_IN_LUMBRIDGE_SWAMP;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NEAR_HERQUINS_SHOP_IN_FALADOR;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NEAR_THE_ENTRANA_FERRY_IN_PORT_SARIM;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NEAR_THE_GEM_STALL_IN_ARDOUGNE_MARKET;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NEAR_THE_PARROTS_IN_ARDOUGNE_ZOO;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NEAR_THE_PIER_IN_ZULANDRA;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NEAR_THE_SAWMILL_OPERATORS_BOOTH;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NORTHEAST_CORNER_OF_THE_KHARAZI_JUNGLE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NORTHERN_WALL_OF_CASTLE_DRAKAN;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NORTHWESTERN_CORNER_OF_THE_ENCHANTED_VALLEY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NORTH_OF_EVIL_DAVES_HOUSE_IN_EDGEVILLE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NORTH_OF_MOUNT_KARUULM;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.NOTERAZZOS_SHOP_IN_THE_WILDERNESS;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OBSERVATORY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OGRE_CAGE_IN_KING_LATHAS_TRAINING_CAMP;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.ON_THE_BRIDGE_TO_THE_MISTHALIN_WIZARDS_TOWER;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.ON_TOP_OF_TROLLHEIM_MOUNTAIN;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_CATHERBY_BANK;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_DRAYNOR_VILLAGE_JAIL;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_HARRYS_FISHING_SHOP_IN_CATHERBY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_KEEP_LE_FAYE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_KRIL_TSUTSAROTHS_ROOM;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_MUDKNUCKLES_HUT;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_BAR_BY_THE_FIGHT_ARENA;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_DIGSITE_EXAM_CENTRE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_FALADOR_PARTY_ROOM;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_FISHING_GUILD;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_GREAT_PYRAMID_OF_SOPHANEM;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_LEGENDS_GUILD_DOOR;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_LEGENDS_GUILD_GATES;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_SEERS_VILLAGE_COURTHOUSE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_SLAYER_TOWER_GARGOYLE_ROOM;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_THE_WILDERNESS_AXE_HUT;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_VARROCK_PALACE_COURTYARD;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.OUTSIDE_YANILLE_BANK;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.RIMMINGTON_MINE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.ROAD_JUNCTION_NORTH_OF_RIMMINGTON;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.ROAD_JUNCTION_SOUTH_OF_SINCLAIR_MANSION;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SHANTAY_PASS;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SHAYZIEN_WAR_TENT;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SHILO_VILLAGE_BANK;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SOUL_ALTAR;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SOUTHEAST_CORNER_OF_LAVA_DRAGON_ISLE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SOUTHEAST_CORNER_OF_THE_FISHING_PLATFORM;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SOUTHEAST_CORNER_OF_THE_MONASTERY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SOUTH_OF_THE_GRAND_EXCHANGE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SOUTH_OF_THE_SHRINE_IN_TAI_BWO_WANNAI_VILLAGE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.TAVERLEY_STONE_CIRCLE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.TENT_IN_LORD_IORWERTHS_ENCAMPMENT;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.TOP_FLOOR_OF_THE_LIGHTHOUSE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.TOP_FLOOR_OF_THE_YANILLE_WATCHTOWER;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.TZHAAR_GEM_STORE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.TZHAAR_WEAPONS_STORE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.UPSTAIRS_IN_THE_ARDOUGNE_WINDMILL;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.VARROCK_PALACE_LIBRARY;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.VOLCANO_IN_THE_NORTHEASTERN_WILDERNESS;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.WARRIORS_GUILD_BANK;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.WARRIORS_GUILD_BANK_29047;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.WELL_OF_VOYAGE;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.WEST_OF_THE_SHAYZIEN_COMBAT_RING;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.WEST_SIDE_OF_THE_KARAMJA_BANANA_PLANTATION;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.WHEAT_FIELD_NEAR_THE_LUMBRIDGE_WINDMILL;
|
||||
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit._7TH_CHAMBER_OF_JALSAVRAH;
|
||||
import net.runelite.client.plugins.cluescrolls.clues.emote.SingleItemRequirement;
|
||||
import net.runelite.client.plugins.cluescrolls.clues.emote.SlotLimitationRequirement;
|
||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
||||
|
||||
@@ -29,7 +29,38 @@ import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.Set;
|
||||
import lombok.Getter;
|
||||
import static net.runelite.api.ItemID.*;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_EASY_12179;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_EASY_2713;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_EASY_2716;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_EASY_2719;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_EASY_3516;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_EASY_3518;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_EASY_7236;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_ELITE_12130;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_ELITE_19782;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_ELITE_19783;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_ELITE_19784;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_ELITE_19785;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_ELITE_19786;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_HARD;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_HARD_2729;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_HARD_3520;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_HARD_3522;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_HARD_3524;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_HARD_3525;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_HARD_7239;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_HARD_7241;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_2827;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_3596;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_3598;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_3599;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_3601;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_3602;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_7286;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_7288;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_7290;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_7292;
|
||||
import static net.runelite.api.ItemID.CLUE_SCROLL_MEDIUM_7294;
|
||||
import net.runelite.api.ObjectComposition;
|
||||
import static net.runelite.api.ObjectID.CRATE_18506;
|
||||
import static net.runelite.api.ObjectID.CRATE_2620;
|
||||
|
||||
@@ -28,15 +28,12 @@ import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.InventoryID;
|
||||
import net.runelite.api.Item;
|
||||
import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_1;
|
||||
import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_2;
|
||||
import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_3;
|
||||
@@ -48,6 +45,7 @@ import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
||||
import net.runelite.client.ui.overlay.components.LineComponent;
|
||||
import net.runelite.client.ui.overlay.components.PanelComponent;
|
||||
import net.runelite.client.ui.overlay.components.TitleComponent;
|
||||
import net.runelite.client.util.ItemUtil;
|
||||
import net.runelite.client.util.Text;
|
||||
|
||||
@Getter
|
||||
@@ -127,21 +125,19 @@ public class ThreeStepCrypticClue extends ClueScroll implements TextClueScroll,
|
||||
if (event.getItemContainer() == client.getItemContainer(InventoryID.INVENTORY))
|
||||
{
|
||||
boolean success = false;
|
||||
success |= checkForPart(event, itemManager, TORN_CLUE_SCROLL_PART_1, 0);
|
||||
success |= checkForPart(event, itemManager, TORN_CLUE_SCROLL_PART_2, 1);
|
||||
success |= checkForPart(event, itemManager, TORN_CLUE_SCROLL_PART_3, 2);
|
||||
success |= checkForPart(event, TORN_CLUE_SCROLL_PART_1, 0);
|
||||
success |= checkForPart(event, TORN_CLUE_SCROLL_PART_2, 1);
|
||||
success |= checkForPart(event, TORN_CLUE_SCROLL_PART_3, 2);
|
||||
return success;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean checkForPart(final ItemContainerChanged event, ItemManager itemManager, int clueScrollPart, int index)
|
||||
private boolean checkForPart(final ItemContainerChanged event, int clueScrollPart, int index)
|
||||
{
|
||||
final Stream<Item> items = Arrays.stream(event.getItemContainer().getItems());
|
||||
|
||||
// If we have the part then that step is done
|
||||
if (items.anyMatch(item -> itemManager.getItemComposition(item.getId()).getId() == clueScrollPart))
|
||||
if (ItemUtil.containsItemId(event.getItemContainer().getItems(), clueScrollPart))
|
||||
{
|
||||
final Map.Entry<CrypticClue, Boolean> entry = clueSteps.get(index);
|
||||
|
||||
|
||||
@@ -25,7 +25,33 @@
|
||||
package net.runelite.client.plugins.cluescrolls.clues.emote;
|
||||
|
||||
import lombok.Getter;
|
||||
import static net.runelite.api.SpriteID.*;
|
||||
import static net.runelite.api.SpriteID.EMOTE_ANGRY;
|
||||
import static net.runelite.api.SpriteID.EMOTE_BECKON;
|
||||
import static net.runelite.api.SpriteID.EMOTE_BLOW_KISS;
|
||||
import static net.runelite.api.SpriteID.EMOTE_BOW;
|
||||
import static net.runelite.api.SpriteID.EMOTE_CHEER;
|
||||
import static net.runelite.api.SpriteID.EMOTE_CLAP;
|
||||
import static net.runelite.api.SpriteID.EMOTE_CRY;
|
||||
import static net.runelite.api.SpriteID.EMOTE_DANCE;
|
||||
import static net.runelite.api.SpriteID.EMOTE_FLAP;
|
||||
import static net.runelite.api.SpriteID.EMOTE_GOBLIN_SALUTE;
|
||||
import static net.runelite.api.SpriteID.EMOTE_HEADBANG;
|
||||
import static net.runelite.api.SpriteID.EMOTE_JIG;
|
||||
import static net.runelite.api.SpriteID.EMOTE_JUMP_FOR_JOY;
|
||||
import static net.runelite.api.SpriteID.EMOTE_LAUGH;
|
||||
import static net.runelite.api.SpriteID.EMOTE_NO;
|
||||
import static net.runelite.api.SpriteID.EMOTE_PANIC;
|
||||
import static net.runelite.api.SpriteID.EMOTE_PUSH_UP;
|
||||
import static net.runelite.api.SpriteID.EMOTE_RASPBERRY;
|
||||
import static net.runelite.api.SpriteID.EMOTE_SALUTE;
|
||||
import static net.runelite.api.SpriteID.EMOTE_SHRUG;
|
||||
import static net.runelite.api.SpriteID.EMOTE_SLAP_HEAD;
|
||||
import static net.runelite.api.SpriteID.EMOTE_SPIN;
|
||||
import static net.runelite.api.SpriteID.EMOTE_STOMP;
|
||||
import static net.runelite.api.SpriteID.EMOTE_THINK;
|
||||
import static net.runelite.api.SpriteID.EMOTE_WAVE;
|
||||
import static net.runelite.api.SpriteID.EMOTE_YAWN;
|
||||
import static net.runelite.api.SpriteID.EMOTE_YES;
|
||||
|
||||
@Getter
|
||||
public enum Emote
|
||||
|
||||
@@ -25,6 +25,11 @@
|
||||
package net.runelite.client.plugins.combatlevel;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.Experience;
|
||||
import net.runelite.api.Skill;
|
||||
@@ -34,11 +39,6 @@ import net.runelite.client.ui.overlay.Overlay;
|
||||
import net.runelite.client.ui.overlay.tooltip.Tooltip;
|
||||
import net.runelite.client.ui.overlay.tooltip.TooltipManager;
|
||||
import net.runelite.client.util.ColorUtil;
|
||||
import javax.inject.Inject;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
|
||||
class CombatLevelOverlay extends Overlay
|
||||
{
|
||||
@@ -99,7 +99,7 @@ class CombatLevelOverlay extends Overlay
|
||||
int prayerLevel = client.getRealSkillLevel(Skill.PRAYER);
|
||||
|
||||
// calculate initial required numbers
|
||||
double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2));
|
||||
double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2D));
|
||||
double melee = ATT_STR_MULT * (attackLevel + strengthLevel);
|
||||
double range = RANGE_MAGIC_MULT * Math.floor(rangedLevel * RANGE_MAGIC_LEVEL_MULT);
|
||||
double mage = RANGE_MAGIC_MULT * Math.floor(magicLevel * RANGE_MAGIC_LEVEL_MULT);
|
||||
@@ -143,6 +143,7 @@ class CombatLevelOverlay extends Overlay
|
||||
/**
|
||||
* Calculate skill levels required for increasing combat level, meant
|
||||
* for all combat skills besides prayer, ranged, and magic.
|
||||
*
|
||||
* @param start initial value
|
||||
* @param end ending value (combat level + 1)
|
||||
* @param multiple how much adding one skill level will change combat
|
||||
@@ -160,6 +161,7 @@ class CombatLevelOverlay extends Overlay
|
||||
* Note: Prayer is a special case, only leveling up upon even level numbers. This is accounted
|
||||
* for in this function.
|
||||
* </p>
|
||||
*
|
||||
* @param start current combat level
|
||||
* @param end ending value (combat level + 1)
|
||||
* @param prayerLevel the player's current prayer level
|
||||
@@ -191,6 +193,7 @@ class CombatLevelOverlay extends Overlay
|
||||
/**
|
||||
* Calculate skill levels required for increasing combat level, meant
|
||||
* ONLY for Ranged and Magic skills.
|
||||
*
|
||||
* @param start either the current ranged or magic level
|
||||
* @param end ending value (combat level + 1)
|
||||
* @param dhp defence, hitpoints, and prayer; this is the initial calculated "base" value
|
||||
|
||||
@@ -30,6 +30,7 @@ import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Insets;
|
||||
import java.awt.event.FocusAdapter;
|
||||
import java.awt.event.FocusEvent;
|
||||
import java.awt.event.ItemEvent;
|
||||
@@ -49,18 +50,22 @@ import javax.swing.ImageIcon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFormattedTextField;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPasswordField;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JSlider;
|
||||
import javax.swing.JSpinner;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.ScrollPaneConstants;
|
||||
import javax.swing.SpinnerModel;
|
||||
import javax.swing.SpinnerNumberModel;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
@@ -73,17 +78,19 @@ import net.runelite.client.config.ConfigDescriptor;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
import net.runelite.client.config.ConfigItem;
|
||||
import net.runelite.client.config.ConfigItemDescriptor;
|
||||
import net.runelite.client.config.ConfigItemsGroup;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.config.ConfigPanelItem;
|
||||
import net.runelite.client.config.Keybind;
|
||||
import net.runelite.client.config.ModifierlessKeybind;
|
||||
import net.runelite.client.config.Range;
|
||||
import net.runelite.client.config.RuneLiteConfig;
|
||||
import net.runelite.client.config.Stub;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.plugins.PluginInstantiationException;
|
||||
import net.runelite.client.plugins.PluginManager;
|
||||
import net.runelite.client.plugins.PluginType;
|
||||
import net.runelite.client.plugins.pluginsorter.PluginSorterPlugin;
|
||||
import net.runelite.client.ui.ColorScheme;
|
||||
import net.runelite.client.ui.DynamicGridLayout;
|
||||
import net.runelite.client.ui.PluginPanel;
|
||||
@@ -404,7 +411,9 @@ public class ConfigPanel extends PluginPanel
|
||||
topPanel.add(topPanelBackButton, BorderLayout.WEST);
|
||||
|
||||
if (!listItem.getName().equals("RuneLitePlus"))
|
||||
{
|
||||
topPanel.add(listItem.createToggleButton(), BorderLayout.EAST);
|
||||
}
|
||||
|
||||
String name = listItem.getName();
|
||||
JLabel title = new JLabel(name);
|
||||
@@ -412,22 +421,141 @@ public class ConfigPanel extends PluginPanel
|
||||
title.setToolTipText("<html>" + name + ":<br>" + listItem.getDescription() + "</html>");
|
||||
topPanel.add(title);
|
||||
|
||||
for (ConfigItemDescriptor cid : cd.getItems())
|
||||
ConfigPanelItem mainParent = new ConfigPanelItem(null, null);
|
||||
List<ConfigPanelItem> parents = new ArrayList<>();
|
||||
List<ConfigItemDescriptor> allItems = new ArrayList<>();
|
||||
|
||||
for (ConfigItemsGroup cig : cd.getItemGroups())
|
||||
{
|
||||
if (cid.getItem().hidden())
|
||||
boolean collapsed = false;
|
||||
if (!cig.getGroup().equals(""))
|
||||
{
|
||||
String header = cig.getGroup();
|
||||
|
||||
JPanel item = new JPanel();
|
||||
item.setLayout(new BorderLayout());
|
||||
item.setMinimumSize(new Dimension(PANEL_WIDTH, 0));
|
||||
|
||||
JLabel headerLabel = new JLabel(header);
|
||||
headerLabel.setForeground(Color.ORANGE);
|
||||
headerLabel.setPreferredSize(new Dimension(PANEL_WIDTH, (int) headerLabel.getPreferredSize().getHeight()));
|
||||
String sCollapsed = configManager.getConfiguration(cd.getGroup().value(), cig.getGroup() + "_collapse");
|
||||
|
||||
if (sCollapsed != null)
|
||||
{
|
||||
collapsed = Boolean.parseBoolean(sCollapsed);
|
||||
}
|
||||
|
||||
JButton collapse = new JButton(collapsed ? "+" : "-");
|
||||
collapse.setPreferredSize(new Dimension(20, 20));
|
||||
collapse.setFont(collapse.getFont().deriveFont(16.0f));
|
||||
collapse.setBorder(null);
|
||||
collapse.setMargin(new Insets(0, 0, 0, 0));
|
||||
collapse.addActionListener(ae -> changeGroupCollapse(listItem, config, collapse, cd, cig));
|
||||
headerLabel.setBorder(new EmptyBorder(0, 10, 0, 0));
|
||||
|
||||
item.add(collapse, BorderLayout.WEST);
|
||||
item.add(headerLabel, BorderLayout.CENTER);
|
||||
|
||||
mainPanel.add(item);
|
||||
}
|
||||
|
||||
if (collapsed)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
allItems.addAll(cig.getItems());
|
||||
|
||||
int maxDepth = 3;
|
||||
do
|
||||
{
|
||||
for (ConfigItemDescriptor cid : new ArrayList<>(allItems))
|
||||
{
|
||||
|
||||
String parent = cid.getItem().parent();
|
||||
|
||||
if (parent.equals(""))
|
||||
{
|
||||
mainParent.getChildren().add(new ConfigPanelItem(mainParent, cid));
|
||||
allItems.remove(cid);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mainParent.addChildIfMatchParent(cid))
|
||||
{
|
||||
allItems.remove(cid);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
maxDepth--;
|
||||
|
||||
} while (allItems.size() > 0 && maxDepth > 0);
|
||||
|
||||
List<ConfigPanelItem> orderedList = mainParent.getItemsAsList();
|
||||
|
||||
for (ConfigPanelItem cpi : orderedList)
|
||||
{
|
||||
ConfigItemDescriptor cid = cpi.getItem();
|
||||
|
||||
if (cid == null)
|
||||
{
|
||||
continue; // Ignore main 'parent'
|
||||
}
|
||||
|
||||
if (cid.getItem().hidden())
|
||||
{
|
||||
boolean show = false;
|
||||
String unhideat = cid.getItem().unhide();
|
||||
|
||||
for (ConfigItemDescriptor cid2 : cd.getItems())
|
||||
{
|
||||
|
||||
if (cid2.getItem().keyName().equals(unhideat))
|
||||
{
|
||||
if (cid2.getType() == boolean.class)
|
||||
{
|
||||
show = Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().value(), cid2.getItem().keyName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!show)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
JPanel item = new JPanel();
|
||||
item.setLayout(new BorderLayout());
|
||||
item.setMinimumSize(new Dimension(PANEL_WIDTH, 0));
|
||||
name = cid.getItem().name();
|
||||
|
||||
StringBuilder depthOffset = new StringBuilder();
|
||||
for (int depth = 1; depth < cpi.getDepth(); depth++)
|
||||
{
|
||||
depthOffset.append(" ");
|
||||
}
|
||||
|
||||
name = depthOffset + name;
|
||||
|
||||
JLabel configEntryName = new JLabel(name);
|
||||
configEntryName.setPreferredSize(new Dimension(PANEL_WIDTH, (int) configEntryName.getPreferredSize().getHeight()));
|
||||
configEntryName.setForeground(Color.WHITE);
|
||||
configEntryName.setToolTipText("<html>" + name + ":<br>" + cid.getItem().description() + "</html>");
|
||||
item.add(configEntryName, BorderLayout.CENTER);
|
||||
|
||||
if (cid.getType() == Stub.class)
|
||||
{
|
||||
Border border = item.getBorder();
|
||||
Border margin = new EmptyBorder(10, 0, 0, 0);
|
||||
item.setBorder(new CompoundBorder(border, margin));
|
||||
|
||||
configEntryName.setForeground(Color.ORANGE);
|
||||
}
|
||||
|
||||
if (cid.getType() == boolean.class)
|
||||
{
|
||||
JCheckBox checkbox = new JCheckBox();
|
||||
@@ -453,6 +581,25 @@ public class ConfigPanel extends PluginPanel
|
||||
// Config may previously have been out of range
|
||||
value = Ints.constrainToRange(value, min, max);
|
||||
|
||||
if (max < Integer.MAX_VALUE)
|
||||
{
|
||||
JSlider slider = new JSlider(min, max, value);
|
||||
configEntryName.setText(name.concat(": ").concat(String.valueOf(slider.getValue())));
|
||||
slider.setPreferredSize(new Dimension(85, 25));
|
||||
String finalName = name;
|
||||
slider.addChangeListener((l) ->
|
||||
{
|
||||
configEntryName.setText(finalName.concat(": ").concat(String.valueOf(slider.getValue())));
|
||||
if (!slider.getValueIsAdjusting())
|
||||
{
|
||||
changeConfiguration(listItem, config, slider, cd, cid);
|
||||
}
|
||||
}
|
||||
);
|
||||
item.add(slider, BorderLayout.EAST);
|
||||
}
|
||||
else
|
||||
{
|
||||
SpinnerModel model = new SpinnerNumberModel(value, min, max, 1);
|
||||
JSpinner spinner = new JSpinner(model);
|
||||
Component editor = spinner.getEditor();
|
||||
@@ -462,6 +609,7 @@ public class ConfigPanel extends PluginPanel
|
||||
|
||||
item.add(spinner, BorderLayout.EAST);
|
||||
}
|
||||
}
|
||||
|
||||
if (cid.getType() == String.class)
|
||||
{
|
||||
@@ -591,7 +739,7 @@ public class ConfigPanel extends PluginPanel
|
||||
{
|
||||
Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
||||
box.setSelectedItem(selectedItem);
|
||||
box.setToolTipText(Text.titleCase(selectedItem));
|
||||
box.setToolTipText(selectedItem.toString());
|
||||
}
|
||||
catch (IllegalArgumentException ex)
|
||||
{
|
||||
@@ -602,7 +750,7 @@ public class ConfigPanel extends PluginPanel
|
||||
if (e.getStateChange() == ItemEvent.SELECTED)
|
||||
{
|
||||
changeConfiguration(listItem, config, box, cd, cid);
|
||||
box.setToolTipText(Text.titleCase((Enum) box.getSelectedItem()));
|
||||
box.setToolTipText(box.getSelectedItem().toString());
|
||||
}
|
||||
});
|
||||
item.add(box, BorderLayout.EAST);
|
||||
@@ -630,6 +778,7 @@ public class ConfigPanel extends PluginPanel
|
||||
|
||||
mainPanel.add(item);
|
||||
}
|
||||
}
|
||||
|
||||
JButton resetButton = new JButton("Reset");
|
||||
resetButton.addActionListener((e) ->
|
||||
@@ -656,6 +805,24 @@ public class ConfigPanel extends PluginPanel
|
||||
scrollPane.getVerticalScrollBar().setValue(0);
|
||||
}
|
||||
|
||||
private void changeGroupCollapse(PluginListItem listItem, Config config, JComponent component, ConfigDescriptor cd, ConfigItemsGroup cig)
|
||||
{
|
||||
if (component instanceof JButton)
|
||||
{
|
||||
|
||||
String sCollapsed = configManager.getConfiguration(cd.getGroup().value(), cig.getGroup() + "_collapse");
|
||||
boolean collapse = true;
|
||||
|
||||
if (sCollapsed != null)
|
||||
{
|
||||
collapse = !Boolean.parseBoolean(sCollapsed);
|
||||
}
|
||||
|
||||
configManager.setConfiguration(cd.getGroup().value(), cig.getGroup() + "_collapse", collapse);
|
||||
openGroupConfigPanel(listItem, config, cd);
|
||||
}
|
||||
}
|
||||
|
||||
private void changeConfiguration(PluginListItem listItem, Config config, Component component, ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||
{
|
||||
final ConfigItem configItem = cid.getItem();
|
||||
@@ -677,6 +844,18 @@ public class ConfigPanel extends PluginPanel
|
||||
{
|
||||
JCheckBox checkbox = (JCheckBox) component;
|
||||
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), "" + checkbox.isSelected());
|
||||
|
||||
for (ConfigItemDescriptor cid2 : cd.getItems())
|
||||
{
|
||||
if (cid2.getItem().hidden())
|
||||
{
|
||||
if (cid2.getItem().unhide().equals(cid.getItem().keyName()))
|
||||
{ // If another options visibility changes depending on the value of this checkbox, then render the entire menu again
|
||||
openGroupConfigPanel(listItem, config, cd);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (component instanceof JSpinner)
|
||||
{
|
||||
@@ -703,6 +882,11 @@ public class ConfigPanel extends PluginPanel
|
||||
HotkeyButton hotkeyButton = (HotkeyButton) component;
|
||||
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), hotkeyButton.getValue());
|
||||
}
|
||||
else if (component instanceof JSlider)
|
||||
{
|
||||
JSlider slider = (JSlider) component;
|
||||
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), slider.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
void startPlugin(Plugin plugin, PluginListItem listItem)
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
package net.runelite.client.plugins.config;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.image.BufferedImage;
|
||||
@@ -33,7 +32,6 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
@@ -41,13 +39,11 @@ import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import net.runelite.client.config.Config;
|
||||
import net.runelite.client.config.ConfigDescriptor;
|
||||
import net.runelite.client.config.ConfigItemDescriptor;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.ui.PluginPanel;
|
||||
import net.runelite.client.ui.components.IconButton;
|
||||
import net.runelite.client.util.ColorUtil;
|
||||
import net.runelite.client.util.ImageUtil;
|
||||
import org.apache.commons.text.similarity.JaroWinklerDistance;
|
||||
|
||||
@@ -199,11 +195,16 @@ public class PluginListItem extends JPanel
|
||||
configButton.setVisible(true);
|
||||
configButton.setToolTipText("Edit plugin configuration");
|
||||
}
|
||||
if (!name.equals("RuneLitePlus")) {
|
||||
|
||||
toggleButton.setPreferredSize(new Dimension(25, 0));
|
||||
attachToggleButtonListener(toggleButton);
|
||||
buttonPanel.add(toggleButton);
|
||||
|
||||
if (name.equals("RuneLitePlus"))
|
||||
{
|
||||
toggleButton.setVisible(false);
|
||||
}
|
||||
|
||||
buttonPanel.add(toggleButton);
|
||||
}
|
||||
|
||||
private void attachToggleButtonListener(IconButton button)
|
||||
@@ -261,6 +262,7 @@ public class PluginListItem extends JPanel
|
||||
|
||||
/**
|
||||
* Checks if all the search terms in the given list matches at least one keyword.
|
||||
*
|
||||
* @return true if all search terms matches at least one keyword, or false if otherwise.
|
||||
*/
|
||||
boolean matchesSearchTerms(String[] searchTerms)
|
||||
|
||||
@@ -31,9 +31,9 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.events.GameStateChanged;
|
||||
import net.runelite.client.events.SessionOpen;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.events.SessionOpen;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.util.WorldUtil;
|
||||
|
||||
@@ -70,9 +70,12 @@ public class DemonicGorillaOverlay extends Overlay
|
||||
{
|
||||
switch (attackStyle)
|
||||
{
|
||||
case MELEE: return iconManager.getSkillImage(Skill.ATTACK);
|
||||
case RANGED: return iconManager.getSkillImage(Skill.RANGED);
|
||||
case MAGIC: return iconManager.getSkillImage(Skill.MAGIC);
|
||||
case MELEE:
|
||||
return iconManager.getSkillImage(Skill.ATTACK);
|
||||
case RANGED:
|
||||
return iconManager.getSkillImage(Skill.RANGED);
|
||||
case MAGIC:
|
||||
return iconManager.getSkillImage(Skill.MAGIC);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -358,29 +358,52 @@ enum DiscordGameEventType
|
||||
{
|
||||
switch (skill)
|
||||
{
|
||||
case ATTACK: return TRAINING_ATTACK;
|
||||
case DEFENCE: return TRAINING_DEFENCE;
|
||||
case STRENGTH: return TRAINING_STRENGTH;
|
||||
case RANGED: return TRAINING_RANGED;
|
||||
case PRAYER: return TRAINING_PRAYER;
|
||||
case MAGIC: return TRAINING_MAGIC;
|
||||
case COOKING: return TRAINING_COOKING;
|
||||
case WOODCUTTING: return TRAINING_WOODCUTTING;
|
||||
case FLETCHING: return TRAINING_FLETCHING;
|
||||
case FISHING: return TRAINING_FISHING;
|
||||
case FIREMAKING: return TRAINING_FIREMAKING;
|
||||
case CRAFTING: return TRAINING_CRAFTING;
|
||||
case SMITHING: return TRAINING_SMITHING;
|
||||
case MINING: return TRAINING_MINING;
|
||||
case HERBLORE: return TRAINING_HERBLORE;
|
||||
case AGILITY: return TRAINING_AGILITY;
|
||||
case THIEVING: return TRAINING_THIEVING;
|
||||
case SLAYER: return TRAINING_SLAYER;
|
||||
case FARMING: return TRAINING_FARMING;
|
||||
case RUNECRAFT: return TRAINING_RUNECRAFT;
|
||||
case HUNTER: return TRAINING_HUNTER;
|
||||
case CONSTRUCTION: return TRAINING_CONSTRUCTION;
|
||||
default: return null;
|
||||
case ATTACK:
|
||||
return TRAINING_ATTACK;
|
||||
case DEFENCE:
|
||||
return TRAINING_DEFENCE;
|
||||
case STRENGTH:
|
||||
return TRAINING_STRENGTH;
|
||||
case RANGED:
|
||||
return TRAINING_RANGED;
|
||||
case PRAYER:
|
||||
return TRAINING_PRAYER;
|
||||
case MAGIC:
|
||||
return TRAINING_MAGIC;
|
||||
case COOKING:
|
||||
return TRAINING_COOKING;
|
||||
case WOODCUTTING:
|
||||
return TRAINING_WOODCUTTING;
|
||||
case FLETCHING:
|
||||
return TRAINING_FLETCHING;
|
||||
case FISHING:
|
||||
return TRAINING_FISHING;
|
||||
case FIREMAKING:
|
||||
return TRAINING_FIREMAKING;
|
||||
case CRAFTING:
|
||||
return TRAINING_CRAFTING;
|
||||
case SMITHING:
|
||||
return TRAINING_SMITHING;
|
||||
case MINING:
|
||||
return TRAINING_MINING;
|
||||
case HERBLORE:
|
||||
return TRAINING_HERBLORE;
|
||||
case AGILITY:
|
||||
return TRAINING_AGILITY;
|
||||
case THIEVING:
|
||||
return TRAINING_THIEVING;
|
||||
case SLAYER:
|
||||
return TRAINING_SLAYER;
|
||||
case FARMING:
|
||||
return TRAINING_FARMING;
|
||||
case RUNECRAFT:
|
||||
return TRAINING_RUNECRAFT;
|
||||
case HUNTER:
|
||||
return TRAINING_HUNTER;
|
||||
case CONSTRUCTION:
|
||||
return TRAINING_CONSTRUCTION;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -417,10 +417,14 @@ public class DiscordPlugin extends Plugin
|
||||
|
||||
switch (event.getDiscordAreaType())
|
||||
{
|
||||
case BOSSES: return config.showBossActivity();
|
||||
case CITIES: return config.showCityActivity();
|
||||
case DUNGEONS: return config.showDungeonActivity();
|
||||
case MINIGAMES: return config.showMinigameActivity();
|
||||
case BOSSES:
|
||||
return config.showBossActivity();
|
||||
case CITIES:
|
||||
return config.showCityActivity();
|
||||
case DUNGEONS:
|
||||
return config.showDungeonActivity();
|
||||
case MINIGAMES:
|
||||
return config.showMinigameActivity();
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -0,0 +1,814 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Alan Baumgartner <https://github.com/alanbaumgartner>
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* Copyright (c) 2018, Kyle <https://github.com/kyleeld>
|
||||
* Copyright (c) 2018, Owain van Brakel <https://github.com/Owain94>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.easyscape;
|
||||
|
||||
import net.runelite.client.config.Config;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
import net.runelite.client.config.ConfigItem;
|
||||
import net.runelite.client.plugins.easyscape.util.DuelingRingMode;
|
||||
import net.runelite.client.plugins.easyscape.util.GamesNecklaceMode;
|
||||
import net.runelite.client.plugins.easyscape.util.GloryMode;
|
||||
import net.runelite.client.plugins.easyscape.util.SkillsNecklaceMode;
|
||||
import net.runelite.client.plugins.easyscape.util.NecklaceOfPassageMode;
|
||||
import net.runelite.client.plugins.easyscape.util.DigsitePendantMode;
|
||||
import net.runelite.client.plugins.easyscape.util.CombatBraceletMode;
|
||||
import net.runelite.client.plugins.easyscape.util.SlayerRingMode;
|
||||
import net.runelite.client.plugins.easyscape.util.BurningAmuletMode;
|
||||
import net.runelite.client.plugins.easyscape.util.XericsTalismanMode;
|
||||
import net.runelite.client.plugins.easyscape.util.RingOfWealthMode;
|
||||
|
||||
@ConfigGroup("easyscape")
|
||||
public interface EasyscapeConfig extends Config
|
||||
{
|
||||
@ConfigItem(
|
||||
keyName = "withdrawOne",
|
||||
name = "Withdraw/Deposit One",
|
||||
description = "",
|
||||
position = 0,
|
||||
group = "Banking"
|
||||
)
|
||||
default boolean getWithdrawOne()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawOneItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 1,
|
||||
group = "Banking"
|
||||
)
|
||||
default String getWithdrawOneItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawFive",
|
||||
name = "Withdraw/Deposit Five",
|
||||
description = "",
|
||||
position = 2,
|
||||
group = "Banking"
|
||||
)
|
||||
default boolean getWithdrawFive()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawFiveItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 3,
|
||||
group = "Banking"
|
||||
)
|
||||
default String getWithdrawFiveItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawTen",
|
||||
name = "Withdraw/Deposit Ten",
|
||||
description = "",
|
||||
position = 4,
|
||||
group = "Banking"
|
||||
)
|
||||
default boolean getWithdrawTen()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawTenItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 5,
|
||||
group = "Banking"
|
||||
)
|
||||
default String getWithdrawTenItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawX",
|
||||
name = "Withdraw/Deposit X",
|
||||
description = "",
|
||||
position = 6,
|
||||
group = "Banking"
|
||||
)
|
||||
default boolean getWithdrawX()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawXAmount",
|
||||
name = "Amount",
|
||||
description = "",
|
||||
position = 7,
|
||||
group = "Banking"
|
||||
)
|
||||
default String getWithdrawXAmount()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawXItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 8,
|
||||
group = "Banking"
|
||||
)
|
||||
default String getWithdrawXItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawAll",
|
||||
name = "Withdraw/Deposit All",
|
||||
description = "",
|
||||
position = 9,
|
||||
group = "Banking"
|
||||
)
|
||||
default boolean getWithdrawAll()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "withdrawAllItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 10,
|
||||
group = "Banking"
|
||||
)
|
||||
default String getWithdrawAllItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------- //
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "removeObjects",
|
||||
name = "Remove Objects",
|
||||
description = "Removes interaction with the listed objects.",
|
||||
position = 12,
|
||||
group = "Miscellaneous easyscape"
|
||||
)
|
||||
default boolean getRemoveObjects()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "removedObjects",
|
||||
name = "Objects",
|
||||
description = "Objects listed here will have all interaction be removed.",
|
||||
position = 13,
|
||||
group = "Miscellaneous easyscape"
|
||||
)
|
||||
default String getRemovedObjects()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------- //
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapBuyOne",
|
||||
name = "Swappable Buy One",
|
||||
description = "",
|
||||
position = 14,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default boolean getSwapBuyOne()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "buyOneItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 15,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default String getBuyOneItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapBuyFive",
|
||||
name = "Swappable Buy Five",
|
||||
description = "",
|
||||
position = 16,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default boolean getSwapBuyFive()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "buyFiveItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 17,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default String getBuyFiveItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapBuyTen",
|
||||
name = "Swappable Buy Ten",
|
||||
description = "",
|
||||
position = 18,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default boolean getSwapBuyTen()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "buyTenItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 19,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default String getBuyTenItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapBuyFifty",
|
||||
name = "Swappable Buy Fifty",
|
||||
description = "",
|
||||
position = 20,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default boolean getSwapBuyFifty()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "buyFiftyItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 21,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default String getBuyFiftyItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSellOne",
|
||||
name = "Swappable Sell One",
|
||||
description = "",
|
||||
position = 22,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default boolean getSwapSellOne()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "sellOneItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 23,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default String getSellOneItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSellFive",
|
||||
name = "Swappable Sell Five",
|
||||
description = "",
|
||||
position = 24,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default boolean getSwapSellFive()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "sellFiveItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 25,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default String getSellFiveItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSellTen",
|
||||
name = "Swappable Sell Ten",
|
||||
description = "",
|
||||
position = 26,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default boolean getSwapSellTen()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "sellTenItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 27,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default String getSellTenItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSellFifty",
|
||||
name = "Swappable Sell Fifty",
|
||||
description = "",
|
||||
position = 28,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default boolean getSwapSellFifty()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "sellFiftyItems",
|
||||
name = "Items",
|
||||
description = "",
|
||||
position = 29,
|
||||
group = "Shop / stores"
|
||||
)
|
||||
default String getSellFiftyItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------- //
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "easyConstruction",
|
||||
name = "Easy Construction",
|
||||
description = "Makes \"Remove\" the default option for listed items in build mode.",
|
||||
position = 30,
|
||||
group = "Miscellaneous swapper"
|
||||
)
|
||||
default boolean getEasyConstruction()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "constructionItems",
|
||||
name = "Construction Items",
|
||||
description = "Items listed here will have the default option set to \"Removed\" in build mode.",
|
||||
position = 31,
|
||||
group = "Miscellaneous swapper"
|
||||
)
|
||||
default String getConstructionItems()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSmithing",
|
||||
name = "Swap Smithing",
|
||||
description = "Enables swapping of smith-1 and smith-all options.",
|
||||
position = 32,
|
||||
group = "Miscellaneous swapper"
|
||||
)
|
||||
default boolean getSwapSmithing()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapTanning",
|
||||
name = "Swap Tanning",
|
||||
description = "Enables swapping of tan-1 and tan-all options.",
|
||||
position = 33,
|
||||
group = "Miscellaneous swapper"
|
||||
)
|
||||
default boolean getSwapTanning()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSawmill",
|
||||
name = "Swap Sawmill Operator",
|
||||
description = "Makes Buy-plank the default option on the sawmill operator.",
|
||||
position = 34,
|
||||
group = "Miscellaneous swapper"
|
||||
)
|
||||
default boolean getSwapSawmill()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSawmillPlanks",
|
||||
name = "Swap Buy Planks",
|
||||
description = "Makes Buy All the default option in buy planks.",
|
||||
position = 35,
|
||||
group = "Miscellaneous swapper"
|
||||
)
|
||||
default boolean getSwapSawmillPlanks()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapPuroPuro",
|
||||
name = "Swap Puro Puro Wheat",
|
||||
description = "",
|
||||
position = 36,
|
||||
group = "Miscellaneous swapper"
|
||||
)
|
||||
default boolean getSwapPuro()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------- //
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapGamesNecklace",
|
||||
name = "Swap Games Necklace",
|
||||
description = "",
|
||||
position = 37,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getGamesNecklace()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "gamesNecklaceMode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 38,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default GamesNecklaceMode getGamesNecklaceMode()
|
||||
{
|
||||
return GamesNecklaceMode.BURTHORPE;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapDuelingRing",
|
||||
name = "Swap Dueling Ring",
|
||||
description = "",
|
||||
position = 39,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getDuelingRing()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "duelingRingMode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 40,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default DuelingRingMode getDuelingRingMode()
|
||||
{
|
||||
return DuelingRingMode.DUEL_ARENA;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapGlory",
|
||||
name = "Swap Glory",
|
||||
description = "",
|
||||
position = 41,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getGlory()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "gloryMode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 42,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default GloryMode getGloryMode()
|
||||
{
|
||||
return GloryMode.EDGEVILLE;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSkill",
|
||||
name = "Swap Skill",
|
||||
description = "",
|
||||
position = 43,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getSkillsNecklace()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "skillsnecklacemode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 44,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default SkillsNecklaceMode getSkillsNecklaceMode()
|
||||
{
|
||||
return SkillsNecklaceMode.FARMING_GUILD;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapPassage",
|
||||
name = "Swap Passage",
|
||||
description = "",
|
||||
position = 45,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getNecklaceofPassage()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "necklaceofpassagemode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 46,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default NecklaceOfPassageMode getNecklaceofPassageMode()
|
||||
{
|
||||
return NecklaceOfPassageMode.WIZARDS_TOWER;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapDigsite",
|
||||
name = "Swap Digsite",
|
||||
description = "",
|
||||
position = 47,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getDigsitePendant()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "digsitependantmode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 48,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default DigsitePendantMode getDigsitePendantMode()
|
||||
{
|
||||
return DigsitePendantMode.FOSSIL_ISLAND;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapCombat",
|
||||
name = "Swap Combat",
|
||||
description = "",
|
||||
position = 49,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getCombatBracelet()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "combatbraceletmode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 50,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default CombatBraceletMode getCombatBraceletMode()
|
||||
{
|
||||
return CombatBraceletMode.WARRIORS_GUILD;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapslayer",
|
||||
name = "Swap slayer",
|
||||
description = "",
|
||||
position = 51,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getSlayerRing()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "slayerringmode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 52,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default SlayerRingMode getSlayerRingMode()
|
||||
{
|
||||
return SlayerRingMode.CHECK;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapburning",
|
||||
name = "Swap burning",
|
||||
description = "",
|
||||
position = 53,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getBurningAmulet()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "burningamuletmode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 54,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default BurningAmuletMode getBurningAmuletMode()
|
||||
{
|
||||
return BurningAmuletMode.BANDIT_CAMP;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapxeric",
|
||||
name = "Swap xeric",
|
||||
description = "",
|
||||
position = 55,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getXericsTalisman()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "xericstalismanmode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 56,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default XericsTalismanMode getXericsTalismanMode()
|
||||
{
|
||||
return XericsTalismanMode.XERICS_LOOKOUT;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapwealth",
|
||||
name = "Swap wealth",
|
||||
description = "",
|
||||
position = 57,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default boolean getRingofWealth()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "ringofwealthmode",
|
||||
name = "Mode",
|
||||
description = "",
|
||||
position = 58,
|
||||
group = "Jewellery swapper"
|
||||
)
|
||||
default RingOfWealthMode getRingofWealthMode()
|
||||
{
|
||||
return RingOfWealthMode.GRAND_EXCHANGE;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------- //
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapArdougneCape",
|
||||
name = "Swap Ardougne Cape",
|
||||
description = "Enables swapping of teleport and wear.",
|
||||
position = 59,
|
||||
group = "Equipment swapper"
|
||||
)
|
||||
default boolean getSwapArdougneCape()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapConstructionCape",
|
||||
name = "Swap Construction Cape",
|
||||
description = "Enables swapping of teleport and wear.",
|
||||
position = 60,
|
||||
group = "Equipment swapper"
|
||||
)
|
||||
default boolean getSwapConstructionCape()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapCraftingCape",
|
||||
name = "Swap Crafting Cape",
|
||||
description = "Enables swapping of teleport and wear.",
|
||||
position = 61,
|
||||
group = "Equipment swapper"
|
||||
)
|
||||
default boolean getSwapCraftingCape()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapMagicCape",
|
||||
name = "Swap Magic Cape",
|
||||
description = "Enables swapping of spellbook and wear.",
|
||||
position = 62,
|
||||
group = "Equipment swapper"
|
||||
)
|
||||
default boolean getSwapMagicCape()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapExplorersRing",
|
||||
name = "Swap Explorers Ring",
|
||||
description = "Enables swapping of spellbook and wear.",
|
||||
position = 63,
|
||||
group = "Equipment swapper"
|
||||
)
|
||||
default boolean getSwapExplorersRing()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Alan Baumgartner <https://github.com/alanbaumgartner>
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* Copyright (c) 2018, Kyle <https://github.com/kyleeld>
|
||||
* Copyright (c) 2018, Owain van Brakel <https://github.com/Owain94>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -24,17 +27,19 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.easyscape;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.inject.Provides;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.MenuAction;
|
||||
import static net.runelite.api.MenuAction.MENU_ACTION_DEPRIORITIZE_OFFSET;
|
||||
import static net.runelite.api.MenuAction.WALK;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.Player;
|
||||
import static net.runelite.api.Varbits.BUILDING_MODE;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
import net.runelite.api.events.MenuEntryAdded;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
@@ -43,24 +48,15 @@ import net.runelite.client.plugins.PluginType;
|
||||
import static net.runelite.client.util.MenuUtil.swap;
|
||||
import net.runelite.client.util.Text;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import javax.inject.Inject;
|
||||
import static net.runelite.api.MenuAction.MENU_ACTION_DEPRIORITIZE_OFFSET;
|
||||
import static net.runelite.api.MenuAction.WALK;
|
||||
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Easyscape",
|
||||
description = "Easyscape.",
|
||||
tags = {"Easyscape"},
|
||||
enabledByDefault = false,
|
||||
type = PluginType.UTILITY
|
||||
)
|
||||
|
||||
@Slf4j
|
||||
public class EasyscapePlugin extends Plugin {
|
||||
|
||||
public class EasyscapePlugin extends Plugin
|
||||
{
|
||||
private static final int PURO_PURO_REGION_ID = 10307;
|
||||
private static final int HOUSE_REGION_ID = 7513;
|
||||
|
||||
private MenuEntry[] entries;
|
||||
|
||||
@@ -68,273 +64,384 @@ public class EasyscapePlugin extends Plugin {
|
||||
private Client client;
|
||||
|
||||
@Inject
|
||||
private EasyscapePluginConfig config;
|
||||
private EasyscapeConfig config;
|
||||
|
||||
@Provides
|
||||
EasyscapePluginConfig provideConfig(ConfigManager configManager) {
|
||||
return configManager.getConfig(EasyscapePluginConfig.class);
|
||||
EasyscapeConfig provideConfig(ConfigManager configManager)
|
||||
{
|
||||
return configManager.getConfig(EasyscapeConfig.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startUp() {
|
||||
log.debug("Easyscape Started.");
|
||||
public void startUp()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shutDown() {
|
||||
log.debug("Easyscape Stopped.");
|
||||
public void shutDown()
|
||||
{
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onMenuEntryAdded(MenuEntryAdded event) {
|
||||
|
||||
if (client.getGameState() != GameState.LOGGED_IN) {
|
||||
public void onMenuEntryAdded(MenuEntryAdded event)
|
||||
{
|
||||
if (client.getGameState() != GameState.LOGGED_IN)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Widget loginScreenOne = client.getWidget(WidgetInfo.LOGIN_CLICK_TO_PLAY_SCREEN);
|
||||
Widget loginScreenTwo = client.getWidget(WidgetInfo.LOGIN_CLICK_TO_PLAY_SCREEN_MESSAGE_OF_THE_DAY);
|
||||
|
||||
if (loginScreenOne != null || loginScreenTwo != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final String option = Text.removeTags(event.getOption()).toLowerCase();
|
||||
final String target = Text.removeTags(event.getTarget()).toLowerCase();
|
||||
final String option = Text.standardize(event.getOption());
|
||||
final String target = Text.standardize(event.getTarget());
|
||||
|
||||
entries = client.getMenuEntries();
|
||||
|
||||
if (config.getRemoveExamine()) {
|
||||
for (int i = entries.length - 1; i >= 0; i--) {
|
||||
if (entries[i].getOption().equals("Examine")) {
|
||||
entries = ArrayUtils.remove(entries, i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
client.setMenuEntries(entries);
|
||||
}
|
||||
|
||||
if (config.getRemoveObjects() && !config.getRemovedObjects().equals("")) {
|
||||
for (String removed : config.getRemovedObjects().split(",")) {
|
||||
removed = removed.trim();
|
||||
if (target.contains("->")) {
|
||||
String trimmed = target.split("->")[1].trim();
|
||||
if (trimmed.length() >= removed.length() && trimmed.substring(0, removed.length()).equalsIgnoreCase(removed)) {
|
||||
delete(event.getIdentifier());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target.length() >= removed.length() && target.substring(0, removed.length()).equalsIgnoreCase(removed)) {
|
||||
delete(event.getIdentifier());
|
||||
break;
|
||||
if (option.contains("withdraw") || option.contains("deposit"))
|
||||
{
|
||||
if (config.getWithdrawOne())
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getWithdrawOneItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Withdraw-1", option, target);
|
||||
swap(client, "Deposit-1", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getSwapPuro() && isPuroPuro()) {
|
||||
if (event.getType() == WALK.getId()) {
|
||||
MenuEntry menuEntry = entries[entries.length - 1];
|
||||
menuEntry.setType(MenuAction.WALK.getId() + MENU_ACTION_DEPRIORITIZE_OFFSET);
|
||||
client.setMenuEntries(entries);
|
||||
if (config.getWithdrawFive())
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getWithdrawFiveItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Withdraw-5", option, target);
|
||||
swap(client, "Deposit-5", option, target);
|
||||
}
|
||||
else if (option.equalsIgnoreCase("examine")) {
|
||||
swap(client, "push-through", option, target);
|
||||
}
|
||||
else if (option.equalsIgnoreCase("use")) {
|
||||
swap(client, "escape", option, target);
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getEasyConstruction() && !config.getConstructionItems().equals("")) {
|
||||
if (event.getType() == WALK.getId()) {
|
||||
MenuEntry menuEntry = entries[entries.length - 1];
|
||||
menuEntry.setType(MenuAction.WALK.getId() + MENU_ACTION_DEPRIORITIZE_OFFSET);
|
||||
client.setMenuEntries(entries);
|
||||
if (config.getWithdrawTen())
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getWithdrawTenItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Withdraw-10", option, target);
|
||||
swap(client, "Deposit-10", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
swap(client, "Build", option, target);
|
||||
if (config.getWithdrawX())
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getWithdrawXItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Withdraw-" + config.getWithdrawXAmount(), option, target);
|
||||
swap(client, "Deposit-" + config.getWithdrawXAmount(), option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = entries.length - 1; i >= 0; i--) {
|
||||
for (String item : config.getConstructionItems().split(",")) {
|
||||
if (item.trim().equalsIgnoreCase(Text.removeTags(entries[i].getTarget()))) {
|
||||
if (!entries[i].getOption().equalsIgnoreCase("remove")) {
|
||||
entries = ArrayUtils.remove(entries, i);
|
||||
i--;
|
||||
if (config.getWithdrawAll())
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getWithdrawAllItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Withdraw-All", option, target);
|
||||
swap(client, "Deposit-All", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
client.setMenuEntries(entries);
|
||||
if (option.contains("buy"))
|
||||
{
|
||||
if (config.getSwapBuyOne() && !config.getBuyOneItems().equals(""))
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getBuyOneItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Buy 1", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getSwapShop() && !config.getSwappedItems().equals("")) {
|
||||
for (String item : config.getSwappedItems().split(",")) {
|
||||
if (target.equalsIgnoreCase(item.trim())) {
|
||||
if (config.getSwapBuyFive() && !config.getBuyFiveItems().equals(""))
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getBuyFiveItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Buy 5", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getSwapBuyTen() && !config.getBuyTenItems().equals(""))
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getBuyTenItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Buy 10", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getSwapBuyFifty() && !config.getBuyFiftyItems().equals(""))
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getBuyFiftyItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Buy 50", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (option.contains("sell"))
|
||||
{
|
||||
if (config.getSwapSellOne() && !config.getSellOneItems().equals(""))
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getSellOneItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Sell 1", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getSwapSmithing()) {
|
||||
if (option.equalsIgnoreCase("Smith 1")) {
|
||||
if (config.getSwapSellFive() && !Strings.isNullOrEmpty(config.getSellFiveItems()))
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getSellFiveItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Sell 5", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getSwapSellTen() && !Strings.isNullOrEmpty(config.getSellTenItems()))
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getSellTenItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Sell 10", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getSwapSellFifty() && !Strings.isNullOrEmpty(config.getSellFiftyItems()))
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getSellFiftyItems()))
|
||||
{
|
||||
if (target.equals(Text.standardize(item)))
|
||||
{
|
||||
swap(client, "Sell 50", option, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getRemoveObjects() && !config.getRemovedObjects().equals(""))
|
||||
{
|
||||
for (String removed : Text.fromCSV(config.getRemovedObjects()))
|
||||
{
|
||||
removed = Text.standardize(removed);
|
||||
if (target.contains("(") && target.split(" \\(")[0].equals(removed))
|
||||
{
|
||||
delete(event.getIdentifier());
|
||||
}
|
||||
else if (target.contains("->"))
|
||||
{
|
||||
String trimmed = target.split("->")[1].trim();
|
||||
if (trimmed.length() >= removed.length() && trimmed.substring(0, removed.length()).equalsIgnoreCase(removed))
|
||||
{
|
||||
delete(event.getIdentifier());
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (target.length() >= removed.length() && target.substring(0, removed.length()).equalsIgnoreCase(removed))
|
||||
{
|
||||
delete(event.getIdentifier());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getSwapPuro() && isPuroPuro())
|
||||
{
|
||||
if (event.getType() == WALK.getId())
|
||||
{
|
||||
MenuEntry menuEntry = entries[entries.length - 1];
|
||||
menuEntry.setType(MenuAction.WALK.getId() + MENU_ACTION_DEPRIORITIZE_OFFSET);
|
||||
}
|
||||
else if (option.equalsIgnoreCase("examine"))
|
||||
{
|
||||
swap(client, "push-through", option, target);
|
||||
}
|
||||
else if (option.equalsIgnoreCase("use"))
|
||||
{
|
||||
swap(client, "escape", option, target);
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getEasyConstruction() && client.getVar(BUILDING_MODE) == 1 && !Strings.isNullOrEmpty(config.getConstructionItems()))
|
||||
{
|
||||
if (event.getType() == WALK.getId())
|
||||
{
|
||||
MenuEntry menuEntry = entries[entries.length - 1];
|
||||
menuEntry.setType(MenuAction.WALK.getId() + MENU_ACTION_DEPRIORITIZE_OFFSET);
|
||||
}
|
||||
|
||||
swap(client, "Build", option, target);
|
||||
|
||||
for (int i = entries.length - 1; i >= 0; i--)
|
||||
{
|
||||
for (String item : Text.fromCSV(config.getConstructionItems()))
|
||||
{
|
||||
if (item.equalsIgnoreCase(Text.removeTags(entries[i].getTarget())))
|
||||
{
|
||||
if (!entries[i].getOption().equalsIgnoreCase("remove"))
|
||||
{
|
||||
entries = ArrayUtils.remove(entries, i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
client.setMenuEntries(entries);
|
||||
}
|
||||
|
||||
if (config.getSwapSmithing() && option.contains("smith"))
|
||||
{
|
||||
if (option.equalsIgnoreCase("Smith 1"))
|
||||
{
|
||||
swap(client, "Smith All", option, target);
|
||||
} else if (option.equalsIgnoreCase("Smith 1 Set")) {
|
||||
}
|
||||
else if (option.equalsIgnoreCase("Smith 1 Set"))
|
||||
{
|
||||
swap(client, "Smith All Sets", option, target);
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getSwapTanning() && option.equalsIgnoreCase("Tan 1")) {
|
||||
else if (config.getSwapTanning() && option.equalsIgnoreCase("Tan 1"))
|
||||
{
|
||||
swap(client, "Tan All", option, target);
|
||||
}
|
||||
|
||||
if (config.getSwapCrafting() && option.equalsIgnoreCase("Make-1")) {
|
||||
swap(client, "Make-All", option, target);
|
||||
}
|
||||
|
||||
if (config.getSwapSawmill() && target.equalsIgnoreCase("Sawmill operator")) {
|
||||
else if (config.getSwapSawmill() && target.equalsIgnoreCase("Sawmill operator"))
|
||||
{
|
||||
swap(client, "Buy-plank", option, target);
|
||||
}
|
||||
|
||||
if (config.getSwapSawmillPlanks() && option.equalsIgnoreCase("Buy 1")) {
|
||||
else if (config.getSwapSawmillPlanks() && option.equalsIgnoreCase("Buy 1"))
|
||||
{
|
||||
swap(client, "Buy All", option, target);
|
||||
}
|
||||
|
||||
if (config.getSwapStairs() && option.equalsIgnoreCase("Climb Stairs")) {
|
||||
swap(client, "Climb Up Stairs", option, target);
|
||||
}
|
||||
|
||||
if (option.equalsIgnoreCase("Clear-All") && target.equalsIgnoreCase("Bank Filler")) {
|
||||
else if (option.equalsIgnoreCase("Clear-All") && target.equalsIgnoreCase("Bank Filler"))
|
||||
{
|
||||
swap(client, "Clear", option, target);
|
||||
}
|
||||
|
||||
if (target.toLowerCase().contains("ardougne cloak") && config.getSwapArdougneCape()) {
|
||||
else if (target.contains("ardougne cloak") && config.getSwapArdougneCape())
|
||||
{
|
||||
swap(client, "Kandarin Monastery", option, target);
|
||||
swap(client, "Monastery Teleport", option, target);
|
||||
}
|
||||
|
||||
if (config.getSwapEssencePouch()) {
|
||||
if (isEssencePouch(target)) {
|
||||
Widget widgetBankTitleBar = client.getWidget(WidgetInfo.BANK_TITLE_BAR);
|
||||
switch (config.getEssenceMode()) {
|
||||
case RUNECRAFTING:
|
||||
if (widgetBankTitleBar == null || widgetBankTitleBar.isHidden()) {
|
||||
swap(client, "Empty", option, target);
|
||||
} else {
|
||||
swap(client, "Fill", option, target);
|
||||
}
|
||||
break;
|
||||
case ESSENCE_MINING:
|
||||
if (widgetBankTitleBar == null || widgetBankTitleBar.isHidden()) {
|
||||
swap(client, "Fill", option, target);
|
||||
} else {
|
||||
swap(client, "Empty", option, target);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getGamesNecklace()) {
|
||||
if (target.toLowerCase().contains("games necklace")) {
|
||||
switch (config.getGamesNecklaceMode()) {
|
||||
case BURTHORPE:
|
||||
swap(client, GamesNecklaceMode.BURTHORPE.toString(), option, target);
|
||||
break;
|
||||
case BARBARIAN_OUTPOST:
|
||||
swap(client, GamesNecklaceMode.BARBARIAN_OUTPOST.toString(), option, target);
|
||||
break;
|
||||
case CORPOREAL_BEAST:
|
||||
swap(client, GamesNecklaceMode.CORPOREAL_BEAST.toString(), option, target);
|
||||
break;
|
||||
case TEARS_OF_GUTHIX:
|
||||
swap(client, GamesNecklaceMode.TEARS_OF_GUTHIX.toString(), option, target);
|
||||
break;
|
||||
case WINTERTODT:
|
||||
swap(client, GamesNecklaceMode.WINTERTODT.toString(), option, target);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getDuelingRing()) {
|
||||
if (target.toLowerCase().contains("ring of dueling")) {
|
||||
switch (config.getDuelingRingMode()) {
|
||||
case DUEL_ARENA:
|
||||
swap(client, DuelingRingMode.DUEL_ARENA.toString(), option, target);
|
||||
break;
|
||||
case CASTLE_WARS:
|
||||
swap(client, DuelingRingMode.CASTLE_WARS.toString(), option, target);
|
||||
break;
|
||||
case CLAN_WARS:
|
||||
swap(client, DuelingRingMode.CLAN_WARS.toString(), option, target);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getWealthRing()) {
|
||||
if (target.toLowerCase().contains("ring of wealth")) {
|
||||
switch (config.getWealthRingMode()) {
|
||||
case MISCELLANIA:
|
||||
swap(client, WealthRingMode.MISCELLANIA.toString(), option, target);
|
||||
break;
|
||||
case GRAND_EXCHANGE:
|
||||
swap(client, WealthRingMode.GRAND_EXCHANGE.toString(), option, target);
|
||||
break;
|
||||
case FALADOR:
|
||||
swap(client, WealthRingMode.FALADOR.toString(), option, target);
|
||||
break;
|
||||
case DONDAKAN:
|
||||
swap(client, WealthRingMode.DONDAKAN.toString(), option, target);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config.getGlory()) {
|
||||
if (target.toLowerCase().contains("amulet of glory")) {
|
||||
switch (config.getGloryMode()) {
|
||||
case EDGEVILLE:
|
||||
swap(client, GloryMode.EDGEVILLE.toString(), option, target);
|
||||
break;
|
||||
case KARAMJA:
|
||||
swap(client, GloryMode.KARAMJA.toString(), option, target);
|
||||
break;
|
||||
case DRAYNOR_VILLAGE:
|
||||
swap(client, GloryMode.DRAYNOR_VILLAGE.toString(), option, target);
|
||||
break;
|
||||
case AL_KHARID:
|
||||
swap(client, GloryMode.AL_KHARID.toString(), option, target);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (target.toLowerCase().contains("crafting cape") && config.getSwapCraftingCape()) {
|
||||
else if (target.contains("crafting cape") && config.getSwapCraftingCape())
|
||||
{
|
||||
swap(client, "Teleport", option, target);
|
||||
|
||||
}
|
||||
|
||||
if (target.toLowerCase().contains("construct. cape") && config.getSwapConstructionCape()) {
|
||||
else if (target.contains("construct. cape") && config.getSwapConstructionCape())
|
||||
{
|
||||
swap(client, "Tele to poh", option, target);
|
||||
}
|
||||
|
||||
else if (target.contains("magic cape") && config.getSwapMagicCape())
|
||||
{
|
||||
swap(client, "Spellbook", option, target);
|
||||
}
|
||||
|
||||
else if (target.contains("explorer's ring") && config.getSwapExplorersRing())
|
||||
{
|
||||
swap(client, "Teleport", option, target);
|
||||
}
|
||||
|
||||
else if (config.getGamesNecklace() && target.contains("games necklace"))
|
||||
{
|
||||
swap(client, config.getGamesNecklaceMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getDuelingRing() && target.contains("ring of dueling"))
|
||||
{
|
||||
swap(client, config.getDuelingRingMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getGlory() && (target.contains("amulet of glory") || target.contains("amulet of eternal glory")))
|
||||
{
|
||||
swap(client, config.getGloryMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getSkillsNecklace() && target.contains("skills necklace"))
|
||||
{
|
||||
swap(client, config.getSkillsNecklaceMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getNecklaceofPassage() && target.contains("necklace of passage"))
|
||||
{
|
||||
swap(client, config.getNecklaceofPassageMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getDigsitePendant() && target.contains("digsite pendant"))
|
||||
{
|
||||
swap(client, config.getDigsitePendantMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getCombatBracelet() && target.contains("combat bracelet"))
|
||||
{
|
||||
swap(client, config.getCombatBraceletMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getSlayerRing() && target.contains("slayer ring"))
|
||||
{
|
||||
swap(client, config.getSlayerRingMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getBurningAmulet() && target.contains("burning amulet"))
|
||||
{
|
||||
swap(client, config.getBurningAmuletMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getXericsTalisman() && target.contains("xeric's talisman"))
|
||||
{
|
||||
swap(client, config.getXericsTalismanMode().toString(), option, target);
|
||||
}
|
||||
|
||||
else if (config.getRingofWealth() && target.contains("ring of wealth"))
|
||||
{
|
||||
swap(client, config.getRingofWealthMode().toString(), option, target);
|
||||
}
|
||||
}
|
||||
|
||||
private void delete(int target) {
|
||||
for (int i = entries.length - 1; i >= 0; i--) {
|
||||
if (entries[i].getIdentifier() == target) {
|
||||
private void delete(int target)
|
||||
{
|
||||
for (int i = entries.length - 1; i >= 0; i--)
|
||||
{
|
||||
if (entries[i].getIdentifier() == target)
|
||||
{
|
||||
entries = ArrayUtils.remove(entries, i);
|
||||
i--;
|
||||
}
|
||||
@@ -342,23 +449,18 @@ public class EasyscapePlugin extends Plugin {
|
||||
client.setMenuEntries(entries);
|
||||
}
|
||||
|
||||
private boolean isEssencePouch(String target) {
|
||||
return (target.equalsIgnoreCase("Small Pouch") || target.equalsIgnoreCase("Medium Pouch") || target.equalsIgnoreCase("Large Pouch") || target.equalsIgnoreCase("Giant Pouch"));
|
||||
}
|
||||
|
||||
private boolean isHouse() {
|
||||
return client.getMapRegions()[0] == HOUSE_REGION_ID;
|
||||
}
|
||||
|
||||
private boolean isPuroPuro() {
|
||||
private boolean isPuroPuro()
|
||||
{
|
||||
Player player = client.getLocalPlayer();
|
||||
|
||||
if (player == null) {
|
||||
if (player == null)
|
||||
{
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
WorldPoint location = player.getWorldLocation();
|
||||
return location.getRegionID() == PURO_PURO_REGION_ID;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,313 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.easyscape;
|
||||
|
||||
import net.runelite.client.config.Config;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
import net.runelite.client.config.ConfigItem;
|
||||
|
||||
@ConfigGroup("easyscape")
|
||||
public interface EasyscapePluginConfig extends Config {
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "removeExamine",
|
||||
name = "Remove Examine",
|
||||
description = "",
|
||||
position = 0
|
||||
)
|
||||
default boolean getRemoveExamine() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapShop",
|
||||
name = "Easy Shop",
|
||||
description = "Enables swapping of items in the shop with their buy-50 option.",
|
||||
position = 1
|
||||
)
|
||||
default boolean getSwapShop() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swappedItems",
|
||||
name = "Shop Items",
|
||||
description = "Items listed here will have their value and buy-50 options swapped.",
|
||||
position = 2
|
||||
)
|
||||
default String getSwappedItems() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "easyConstruction",
|
||||
name = "Easy Construction",
|
||||
description = "",
|
||||
position = 3
|
||||
)
|
||||
|
||||
default boolean getEasyConstruction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "constructionItems",
|
||||
name = "Construction Items",
|
||||
description = "",
|
||||
position = 4
|
||||
)
|
||||
|
||||
default String getConstructionItems() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "removeObjects",
|
||||
name = "Remove Objects",
|
||||
description = "",
|
||||
position = 5
|
||||
)
|
||||
default boolean getRemoveObjects() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "removedObjects",
|
||||
name = "Removed Objects",
|
||||
description = "",
|
||||
position = 6
|
||||
)
|
||||
default String getRemovedObjects() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSmithing",
|
||||
name = "Swap Smithing",
|
||||
description = "Enables swapping of smith-1 and smith-all options.",
|
||||
position = 7
|
||||
)
|
||||
default boolean getSwapSmithing() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapTanning",
|
||||
name = "Swap Tanning",
|
||||
description = "Enables swapping of tan-1 and tan-all options.",
|
||||
position = 8
|
||||
)
|
||||
default boolean getSwapTanning() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapCrafting",
|
||||
name = "Swap Crafting",
|
||||
description = "",
|
||||
position = 9
|
||||
)
|
||||
default boolean getSwapCrafting() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapArdougneCape",
|
||||
name = "Swap Ardougne Cape",
|
||||
description = "Enables swapping of teleport and wear.",
|
||||
position = 10
|
||||
)
|
||||
default boolean getSwapArdougneCape() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapStairs",
|
||||
name = "Swap Stairs",
|
||||
description = "",
|
||||
position = 11
|
||||
)
|
||||
|
||||
default boolean getSwapStairs() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSawmill",
|
||||
name = "Swap Sawmill Operator",
|
||||
description = "",
|
||||
position = 12
|
||||
)
|
||||
default boolean getSwapSawmill() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapSawmillPlanks",
|
||||
name = "Swap Buy Planks",
|
||||
description = "",
|
||||
position = 13
|
||||
)
|
||||
|
||||
default boolean getSwapSawmillPlanks() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapPuroPuro",
|
||||
name = "Swap Puro Puro Wheat",
|
||||
description = "",
|
||||
position = 14
|
||||
)
|
||||
default boolean getSwapPuro() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapEssencePounch",
|
||||
name = "Swap Essence Pouch",
|
||||
description = "Enables swapping of fill and empty for essence pounch.",
|
||||
position = 15
|
||||
)
|
||||
default boolean getSwapEssencePouch() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "essenceMode",
|
||||
name = "Essence Pouch Mode",
|
||||
description = "Runecrafting or essence mining mode.",
|
||||
position = 16
|
||||
)
|
||||
|
||||
default EssenceMode getEssenceMode() {
|
||||
return EssenceMode.RUNECRAFTING;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapGamesNecklace",
|
||||
name = "Swap Games Necklace",
|
||||
description = "Enables swapping of games necklace.",
|
||||
position = 17
|
||||
)
|
||||
default boolean getGamesNecklace() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "gamesNecklaceMode",
|
||||
name = "Games Necklace Mode",
|
||||
description = "Teleport location mode.",
|
||||
position = 18
|
||||
)
|
||||
|
||||
default GamesNecklaceMode getGamesNecklaceMode() {
|
||||
return GamesNecklaceMode.BURTHORPE;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapDuelingRing",
|
||||
name = "Swap Dueling Ring",
|
||||
description = "Enables swapping of dueling ring.",
|
||||
position = 19
|
||||
)
|
||||
default boolean getDuelingRing() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "duelingRingMode",
|
||||
name = "Dueling Ring Mode",
|
||||
description = "Teleport location mode.",
|
||||
position = 20
|
||||
)
|
||||
|
||||
default DuelingRingMode getDuelingRingMode() {
|
||||
return DuelingRingMode.DUEL_ARENA;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapGlory",
|
||||
name = "Swap Glory",
|
||||
description = "Enables swapping of Amulet of Glory.",
|
||||
position = 21
|
||||
)
|
||||
default boolean getGlory() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "gloryMode",
|
||||
name = "Glory Mode",
|
||||
description = "Teleport location mode.",
|
||||
position = 22
|
||||
)
|
||||
|
||||
default GloryMode getGloryMode() {
|
||||
return GloryMode.EDGEVILLE;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapWealthRing",
|
||||
name = "Swap Ring of Wealth",
|
||||
description = "Enables swapping of Ring of Wealth.",
|
||||
position = 23
|
||||
)
|
||||
default boolean getWealthRing() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "WealthRingMode",
|
||||
name = "Wealth Ring Mode",
|
||||
description = "Teleport location mode.",
|
||||
position = 24
|
||||
)
|
||||
|
||||
default WealthRingMode getWealthRingMode() {
|
||||
return WealthRingMode.GRAND_EXCHANGE;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapConstructionCape",
|
||||
name = "Swap Construction Cape",
|
||||
description = "Enables swapping of teleport and wear.",
|
||||
position = 25
|
||||
)
|
||||
default boolean getSwapConstructionCape() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "swapCraftingCape",
|
||||
name = "Swap Crafting Cape",
|
||||
description = "Enables swapping of teleport and wear.",
|
||||
position = 26
|
||||
)
|
||||
default boolean getSwapCraftingCape() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* Copyright (c) 2018, Kyle <https://github.com/kyleeld>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -22,20 +23,24 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.easyscape;
|
||||
package net.runelite.client.plugins.easyscape.util;
|
||||
|
||||
public enum EssenceMode {
|
||||
RUNECRAFTING("Runecrafting"),
|
||||
ESSENCE_MINING("Essence Mining");
|
||||
public enum BurningAmuletMode
|
||||
{
|
||||
CHAOS_TEMPLE("Chaos Temple"),
|
||||
BANDIT_CAMP("Bandit Camp"),
|
||||
LAVA_MAZE("Lava Maze");
|
||||
|
||||
private final String name;
|
||||
|
||||
EssenceMode(String name) {
|
||||
BurningAmuletMode(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* Copyright (c) 2018, Kyle <https://github.com/kyleeld>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.easyscape.util;
|
||||
|
||||
public enum CombatBraceletMode
|
||||
{
|
||||
WARRIORS_GUILD("Warriors' Guild"),
|
||||
CHAMPIONS_GUILD("Champions' Guild"),
|
||||
EDGEVILLE_MONASTERY("Edgeville Monstery"),
|
||||
RANGING_GUILD("Ranging Guild");
|
||||
|
||||
private final String name;
|
||||
|
||||
CombatBraceletMode(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* Copyright (c) 2018, Kyle <https://github.com/kyleeld>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -22,22 +23,24 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.easyscape;
|
||||
package net.runelite.client.plugins.easyscape.util;
|
||||
|
||||
public enum WealthRingMode {
|
||||
MISCELLANIA ("Miscellania"),
|
||||
GRAND_EXCHANGE ("Grand Exchange"),
|
||||
FALADOR ("Falador"),
|
||||
DONDAKAN ("Dondakan");
|
||||
public enum DigsitePendantMode
|
||||
{
|
||||
DIGSITE("Digsite"),
|
||||
FOSSIL_ISLAND("Fossil Island"),
|
||||
LITHKREN("Lithkren");
|
||||
|
||||
private final String name;
|
||||
|
||||
WealthRingMode(String name) {
|
||||
DigsitePendantMode(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* Copyright (c) 2019, Alan Baumgartner <https://github.com/alanbaumgartner>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -22,21 +22,24 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.easyscape;
|
||||
package net.runelite.client.plugins.easyscape.util;
|
||||
|
||||
public enum DuelingRingMode {
|
||||
public enum DuelingRingMode
|
||||
{
|
||||
DUEL_ARENA("Duel Arena"),
|
||||
CASTLE_WARS("Castle Wars"),
|
||||
CLAN_WARS("Clan Wars");
|
||||
|
||||
private final String name;
|
||||
|
||||
DuelingRingMode(String name) {
|
||||
DuelingRingMode(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Alan Baumgartner <https://github.com/alanbaumgartner>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.easyscape.util;
|
||||
|
||||
public enum GamesNecklaceMode
|
||||
{
|
||||
BURTHORPE("Burthorpe"),
|
||||
BARBARIAN_OUTPOST("Barbarian Outpost"),
|
||||
CORPOREAL_BEAST("Corporeal Beast"),
|
||||
TEARS_OF_GUTHIX("Tears of Guthix"),
|
||||
WINTERTODT("Wintertodt Camp");
|
||||
|
||||
private final String name;
|
||||
|
||||
GamesNecklaceMode(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, https://runelitepl.us
|
||||
* Copyright (c) 2019, Alan Baumgartner <https://github.com/alanbaumgartner>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -22,9 +22,10 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.easyscape;
|
||||
package net.runelite.client.plugins.easyscape.util;
|
||||
|
||||
public enum GloryMode {
|
||||
public enum GloryMode
|
||||
{
|
||||
EDGEVILLE("Edgeville"),
|
||||
KARAMJA("Karamja"),
|
||||
DRAYNOR_VILLAGE("Draynor Village"),
|
||||
@@ -32,12 +33,14 @@ public enum GloryMode {
|
||||
|
||||
private final String name;
|
||||
|
||||
GloryMode(String name) {
|
||||
GloryMode(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user