Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -33,7 +33,7 @@ jobs:
|
|||||||
working-directory: /home/runner/work/runelite/cache-client
|
working-directory: /home/runner/work/runelite/cache-client
|
||||||
|
|
||||||
- name: Assembling cache client
|
- name: Assembling cache client
|
||||||
run: ./gradlew :cache-client:assemble --console=plain
|
run: ./gradlew assemble --console=plain
|
||||||
working-directory: /home/runner/work/runelite/cache-client
|
working-directory: /home/runner/work/runelite/cache-client
|
||||||
|
|
||||||
- name: Assembling scraper
|
- name: Assembling scraper
|
||||||
@@ -41,7 +41,7 @@ jobs:
|
|||||||
working-directory: /home/runner/work/runelite/runelite
|
working-directory: /home/runner/work/runelite/runelite
|
||||||
|
|
||||||
- name: Building cache client
|
- name: Building cache client
|
||||||
run: ./gradlew :cache-client:build --console=plain
|
run: ./gradlew build --console=plain
|
||||||
working-directory: /home/runner/work/runelite/cache-client
|
working-directory: /home/runner/work/runelite/cache-client
|
||||||
|
|
||||||
- name: Building scraper
|
- name: Building scraper
|
||||||
@@ -49,7 +49,7 @@ jobs:
|
|||||||
working-directory: /home/runner/work/runelite/runelite
|
working-directory: /home/runner/work/runelite/runelite
|
||||||
|
|
||||||
- name: Downloading jagex cache
|
- name: Downloading jagex cache
|
||||||
run: ./gradlew :cache-client:download --console=plain
|
run: ./gradlew download --console=plain
|
||||||
working-directory: /home/runner/work/runelite/cache-client
|
working-directory: /home/runner/work/runelite/cache-client
|
||||||
|
|
||||||
- name: Scraping NPC stats
|
- name: Scraping NPC stats
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ object ProjectVersions {
|
|||||||
const val launcherVersion = "2.0.4"
|
const val launcherVersion = "2.0.4"
|
||||||
const val rlVersion = "1.6.6-SNAPSHOT"
|
const val rlVersion = "1.6.6-SNAPSHOT"
|
||||||
|
|
||||||
const val openosrsVersion = "2.1.25-SNAPSHOT"
|
const val openosrsVersion = "2.1.26-SNAPSHOT"
|
||||||
|
|
||||||
const val rsversion = 188
|
const val rsversion = 188
|
||||||
const val cacheversion = 165
|
const val cacheversion = 165
|
||||||
|
|||||||
@@ -31,17 +31,17 @@ public class SequenceDefinition
|
|||||||
{
|
{
|
||||||
private final int id;
|
private final int id;
|
||||||
public int[] frameIDs; // top 16 bits are FrameDefinition ids
|
public int[] frameIDs; // top 16 bits are FrameDefinition ids
|
||||||
public int[] field3048;
|
public int[] chatFrameIds;
|
||||||
public int[] frameLenghts;
|
public int[] frameLenghts;
|
||||||
public int rightHandItem = -1;
|
public int[] frameSounds;
|
||||||
|
public int frameStep = -1;
|
||||||
public int[] interleaveLeave;
|
public int[] interleaveLeave;
|
||||||
public boolean stretches = false;
|
public boolean stretches = false;
|
||||||
public int forcedPriority = 5;
|
public int forcedPriority = 5;
|
||||||
public int maxLoops = 99;
|
|
||||||
public int[] field3056;
|
|
||||||
public int precedenceAnimating = -1;
|
|
||||||
public int leftHandItem = -1;
|
public int leftHandItem = -1;
|
||||||
public int replyMode = 2;
|
public int rightHandItem = -1;
|
||||||
public int frameStep = -1;
|
public int maxLoops = 99;
|
||||||
|
public int precedenceAnimating = -1;
|
||||||
public int priority = -1;
|
public int priority = -1;
|
||||||
|
public int replyMode = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-9
@@ -26,13 +26,9 @@ package net.runelite.cache.definitions.loaders;
|
|||||||
|
|
||||||
import net.runelite.cache.definitions.SequenceDefinition;
|
import net.runelite.cache.definitions.SequenceDefinition;
|
||||||
import net.runelite.cache.io.InputStream;
|
import net.runelite.cache.io.InputStream;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class SequenceLoader
|
public class SequenceLoader
|
||||||
{
|
{
|
||||||
private static final Logger logger = LoggerFactory.getLogger(SequenceLoader.class);
|
|
||||||
|
|
||||||
public SequenceDefinition load(int id, byte[] b)
|
public SequenceDefinition load(int id, byte[] b)
|
||||||
{
|
{
|
||||||
SequenceDefinition def = new SequenceDefinition(id);
|
SequenceDefinition def = new SequenceDefinition(id);
|
||||||
@@ -129,26 +125,26 @@ public class SequenceLoader
|
|||||||
else if (opcode == 12)
|
else if (opcode == 12)
|
||||||
{
|
{
|
||||||
var3 = stream.readUnsignedByte();
|
var3 = stream.readUnsignedByte();
|
||||||
def.field3048 = new int[var3];
|
def.chatFrameIds = new int[var3];
|
||||||
|
|
||||||
for (var4 = 0; var4 < var3; ++var4)
|
for (var4 = 0; var4 < var3; ++var4)
|
||||||
{
|
{
|
||||||
def.field3048[var4] = stream.readUnsignedShort();
|
def.chatFrameIds[var4] = stream.readUnsignedShort();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var4 = 0; var4 < var3; ++var4)
|
for (var4 = 0; var4 < var3; ++var4)
|
||||||
{
|
{
|
||||||
def.field3048[var4] += stream.readUnsignedShort() << 16;
|
def.chatFrameIds[var4] += stream.readUnsignedShort() << 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (opcode == 13)
|
else if (opcode == 13)
|
||||||
{
|
{
|
||||||
var3 = stream.readUnsignedByte();
|
var3 = stream.readUnsignedByte();
|
||||||
def.field3056 = new int[var3];
|
def.frameSounds = new int[var3];
|
||||||
|
|
||||||
for (var4 = 0; var4 < var3; ++var4)
|
for (var4 = 0; var4 < var3; ++var4)
|
||||||
{
|
{
|
||||||
def.field3056[var4] = stream.read24BitInt();
|
def.frameSounds[var4] = stream.read24BitInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import java.io.InputStream;
|
|||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import net.runelite.http.api.RuneLiteAPI;
|
import net.runelite.http.api.RuneLiteAPI;
|
||||||
|
import okhttp3.CacheControl;
|
||||||
import okhttp3.HttpUrl;
|
import okhttp3.HttpUrl;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
@@ -60,6 +61,7 @@ public class WorldClient
|
|||||||
|
|
||||||
Request request = new Request.Builder()
|
Request request = new Request.Builder()
|
||||||
.url(url)
|
.url(url)
|
||||||
|
.cacheControl(CacheControl.FORCE_NETWORK)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
try (Response response = client.newCall(request).execute())
|
try (Response response = client.newCall(request).execute())
|
||||||
|
|||||||
@@ -11358,7 +11358,7 @@ public final class ItemID
|
|||||||
public static final int TWISTED_BANNER = 24413;
|
public static final int TWISTED_BANNER = 24413;
|
||||||
public static final int RUNE_POUCH_L = 24416;
|
public static final int RUNE_POUCH_L = 24416;
|
||||||
public static final int INQUISITORS_MACE = 24417;
|
public static final int INQUISITORS_MACE = 24417;
|
||||||
public static final int SIRENS_TOME = 24418;
|
public static final int CABBAGE_24418 = 24418;
|
||||||
public static final int INQUISITORS_GREAT_HELM = 24419;
|
public static final int INQUISITORS_GREAT_HELM = 24419;
|
||||||
public static final int INQUISITORS_HAUBERK = 24420;
|
public static final int INQUISITORS_HAUBERK = 24420;
|
||||||
public static final int INQUISITORS_PLATESKIRT = 24421;
|
public static final int INQUISITORS_PLATESKIRT = 24421;
|
||||||
@@ -11398,5 +11398,13 @@ public final class ItemID
|
|||||||
public static final int PHOENIX_24484 = 24484;
|
public static final int PHOENIX_24484 = 24484;
|
||||||
public static final int PHOENIX_24485 = 24485;
|
public static final int PHOENIX_24485 = 24485;
|
||||||
public static final int PHOENIX_24486 = 24486;
|
public static final int PHOENIX_24486 = 24486;
|
||||||
|
public static final int INQUISITORS_ARMOUR_SET = 24488;
|
||||||
|
public static final int LITTLE_NIGHTMARE = 24491;
|
||||||
|
public static final int CLUE_SCROLL_HARD_24493 = 24493;
|
||||||
|
public static final int PUZZLE_BOX_HARD_24494 = 24494;
|
||||||
|
public static final int JAR_OF_DREAMS = 24495;
|
||||||
|
public static final int HARMONISED_ORB = 24511;
|
||||||
|
public static final int VOLATILE_ORB = 24514;
|
||||||
|
public static final int ELDRITCH_ORB = 24517;
|
||||||
/* This file is automatically generated. Do not edit. */
|
/* This file is automatically generated. Do not edit. */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6144,6 +6144,7 @@ public final class NpcID
|
|||||||
public static final int BABY_CHINCHOMPA_6757 = 6757;
|
public static final int BABY_CHINCHOMPA_6757 = 6757;
|
||||||
public static final int BABY_CHINCHOMPA_6758 = 6758;
|
public static final int BABY_CHINCHOMPA_6758 = 6758;
|
||||||
public static final int BABY_CHINCHOMPA_6759 = 6759;
|
public static final int BABY_CHINCHOMPA_6759 = 6759;
|
||||||
|
public static final int PYRELORD = 6762;
|
||||||
public static final int LIZARDMAN_SHAMAN = 6766;
|
public static final int LIZARDMAN_SHAMAN = 6766;
|
||||||
public static final int LIZARDMAN_SHAMAN_6767 = 6767;
|
public static final int LIZARDMAN_SHAMAN_6767 = 6767;
|
||||||
public static final int SPAWN_6768 = 6768;
|
public static final int SPAWN_6768 = 6768;
|
||||||
@@ -6163,6 +6164,7 @@ public final class NpcID
|
|||||||
public static final int HOSA = 6785;
|
public static final int HOSA = 6785;
|
||||||
public static final int HELLRAT_BEHEMOTH = 6793;
|
public static final int HELLRAT_BEHEMOTH = 6793;
|
||||||
public static final int MONKEY_ARCHER_6794 = 6794;
|
public static final int MONKEY_ARCHER_6794 = 6794;
|
||||||
|
public static final int PYRELORD_6795 = 6795;
|
||||||
public static final int NIEVE = 6797;
|
public static final int NIEVE = 6797;
|
||||||
public static final int STEVE = 6798;
|
public static final int STEVE = 6798;
|
||||||
public static final int STEVE_6799 = 6799;
|
public static final int STEVE_6799 = 6799;
|
||||||
@@ -8411,5 +8413,61 @@ public final class NpcID
|
|||||||
public static final int TRADER_CREWMEMBER_9381 = 9381;
|
public static final int TRADER_CREWMEMBER_9381 = 9381;
|
||||||
public static final int TRADER_CREWMEMBER_9382 = 9382;
|
public static final int TRADER_CREWMEMBER_9382 = 9382;
|
||||||
public static final int TRADER_CREWMEMBER_9383 = 9383;
|
public static final int TRADER_CREWMEMBER_9383 = 9383;
|
||||||
|
public static final int LITTLE_NIGHTMARE = 9398;
|
||||||
|
public static final int LITTLE_NIGHTMARE_9399 = 9399;
|
||||||
|
public static final int OATH_LORD_DROWS = 9400;
|
||||||
|
public static final int OATHBREAKER_MALS = 9401;
|
||||||
|
public static final int OATHBREAKER_EPIWS = 9402;
|
||||||
|
public static final int OATHBREAKER_BATS = 9403;
|
||||||
|
public static final int LITHIL = 9404;
|
||||||
|
public static final int SISTER_ASERET = 9405;
|
||||||
|
public static final int SISTER_NAOJ = 9406;
|
||||||
|
public static final int SISTER_SALOHCIN = 9407;
|
||||||
|
public static final int LUMIERE = 9408;
|
||||||
|
public static final int DAER_KRAND = 9409;
|
||||||
|
public static final int STRONG_RONNY = 9410;
|
||||||
|
public static final int SHURA = 9413;
|
||||||
|
public static final int SHURA_9414 = 9414;
|
||||||
|
public static final int THE_NIGHTMARE = 9415;
|
||||||
|
public static final int THE_NIGHTMARE_9416 = 9416;
|
||||||
|
public static final int THE_NIGHTMARE_9417 = 9417;
|
||||||
|
public static final int THE_NIGHTMARE_9418 = 9418;
|
||||||
|
public static final int THE_NIGHTMARE_9419 = 9419;
|
||||||
|
public static final int THE_NIGHTMARE_9420 = 9420;
|
||||||
|
public static final int THE_NIGHTMARE_9421 = 9421;
|
||||||
|
public static final int THE_NIGHTMARE_9422 = 9422;
|
||||||
|
public static final int THE_NIGHTMARE_9423 = 9423;
|
||||||
|
public static final int THE_NIGHTMARE_9424 = 9424;
|
||||||
|
public static final int THE_NIGHTMARE_9425 = 9425;
|
||||||
|
public static final int THE_NIGHTMARE_9426 = 9426;
|
||||||
|
public static final int THE_NIGHTMARE_9427 = 9427;
|
||||||
|
public static final int THE_NIGHTMARE_9428 = 9428;
|
||||||
|
public static final int THE_NIGHTMARE_9429 = 9429;
|
||||||
|
public static final int THE_NIGHTMARE_9430 = 9430;
|
||||||
|
public static final int THE_NIGHTMARE_9431 = 9431;
|
||||||
|
public static final int THE_NIGHTMARE_9432 = 9432;
|
||||||
|
public static final int THE_NIGHTMARE_9433 = 9433;
|
||||||
|
public static final int TOTEM = 9434;
|
||||||
|
public static final int TOTEM_9435 = 9435;
|
||||||
|
public static final int TOTEM_9436 = 9436;
|
||||||
|
public static final int TOTEM_9437 = 9437;
|
||||||
|
public static final int TOTEM_9438 = 9438;
|
||||||
|
public static final int TOTEM_9439 = 9439;
|
||||||
|
public static final int TOTEM_9440 = 9440;
|
||||||
|
public static final int TOTEM_9441 = 9441;
|
||||||
|
public static final int TOTEM_9442 = 9442;
|
||||||
|
public static final int TOTEM_9443 = 9443;
|
||||||
|
public static final int TOTEM_9444 = 9444;
|
||||||
|
public static final int TOTEM_9445 = 9445;
|
||||||
|
public static final int SLEEPWALKER_9446 = 9446;
|
||||||
|
public static final int SLEEPWALKER_9447 = 9447;
|
||||||
|
public static final int SLEEPWALKER_9448 = 9448;
|
||||||
|
public static final int SLEEPWALKER_9449 = 9449;
|
||||||
|
public static final int SLEEPWALKER_9450 = 9450;
|
||||||
|
public static final int SLEEPWALKER_9451 = 9451;
|
||||||
|
public static final int PARASITE = 9452;
|
||||||
|
public static final int PARASITE_9453 = 9453;
|
||||||
|
public static final int HUSK = 9454;
|
||||||
|
public static final int HUSK_9455 = 9455;
|
||||||
/* This file is automatically generated. Do not edit. */
|
/* This file is automatically generated. Do not edit. */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12881,5 +12881,29 @@ public final class NullItemID
|
|||||||
public static final int NULL_24476 = 24476;
|
public static final int NULL_24476 = 24476;
|
||||||
public static final int NULL_24477 = 24477;
|
public static final int NULL_24477 = 24477;
|
||||||
public static final int NULL_24487 = 24487;
|
public static final int NULL_24487 = 24487;
|
||||||
|
public static final int NULL_24489 = 24489;
|
||||||
|
public static final int NULL_24490 = 24490;
|
||||||
|
public static final int NULL_24492 = 24492;
|
||||||
|
public static final int NULL_24496 = 24496;
|
||||||
|
public static final int NULL_24497 = 24497;
|
||||||
|
public static final int NULL_24498 = 24498;
|
||||||
|
public static final int NULL_24499 = 24499;
|
||||||
|
public static final int NULL_24500 = 24500;
|
||||||
|
public static final int NULL_24501 = 24501;
|
||||||
|
public static final int NULL_24502 = 24502;
|
||||||
|
public static final int NULL_24503 = 24503;
|
||||||
|
public static final int NULL_24504 = 24504;
|
||||||
|
public static final int NULL_24505 = 24505;
|
||||||
|
public static final int NULL_24506 = 24506;
|
||||||
|
public static final int NULL_24507 = 24507;
|
||||||
|
public static final int NULL_24508 = 24508;
|
||||||
|
public static final int NULL_24509 = 24509;
|
||||||
|
public static final int NULL_24510 = 24510;
|
||||||
|
public static final int NULL_24512 = 24512;
|
||||||
|
public static final int NULL_24513 = 24513;
|
||||||
|
public static final int NULL_24515 = 24515;
|
||||||
|
public static final int NULL_24516 = 24516;
|
||||||
|
public static final int NULL_24518 = 24518;
|
||||||
|
public static final int NULL_24519 = 24519;
|
||||||
/* This file is automatically generated. Do not edit. */
|
/* This file is automatically generated. Do not edit. */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15347,7 +15347,6 @@ public final class NullObjectID
|
|||||||
public static final int NULL_32668 = 32668;
|
public static final int NULL_32668 = 32668;
|
||||||
public static final int NULL_32669 = 32669;
|
public static final int NULL_32669 = 32669;
|
||||||
public static final int NULL_32670 = 32670;
|
public static final int NULL_32670 = 32670;
|
||||||
public static final int NULL_32671 = 32671;
|
|
||||||
public static final int NULL_32672 = 32672;
|
public static final int NULL_32672 = 32672;
|
||||||
public static final int NULL_32673 = 32673;
|
public static final int NULL_32673 = 32673;
|
||||||
public static final int NULL_32674 = 32674;
|
public static final int NULL_32674 = 32674;
|
||||||
@@ -18073,5 +18072,276 @@ public final class NullObjectID
|
|||||||
public static final int NULL_37481 = 37481;
|
public static final int NULL_37481 = 37481;
|
||||||
public static final int NULL_37490 = 37490;
|
public static final int NULL_37490 = 37490;
|
||||||
public static final int NULL_37491 = 37491;
|
public static final int NULL_37491 = 37491;
|
||||||
|
public static final int NULL_37623 = 37623;
|
||||||
|
public static final int NULL_37624 = 37624;
|
||||||
|
public static final int NULL_37625 = 37625;
|
||||||
|
public static final int NULL_37626 = 37626;
|
||||||
|
public static final int NULL_37627 = 37627;
|
||||||
|
public static final int NULL_37628 = 37628;
|
||||||
|
public static final int NULL_37632 = 37632;
|
||||||
|
public static final int NULL_37633 = 37633;
|
||||||
|
public static final int NULL_37634 = 37634;
|
||||||
|
public static final int NULL_37635 = 37635;
|
||||||
|
public static final int NULL_37636 = 37636;
|
||||||
|
public static final int NULL_37637 = 37637;
|
||||||
|
public static final int NULL_37638 = 37638;
|
||||||
|
public static final int NULL_37639 = 37639;
|
||||||
|
public static final int NULL_37640 = 37640;
|
||||||
|
public static final int NULL_37641 = 37641;
|
||||||
|
public static final int NULL_37642 = 37642;
|
||||||
|
public static final int NULL_37643 = 37643;
|
||||||
|
public static final int NULL_37644 = 37644;
|
||||||
|
public static final int NULL_37645 = 37645;
|
||||||
|
public static final int NULL_37646 = 37646;
|
||||||
|
public static final int NULL_37647 = 37647;
|
||||||
|
public static final int NULL_37648 = 37648;
|
||||||
|
public static final int NULL_37649 = 37649;
|
||||||
|
public static final int NULL_37650 = 37650;
|
||||||
|
public static final int NULL_37651 = 37651;
|
||||||
|
public static final int NULL_37652 = 37652;
|
||||||
|
public static final int NULL_37653 = 37653;
|
||||||
|
public static final int NULL_37654 = 37654;
|
||||||
|
public static final int NULL_37655 = 37655;
|
||||||
|
public static final int NULL_37656 = 37656;
|
||||||
|
public static final int NULL_37657 = 37657;
|
||||||
|
public static final int NULL_37658 = 37658;
|
||||||
|
public static final int NULL_37659 = 37659;
|
||||||
|
public static final int NULL_37660 = 37660;
|
||||||
|
public static final int NULL_37661 = 37661;
|
||||||
|
public static final int NULL_37662 = 37662;
|
||||||
|
public static final int NULL_37663 = 37663;
|
||||||
|
public static final int NULL_37664 = 37664;
|
||||||
|
public static final int NULL_37665 = 37665;
|
||||||
|
public static final int NULL_37666 = 37666;
|
||||||
|
public static final int NULL_37667 = 37667;
|
||||||
|
public static final int NULL_37668 = 37668;
|
||||||
|
public static final int NULL_37669 = 37669;
|
||||||
|
public static final int NULL_37670 = 37670;
|
||||||
|
public static final int NULL_37671 = 37671;
|
||||||
|
public static final int NULL_37672 = 37672;
|
||||||
|
public static final int NULL_37673 = 37673;
|
||||||
|
public static final int NULL_37674 = 37674;
|
||||||
|
public static final int NULL_37675 = 37675;
|
||||||
|
public static final int NULL_37676 = 37676;
|
||||||
|
public static final int NULL_37677 = 37677;
|
||||||
|
public static final int NULL_37678 = 37678;
|
||||||
|
public static final int NULL_37679 = 37679;
|
||||||
|
public static final int NULL_37680 = 37680;
|
||||||
|
public static final int NULL_37681 = 37681;
|
||||||
|
public static final int NULL_37682 = 37682;
|
||||||
|
public static final int NULL_37683 = 37683;
|
||||||
|
public static final int NULL_37684 = 37684;
|
||||||
|
public static final int NULL_37685 = 37685;
|
||||||
|
public static final int NULL_37686 = 37686;
|
||||||
|
public static final int NULL_37687 = 37687;
|
||||||
|
public static final int NULL_37688 = 37688;
|
||||||
|
public static final int NULL_37689 = 37689;
|
||||||
|
public static final int NULL_37690 = 37690;
|
||||||
|
public static final int NULL_37691 = 37691;
|
||||||
|
public static final int NULL_37692 = 37692;
|
||||||
|
public static final int NULL_37693 = 37693;
|
||||||
|
public static final int NULL_37694 = 37694;
|
||||||
|
public static final int NULL_37695 = 37695;
|
||||||
|
public static final int NULL_37696 = 37696;
|
||||||
|
public static final int NULL_37697 = 37697;
|
||||||
|
public static final int NULL_37698 = 37698;
|
||||||
|
public static final int NULL_37699 = 37699;
|
||||||
|
public static final int NULL_37700 = 37700;
|
||||||
|
public static final int NULL_37701 = 37701;
|
||||||
|
public static final int NULL_37702 = 37702;
|
||||||
|
public static final int NULL_37703 = 37703;
|
||||||
|
public static final int NULL_37704 = 37704;
|
||||||
|
public static final int NULL_37705 = 37705;
|
||||||
|
public static final int NULL_37706 = 37706;
|
||||||
|
public static final int NULL_37707 = 37707;
|
||||||
|
public static final int NULL_37708 = 37708;
|
||||||
|
public static final int NULL_37709 = 37709;
|
||||||
|
public static final int NULL_37710 = 37710;
|
||||||
|
public static final int NULL_37711 = 37711;
|
||||||
|
public static final int NULL_37712 = 37712;
|
||||||
|
public static final int NULL_37713 = 37713;
|
||||||
|
public static final int NULL_37714 = 37714;
|
||||||
|
public static final int NULL_37715 = 37715;
|
||||||
|
public static final int NULL_37716 = 37716;
|
||||||
|
public static final int NULL_37717 = 37717;
|
||||||
|
public static final int NULL_37718 = 37718;
|
||||||
|
public static final int NULL_37719 = 37719;
|
||||||
|
public static final int NULL_37720 = 37720;
|
||||||
|
public static final int NULL_37721 = 37721;
|
||||||
|
public static final int NULL_37722 = 37722;
|
||||||
|
public static final int NULL_37723 = 37723;
|
||||||
|
public static final int NULL_37724 = 37724;
|
||||||
|
public static final int NULL_37732 = 37732;
|
||||||
|
public static final int NULL_37733 = 37733;
|
||||||
|
public static final int NULL_37734 = 37734;
|
||||||
|
public static final int NULL_37735 = 37735;
|
||||||
|
public static final int NULL_37736 = 37736;
|
||||||
|
public static final int NULL_37737 = 37737;
|
||||||
|
public static final int NULL_37746 = 37746;
|
||||||
|
public static final int NULL_37747 = 37747;
|
||||||
|
public static final int NULL_37748 = 37748;
|
||||||
|
public static final int NULL_37749 = 37749;
|
||||||
|
public static final int NULL_37750 = 37750;
|
||||||
|
public static final int NULL_37751 = 37751;
|
||||||
|
public static final int NULL_37752 = 37752;
|
||||||
|
public static final int NULL_37753 = 37753;
|
||||||
|
public static final int NULL_37754 = 37754;
|
||||||
|
public static final int NULL_37755 = 37755;
|
||||||
|
public static final int NULL_37756 = 37756;
|
||||||
|
public static final int NULL_37757 = 37757;
|
||||||
|
public static final int NULL_37758 = 37758;
|
||||||
|
public static final int NULL_37759 = 37759;
|
||||||
|
public static final int NULL_37760 = 37760;
|
||||||
|
public static final int NULL_37761 = 37761;
|
||||||
|
public static final int NULL_37762 = 37762;
|
||||||
|
public static final int NULL_37763 = 37763;
|
||||||
|
public static final int NULL_37764 = 37764;
|
||||||
|
public static final int NULL_37765 = 37765;
|
||||||
|
public static final int NULL_37766 = 37766;
|
||||||
|
public static final int NULL_37767 = 37767;
|
||||||
|
public static final int NULL_37768 = 37768;
|
||||||
|
public static final int NULL_37769 = 37769;
|
||||||
|
public static final int NULL_37770 = 37770;
|
||||||
|
public static final int NULL_37771 = 37771;
|
||||||
|
public static final int NULL_37772 = 37772;
|
||||||
|
public static final int NULL_37773 = 37773;
|
||||||
|
public static final int NULL_37774 = 37774;
|
||||||
|
public static final int NULL_37775 = 37775;
|
||||||
|
public static final int NULL_37776 = 37776;
|
||||||
|
public static final int NULL_37777 = 37777;
|
||||||
|
public static final int NULL_37778 = 37778;
|
||||||
|
public static final int NULL_37779 = 37779;
|
||||||
|
public static final int NULL_37780 = 37780;
|
||||||
|
public static final int NULL_37781 = 37781;
|
||||||
|
public static final int NULL_37782 = 37782;
|
||||||
|
public static final int NULL_37783 = 37783;
|
||||||
|
public static final int NULL_37784 = 37784;
|
||||||
|
public static final int NULL_37785 = 37785;
|
||||||
|
public static final int NULL_37786 = 37786;
|
||||||
|
public static final int NULL_37787 = 37787;
|
||||||
|
public static final int NULL_37788 = 37788;
|
||||||
|
public static final int NULL_37789 = 37789;
|
||||||
|
public static final int NULL_37790 = 37790;
|
||||||
|
public static final int NULL_37791 = 37791;
|
||||||
|
public static final int NULL_37792 = 37792;
|
||||||
|
public static final int NULL_37793 = 37793;
|
||||||
|
public static final int NULL_37794 = 37794;
|
||||||
|
public static final int NULL_37795 = 37795;
|
||||||
|
public static final int NULL_37796 = 37796;
|
||||||
|
public static final int NULL_37797 = 37797;
|
||||||
|
public static final int NULL_37798 = 37798;
|
||||||
|
public static final int NULL_37799 = 37799;
|
||||||
|
public static final int NULL_37800 = 37800;
|
||||||
|
public static final int NULL_37801 = 37801;
|
||||||
|
public static final int NULL_37802 = 37802;
|
||||||
|
public static final int NULL_37803 = 37803;
|
||||||
|
public static final int NULL_37804 = 37804;
|
||||||
|
public static final int NULL_37805 = 37805;
|
||||||
|
public static final int NULL_37806 = 37806;
|
||||||
|
public static final int NULL_37807 = 37807;
|
||||||
|
public static final int NULL_37808 = 37808;
|
||||||
|
public static final int NULL_37809 = 37809;
|
||||||
|
public static final int NULL_37810 = 37810;
|
||||||
|
public static final int NULL_37811 = 37811;
|
||||||
|
public static final int NULL_37812 = 37812;
|
||||||
|
public static final int NULL_37813 = 37813;
|
||||||
|
public static final int NULL_37814 = 37814;
|
||||||
|
public static final int NULL_37815 = 37815;
|
||||||
|
public static final int NULL_37816 = 37816;
|
||||||
|
public static final int NULL_37817 = 37817;
|
||||||
|
public static final int NULL_37820 = 37820;
|
||||||
|
public static final int NULL_37821 = 37821;
|
||||||
|
public static final int NULL_37822 = 37822;
|
||||||
|
public static final int NULL_37837 = 37837;
|
||||||
|
public static final int NULL_37838 = 37838;
|
||||||
|
public static final int NULL_37846 = 37846;
|
||||||
|
public static final int NULL_37847 = 37847;
|
||||||
|
public static final int NULL_37848 = 37848;
|
||||||
|
public static final int NULL_37851 = 37851;
|
||||||
|
public static final int NULL_37854 = 37854;
|
||||||
|
public static final int NULL_37855 = 37855;
|
||||||
|
public static final int NULL_37856 = 37856;
|
||||||
|
public static final int NULL_37857 = 37857;
|
||||||
|
public static final int NULL_37858 = 37858;
|
||||||
|
public static final int NULL_37859 = 37859;
|
||||||
|
public static final int NULL_37860 = 37860;
|
||||||
|
public static final int NULL_37861 = 37861;
|
||||||
|
public static final int NULL_37862 = 37862;
|
||||||
|
public static final int NULL_37863 = 37863;
|
||||||
|
public static final int NULL_37864 = 37864;
|
||||||
|
public static final int NULL_37865 = 37865;
|
||||||
|
public static final int NULL_37867 = 37867;
|
||||||
|
public static final int NULL_37868 = 37868;
|
||||||
|
public static final int NULL_37869 = 37869;
|
||||||
|
public static final int NULL_37870 = 37870;
|
||||||
|
public static final int NULL_37871 = 37871;
|
||||||
|
public static final int NULL_37872 = 37872;
|
||||||
|
public static final int NULL_37873 = 37873;
|
||||||
|
public static final int NULL_37874 = 37874;
|
||||||
|
public static final int NULL_37875 = 37875;
|
||||||
|
public static final int NULL_37876 = 37876;
|
||||||
|
public static final int NULL_37877 = 37877;
|
||||||
|
public static final int NULL_37878 = 37878;
|
||||||
|
public static final int NULL_37879 = 37879;
|
||||||
|
public static final int NULL_37880 = 37880;
|
||||||
|
public static final int NULL_37881 = 37881;
|
||||||
|
public static final int NULL_37883 = 37883;
|
||||||
|
public static final int NULL_37884 = 37884;
|
||||||
|
public static final int NULL_37885 = 37885;
|
||||||
|
public static final int NULL_37886 = 37886;
|
||||||
|
public static final int NULL_37887 = 37887;
|
||||||
|
public static final int NULL_37888 = 37888;
|
||||||
|
public static final int NULL_37889 = 37889;
|
||||||
|
public static final int NULL_37890 = 37890;
|
||||||
|
public static final int NULL_37891 = 37891;
|
||||||
|
public static final int NULL_37892 = 37892;
|
||||||
|
public static final int NULL_37893 = 37893;
|
||||||
|
public static final int NULL_37894 = 37894;
|
||||||
|
public static final int NULL_37895 = 37895;
|
||||||
|
public static final int NULL_37896 = 37896;
|
||||||
|
public static final int NULL_37897 = 37897;
|
||||||
|
public static final int NULL_37898 = 37898;
|
||||||
|
public static final int NULL_37899 = 37899;
|
||||||
|
public static final int NULL_37900 = 37900;
|
||||||
|
public static final int NULL_37901 = 37901;
|
||||||
|
public static final int NULL_37902 = 37902;
|
||||||
|
public static final int NULL_37903 = 37903;
|
||||||
|
public static final int NULL_37904 = 37904;
|
||||||
|
public static final int NULL_37905 = 37905;
|
||||||
|
public static final int NULL_37906 = 37906;
|
||||||
|
public static final int NULL_37907 = 37907;
|
||||||
|
public static final int NULL_37908 = 37908;
|
||||||
|
public static final int NULL_37909 = 37909;
|
||||||
|
public static final int NULL_37910 = 37910;
|
||||||
|
public static final int NULL_37911 = 37911;
|
||||||
|
public static final int NULL_37912 = 37912;
|
||||||
|
public static final int NULL_37913 = 37913;
|
||||||
|
public static final int NULL_37914 = 37914;
|
||||||
|
public static final int NULL_37915 = 37915;
|
||||||
|
public static final int NULL_37916 = 37916;
|
||||||
|
public static final int NULL_37917 = 37917;
|
||||||
|
public static final int NULL_37918 = 37918;
|
||||||
|
public static final int NULL_37919 = 37919;
|
||||||
|
public static final int NULL_37920 = 37920;
|
||||||
|
public static final int NULL_37921 = 37921;
|
||||||
|
public static final int NULL_37922 = 37922;
|
||||||
|
public static final int NULL_37923 = 37923;
|
||||||
|
public static final int NULL_37924 = 37924;
|
||||||
|
public static final int NULL_37925 = 37925;
|
||||||
|
public static final int NULL_37926 = 37926;
|
||||||
|
public static final int NULL_37927 = 37927;
|
||||||
|
public static final int NULL_37928 = 37928;
|
||||||
|
public static final int NULL_37929 = 37929;
|
||||||
|
public static final int NULL_37930 = 37930;
|
||||||
|
public static final int NULL_37931 = 37931;
|
||||||
|
public static final int NULL_37932 = 37932;
|
||||||
|
public static final int NULL_37933 = 37933;
|
||||||
|
public static final int NULL_37934 = 37934;
|
||||||
|
public static final int NULL_37935 = 37935;
|
||||||
|
public static final int NULL_37939 = 37939;
|
||||||
|
public static final int NULL_37940 = 37940;
|
||||||
|
public static final int NULL_37941 = 37941;
|
||||||
|
public static final int NULL_37942 = 37942;
|
||||||
|
public static final int NULL_37943 = 37943;
|
||||||
/* This file is automatically generated. Do not edit. */
|
/* This file is automatically generated. Do not edit. */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16760,7 +16760,7 @@ public final class ObjectID
|
|||||||
public static final int ENERGY_SPHERE_31680 = 31680;
|
public static final int ENERGY_SPHERE_31680 = 31680;
|
||||||
public static final int THE_CLOISTER_BELL = 31684;
|
public static final int THE_CLOISTER_BELL = 31684;
|
||||||
public static final int THE_CLOISTER_BELL_31685 = 31685;
|
public static final int THE_CLOISTER_BELL_31685 = 31685;
|
||||||
public static final int THE_GROTESQUE_GUARDIANS_DISPLAY = 31689;
|
public static final int GROTESQUE_GUARDIANS_DISPLAY = 31689;
|
||||||
public static final int CAVE_31690 = 31690;
|
public static final int CAVE_31690 = 31690;
|
||||||
public static final int SAND_PILE_31691 = 31691;
|
public static final int SAND_PILE_31691 = 31691;
|
||||||
public static final int TUNNEL_ENTRANCE_31692 = 31692;
|
public static final int TUNNEL_ENTRANCE_31692 = 31692;
|
||||||
@@ -16912,7 +16912,7 @@ public final class ObjectID
|
|||||||
public static final int CERBERUS_DISPLAY_31908 = 31908;
|
public static final int CERBERUS_DISPLAY_31908 = 31908;
|
||||||
public static final int ABYSSAL_SIRE_DISPLAY_31909 = 31909;
|
public static final int ABYSSAL_SIRE_DISPLAY_31909 = 31909;
|
||||||
public static final int SKOTIZO_DISPLAY_31910 = 31910;
|
public static final int SKOTIZO_DISPLAY_31910 = 31910;
|
||||||
public static final int THE_GROTESQUE_GUARDIANS_DISPLAY_31911 = 31911;
|
public static final int THE_GROTESQUE_GUARDIANS_DISPLAY = 31911;
|
||||||
public static final int VORKATH_DISPLAY = 31912;
|
public static final int VORKATH_DISPLAY = 31912;
|
||||||
public static final int ACHIEVEMENT_DIARY_DISPLAY = 31913;
|
public static final int ACHIEVEMENT_DIARY_DISPLAY = 31913;
|
||||||
public static final int ACHIEVEMENT_DIARY_DISPLAY_31914 = 31914;
|
public static final int ACHIEVEMENT_DIARY_DISPLAY_31914 = 31914;
|
||||||
@@ -17290,8 +17290,8 @@ public final class ObjectID
|
|||||||
public static final int STONE_TABLET_32634 = 32634;
|
public static final int STONE_TABLET_32634 = 32634;
|
||||||
public static final int CHURCH_ORGAN_32635 = 32635;
|
public static final int CHURCH_ORGAN_32635 = 32635;
|
||||||
public static final int CRATE_32636 = 32636;
|
public static final int CRATE_32636 = 32636;
|
||||||
public static final int LADDER_32637 = 32637;
|
public static final int STAIRS_32637 = 32637;
|
||||||
public static final int LADDER_32638 = 32638;
|
public static final int STAIRS_32638 = 32638;
|
||||||
public static final int LADDER_32639 = 32639;
|
public static final int LADDER_32639 = 32639;
|
||||||
public static final int LADDER_32640 = 32640;
|
public static final int LADDER_32640 = 32640;
|
||||||
public static final int TRAPDOOR_32641 = 32641;
|
public static final int TRAPDOOR_32641 = 32641;
|
||||||
@@ -17312,6 +17312,7 @@ public final class ObjectID
|
|||||||
public static final int BANK_DEPOSIT_BOX_32665 = 32665;
|
public static final int BANK_DEPOSIT_BOX_32665 = 32665;
|
||||||
public static final int BANK_BOOTH_32666 = 32666;
|
public static final int BANK_BOOTH_32666 = 32666;
|
||||||
public static final int CLOSED_BANK_BOOTH_32667 = 32667;
|
public static final int CLOSED_BANK_BOOTH_32667 = 32667;
|
||||||
|
public static final int STATUE_32671 = 32671;
|
||||||
public static final int EASEL_32685 = 32685;
|
public static final int EASEL_32685 = 32685;
|
||||||
public static final int VERZIKS_THRONE = 32686;
|
public static final int VERZIKS_THRONE = 32686;
|
||||||
public static final int SUPPORTING_PILLAR = 32687;
|
public static final int SUPPORTING_PILLAR = 32687;
|
||||||
@@ -19536,5 +19537,56 @@ public final class ObjectID
|
|||||||
public static final int WINDOW_SPACE_37619 = 37619;
|
public static final int WINDOW_SPACE_37619 = 37619;
|
||||||
public static final int SPICE_RACK = 37620;
|
public static final int SPICE_RACK = 37620;
|
||||||
public static final int SPICE_RACK_37621 = 37621;
|
public static final int SPICE_RACK_37621 = 37621;
|
||||||
|
public static final int THRONE_37622 = 37622;
|
||||||
|
public static final int NIGHTMARE_DISPLAY = 37629;
|
||||||
|
public static final int NIGHTMARE_TOPIARY = 37630;
|
||||||
|
public static final int SUPPLIES_37631 = 37631;
|
||||||
|
public static final int POOL_OF_NIGHTMARES = 37725;
|
||||||
|
public static final int POOL_OF_NIGHTMARES_37726 = 37726;
|
||||||
|
public static final int POOL_OF_NIGHTMARES_37727 = 37727;
|
||||||
|
public static final int POOL_OF_NIGHTMARES_37728 = 37728;
|
||||||
|
public static final int POOL_OF_NIGHTMARES_37729 = 37729;
|
||||||
|
public static final int ENERGY_BARRIER_37730 = 37730;
|
||||||
|
public static final int ENERGY_BARRIER_37731 = 37731;
|
||||||
|
public static final int SPORE = 37738;
|
||||||
|
public static final int SPORE_37739 = 37739;
|
||||||
|
public static final int NIGHTMARE_BERRIES = 37740;
|
||||||
|
public static final int NIGHTMARE_BERRIES_37741 = 37741;
|
||||||
|
public static final int NIGHTMARE_BERRIES_37742 = 37742;
|
||||||
|
public static final int NIGHTMARE_BLOSSOM = 37743;
|
||||||
|
public static final int NIGHTMARE_BLOSSOM_37744 = 37744;
|
||||||
|
public static final int NIGHTMARE_BLOSSOM_37745 = 37745;
|
||||||
|
public static final int STATUE_37818 = 37818;
|
||||||
|
public static final int STATUE_37819 = 37819;
|
||||||
|
public static final int STATUE_37823 = 37823;
|
||||||
|
public static final int STATUE_37824 = 37824;
|
||||||
|
public static final int STONE_POOL = 37825;
|
||||||
|
public static final int BRAZIER_37826 = 37826;
|
||||||
|
public static final int CRATE_37827 = 37827;
|
||||||
|
public static final int TABLE_37828 = 37828;
|
||||||
|
public static final int TABLE_37829 = 37829;
|
||||||
|
public static final int TABLE_37830 = 37830;
|
||||||
|
public static final int STAIRS_37831 = 37831;
|
||||||
|
public static final int STAIRS_37832 = 37832;
|
||||||
|
public static final int STAIRS_37833 = 37833;
|
||||||
|
public static final int CANDLES_37834 = 37834;
|
||||||
|
public static final int STAIRS_37835 = 37835;
|
||||||
|
public static final int STAIRS_37836 = 37836;
|
||||||
|
public static final int TABLE_37839 = 37839;
|
||||||
|
public static final int BENCH_37840 = 37840;
|
||||||
|
public static final int BENCH_37841 = 37841;
|
||||||
|
public static final int STATUE_37842 = 37842;
|
||||||
|
public static final int STATUE_37843 = 37843;
|
||||||
|
public static final int CHEST_37844 = 37844;
|
||||||
|
public static final int BIG_CHEST = 37845;
|
||||||
|
public static final int COFFIN_37849 = 37849;
|
||||||
|
public static final int COFFIN_37850 = 37850;
|
||||||
|
public static final int BROKEN_CHAIN = 37852;
|
||||||
|
public static final int CHAINS = 37853;
|
||||||
|
public static final int NIGHTMARE = 37866;
|
||||||
|
public static final int TOTEM = 37882;
|
||||||
|
public static final int CRATE_37936 = 37936;
|
||||||
|
public static final int DOOR_37937 = 37937;
|
||||||
|
public static final int DOOR_37938 = 37938;
|
||||||
/* This file is automatically generated. Do not edit. */
|
/* This file is automatically generated. Do not edit. */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -307,6 +307,17 @@ public enum Varbits
|
|||||||
PERSONAL_POINTS(5422),
|
PERSONAL_POINTS(5422),
|
||||||
RAID_PARTY_SIZE(5424),
|
RAID_PARTY_SIZE(5424),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Making Friends with My Arm fire pits
|
||||||
|
*
|
||||||
|
* Expected values:
|
||||||
|
* 0 = Not built
|
||||||
|
* 1 = Built
|
||||||
|
*/
|
||||||
|
FIRE_PIT_GIANT_MOLE(6532),
|
||||||
|
FIRE_PIT_LUMBRIDGE_SWAMP(6533),
|
||||||
|
FIRE_PIT_MOS_LE_HARMLESS(6544),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Theatre of Blood 1=In Party, 2=Inside/Spectator, 3=Dead Spectating
|
* Theatre of Blood 1=In Party, 2=Inside/Spectator, 3=Dead Spectating
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class BankItemQuery extends WidgetItemQuery
|
|||||||
Rectangle bounds = child.getBounds();
|
Rectangle bounds = child.getBounds();
|
||||||
bounds.setBounds(bounds.x - 1, bounds.y - 1, 32, 32);
|
bounds.setBounds(bounds.x - 1, bounds.y - 1, 32, 32);
|
||||||
// Index is set to 0 because the widget's index does not correlate to the order in the bank
|
// Index is set to 0 because the widget's index does not correlate to the order in the bank
|
||||||
widgetItems.add(new WidgetItem(child.getItemId(), child.getItemQuantity(), 0, bounds, child, false));
|
widgetItems.add(new WidgetItem(child.getItemId(), child.getItemQuantity(), 0, bounds, child, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return widgetItems;
|
return widgetItems;
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class DialogQuery extends WidgetItemQuery
|
|||||||
// set bounds to same size as default inventory
|
// set bounds to same size as default inventory
|
||||||
Rectangle bounds = child.getBounds();
|
Rectangle bounds = child.getBounds();
|
||||||
bounds.setBounds(bounds.x - 1, bounds.y - 1, 32, 32);
|
bounds.setBounds(bounds.x - 1, bounds.y - 1, 32, 32);
|
||||||
widgetItems.add(new WidgetItem(child.getId(), child.getItemQuantity(), i - 1, bounds, child, false));
|
widgetItems.add(new WidgetItem(child.getId(), child.getItemQuantity(), i - 1, bounds, child, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return widgetItems;
|
return widgetItems;
|
||||||
|
|||||||
@@ -92,8 +92,10 @@ public class InventoryWidgetItemQuery extends WidgetItemQuery
|
|||||||
}
|
}
|
||||||
// set bounds to same size as default inventory
|
// set bounds to same size as default inventory
|
||||||
Rectangle bounds = child.getBounds();
|
Rectangle bounds = child.getBounds();
|
||||||
bounds.setBounds(bounds.x + dragOffsetX, bounds.y + dragOffsetY, 32, 32);
|
bounds.setBounds(bounds.x - 1, bounds.y - 1, 32, 32);
|
||||||
widgetItems.add(new WidgetItem(child.getItemId(), child.getItemQuantity(), i, bounds, child, isDragged));
|
Rectangle dragBounds = child.getBounds();
|
||||||
|
dragBounds.setBounds(bounds.x + dragOffsetX, bounds.y + dragOffsetY, 32, 32);
|
||||||
|
widgetItems.add(new WidgetItem(child.getItemId(), child.getItemQuantity(), i, bounds, child, dragBounds));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class ShopItemQuery extends WidgetItemQuery
|
|||||||
// set bounds to same size as default inventory
|
// set bounds to same size as default inventory
|
||||||
Rectangle bounds = child.getBounds();
|
Rectangle bounds = child.getBounds();
|
||||||
bounds.setBounds(bounds.x - 1, bounds.y - 1, 32, 32);
|
bounds.setBounds(bounds.x - 1, bounds.y - 1, 32, 32);
|
||||||
widgetItems.add(new WidgetItem(child.getItemId(), child.getItemQuantity(), i - 1, bounds, child, false)); // todo: maybe this shouldnt just be "false"
|
widgetItems.add(new WidgetItem(child.getItemId(), child.getItemQuantity(), i - 1, bounds, child, null)); // todo: maybe this shouldnt just be "false"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return widgetItems;
|
return widgetItems;
|
||||||
|
|||||||
@@ -1180,8 +1180,9 @@ public class WidgetID
|
|||||||
|
|
||||||
static class Lms
|
static class Lms
|
||||||
{
|
{
|
||||||
static final int INFO = 2;
|
static final int INFO = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
static class LmsKDA
|
static class LmsKDA
|
||||||
{
|
{
|
||||||
static final int INFO = 4;
|
static final int INFO = 4;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ package net.runelite.api.widgets;
|
|||||||
|
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
@@ -64,19 +65,40 @@ public class WidgetItem
|
|||||||
*/
|
*/
|
||||||
private final Widget widget;
|
private final Widget widget;
|
||||||
/**
|
/**
|
||||||
* Whether or not this widget item is being dragged.
|
* The canvas bounds for the widget, if it is being dragged.
|
||||||
*/
|
*/
|
||||||
private final boolean dragging;
|
@Nullable
|
||||||
|
private final Rectangle draggingCanvasBounds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the area where the widget item is drawn on the canvas, accounting for drag
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Rectangle getCanvasBounds()
|
||||||
|
{
|
||||||
|
return draggingCanvasBounds == null ? canvasBounds : draggingCanvasBounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the area where the widget item is drawn on the canvas
|
||||||
|
* @param dragging whether the returned area should account for widget drag
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Rectangle getCanvasBounds(boolean dragging)
|
||||||
|
{
|
||||||
|
return dragging ? draggingCanvasBounds : canvasBounds;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the upper-left coordinate of where the widget is being drawn
|
* Gets the upper-left coordinate of where the widget is being drawn
|
||||||
* on the canvas.
|
* on the canvas, accounting for drag.
|
||||||
*
|
*
|
||||||
* @return the upper-left coordinate of where this widget is drawn
|
* @return the upper-left coordinate of where this widget is drawn
|
||||||
*/
|
*/
|
||||||
public Point getCanvasLocation()
|
public Point getCanvasLocation()
|
||||||
{
|
{
|
||||||
return new Point((int) canvasBounds.getX(), (int) canvasBounds.getY());
|
Rectangle bounds = getCanvasBounds();
|
||||||
|
return new Point((int) bounds.getX(), (int) bounds.getY());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ public class RuneLiteProperties
|
|||||||
private static final String TROUBLESHOOTING_LINK = "runelite.wiki.troubleshooting.link";
|
private static final String TROUBLESHOOTING_LINK = "runelite.wiki.troubleshooting.link";
|
||||||
private static final String BUILDING_LINK = "runelite.wiki.building.link";
|
private static final String BUILDING_LINK = "runelite.wiki.building.link";
|
||||||
private static final String DNS_CHANGE_LINK = "runelite.dnschange.link";
|
private static final String DNS_CHANGE_LINK = "runelite.dnschange.link";
|
||||||
|
private static final String IMGUR_CLIENT_ID = "runelite.imgur.client.id";
|
||||||
|
|
||||||
private static final Properties properties = new Properties();
|
private static final Properties properties = new Properties();
|
||||||
|
|
||||||
@@ -137,4 +138,9 @@ public class RuneLiteProperties
|
|||||||
String launcherVersion = properties.getProperty(LAUNCHER_VERSION_PROPERTY);
|
String launcherVersion = properties.getProperty(LAUNCHER_VERSION_PROPERTY);
|
||||||
return launcherVersion.equals("-1") ? null : launcherVersion;
|
return launcherVersion.equals("-1") ? null : launcherVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getImgurClientId()
|
||||||
|
{
|
||||||
|
return properties.getProperty(IMGUR_CLIENT_ID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -33,4 +33,5 @@ public class ConfigItemDescriptor
|
|||||||
private final Class<?> type;
|
private final Class<?> type;
|
||||||
private final Range range;
|
private final Range range;
|
||||||
private final Alpha alpha;
|
private final Alpha alpha;
|
||||||
|
private final Units units;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -350,7 +350,8 @@ public class ConfigManager
|
|||||||
m.getDeclaredAnnotation(ConfigItem.class),
|
m.getDeclaredAnnotation(ConfigItem.class),
|
||||||
m.getReturnType(),
|
m.getReturnType(),
|
||||||
m.getDeclaredAnnotation(Range.class),
|
m.getDeclaredAnnotation(Range.class),
|
||||||
m.getDeclaredAnnotation(Alpha.class)
|
m.getDeclaredAnnotation(Alpha.class),
|
||||||
|
m.getDeclaredAnnotation(Units.class)
|
||||||
))
|
))
|
||||||
.sorted((a, b) -> ComparisonChain.start()
|
.sorted((a, b) -> ComparisonChain.start()
|
||||||
.compare(a.getItem().position(), b.getItem().position())
|
.compare(a.getItem().position(), b.getItem().position())
|
||||||
|
|||||||
@@ -325,6 +325,7 @@ public interface OpenOSRSConfig extends Config
|
|||||||
position = 19,
|
position = 19,
|
||||||
titleSection = "opacityTitle"
|
titleSection = "opacityTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.PERCENT)
|
||||||
default int opacityPercentage()
|
default int opacityPercentage()
|
||||||
{
|
{
|
||||||
return 100;
|
return 100;
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ public interface RuneLiteConfig extends Config
|
|||||||
position = 2,
|
position = 2,
|
||||||
titleSection = "uiTitle"
|
titleSection = "uiTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.PIXELS)
|
||||||
default Dimension gameSize()
|
default Dimension gameSize()
|
||||||
{
|
{
|
||||||
return Constants.GAME_FIXED_SIZE;
|
return Constants.GAME_FIXED_SIZE;
|
||||||
@@ -174,6 +175,7 @@ public interface RuneLiteConfig extends Config
|
|||||||
position = 12,
|
position = 12,
|
||||||
titleSection = "miscTitle"
|
titleSection = "miscTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.PERCENT)
|
||||||
default int volume()
|
default int volume()
|
||||||
{
|
{
|
||||||
return 100;
|
return 100;
|
||||||
@@ -332,6 +334,17 @@ public interface RuneLiteConfig extends Config
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "tooltipPosition",
|
||||||
|
name = "Tooltip Position",
|
||||||
|
description = "Configures whether to show the tooltip above or under the cursor",
|
||||||
|
position = 35
|
||||||
|
)
|
||||||
|
default TooltipPositionType tooltipPosition()
|
||||||
|
{
|
||||||
|
return TooltipPositionType.UNDER_CURSOR;
|
||||||
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "infoBoxVertical",
|
keyName = "infoBoxVertical",
|
||||||
name = "Display infoboxes vertically",
|
name = "Display infoboxes vertically",
|
||||||
@@ -358,11 +371,12 @@ public interface RuneLiteConfig extends Config
|
|||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "infoBoxSize",
|
keyName = "infoBoxSize",
|
||||||
name = "Infobox size (px)",
|
name = "Infobox size",
|
||||||
description = "Configures the size of each infobox in pixels",
|
description = "Configures the size of each infobox in pixels",
|
||||||
position = 28,
|
position = 28,
|
||||||
titleSection = "infoboxTitle"
|
titleSection = "infoboxTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.PIXELS)
|
||||||
default int infoBoxSize()
|
default int infoBoxSize()
|
||||||
{
|
{
|
||||||
return 35;
|
return 35;
|
||||||
|
|||||||
+9
-9
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2019, Alexsuperfly <https://github.com/Alexsuperfly>
|
* Copyright (c) 2020, Crypthead <https://github.com/Crypthead>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,23 +22,23 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
package net.runelite.client.config;
|
||||||
package net.runelite.client.plugins.screenshot;
|
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public enum UploadStyle
|
public enum TooltipPositionType
|
||||||
{
|
{
|
||||||
NEITHER("Neither"),
|
ABOVE_CURSOR("Above cursor"),
|
||||||
IMGUR("Imgur"),
|
UNDER_CURSOR("Under cursor");
|
||||||
CLIPBOARD("Clipboard");
|
|
||||||
|
|
||||||
private final String name;
|
private final String type;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return name;
|
return type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020, Hydrox6 <ikada@protonmail.ch>
|
||||||
|
* 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.lang.annotation.Documented;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used with ConfigItem, defines what units are shown to the side of the box.
|
||||||
|
*/
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.METHOD)
|
||||||
|
@Documented
|
||||||
|
public @interface Units
|
||||||
|
{
|
||||||
|
String MILLISECONDS = "ms";
|
||||||
|
String MINUTES = " mins";
|
||||||
|
String PERCENT = "%";
|
||||||
|
String PIXELS = "px";
|
||||||
|
String POINTS = "pt";
|
||||||
|
String SECONDS = "s";
|
||||||
|
String TICKS = " ticks";
|
||||||
|
String LEVELS = " lvls";
|
||||||
|
String FPS = " fps";
|
||||||
|
String GP = " GP";
|
||||||
|
|
||||||
|
String value();
|
||||||
|
}
|
||||||
@@ -214,7 +214,7 @@ public enum ItemMapping
|
|||||||
BLACK_MASK, BLACK_MASK_I, BLACK_MASK_1, BLACK_MASK_1_I, BLACK_MASK_2, BLACK_MASK_2_I, BLACK_MASK_3, BLACK_MASK_3_I, BLACK_MASK_4, BLACK_MASK_4_I, BLACK_MASK_5,
|
BLACK_MASK, BLACK_MASK_I, BLACK_MASK_1, BLACK_MASK_1_I, BLACK_MASK_2, BLACK_MASK_2_I, BLACK_MASK_3, BLACK_MASK_3_I, BLACK_MASK_4, BLACK_MASK_4_I, BLACK_MASK_5,
|
||||||
BLACK_MASK_5_I, BLACK_MASK_6, BLACK_MASK_6_I, BLACK_MASK_7, BLACK_MASK_7_I, BLACK_MASK_8, BLACK_MASK_8_I, BLACK_MASK_9, BLACK_MASK_9_I, BLACK_MASK_10_I,
|
BLACK_MASK_5_I, BLACK_MASK_6, BLACK_MASK_6_I, BLACK_MASK_7, BLACK_MASK_7_I, BLACK_MASK_8, BLACK_MASK_8_I, BLACK_MASK_9, BLACK_MASK_9_I, BLACK_MASK_10_I,
|
||||||
SLAYER_HELMET, SLAYER_HELMET_I, BLACK_SLAYER_HELMET, BLACK_SLAYER_HELMET_I, PURPLE_SLAYER_HELMET, PURPLE_SLAYER_HELMET_I, RED_SLAYER_HELMET, RED_SLAYER_HELMET_I,
|
SLAYER_HELMET, SLAYER_HELMET_I, BLACK_SLAYER_HELMET, BLACK_SLAYER_HELMET_I, PURPLE_SLAYER_HELMET, PURPLE_SLAYER_HELMET_I, RED_SLAYER_HELMET, RED_SLAYER_HELMET_I,
|
||||||
GREEN_SLAYER_HELMET, GREEN_SLAYER_HELMET_I, TURQUOISE_SLAYER_HELMET, TURQUOISE_SLAYER_HELMET_I, HYDRA_SLAYER_HELMET, HYDRA_SLAYER_HELMET_I),
|
GREEN_SLAYER_HELMET, GREEN_SLAYER_HELMET_I, TURQUOISE_SLAYER_HELMET, TURQUOISE_SLAYER_HELMET_I, TWISTED_SLAYER_HELMET, TWISTED_SLAYER_HELMET_I, HYDRA_SLAYER_HELMET, HYDRA_SLAYER_HELMET_I),
|
||||||
|
|
||||||
// Pharaoh's Sceptres
|
// Pharaoh's Sceptres
|
||||||
ITEM_PHARAOHS_SCEPTRE_1(PHARAOHS_SCEPTRE, PHARAOHS_SCEPTRE_1),
|
ITEM_PHARAOHS_SCEPTRE_1(PHARAOHS_SCEPTRE, PHARAOHS_SCEPTRE_1),
|
||||||
@@ -232,6 +232,7 @@ public enum ItemMapping
|
|||||||
ITEM_BOTTOMLESS_COMPOST_BUCKET(BOTTOMLESS_COMPOST_BUCKET, BOTTOMLESS_COMPOST_BUCKET_22997),
|
ITEM_BOTTOMLESS_COMPOST_BUCKET(BOTTOMLESS_COMPOST_BUCKET, BOTTOMLESS_COMPOST_BUCKET_22997),
|
||||||
ITEM_BASILISK_JAW(BASILISK_JAW, NEITIZNOT_FACEGUARD),
|
ITEM_BASILISK_JAW(BASILISK_JAW, NEITIZNOT_FACEGUARD),
|
||||||
ITEM_HELM_OF_NEITIZNOT(HELM_OF_NEITIZNOT, NEITIZNOT_FACEGUARD),
|
ITEM_HELM_OF_NEITIZNOT(HELM_OF_NEITIZNOT, NEITIZNOT_FACEGUARD),
|
||||||
|
ITEM_TWISTED_HORNS(TWISTED_HORNS, TWISTED_SLAYER_HELMET, TWISTED_SLAYER_HELMET_I),
|
||||||
|
|
||||||
// Crystal items
|
// Crystal items
|
||||||
ITEM_CRYSTAL_TOOL_SEED(CRYSTAL_TOOL_SEED, CRYSTAL_AXE, CRYSTAL_AXE_INACTIVE, CRYSTAL_HARPOON, CRYSTAL_HARPOON_INACTIVE, CRYSTAL_PICKAXE, CRYSTAL_PICKAXE_INACTIVE),
|
ITEM_CRYSTAL_TOOL_SEED(CRYSTAL_TOOL_SEED, CRYSTAL_AXE, CRYSTAL_AXE_INACTIVE, CRYSTAL_HARPOON, CRYSTAL_HARPOON_INACTIVE, CRYSTAL_PICKAXE, CRYSTAL_PICKAXE_INACTIVE),
|
||||||
|
|||||||
@@ -87,4 +87,8 @@ public abstract class Plugin implements Module
|
|||||||
{
|
{
|
||||||
subs.forEach(s -> s.subscribe(eventBus, this));
|
subs.forEach(s -> s.subscribe(eventBus, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void resetConfiguration()
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import net.runelite.client.config.ConfigGroup;
|
|||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.ConfigTitleSection;
|
import net.runelite.client.config.ConfigTitleSection;
|
||||||
import net.runelite.client.config.Title;
|
import net.runelite.client.config.Title;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("agility")
|
@ConfigGroup("agility")
|
||||||
public interface AgilityConfig extends Config
|
public interface AgilityConfig extends Config
|
||||||
@@ -91,6 +92,7 @@ public interface AgilityConfig extends Config
|
|||||||
hidden = true,
|
hidden = true,
|
||||||
unhide = "showLapCount"
|
unhide = "showLapCount"
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int lapTimeout()
|
default int lapTimeout()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
+21
-1
@@ -32,6 +32,8 @@ import net.runelite.api.Client;
|
|||||||
import net.runelite.api.GameState;
|
import net.runelite.api.GameState;
|
||||||
import net.runelite.api.events.FocusChanged;
|
import net.runelite.api.events.FocusChanged;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
|
import net.runelite.api.widgets.Widget;
|
||||||
|
import net.runelite.api.widgets.WidgetInfo;
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.config.Keybind;
|
import net.runelite.client.config.Keybind;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
@@ -122,7 +124,9 @@ public class AntiDragPlugin extends Plugin
|
|||||||
clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.toString());
|
clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
client.setInventoryDragDelay(config.dragDelay());
|
final int delay = config.dragDelay();
|
||||||
|
client.setInventoryDragDelay(delay);
|
||||||
|
setBankDragDelay(delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -130,6 +134,8 @@ public class AntiDragPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
overlayManager.remove(overlay);
|
overlayManager.remove(overlay);
|
||||||
client.setInventoryDragDelay(DEFAULT_DELAY);
|
client.setInventoryDragDelay(DEFAULT_DELAY);
|
||||||
|
// In this case, 0 is the default for bank item widgets.
|
||||||
|
setBankDragDelay(0);
|
||||||
clientUI.resetCursor();
|
clientUI.resetCursor();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -224,6 +230,7 @@ public class AntiDragPlugin extends Plugin
|
|||||||
if (!focusChanged.isFocused() && config.reqFocus() && !config.alwaysOn())
|
if (!focusChanged.isFocused() && config.reqFocus() && !config.alwaysOn())
|
||||||
{
|
{
|
||||||
client.setInventoryDragDelay(DEFAULT_DELAY);
|
client.setInventoryDragDelay(DEFAULT_DELAY);
|
||||||
|
setBankDragDelay(0);
|
||||||
overlayManager.remove(overlay);
|
overlayManager.remove(overlay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -248,4 +255,17 @@ public class AntiDragPlugin extends Plugin
|
|||||||
keyManager.unregisterKeyListener(toggleListener);
|
keyManager.unregisterKeyListener(toggleListener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setBankDragDelay(int delay)
|
||||||
|
{
|
||||||
|
final Widget bankItemContainer = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER);
|
||||||
|
if (bankItemContainer != null)
|
||||||
|
{
|
||||||
|
Widget[] items = bankItemContainer.getDynamicChildren();
|
||||||
|
for (Widget item : items)
|
||||||
|
{
|
||||||
|
item.setDragDeadTime(delay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -37,6 +37,7 @@ import net.runelite.client.config.ConfigItem;
|
|||||||
import net.runelite.client.config.ConfigTitleSection;
|
import net.runelite.client.config.ConfigTitleSection;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
import net.runelite.client.config.Title;
|
import net.runelite.client.config.Title;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("aoe")
|
@ConfigGroup("aoe")
|
||||||
public interface AoeWarningConfig extends Config
|
public interface AoeWarningConfig extends Config
|
||||||
@@ -124,6 +125,7 @@ public interface AoeWarningConfig extends Config
|
|||||||
titleSection = "overlayTitle",
|
titleSection = "overlayTitle",
|
||||||
position = 4
|
position = 4
|
||||||
)
|
)
|
||||||
|
@Units(Units.MILLISECONDS)
|
||||||
default int delay()
|
default int delay()
|
||||||
{
|
{
|
||||||
return 300;
|
return 300;
|
||||||
|
|||||||
+33
-1
@@ -30,6 +30,7 @@ package net.runelite.client.plugins.banktags;
|
|||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.collect.HashMultiset;
|
import com.google.common.collect.HashMultiset;
|
||||||
import com.google.common.collect.Multiset;
|
import com.google.common.collect.Multiset;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.MouseWheelEvent;
|
import java.awt.event.MouseWheelEvent;
|
||||||
@@ -100,6 +101,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis
|
|||||||
public static final String CONFIG_GROUP = "banktags";
|
public static final String CONFIG_GROUP = "banktags";
|
||||||
public static final String TAG_SEARCH = "tag:";
|
public static final String TAG_SEARCH = "tag:";
|
||||||
public static final String ICON_SEARCH = "icon_";
|
public static final String ICON_SEARCH = "icon_";
|
||||||
|
public static final String TAG_TABS_CONFIG = "tagtabs";
|
||||||
public static final String VAR_TAG_SUFFIX = "*";
|
public static final String VAR_TAG_SUFFIX = "*";
|
||||||
private static final String EDIT_TAGS_MENU_OPTION = "Edit-tags";
|
private static final String EDIT_TAGS_MENU_OPTION = "Edit-tags";
|
||||||
private static final String NUMBER_REGEX = "[0-9]+(\\.[0-9]+)?[kmb]?";
|
private static final String NUMBER_REGEX = "[0-9]+(\\.[0-9]+)?[kmb]?";
|
||||||
@@ -162,6 +164,36 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis
|
|||||||
return configManager.getConfig(BankTagsConfig.class);
|
return configManager.getConfig(BankTagsConfig.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resetConfiguration()
|
||||||
|
{
|
||||||
|
List<String> extraKeys = Lists.newArrayList(
|
||||||
|
CONFIG_GROUP + "." + TagManager.ITEM_KEY_PREFIX,
|
||||||
|
CONFIG_GROUP + "." + ICON_SEARCH,
|
||||||
|
CONFIG_GROUP + "." + TAG_TABS_CONFIG
|
||||||
|
);
|
||||||
|
|
||||||
|
for (String prefix : extraKeys)
|
||||||
|
{
|
||||||
|
List<String> keys = configManager.getConfigurationKeys(prefix);
|
||||||
|
for (String key : keys)
|
||||||
|
{
|
||||||
|
String[] str = key.split("\\.", 2);
|
||||||
|
if (str.length == 2)
|
||||||
|
{
|
||||||
|
configManager.unsetConfiguration(str[0], str[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
clientThread.invokeLater(() ->
|
||||||
|
{
|
||||||
|
tabInterface.destroy();
|
||||||
|
tabInterface.init();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startUp()
|
public void startUp()
|
||||||
{
|
{
|
||||||
@@ -481,7 +513,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis
|
|||||||
@Subscribe
|
@Subscribe
|
||||||
private void onConfigChanged(ConfigChanged configChanged)
|
private void onConfigChanged(ConfigChanged configChanged)
|
||||||
{
|
{
|
||||||
if (configChanged.getGroup().equals("banktags") && configChanged.getKey().equals("useTabs"))
|
if (configChanged.getGroup().equals(CONFIG_GROUP) && configChanged.getKey().equals("useTabs"))
|
||||||
{
|
{
|
||||||
if (config.tabs())
|
if (config.tabs())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class TagManager
|
public class TagManager
|
||||||
{
|
{
|
||||||
private static final String ITEM_KEY_PREFIX = "item_";
|
static final String ITEM_KEY_PREFIX = "item_";
|
||||||
private final ConfigManager configManager;
|
private final ConfigManager configManager;
|
||||||
private final ItemManager itemManager;
|
private final ItemManager itemManager;
|
||||||
private final ClueScrollService clueScrollService;
|
private final ClueScrollService clueScrollService;
|
||||||
|
|||||||
+1
-2
@@ -40,13 +40,12 @@ import net.runelite.api.util.Text;
|
|||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import static net.runelite.client.plugins.banktags.BankTagsPlugin.CONFIG_GROUP;
|
import static net.runelite.client.plugins.banktags.BankTagsPlugin.CONFIG_GROUP;
|
||||||
import static net.runelite.client.plugins.banktags.BankTagsPlugin.ICON_SEARCH;
|
import static net.runelite.client.plugins.banktags.BankTagsPlugin.ICON_SEARCH;
|
||||||
|
import static net.runelite.client.plugins.banktags.BankTagsPlugin.TAG_TABS_CONFIG;
|
||||||
import org.apache.commons.lang3.math.NumberUtils;
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class TabManager
|
class TabManager
|
||||||
{
|
{
|
||||||
private static final String TAG_TABS_CONFIG = "tagtabs";
|
|
||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
@Getter(AccessLevel.PACKAGE)
|
||||||
private final List<TagTab> tabs = new ArrayList<>();
|
private final List<TagTab> tabs = new ArrayList<>();
|
||||||
private final ConfigManager configManager;
|
private final ConfigManager configManager;
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.boosts;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("boosts")
|
@ConfigGroup("boosts")
|
||||||
public interface BoostsConfig extends Config
|
public interface BoostsConfig extends Config
|
||||||
@@ -129,6 +130,7 @@ public interface BoostsConfig extends Config
|
|||||||
description = "The amount of levels boosted to send a notification at. A value of 0 will disable notification.",
|
description = "The amount of levels boosted to send a notification at. A value of 0 will disable notification.",
|
||||||
position = 8
|
position = 8
|
||||||
)
|
)
|
||||||
|
@Units(Units.LEVELS)
|
||||||
default int boostThreshold()
|
default int boostThreshold()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
+2
@@ -4,6 +4,7 @@ import java.awt.Color;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("clanmanmode")
|
@ConfigGroup("clanmanmode")
|
||||||
public interface ClanManModeConfig extends Config
|
public interface ClanManModeConfig extends Config
|
||||||
@@ -135,6 +136,7 @@ public interface ClanManModeConfig extends Config
|
|||||||
name = "Ticks to hide",
|
name = "Ticks to hide",
|
||||||
description = "How many ticks after you are logged in that attackbles are hidden (1 tick = 0.6 seconds)"
|
description = "How many ticks after you are logged in that attackbles are hidden (1 tick = 0.6 seconds)"
|
||||||
)
|
)
|
||||||
|
@Units(Units.TICKS)
|
||||||
default int hideTime()
|
default int hideTime()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
+48
-5
@@ -1,6 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2017, Seth <Sethtroll3@gmail.com>
|
* Copyright (c) 2016-2017, Seth <Sethtroll3@gmail.com>
|
||||||
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
||||||
|
* Copyright (c) 2019, David <https://github.com/drahenshaw>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -31,10 +32,14 @@ import java.awt.Dimension;
|
|||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import static net.runelite.api.ItemID.SPADE;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Item;
|
||||||
|
import static net.runelite.api.ItemID.*;
|
||||||
import static net.runelite.api.MenuOpcode.RUNELITE_OVERLAY_CONFIG;
|
import static net.runelite.api.MenuOpcode.RUNELITE_OVERLAY_CONFIG;
|
||||||
import net.runelite.client.plugins.cluescrolls.clues.ClueScroll;
|
import net.runelite.client.plugins.cluescrolls.clues.ClueScroll;
|
||||||
|
import net.runelite.client.plugins.cluescrolls.clues.item.AnyRequirementCollection;
|
||||||
import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement;
|
import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement;
|
||||||
|
import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.item;
|
||||||
import net.runelite.client.plugins.cluescrolls.clues.item.SingleItemRequirement;
|
import net.runelite.client.plugins.cluescrolls.clues.item.SingleItemRequirement;
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
import net.runelite.client.ui.overlay.Overlay;
|
||||||
import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE;
|
import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE;
|
||||||
@@ -48,17 +53,42 @@ import net.runelite.client.ui.overlay.components.PanelComponent;
|
|||||||
public class ClueScrollOverlay extends Overlay
|
public class ClueScrollOverlay extends Overlay
|
||||||
{
|
{
|
||||||
private static final ItemRequirement HAS_SPADE = new SingleItemRequirement(SPADE);
|
private static final ItemRequirement HAS_SPADE = new SingleItemRequirement(SPADE);
|
||||||
|
private static final ItemRequirement HAS_LIGHT = new AnyRequirementCollection("Light Source",
|
||||||
|
item(LIT_TORCH),
|
||||||
|
item(LIT_CANDLE),
|
||||||
|
item(LIT_BLACK_CANDLE),
|
||||||
|
item(CANDLE_LANTERN_4531),
|
||||||
|
item(CANDLE_LANTERN_4534), // lit black candle lantern
|
||||||
|
item(OIL_LAMP_4524),
|
||||||
|
item(OIL_LANTERN_4539),
|
||||||
|
item(BULLSEYE_LANTERN_4550),
|
||||||
|
item(SAPPHIRE_LANTERN_4702),
|
||||||
|
item(EMERALD_LANTERN_9065),
|
||||||
|
item(MINING_HELMET),
|
||||||
|
item(FIREMAKING_CAPE),
|
||||||
|
item(FIREMAKING_CAPE_10659),
|
||||||
|
item(FIREMAKING_CAPET),
|
||||||
|
item(KANDARIN_HEADGEAR_1),
|
||||||
|
item(KANDARIN_HEADGEAR_2),
|
||||||
|
item(KANDARIN_HEADGEAR_3),
|
||||||
|
item(KANDARIN_HEADGEAR_4),
|
||||||
|
item(BRUMA_TORCH),
|
||||||
|
item(MAX_CAPE),
|
||||||
|
item(MAX_CAPE_13282),
|
||||||
|
item(MAX_CAPE_13342));
|
||||||
|
|
||||||
public static final Color TITLED_CONTENT_COLOR = new Color(190, 190, 190);
|
public static final Color TITLED_CONTENT_COLOR = new Color(190, 190, 190);
|
||||||
|
|
||||||
private final ClueScrollPlugin plugin;
|
private final ClueScrollPlugin plugin;
|
||||||
private final PanelComponent panelComponent = new PanelComponent();
|
private final PanelComponent panelComponent = new PanelComponent();
|
||||||
|
private final Client client;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ClueScrollOverlay(final ClueScrollPlugin plugin)
|
private ClueScrollOverlay(final ClueScrollPlugin plugin, final Client client)
|
||||||
{
|
{
|
||||||
super(plugin);
|
super(plugin);
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
this.client = client;
|
||||||
setPriority(OverlayPriority.LOW);
|
setPriority(OverlayPriority.LOW);
|
||||||
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Clue Scroll overlay"));
|
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Clue Scroll overlay"));
|
||||||
}
|
}
|
||||||
@@ -76,12 +106,25 @@ public class ClueScrollOverlay extends Overlay
|
|||||||
panelComponent.getChildren().clear();
|
panelComponent.getChildren().clear();
|
||||||
panelComponent.setPreferredSize(new Dimension(ComponentConstants.STANDARD_WIDTH, 0));
|
panelComponent.setPreferredSize(new Dimension(ComponentConstants.STANDARD_WIDTH, 0));
|
||||||
|
|
||||||
clue.makeOverlayHint(panelComponent, plugin);
|
final Item[] inventoryItems = plugin.getInventoryItems();
|
||||||
|
final Item[] equippedItems = plugin.getEquippedItems();
|
||||||
|
|
||||||
if (clue.isRequiresSpade() && plugin.getInventoryItems() != null && !HAS_SPADE.fulfilledBy(plugin.getInventoryItems()))
|
if (clue.isRequiresSpade() && inventoryItems != null)
|
||||||
|
{
|
||||||
|
if (!HAS_SPADE.fulfilledBy(inventoryItems))
|
||||||
|
{
|
||||||
|
panelComponent.getChildren().add(LineComponent.builder().left("").build());
|
||||||
|
panelComponent.getChildren().add(LineComponent.builder().left("Requires Spade!").leftColor(Color.RED).build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clue.isRequiresLight()
|
||||||
|
&& ((clue.getHasFirePit() == null || client.getVar(clue.getHasFirePit()) != 1)
|
||||||
|
&& (inventoryItems == null || !HAS_LIGHT.fulfilledBy(inventoryItems))
|
||||||
|
&& (equippedItems == null || !HAS_LIGHT.fulfilledBy(equippedItems))))
|
||||||
{
|
{
|
||||||
panelComponent.getChildren().add(LineComponent.builder().left("").build());
|
panelComponent.getChildren().add(LineComponent.builder().left("").build());
|
||||||
panelComponent.getChildren().add(LineComponent.builder().left("Requires Spade!").leftColor(Color.RED).build());
|
panelComponent.getChildren().add(LineComponent.builder().left("Requires Light Source!").leftColor(Color.RED).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
return panelComponent.render(graphics);
|
return panelComponent.render(graphics);
|
||||||
|
|||||||
+34
-14
@@ -39,7 +39,9 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
import joptsimple.internal.Strings;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -61,6 +63,7 @@ import net.runelite.api.TileObject;
|
|||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
|
import net.runelite.api.events.CommandExecuted;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.GameTick;
|
import net.runelite.api.events.GameTick;
|
||||||
import net.runelite.api.events.ItemContainerChanged;
|
import net.runelite.api.events.ItemContainerChanged;
|
||||||
@@ -169,6 +172,10 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private WorldMapPointManager worldMapPointManager;
|
private WorldMapPointManager worldMapPointManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named("developerMode")
|
||||||
|
boolean developerMode;
|
||||||
|
|
||||||
private BufferedImage emoteImage;
|
private BufferedImage emoteImage;
|
||||||
private BufferedImage mapArrow;
|
private BufferedImage mapArrow;
|
||||||
private Integer clueItemId;
|
private Integer clueItemId;
|
||||||
@@ -442,7 +449,13 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
|
|
||||||
// If we have a clue, save that knowledge
|
// If we have a clue, save that knowledge
|
||||||
// so the clue window doesn't have to be open.
|
// so the clue window doesn't have to be open.
|
||||||
updateClue(findClueScroll());
|
final Widget clueScrollText = client.getWidget(WidgetInfo.CLUE_SCROLL_TEXT);
|
||||||
|
|
||||||
|
if (clueScrollText != null)
|
||||||
|
{
|
||||||
|
ClueScroll clueScroll = findClueScroll(clueScrollText.getText());
|
||||||
|
updateClue(clueScroll);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@@ -457,6 +470,18 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
updateClue(BeginnerMapClue.forWidgetID(event.getGroupId()));
|
updateClue(BeginnerMapClue.forWidgetID(event.getGroupId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onCommandExecuted(CommandExecuted commandExecuted)
|
||||||
|
{
|
||||||
|
if (developerMode && commandExecuted.getCommand().equals("clue"))
|
||||||
|
{
|
||||||
|
String text = Strings.join(commandExecuted.getArguments(), " ");
|
||||||
|
ClueScroll clueScroll = findClueScroll(text);
|
||||||
|
log.debug("Found clue scroll for '{}': {}", text, clueScroll);
|
||||||
|
updateClue(clueScroll);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public BufferedImage getClueScrollImage()
|
public BufferedImage getClueScrollImage()
|
||||||
{
|
{
|
||||||
return itemManager.getImage(ItemID.CLUE_SCROLL_MASTER);
|
return itemManager.getImage(ItemID.CLUE_SCROLL_MASTER);
|
||||||
@@ -514,17 +539,10 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ClueScroll findClueScroll()
|
private ClueScroll findClueScroll(String rawText)
|
||||||
{
|
{
|
||||||
final Widget clueScrollText = client.getWidget(WidgetInfo.CLUE_SCROLL_TEXT);
|
|
||||||
|
|
||||||
if (clueScrollText == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove line breaks and also the rare occasion where there are double line breaks
|
// Remove line breaks and also the rare occasion where there are double line breaks
|
||||||
final String text = Text.sanitizeMultilineText(clueScrollText.getText()).toLowerCase();
|
final String text = Text.sanitizeMultilineText(rawText).toLowerCase();
|
||||||
|
|
||||||
// Early return if this is same clue as already existing one
|
// Early return if this is same clue as already existing one
|
||||||
if (clue instanceof TextClueScroll && ((TextClueScroll) clue).getText().equalsIgnoreCase(text))
|
if (clue instanceof TextClueScroll && ((TextClueScroll) clue).getText().equalsIgnoreCase(text))
|
||||||
@@ -534,7 +552,7 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
|
|
||||||
if (text.startsWith("i'd like to hear some music."))
|
if (text.startsWith("i'd like to hear some music."))
|
||||||
{
|
{
|
||||||
return MusicClue.forText(clueScrollText.getText());
|
return MusicClue.forText(rawText);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text.contains("degrees") && text.contains("minutes"))
|
if (text.contains("degrees") && text.contains("minutes"))
|
||||||
@@ -589,7 +607,7 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
return hotColdClue;
|
return hotColdClue;
|
||||||
}
|
}
|
||||||
|
|
||||||
final SkillChallengeClue skillChallengeClue = SkillChallengeClue.forText(text, clueScrollText.getText());
|
final SkillChallengeClue skillChallengeClue = SkillChallengeClue.forText(text, rawText);
|
||||||
|
|
||||||
if (skillChallengeClue != null)
|
if (skillChallengeClue != null)
|
||||||
{
|
{
|
||||||
@@ -597,7 +615,7 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// three step cryptic clues need unedited text to check which steps are already done
|
// three step cryptic clues need unedited text to check which steps are already done
|
||||||
final ThreeStepCrypticClue threeStepCrypticClue = ThreeStepCrypticClue.forText(text, clueScrollText.getText());
|
final ThreeStepCrypticClue threeStepCrypticClue = ThreeStepCrypticClue.forText(text, rawText);
|
||||||
|
|
||||||
if (threeStepCrypticClue != null)
|
if (threeStepCrypticClue != null)
|
||||||
{
|
{
|
||||||
@@ -605,7 +623,7 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We have unknown clue, reset
|
// We have unknown clue, reset
|
||||||
log.warn("Encountered unhandled clue text: {}", clueScrollText.getText());
|
log.warn("Encountered unhandled clue text: {}", rawText);
|
||||||
resetClue(true);
|
resetClue(true);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -781,6 +799,8 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
|
|
||||||
resetClue(false);
|
resetClue(false);
|
||||||
checkClueNPCs(clue, client.getCachedNPCs());
|
checkClueNPCs(clue, client.getCachedNPCs());
|
||||||
|
// If we have a clue, save that knowledge
|
||||||
|
// so the clue window doesn't have to be open.
|
||||||
this.clue = clue;
|
this.clue = clue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+9
@@ -28,6 +28,7 @@ import java.awt.Graphics2D;
|
|||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import net.runelite.api.Varbits;
|
||||||
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
||||||
import net.runelite.client.ui.overlay.components.PanelComponent;
|
import net.runelite.client.ui.overlay.components.PanelComponent;
|
||||||
|
|
||||||
@@ -37,6 +38,14 @@ public abstract class ClueScroll
|
|||||||
@Getter(AccessLevel.PUBLIC)
|
@Getter(AccessLevel.PUBLIC)
|
||||||
private boolean requiresSpade;
|
private boolean requiresSpade;
|
||||||
|
|
||||||
|
@Setter(AccessLevel.PROTECTED)
|
||||||
|
@Getter(AccessLevel.PUBLIC)
|
||||||
|
private boolean requiresLight;
|
||||||
|
|
||||||
|
@Setter(AccessLevel.PROTECTED)
|
||||||
|
@Getter(AccessLevel.PUBLIC)
|
||||||
|
private Varbits hasFirePit;
|
||||||
|
|
||||||
public abstract void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin);
|
public abstract void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin);
|
||||||
|
|
||||||
public abstract void makeWorldOverlayHint(Graphics2D graphics, ClueScrollPlugin plugin);
|
public abstract void makeWorldOverlayHint(Graphics2D graphics, ClueScrollPlugin plugin);
|
||||||
|
|||||||
+186
-154
@@ -27,9 +27,12 @@ package net.runelite.client.plugins.cluescrolls.clues;
|
|||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import net.runelite.api.Varbits;
|
||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
||||||
@@ -41,162 +44,184 @@ import net.runelite.client.ui.overlay.components.TitleComponent;
|
|||||||
@Getter(AccessLevel.PUBLIC)
|
@Getter(AccessLevel.PUBLIC)
|
||||||
public class CoordinateClue extends ClueScroll implements TextClueScroll, LocationClueScroll
|
public class CoordinateClue extends ClueScroll implements TextClueScroll, LocationClueScroll
|
||||||
{
|
{
|
||||||
private static final ImmutableMap<WorldPoint, String> CLUES = new ImmutableMap.Builder<WorldPoint, String>()
|
@Getter
|
||||||
|
private static class CoordinateClueInfo
|
||||||
|
{
|
||||||
|
private final String directions;
|
||||||
|
private final boolean lightRequired;
|
||||||
|
private final Varbits lightSource;
|
||||||
|
|
||||||
|
private CoordinateClueInfo(@NonNull String directions)
|
||||||
|
{
|
||||||
|
this.directions = directions;
|
||||||
|
this.lightRequired = false;
|
||||||
|
this.lightSource = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CoordinateClueInfo(@Nonnull String directions, boolean lightRequired, Varbits lightSource)
|
||||||
|
{
|
||||||
|
this.directions = directions;
|
||||||
|
this.lightRequired = lightRequired;
|
||||||
|
this.lightSource = lightSource;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final ImmutableMap<WorldPoint, CoordinateClueInfo> CLUES = new ImmutableMap.Builder<WorldPoint, CoordinateClueInfo>()
|
||||||
// Medium
|
// Medium
|
||||||
.put(new WorldPoint(2479, 3158, 0), "South of fruit tree patch, west of Tree Gnome Village.")
|
.put(new WorldPoint(2479, 3158, 0), new CoordinateClueInfo("South of fruit tree patch, west of Tree Gnome Village."))
|
||||||
.put(new WorldPoint(2887, 3154, 0), "West of Banana plantation on Karamja.")
|
.put(new WorldPoint(2887, 3154, 0), new CoordinateClueInfo("West of Banana plantation on Karamja."))
|
||||||
.put(new WorldPoint(2743, 3151, 0), "Entrance of Brimhaven dungeon.")
|
.put(new WorldPoint(2743, 3151, 0), new CoordinateClueInfo("Entrance of Brimhaven dungeon."))
|
||||||
.put(new WorldPoint(3184, 3150, 0), "South of Lumbridge Swamp.")
|
.put(new WorldPoint(3184, 3150, 0), new CoordinateClueInfo("South of Lumbridge Swamp."))
|
||||||
.put(new WorldPoint(3217, 3177, 0), "East of Lumbridge Swamp.")
|
.put(new WorldPoint(3217, 3177, 0), new CoordinateClueInfo("East of Lumbridge Swamp."))
|
||||||
.put(new WorldPoint(3007, 3144, 0), "Near the entrance to the Asgarnian Ice Dungeon, south of Port Sarim (AIQ).")
|
.put(new WorldPoint(3007, 3144, 0), new CoordinateClueInfo("Near the entrance to the Asgarnian Ice Dungeon, south of Port Sarim (AIQ)."))
|
||||||
.put(new WorldPoint(2896, 3119, 0), "Near Karambwan fishing spot (DKP).")
|
.put(new WorldPoint(2896, 3119, 0), new CoordinateClueInfo("Near Karambwan fishing spot (DKP)."))
|
||||||
.put(new WorldPoint(2697, 3207, 0), "Centre of Moss Giant Island, west of Brimhaven.")
|
.put(new WorldPoint(2697, 3207, 0), new CoordinateClueInfo("Centre of Moss Giant Island, west of Brimhaven."))
|
||||||
.put(new WorldPoint(2679, 3110, 0), "North of Hazelmere's house (CLS).")
|
.put(new WorldPoint(2679, 3110, 0), new CoordinateClueInfo("North of Hazelmere's house (CLS)."))
|
||||||
.put(new WorldPoint(3510, 3074, 0), "East of Uzer (DLQ).")
|
.put(new WorldPoint(3510, 3074, 0), new CoordinateClueInfo("East of Uzer (DLQ)."))
|
||||||
.put(new WorldPoint(3160, 3251, 0), "West of trapdoor leading to H.A.M Hideout.")
|
.put(new WorldPoint(3160, 3251, 0), new CoordinateClueInfo("West of trapdoor leading to H.A.M Hideout."))
|
||||||
.put(new WorldPoint(2643, 3252, 0), "South of Ardougne Zoo, North of Tower of Life (DJP).")
|
.put(new WorldPoint(2643, 3252, 0), new CoordinateClueInfo("South of Ardougne Zoo, North of Tower of Life (DJP)."))
|
||||||
.put(new WorldPoint(2322, 3061, 0), "South-west of Castle wars (BKP).")
|
.put(new WorldPoint(2322, 3061, 0), new CoordinateClueInfo("South-west of Castle wars (BKP)."))
|
||||||
.put(new WorldPoint(2875, 3046, 0), "North of nature altar, north of Shilo Village (CKR).")
|
.put(new WorldPoint(2875, 3046, 0), new CoordinateClueInfo("North of nature altar, north of Shilo Village (CKR)."))
|
||||||
.put(new WorldPoint(2849, 3033, 0), "West of nature altar, north of Shilo Village (CKR).")
|
.put(new WorldPoint(2849, 3033, 0), new CoordinateClueInfo("West of nature altar, north of Shilo Village (CKR)."))
|
||||||
.put(new WorldPoint(2848, 3296, 0), "North of Crandor island.")
|
.put(new WorldPoint(2848, 3296, 0), new CoordinateClueInfo("North of Crandor island."))
|
||||||
.put(new WorldPoint(2583, 2990, 0), "Feldip Hills, south-east of Gu'Thanoth (AKS).")
|
.put(new WorldPoint(2583, 2990, 0), new CoordinateClueInfo("Feldip Hills, south-east of Gu'Thanoth (AKS)."))
|
||||||
.put(new WorldPoint(3179, 3344, 0), "In the cow pen north of the Lumbridge windmill.")
|
.put(new WorldPoint(3179, 3344, 0), new CoordinateClueInfo("In the cow pen north of the Lumbridge windmill."))
|
||||||
.put(new WorldPoint(2383, 3370, 0), "West of the outpost")
|
.put(new WorldPoint(2383, 3370, 0), new CoordinateClueInfo("West of the outpost"))
|
||||||
.put(new WorldPoint(3312, 3375, 0), "North-west of Exam Centre, on the hill.")
|
.put(new WorldPoint(3312, 3375, 0), new CoordinateClueInfo("North-west of Exam Centre, on the hill."))
|
||||||
.put(new WorldPoint(3121, 3384, 0), "North-east of Draynor Manor, near River Lum.")
|
.put(new WorldPoint(3121, 3384, 0), new CoordinateClueInfo("North-east of Draynor Manor, near River Lum."))
|
||||||
.put(new WorldPoint(3430, 3388, 0), "West of Mort Myre Swamp (BKR).")
|
.put(new WorldPoint(3430, 3388, 0), new CoordinateClueInfo("West of Mort Myre Swamp (BKR)."))
|
||||||
.put(new WorldPoint(2920, 3403, 0), "South-east of Taverley, near Lady of the Lake.")
|
.put(new WorldPoint(2920, 3403, 0), new CoordinateClueInfo("South-east of Taverley, near Lady of the Lake."))
|
||||||
.put(new WorldPoint(2594, 2899, 0), "South-east of Feldip Hills, by the crimson swifts (AKS).")
|
.put(new WorldPoint(2594, 2899, 0), new CoordinateClueInfo("South-east of Feldip Hills, by the crimson swifts (AKS)."))
|
||||||
.put(new WorldPoint(2387, 3435, 0), "West of Tree Gnome Stronghold, near the pen containing terrorbirds.")
|
.put(new WorldPoint(2387, 3435, 0), new CoordinateClueInfo("West of Tree Gnome Stronghold, near the pen containing terrorbirds."))
|
||||||
.put(new WorldPoint(2512, 3467, 0), "Baxtorian Falls (Bring rope).")
|
.put(new WorldPoint(2512, 3467, 0), new CoordinateClueInfo("Baxtorian Falls (Bring rope)."))
|
||||||
.put(new WorldPoint(2381, 3468, 0), "West of Tree Gnome Stronghold, north of the pen with terrorbirds.")
|
.put(new WorldPoint(2381, 3468, 0), new CoordinateClueInfo("West of Tree Gnome Stronghold, north of the pen with terrorbirds."))
|
||||||
.put(new WorldPoint(3005, 3475, 0), "Ice Mountain, west of Edgeville.")
|
.put(new WorldPoint(3005, 3475, 0), new CoordinateClueInfo("Ice Mountain, west of Edgeville."))
|
||||||
.put(new WorldPoint(2585, 3505, 0), "By the shore line north of the Coal Trucks.")
|
.put(new WorldPoint(2585, 3505, 0), new CoordinateClueInfo("By the shore line north of the Coal Trucks."))
|
||||||
.put(new WorldPoint(3443, 3515, 0), "South of Slayer Tower (CKS).")
|
.put(new WorldPoint(3443, 3515, 0), new CoordinateClueInfo("South of Slayer Tower (CKS)."))
|
||||||
.put(new WorldPoint(2416, 3516, 0), "Tree Gnome Stronghold, west of Grand Tree, near swamp.")
|
.put(new WorldPoint(2416, 3516, 0), new CoordinateClueInfo("Tree Gnome Stronghold, west of Grand Tree, near swamp."))
|
||||||
.put(new WorldPoint(3429, 3523, 0), "South of Slayer Tower (CKS).")
|
.put(new WorldPoint(3429, 3523, 0), new CoordinateClueInfo("South of Slayer Tower (CKS)."))
|
||||||
.put(new WorldPoint(2363, 3531, 0), "North-east of Eagles' Peak (AKQ).")
|
.put(new WorldPoint(2363, 3531, 0), new CoordinateClueInfo("North-east of Eagles' Peak (AKQ)."))
|
||||||
.put(new WorldPoint(2919, 3535, 0), "East of Burthorpe pub.")
|
.put(new WorldPoint(2919, 3535, 0), new CoordinateClueInfo("East of Burthorpe pub."))
|
||||||
.put(new WorldPoint(3548, 3560, 0), "Inside Fenkenstrain's Castle.")
|
.put(new WorldPoint(3548, 3560, 0), new CoordinateClueInfo("Inside Fenkenstrain's Castle."))
|
||||||
.put(new WorldPoint(1456, 3620, 0), "Graveyard west of Shayzien (DJR).")
|
.put(new WorldPoint(1456, 3620, 0), new CoordinateClueInfo("Graveyard west of Shayzien (DJR)."))
|
||||||
.put(new WorldPoint(2735, 3638, 0), "East of Rellekka, north-west of Golden Apple Tree (AJR).")
|
.put(new WorldPoint(2735, 3638, 0), new CoordinateClueInfo("East of Rellekka, north-west of Golden Apple Tree (AJR)."))
|
||||||
.put(new WorldPoint(2681, 3653, 0), "Rellekka, in the garden of the south-east house.")
|
.put(new WorldPoint(2681, 3653, 0), new CoordinateClueInfo("Rellekka, in the garden of the south-east house."))
|
||||||
.put(new WorldPoint(2537, 3881, 0), "Miscellania (CIP).")
|
.put(new WorldPoint(2537, 3881, 0), new CoordinateClueInfo("Miscellania (CIP)."))
|
||||||
.put(new WorldPoint(2828, 3234, 0), "Southern coast of Crandor.")
|
.put(new WorldPoint(2828, 3234, 0), new CoordinateClueInfo("Southern coast of Crandor."))
|
||||||
.put(new WorldPoint(1247, 3726, 0), "Just inside the Farming Guild")
|
.put(new WorldPoint(1247, 3726, 0), new CoordinateClueInfo("Just inside the Farming Guild"))
|
||||||
.put(new WorldPoint(3770, 3898, 0), "On the small island north-east of Fossil Island's mushroom forest.")
|
.put(new WorldPoint(3770, 3898, 0), new CoordinateClueInfo("On the small island north-east of Fossil Island's mushroom forest."))
|
||||||
// Hard
|
// Hard
|
||||||
.put(new WorldPoint(2209, 3161, 0), "North-east of Tyras Camp (BJS).")
|
.put(new WorldPoint(2209, 3161, 0), new CoordinateClueInfo("North-east of Tyras Camp (BJS)."))
|
||||||
.put(new WorldPoint(2181, 3206, 0), "South of Iorwerth Camp.")
|
.put(new WorldPoint(2181, 3206, 0), new CoordinateClueInfo("South of Iorwerth Camp."))
|
||||||
.put(new WorldPoint(3081, 3209, 0), "Small Island (CLP).")
|
.put(new WorldPoint(3081, 3209, 0), new CoordinateClueInfo("Small Island (CLP)."))
|
||||||
.put(new WorldPoint(3399, 3246, 0), "Behind the Duel Arena.")
|
.put(new WorldPoint(3399, 3246, 0), new CoordinateClueInfo("Behind the Duel Arena."))
|
||||||
.put(new WorldPoint(2699, 3251, 0), "Little island (AIR).")
|
.put(new WorldPoint(2699, 3251, 0), new CoordinateClueInfo("Little island (AIR)."))
|
||||||
.put(new WorldPoint(3546, 3251, 0), "North-east of Burgh de Rott.")
|
.put(new WorldPoint(3546, 3251, 0), new CoordinateClueInfo("North-east of Burgh de Rott."))
|
||||||
.put(new WorldPoint(3544, 3256, 0), "North-east of Burgh de Rott.")
|
.put(new WorldPoint(3544, 3256, 0), new CoordinateClueInfo("North-east of Burgh de Rott."))
|
||||||
.put(new WorldPoint(2841, 3267, 0), "Crandor island.")
|
.put(new WorldPoint(2841, 3267, 0), new CoordinateClueInfo("Crandor island."))
|
||||||
.put(new WorldPoint(3168, 3041, 0), "Bedabin Camp.")
|
.put(new WorldPoint(3168, 3041, 0), new CoordinateClueInfo("Bedabin Camp."))
|
||||||
.put(new WorldPoint(2542, 3031, 0), "Gu'Tanoth, may require 20gp.")
|
.put(new WorldPoint(2542, 3031, 0), new CoordinateClueInfo("Gu'Tanoth, may require 20gp."))
|
||||||
.put(new WorldPoint(2581, 3030, 0), "Gu'Tanoth island, enter cave north-west of Feldip Hills (AKS).")
|
.put(new WorldPoint(2581, 3030, 0), new CoordinateClueInfo("Gu'Tanoth island, enter cave north-west of Feldip Hills (AKS)."))
|
||||||
.put(new WorldPoint(2961, 3024, 0), "Ship yard (DKP).")
|
.put(new WorldPoint(2961, 3024, 0), new CoordinateClueInfo("Ship yard (DKP)."))
|
||||||
.put(new WorldPoint(2339, 3311, 0), "East of Prifddinas on Arandar mountain pass.")
|
.put(new WorldPoint(2339, 3311, 0), new CoordinateClueInfo("East of Prifddinas on Arandar mountain pass."))
|
||||||
.put(new WorldPoint(3440, 3341, 0), "Nature Spirit's grotto (BIP).")
|
.put(new WorldPoint(3440, 3341, 0), new CoordinateClueInfo("Nature Spirit's grotto (BIP)."))
|
||||||
.put(new WorldPoint(2763, 2974, 0), "Cairn Isle, west of Shilo Village (CKR).")
|
.put(new WorldPoint(2763, 2974, 0), new CoordinateClueInfo("Cairn Isle, west of Shilo Village (CKR)."))
|
||||||
.put(new WorldPoint(3138, 2969, 0), "West of Bandit Camp in Kharidian Desert.")
|
.put(new WorldPoint(3138, 2969, 0), new CoordinateClueInfo("West of Bandit Camp in Kharidian Desert."))
|
||||||
.put(new WorldPoint(2924, 2963, 0), "On the southern part of eastern Karamja.")
|
.put(new WorldPoint(2924, 2963, 0), new CoordinateClueInfo("On the southern part of eastern Karamja."))
|
||||||
.put(new WorldPoint(2838, 2914, 0), "Kharazi Jungle, near water pool (CKR).")
|
.put(new WorldPoint(2838, 2914, 0), new CoordinateClueInfo("Kharazi Jungle, near water pool (CKR)."))
|
||||||
.put(new WorldPoint(3441, 3419, 0), "Mort Myre Swamp (BKR).")
|
.put(new WorldPoint(3441, 3419, 0), new CoordinateClueInfo("Mort Myre Swamp (BKR)."))
|
||||||
.put(new WorldPoint(2950, 2902, 0), "South-east of Kharazi Jungle.")
|
.put(new WorldPoint(2950, 2902, 0), new CoordinateClueInfo("South-east of Kharazi Jungle."))
|
||||||
.put(new WorldPoint(2775, 2891, 0), "South-west of Kharazi Jungle.")
|
.put(new WorldPoint(2775, 2891, 0), new CoordinateClueInfo("South-west of Kharazi Jungle."))
|
||||||
.put(new WorldPoint(3113, 3602, 0), "Wilderness. North of Edgeville (level 11).")
|
.put(new WorldPoint(3113, 3602, 0), new CoordinateClueInfo("Wilderness. North of Edgeville (level 11)."))
|
||||||
.put(new WorldPoint(2892, 3675, 0), "On the summit of Trollheim.")
|
.put(new WorldPoint(2892, 3675, 0), new CoordinateClueInfo("On the summit of Trollheim."))
|
||||||
.put(new WorldPoint(3168, 3677, 0), "Wilderness. Graveyard of Shadows.")
|
.put(new WorldPoint(3168, 3677, 0), new CoordinateClueInfo("Wilderness. Graveyard of Shadows."))
|
||||||
.put(new WorldPoint(2853, 3690, 0), "Entrance to the troll Stronghold.")
|
.put(new WorldPoint(2853, 3690, 0), new CoordinateClueInfo("Entrance to the troll Stronghold."))
|
||||||
.put(new WorldPoint(3305, 3692, 0), "Wilderness. West of eastern green dragon.")
|
.put(new WorldPoint(3305, 3692, 0), new CoordinateClueInfo("Wilderness. West of eastern green dragon."))
|
||||||
.put(new WorldPoint(3055, 3696, 0), "Wilderness. Bandit Camp.")
|
.put(new WorldPoint(3055, 3696, 0), new CoordinateClueInfo("Wilderness. Bandit Camp."))
|
||||||
.put(new WorldPoint(3302, 3696, 0), "Wilderness. West of eastern green dragon.")
|
.put(new WorldPoint(3302, 3696, 0), new CoordinateClueInfo("Wilderness. West of eastern green dragon."))
|
||||||
.put(new WorldPoint(1479, 3696, 0), "Lizardman Canyon (DJR).")
|
.put(new WorldPoint(1479, 3696, 0), new CoordinateClueInfo("Lizardman Canyon (DJR)."))
|
||||||
.put(new WorldPoint(2712, 3732, 0), "North-east of Rellekka (DKS).")
|
.put(new WorldPoint(2712, 3732, 0), new CoordinateClueInfo("North-east of Rellekka (DKS)."))
|
||||||
.put(new WorldPoint(2970, 3749, 0), "Wilderness. Forgotten Cemetery.")
|
.put(new WorldPoint(2970, 3749, 0), new CoordinateClueInfo("Wilderness. Forgotten Cemetery."))
|
||||||
.put(new WorldPoint(3094, 3764, 0), "Wilderness. Mining site north of Bandit Camp.")
|
.put(new WorldPoint(3094, 3764, 0), new CoordinateClueInfo("Wilderness. Mining site north of Bandit Camp."))
|
||||||
.put(new WorldPoint(3311, 3769, 0), "Wilderness. North of Venenatis.")
|
.put(new WorldPoint(3311, 3769, 0), new CoordinateClueInfo("Wilderness. North of Venenatis."))
|
||||||
.put(new WorldPoint(1460, 3782, 0), "Lovakengj, near burning man.")
|
.put(new WorldPoint(1460, 3782, 0), new CoordinateClueInfo("Lovakengj, near burning man."))
|
||||||
.put(new WorldPoint(3244, 3792, 0), "Wilderness. South-east of Lava Dragon Isle by some Chaos Dwarves.")
|
.put(new WorldPoint(3244, 3792, 0), new CoordinateClueInfo("Wilderness. South-east of Lava Dragon Isle by some Chaos Dwarves."))
|
||||||
.put(new WorldPoint(3140, 3804, 0), "Wilderness. North of Ruins.")
|
.put(new WorldPoint(3140, 3804, 0), new CoordinateClueInfo("Wilderness. North of Ruins."))
|
||||||
.put(new WorldPoint(2946, 3819, 0), "Wilderness. Chaos Temple (level 38).")
|
.put(new WorldPoint(2946, 3819, 0), new CoordinateClueInfo("Wilderness. Chaos Temple (level 38)."))
|
||||||
.put(new WorldPoint(3771, 3825, 0), "Fossil Island. East of Museum Camp.")
|
.put(new WorldPoint(3771, 3825, 0), new CoordinateClueInfo("Fossil Island. East of Museum Camp."))
|
||||||
.put(new WorldPoint(3013, 3846, 0), "Wilderness. West of Lava Maze, before KBD's lair.")
|
.put(new WorldPoint(3013, 3846, 0), new CoordinateClueInfo("Wilderness. West of Lava Maze, before KBD's lair."))
|
||||||
.put(new WorldPoint(3058, 3884, 0), "Wilderness. Near runite ore north of Lava Maze.")
|
.put(new WorldPoint(3058, 3884, 0), new CoordinateClueInfo("Wilderness. Near runite ore north of Lava Maze."))
|
||||||
.put(new WorldPoint(3290, 3889, 0), "Wilderness. Demonic Ruins.")
|
.put(new WorldPoint(3290, 3889, 0), new CoordinateClueInfo("Wilderness. Demonic Ruins."))
|
||||||
.put(new WorldPoint(3770, 3897, 0), "Small Island north of Fossil Island.")
|
.put(new WorldPoint(3770, 3897, 0), new CoordinateClueInfo("Small Island north of Fossil Island."))
|
||||||
.put(new WorldPoint(2505, 3899, 0), "Small Island north-west of Miscellania (AJS).")
|
.put(new WorldPoint(2505, 3899, 0), new CoordinateClueInfo("Small Island north-west of Miscellania (AJS)."))
|
||||||
.put(new WorldPoint(3285, 3942, 0), "Wilderness. Rogues' Castle.")
|
.put(new WorldPoint(3285, 3942, 0), new CoordinateClueInfo("Wilderness. Rogues' Castle."))
|
||||||
.put(new WorldPoint(3159, 3959, 0), "Wilderness. North of Deserted Keep, west of Resource Area.")
|
.put(new WorldPoint(3159, 3959, 0), new CoordinateClueInfo("Wilderness. North of Deserted Keep, west of Resource Area."))
|
||||||
.put(new WorldPoint(3039, 3960, 0), "Wilderness. Pirates' Hideout.")
|
.put(new WorldPoint(3039, 3960, 0), new CoordinateClueInfo("Wilderness. Pirates' Hideout."))
|
||||||
.put(new WorldPoint(2987, 3963, 0), "Wilderness. West of Wilderness Agility Course.")
|
.put(new WorldPoint(2987, 3963, 0), new CoordinateClueInfo("Wilderness. West of Wilderness Agility Course."))
|
||||||
.put(new WorldPoint(3189, 3963, 0), "Wilderness. North of Resource Area, near magic axe hut.")
|
.put(new WorldPoint(3189, 3963, 0), new CoordinateClueInfo("Wilderness. North of Resource Area, near magic axe hut."))
|
||||||
.put(new WorldPoint(2341, 3697, 0), "North-east of the Piscatoris Fishing Colony bank.")
|
.put(new WorldPoint(2341, 3697, 0), new CoordinateClueInfo("North-east of the Piscatoris Fishing Colony bank."))
|
||||||
.put(new WorldPoint(3143, 3774, 0), "In level 32 Wilderness, by the black chinchompa hunting area.")
|
.put(new WorldPoint(3143, 3774, 0), new CoordinateClueInfo("In level 32 Wilderness, by the black chinchompa hunting area."))
|
||||||
.put(new WorldPoint(2992, 3941, 0), "Wilderness Agility Course, past the log balance.")
|
.put(new WorldPoint(2992, 3941, 0), new CoordinateClueInfo("Wilderness Agility Course, past the log balance."))
|
||||||
// Elite
|
// Elite
|
||||||
.put(new WorldPoint(2357, 3151, 0), "Lletya.")
|
.put(new WorldPoint(2357, 3151, 0), new CoordinateClueInfo("Lletya."))
|
||||||
.put(new WorldPoint(3587, 3180, 0), "Meiyerditch.")
|
.put(new WorldPoint(3587, 3180, 0), new CoordinateClueInfo("Meiyerditch."))
|
||||||
.put(new WorldPoint(2820, 3078, 0), "Tai Bwo Wannai. Hardwood Grove.")
|
.put(new WorldPoint(2820, 3078, 0), new CoordinateClueInfo("Tai Bwo Wannai. Hardwood Grove."))
|
||||||
.put(new WorldPoint(3811, 3060, 0), "Small island north-east of Mos Le'Harmless.")
|
.put(new WorldPoint(3811, 3060, 0), new CoordinateClueInfo("Small island north-east of Mos Le'Harmless.", true, Varbits.FIRE_PIT_MOS_LE_HARMLESS))
|
||||||
.put(new WorldPoint(2180, 3282, 0), "North of Iorwerth Camp.")
|
.put(new WorldPoint(2180, 3282, 0), new CoordinateClueInfo("North of Iorwerth Camp."))
|
||||||
.put(new WorldPoint(2870, 2997, 0), "North-east of Shilo Village.")
|
.put(new WorldPoint(2870, 2997, 0), new CoordinateClueInfo("North-east of Shilo Village."))
|
||||||
.put(new WorldPoint(3302, 2988, 0), "On top of a cliff to the west of Pollnivneach.")
|
.put(new WorldPoint(3302, 2988, 0), new CoordinateClueInfo("On top of a cliff to the west of Pollnivneach."))
|
||||||
.put(new WorldPoint(2511, 2980, 0), "Just south of Gu'Tanoth, west of gnome glider.")
|
.put(new WorldPoint(2511, 2980, 0), new CoordinateClueInfo("Just south of Gu'Tanoth, west of gnome glider."))
|
||||||
.put(new WorldPoint(2732, 3372, 0), "Legends' Guild.")
|
.put(new WorldPoint(2732, 3372, 0), new CoordinateClueInfo("Legends' Guild."))
|
||||||
.put(new WorldPoint(3573, 3425, 0), "North of Dessous's tomb from Desert Treasure.")
|
.put(new WorldPoint(3573, 3425, 0), new CoordinateClueInfo("North of Dessous's tomb from Desert Treasure."))
|
||||||
.put(new WorldPoint(3828, 2848, 0), "East of Harmony Island.")
|
.put(new WorldPoint(3828, 2848, 0), new CoordinateClueInfo("East of Harmony Island."))
|
||||||
.put(new WorldPoint(3225, 2838, 0), "South of Desert Treasure pyramid.")
|
.put(new WorldPoint(3225, 2838, 0), new CoordinateClueInfo("South of Desert Treasure pyramid."))
|
||||||
.put(new WorldPoint(1773, 3510, 0), "Ruins north of the Hosidius mine.")
|
.put(new WorldPoint(1773, 3510, 0), new CoordinateClueInfo("Ruins north of the Hosidius mine."))
|
||||||
.put(new WorldPoint(3822, 3562, 0), "North-east of Dragontooth Island.")
|
.put(new WorldPoint(3822, 3562, 0), new CoordinateClueInfo("North-east of Dragontooth Island."))
|
||||||
.put(new WorldPoint(3603, 3564, 0), "North of the wrecked ship, outside of Port Phasmatys.")
|
.put(new WorldPoint(3603, 3564, 0), new CoordinateClueInfo("North of the wrecked ship, outside of Port Phasmatys."))
|
||||||
.put(new WorldPoint(2936, 2721, 0), "Eastern shore of Crash Island.")
|
.put(new WorldPoint(2936, 2721, 0), new CoordinateClueInfo("Eastern shore of Crash Island."))
|
||||||
.put(new WorldPoint(2697, 2705, 0), "South-west of Ape Atoll.")
|
.put(new WorldPoint(2697, 2705, 0), new CoordinateClueInfo("South-west of Ape Atoll."))
|
||||||
.put(new WorldPoint(2778, 3678, 0), "Mountain Camp.")
|
.put(new WorldPoint(2778, 3678, 0), new CoordinateClueInfo("Mountain Camp."))
|
||||||
.put(new WorldPoint(2827, 3740, 0), "West of the entrance to the Ice Path, where the Troll child resides.")
|
.put(new WorldPoint(2827, 3740, 0), new CoordinateClueInfo("West of the entrance to the Ice Path, where the Troll child resides."))
|
||||||
.put(new WorldPoint(2359, 3799, 0), "Neitiznot.")
|
.put(new WorldPoint(2359, 3799, 0), new CoordinateClueInfo("Neitiznot."))
|
||||||
.put(new WorldPoint(2194, 3807, 0), "Pirates' Cove.")
|
.put(new WorldPoint(2194, 3807, 0), new CoordinateClueInfo("Pirates' Cove."))
|
||||||
.put(new WorldPoint(2700, 3808, 0), "Northwestern part of the Trollweiss and Rellekka Hunter area (DKS).")
|
.put(new WorldPoint(2700, 3808, 0), new CoordinateClueInfo("Northwestern part of the Trollweiss and Rellekka Hunter area (DKS)."))
|
||||||
.put(new WorldPoint(3215, 3835, 0), "Wilderness. Lava Dragon Isle.")
|
.put(new WorldPoint(3215, 3835, 0), new CoordinateClueInfo("Wilderness. Lava Dragon Isle."))
|
||||||
.put(new WorldPoint(3369, 3894, 0), "Wilderness. Fountain of Rune.")
|
.put(new WorldPoint(3369, 3894, 0), new CoordinateClueInfo("Wilderness. Fountain of Rune."))
|
||||||
.put(new WorldPoint(2065, 3923, 0), "Outside the western wall on Lunar Isle.")
|
.put(new WorldPoint(2065, 3923, 0), new CoordinateClueInfo("Outside the western wall on Lunar Isle."))
|
||||||
.put(new WorldPoint(3188, 3933, 0), "Wilderness. Resource Area.")
|
.put(new WorldPoint(3188, 3933, 0), new CoordinateClueInfo("Wilderness. Resource Area."))
|
||||||
.put(new WorldPoint(2997, 3953, 0), "Wilderness. Inside Agility Training Area.")
|
.put(new WorldPoint(2997, 3953, 0), new CoordinateClueInfo("Wilderness. Inside Agility Training Area."))
|
||||||
.put(new WorldPoint(3380, 3963, 0), "Wilderness. North of Volcano.")
|
.put(new WorldPoint(3380, 3963, 0), new CoordinateClueInfo("Wilderness. North of Volcano."))
|
||||||
.put(new WorldPoint(3051, 3736, 0), "East of the Wilderness Obelisk in 28 Wilderness.")
|
.put(new WorldPoint(3051, 3736, 0), new CoordinateClueInfo("East of the Wilderness Obelisk in 28 Wilderness."))
|
||||||
.put(new WorldPoint(2316, 3814, 0), "West of Neitiznot, near the bridge.")
|
.put(new WorldPoint(2316, 3814, 0), new CoordinateClueInfo("West of Neitiznot, near the bridge."))
|
||||||
.put(new WorldPoint(2872, 3937, 0), "Weiss.")
|
.put(new WorldPoint(2872, 3937, 0), new CoordinateClueInfo("Weiss."))
|
||||||
.put(new WorldPoint(2484, 4016, 0), "Northeast corner of the Island of Stone.")
|
.put(new WorldPoint(2484, 4016, 0), new CoordinateClueInfo("Northeast corner of the Island of Stone."))
|
||||||
// Master
|
// Master
|
||||||
.put(new WorldPoint(2178, 3209, 0), "South of Iorwerth Camp.")
|
.put(new WorldPoint(2178, 3209, 0), new CoordinateClueInfo("South of Iorwerth Camp."))
|
||||||
.put(new WorldPoint(2155, 3100, 0), "South of Port Tyras (BJS).")
|
.put(new WorldPoint(2155, 3100, 0), new CoordinateClueInfo("South of Port Tyras (BJS)."))
|
||||||
.put(new WorldPoint(2217, 3092, 0), "Poison Waste island (DLR).")
|
.put(new WorldPoint(2217, 3092, 0), new CoordinateClueInfo("Poison Waste island (DLR)."))
|
||||||
.put(new WorldPoint(3830, 3060, 0), "Small island located north-east of Mos Le'Harmless.")
|
.put(new WorldPoint(3830, 3060, 0), new CoordinateClueInfo("Small island located north-east of Mos Le'Harmless.", true, Varbits.FIRE_PIT_MOS_LE_HARMLESS))
|
||||||
.put(new WorldPoint(2834, 3271, 0), "Crandor island.")
|
.put(new WorldPoint(2834, 3271, 0), new CoordinateClueInfo("Crandor island."))
|
||||||
.put(new WorldPoint(2732, 3284, 0), "Witchaven.")
|
.put(new WorldPoint(2732, 3284, 0), new CoordinateClueInfo("Witchaven."))
|
||||||
.put(new WorldPoint(3622, 3320, 0), "Meiyerditch. Outside mine.")
|
.put(new WorldPoint(3622, 3320, 0), new CoordinateClueInfo("Meiyerditch. Outside mine."))
|
||||||
.put(new WorldPoint(2303, 3328, 0), "East of Prifddinas.")
|
.put(new WorldPoint(2303, 3328, 0), new CoordinateClueInfo("East of Prifddinas."))
|
||||||
.put(new WorldPoint(3570, 3405, 0), "North of Dessous's tomb from Desert Treasure.")
|
.put(new WorldPoint(3570, 3405, 0), new CoordinateClueInfo("North of Dessous's tomb from Desert Treasure."))
|
||||||
.put(new WorldPoint(2840, 3423, 0), "Water Obelisk Island.")
|
.put(new WorldPoint(2840, 3423, 0), new CoordinateClueInfo("Water Obelisk Island."))
|
||||||
.put(new WorldPoint(3604, 3564, 0), "North of the wrecked ship, outside of Port Phasmatys (ALQ).")
|
.put(new WorldPoint(3604, 3564, 0), new CoordinateClueInfo("North of the wrecked ship, outside of Port Phasmatys (ALQ)."))
|
||||||
.put(new WorldPoint(3085, 3569, 0), "Wilderness. Obelisk of Air.")
|
.put(new WorldPoint(3085, 3569, 0), new CoordinateClueInfo("Wilderness. Obelisk of Air."))
|
||||||
.put(new WorldPoint(2934, 2727, 0), "Eastern shore of Crash Island.")
|
.put(new WorldPoint(2934, 2727, 0), new CoordinateClueInfo("Eastern shore of Crash Island."))
|
||||||
.put(new WorldPoint(1451, 3695, 0), "West side of Lizardman Canyon with Lizardman shaman.")
|
.put(new WorldPoint(1451, 3695, 0), new CoordinateClueInfo("West side of Lizardman Canyon with Lizardman shaman."))
|
||||||
.put(new WorldPoint(2538, 3739, 0), "Waterbirth Island. Bring a pet rock and rune thrownaxe.")
|
.put(new WorldPoint(2538, 3739, 0), new CoordinateClueInfo("Waterbirth Island. Bring a pet rock and rune thrownaxe."))
|
||||||
.put(new WorldPoint(1698, 3792, 0), "Arceuus church.")
|
.put(new WorldPoint(1698, 3792, 0), new CoordinateClueInfo("Arceuus church."))
|
||||||
.put(new WorldPoint(2951, 3820, 0), "Wilderness. Chaos Temple (level 38).")
|
.put(new WorldPoint(2951, 3820, 0), new CoordinateClueInfo("Wilderness. Chaos Temple (level 38)."))
|
||||||
.put(new WorldPoint(2202, 3825, 0), "Pirates' Cove, between Lunar Isle and Rellekka.")
|
.put(new WorldPoint(2202, 3825, 0), new CoordinateClueInfo("Pirates' Cove, between Lunar Isle and Rellekka."))
|
||||||
.put(new WorldPoint(1761, 3853, 0), "Arceuus essence mine (CIS).")
|
.put(new WorldPoint(1761, 3853, 0), new CoordinateClueInfo("Arceuus essence mine (CIS)."))
|
||||||
.put(new WorldPoint(2090, 3863, 0), "South of Lunar Isle, west of Astral altar.")
|
.put(new WorldPoint(2090, 3863, 0), new CoordinateClueInfo("South of Lunar Isle, west of Astral altar."))
|
||||||
.put(new WorldPoint(1442, 3878, 0), "Sulphur Mine.")
|
.put(new WorldPoint(1442, 3878, 0), new CoordinateClueInfo("Sulphur Mine."))
|
||||||
.put(new WorldPoint(3380, 3929, 0), "Wilderness. Near Volcano.")
|
.put(new WorldPoint(3380, 3929, 0), new CoordinateClueInfo("Wilderness. Near Volcano."))
|
||||||
.put(new WorldPoint(3188, 3939, 0), "Wilderness. Resource Area.")
|
.put(new WorldPoint(3188, 3939, 0), new CoordinateClueInfo("Wilderness. Resource Area."))
|
||||||
.put(new WorldPoint(3304, 3941, 0), "Wilderness. East of Rogues' Castle.")
|
.put(new WorldPoint(3304, 3941, 0), new CoordinateClueInfo("Wilderness. East of Rogues' Castle."))
|
||||||
.put(new WorldPoint(2994, 3961, 0), "Wilderness. Inside Agility Training Area.")
|
.put(new WorldPoint(2994, 3961, 0), new CoordinateClueInfo("Wilderness. Inside Agility Training Area."))
|
||||||
.put(new WorldPoint(1248, 3751, 0), "In the north wing of the Farming Guild.")
|
.put(new WorldPoint(1248, 3751, 0), new CoordinateClueInfo("In the north wing of the Farming Guild."))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
private final String text;
|
private final String text;
|
||||||
@@ -212,6 +237,13 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati
|
|||||||
this.text = text;
|
this.text = text;
|
||||||
this.location = location;
|
this.location = location;
|
||||||
this.mirrorLocation = mirrorLocation;
|
this.mirrorLocation = mirrorLocation;
|
||||||
|
|
||||||
|
final CoordinateClueInfo clueInfo = CLUES.get(location);
|
||||||
|
if (clueInfo != null)
|
||||||
|
{
|
||||||
|
setHasFirePit(clueInfo.getLightSource());
|
||||||
|
setRequiresLight(clueInfo.lightRequired);
|
||||||
|
}
|
||||||
setRequiresSpade(true);
|
setRequiresSpade(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,12 +265,12 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati
|
|||||||
{
|
{
|
||||||
panelComponent.getChildren().add(TitleComponent.builder().text("Coordinate Clue").build());
|
panelComponent.getChildren().add(TitleComponent.builder().text("Coordinate Clue").build());
|
||||||
|
|
||||||
String solution = CLUES.get(location);
|
final CoordinateClueInfo solution = CLUES.get(location);
|
||||||
|
|
||||||
if (solution != null)
|
if (solution != null)
|
||||||
{
|
{
|
||||||
panelComponent.getChildren().add(LineComponent.builder()
|
panelComponent.getChildren().add(LineComponent.builder()
|
||||||
.left(solution)
|
.left(solution.getDirections())
|
||||||
.build());
|
.build());
|
||||||
panelComponent.getChildren().add(LineComponent.builder().build());
|
panelComponent.getChildren().add(LineComponent.builder().build());
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-2
@@ -135,7 +135,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
|||||||
new CrypticClue("If you look closely enough, it seems that the archers have lost more than their needles.", HAYSTACK, new WorldPoint(2672, 3416, 0), "Search the haystack by the south corner of the Rangers' Guild"),
|
new CrypticClue("If you look closely enough, it seems that the archers have lost more than their needles.", HAYSTACK, new WorldPoint(2672, 3416, 0), "Search the haystack by the south corner of the Rangers' Guild"),
|
||||||
new CrypticClue("Search the crate in the left-hand tower of Lumbridge Castle.", CRATE_357, new WorldPoint(3228, 3212, 1), "Located on the first floor of the southern tower at the Lumbridge Castle entrance."),
|
new CrypticClue("Search the crate in the left-hand tower of Lumbridge Castle.", CRATE_357, new WorldPoint(3228, 3212, 1), "Located on the first floor of the southern tower at the Lumbridge Castle entrance."),
|
||||||
new CrypticClue("'Small shoe.' Often found with rod on mushroom.", "Gnome trainer", new WorldPoint(2476, 3428, 0), "Talk to any Gnome trainer in the agility area of the Tree Gnome Stronghold."),
|
new CrypticClue("'Small shoe.' Often found with rod on mushroom.", "Gnome trainer", new WorldPoint(2476, 3428, 0), "Talk to any Gnome trainer in the agility area of the Tree Gnome Stronghold."),
|
||||||
new CrypticClue("I live in a deserted crack collecting soles.", "Genie", new WorldPoint(3371, 9320, 0), "Enter the crack west of Nardah Rug merchant, and talk to the Genie. You'll need a light source and a rope."),
|
new CrypticClue("I live in a deserted crack collecting soles.", "Genie", new WorldPoint(3371, 9320, 0), "Enter the crack west of Nardah Rug merchant, and talk to the Genie. You'll need a light source and a rope.", true),
|
||||||
new CrypticClue("46 is my number. My body is the colour of burnt orange and crawls among those with eight. Three mouths I have, yet I cannot eat. My blinking blue eye hides my grave.", new WorldPoint(3170, 3885, 0), "Sapphire respawn in the Spider's Nest, lvl 46 Wilderness. Dig under the sapphire spawn."),
|
new CrypticClue("46 is my number. My body is the colour of burnt orange and crawls among those with eight. Three mouths I have, yet I cannot eat. My blinking blue eye hides my grave.", new WorldPoint(3170, 3885, 0), "Sapphire respawn in the Spider's Nest, lvl 46 Wilderness. Dig under the sapphire spawn."),
|
||||||
new CrypticClue("Green is the colour of my death as the winter-guise, I swoop towards the ground.", new WorldPoint(2780, 3783, 0), "Players need to slide down to where Trollweiss grows on Trollweiss Mountain."),
|
new CrypticClue("Green is the colour of my death as the winter-guise, I swoop towards the ground.", new WorldPoint(2780, 3783, 0), "Players need to slide down to where Trollweiss grows on Trollweiss Mountain."),
|
||||||
new CrypticClue("Talk to a party-goer in Falador.", "Lucy", new WorldPoint(3046, 3382, 0), "Lucy is the bartender on the first floor of the party room."),
|
new CrypticClue("Talk to a party-goer in Falador.", "Lucy", new WorldPoint(3046, 3382, 0), "Lucy is the bartender on the first floor of the party room."),
|
||||||
@@ -167,7 +167,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
|||||||
new CrypticClue("Search the drawers in Falador's chain mail shop.", DRAWERS, new WorldPoint(2969, 3311, 0), "Wayne's Chains - Chainmail Specialist store at the southern Falador walls."),
|
new CrypticClue("Search the drawers in Falador's chain mail shop.", DRAWERS, new WorldPoint(2969, 3311, 0), "Wayne's Chains - Chainmail Specialist store at the southern Falador walls."),
|
||||||
new CrypticClue("Talk to the barber in the Falador barber shop.", "Hairdresser", new WorldPoint(2945, 3379, 0), "The Hairdresser can be found in the barber shop, north of the west Falador bank."),
|
new CrypticClue("Talk to the barber in the Falador barber shop.", "Hairdresser", new WorldPoint(2945, 3379, 0), "The Hairdresser can be found in the barber shop, north of the west Falador bank."),
|
||||||
new CrypticClue("Often sought out by scholars of histories past, find me where words of wisdom speak volumes.", "Examiner", new WorldPoint(3362, 3341, 0), "Speak to an examiner at the Exam Centre."),
|
new CrypticClue("Often sought out by scholars of histories past, find me where words of wisdom speak volumes.", "Examiner", new WorldPoint(3362, 3341, 0), "Speak to an examiner at the Exam Centre."),
|
||||||
new CrypticClue("Generally speaking, his nose was very bent.", "General Bentnoze", new WorldPoint(2957, 3511, 0), "Talk to General Bentnoze"),
|
new CrypticClue("Generally speaking, his nose was very bent.", "General Bentnoze", new WorldPoint(2957, 3511, 0), "Talk to General Bentnoze in the Goblin Village north of Falador."),
|
||||||
new CrypticClue("Search the bush at the digsite centre.", BUSH_2357, new WorldPoint(3345, 3378, 0), "The bush is on the east side of the first pathway towards the digsite from the Exam Centre."),
|
new CrypticClue("Search the bush at the digsite centre.", BUSH_2357, new WorldPoint(3345, 3378, 0), "The bush is on the east side of the first pathway towards the digsite from the Exam Centre."),
|
||||||
new CrypticClue("Someone watching the fights in the Duel Arena is your next destination.", "Jeed", new WorldPoint(3360, 3242, 0), "Talk to Jeed, found on the upper floors, at the Duel Arena."),
|
new CrypticClue("Someone watching the fights in the Duel Arena is your next destination.", "Jeed", new WorldPoint(3360, 3242, 0), "Talk to Jeed, found on the upper floors, at the Duel Arena."),
|
||||||
new CrypticClue("It seems to have reached the end of the line, and it's still empty.", MINE_CART_6045, new WorldPoint(3041, 9820, 0), "Search the carts in the northern part of the Dwarven Mine."),
|
new CrypticClue("It seems to have reached the end of the line, and it's still empty.", MINE_CART_6045, new WorldPoint(3041, 9820, 0), "Search the carts in the northern part of the Dwarven Mine."),
|
||||||
@@ -349,6 +349,12 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
|
|||||||
this(text, npc, -1, location, solution, "");
|
this(text, npc, -1, location, solution, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CrypticClue(String text, String npc, WorldPoint location, String solution, boolean requiresLight)
|
||||||
|
{
|
||||||
|
this(text, npc, location, solution);
|
||||||
|
setRequiresLight(requiresLight);
|
||||||
|
}
|
||||||
|
|
||||||
private CrypticClue(String text, int objectId, WorldPoint location, String solution, String questionText)
|
private CrypticClue(String text, int objectId, WorldPoint location, String solution, String questionText)
|
||||||
{
|
{
|
||||||
this(text, null, objectId, location, solution, questionText);
|
this(text, null, objectId, location, solution, questionText);
|
||||||
|
|||||||
+9
-1
@@ -41,6 +41,7 @@ import net.runelite.api.ItemID;
|
|||||||
import static net.runelite.api.ItemID.*;
|
import static net.runelite.api.ItemID.*;
|
||||||
import net.runelite.api.Perspective;
|
import net.runelite.api.Perspective;
|
||||||
import net.runelite.api.ScriptID;
|
import net.runelite.api.ScriptID;
|
||||||
|
import net.runelite.api.Varbits;
|
||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR;
|
import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR;
|
||||||
@@ -114,7 +115,7 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
|
|||||||
new EmoteClue("Dance at the crossroads north of Draynor. Equip an iron chain body, a sapphire ring and a longbow.", "Draynor Village", CROSSROADS_NORTH_OF_DRAYNOR_VILLAGE, new WorldPoint(3109, 3294, 0), DANCE, item(IRON_CHAINBODY), item(SAPPHIRE_RING), item(LONGBOW)),
|
new EmoteClue("Dance at the crossroads north of Draynor. Equip an iron chain body, a sapphire ring and a longbow.", "Draynor Village", CROSSROADS_NORTH_OF_DRAYNOR_VILLAGE, new WorldPoint(3109, 3294, 0), DANCE, item(IRON_CHAINBODY), item(SAPPHIRE_RING), item(LONGBOW)),
|
||||||
new EmoteClue("Dance in the Party Room. Equip a steel full helmet, steel platebody and an iron plateskirt.", "Falador Party Room", OUTSIDE_THE_FALADOR_PARTY_ROOM, new WorldPoint(3045, 3376, 0), DANCE, item(STEEL_FULL_HELM), item(STEEL_PLATEBODY), item(IRON_PLATESKIRT)),
|
new EmoteClue("Dance in the Party Room. Equip a steel full helmet, steel platebody and an iron plateskirt.", "Falador Party Room", OUTSIDE_THE_FALADOR_PARTY_ROOM, new WorldPoint(3045, 3376, 0), DANCE, item(STEEL_FULL_HELM), item(STEEL_PLATEBODY), item(IRON_PLATESKIRT)),
|
||||||
new EmoteClue("Dance in the shack in Lumbridge Swamp. Equip a bronze dagger, iron full helmet and a gold ring.", "Lumbridge swamp", NEAR_A_SHED_IN_LUMBRIDGE_SWAMP, new WorldPoint(3203, 3169, 0), DANCE, item(BRONZE_DAGGER), item(IRON_FULL_HELM), item(GOLD_RING)),
|
new EmoteClue("Dance in the shack in Lumbridge Swamp. Equip a bronze dagger, iron full helmet and a gold ring.", "Lumbridge swamp", NEAR_A_SHED_IN_LUMBRIDGE_SWAMP, new WorldPoint(3203, 3169, 0), DANCE, item(BRONZE_DAGGER), item(IRON_FULL_HELM), item(GOLD_RING)),
|
||||||
new EmoteClue("Dance in the dark caves beneath Lumbridge Swamp. Blow a kiss before you talk to me. Equip an air staff, Bronze full helm and an amulet of power.", "Lumbridge swamp", LUMBRIDGE_SWAMP_CAVES, new WorldPoint(3168, 9571, 0), DANCE, BLOW_KISS, item(STAFF_OF_AIR), item(BRONZE_FULL_HELM), item(AMULET_OF_POWER)),
|
new EmoteClue("Dance in the dark caves beneath Lumbridge Swamp. Blow a kiss before you talk to me. Equip an air staff, Bronze full helm and an amulet of power.", "Lumbridge swamp caves", LUMBRIDGE_SWAMP_CAVES, new WorldPoint(3168, 9571, 0), DANCE, BLOW_KISS, Varbits.FIRE_PIT_LUMBRIDGE_SWAMP, item(STAFF_OF_AIR), item(BRONZE_FULL_HELM), item(AMULET_OF_POWER)),
|
||||||
new EmoteClue("Dance at the cat-doored pyramid in Sophanem. Beware of double agents! Equip a ring of life, an uncharged amulet of glory and an adamant two-handed sword.", "Pyramid Of Sophanem", OUTSIDE_THE_GREAT_PYRAMID_OF_SOPHANEM, new WorldPoint(3294, 2781, 0), DANCE, item(RING_OF_LIFE), item(AMULET_OF_GLORY), item(ADAMANT_2H_SWORD)),
|
new EmoteClue("Dance at the cat-doored pyramid in Sophanem. Beware of double agents! Equip a ring of life, an uncharged amulet of glory and an adamant two-handed sword.", "Pyramid Of Sophanem", OUTSIDE_THE_GREAT_PYRAMID_OF_SOPHANEM, new WorldPoint(3294, 2781, 0), DANCE, item(RING_OF_LIFE), item(AMULET_OF_GLORY), item(ADAMANT_2H_SWORD)),
|
||||||
new EmoteClue("Dance in the centre of Canifis. Bow before you talk to me. Equip a green gnome robe top, mithril plate legs and an iron two-handed sword.", "Canifis", CENTRE_OF_CANIFIS, new WorldPoint(3492, 3488, 0), DANCE, BOW, item(GREEN_ROBE_TOP), item(MITHRIL_PLATELEGS), item(IRON_2H_SWORD)),
|
new EmoteClue("Dance in the centre of Canifis. Bow before you talk to me. Equip a green gnome robe top, mithril plate legs and an iron two-handed sword.", "Canifis", CENTRE_OF_CANIFIS, new WorldPoint(3492, 3488, 0), DANCE, BOW, item(GREEN_ROBE_TOP), item(MITHRIL_PLATELEGS), item(IRON_2H_SWORD)),
|
||||||
new EmoteClue("Dance in the King Black Dragon's lair. Beware of double agents! Equip a black dragonhide body, black dragonhide vambs and a black dragon mask.", "King black dragon's lair", KING_BLACK_DRAGONS_LAIR, new WorldPoint(2271, 4680, 0), DANCE, item(BLACK_DHIDE_BODY), item(BLACK_DHIDE_VAMB), item(BLACK_DRAGON_MASK)),
|
new EmoteClue("Dance in the King Black Dragon's lair. Beware of double agents! Equip a black dragonhide body, black dragonhide vambs and a black dragon mask.", "King black dragon's lair", KING_BLACK_DRAGONS_LAIR, new WorldPoint(2271, 4680, 0), DANCE, item(BLACK_DHIDE_BODY), item(BLACK_DHIDE_VAMB), item(BLACK_DRAGON_MASK)),
|
||||||
@@ -211,6 +212,13 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
|
|||||||
this.itemRequirements = itemRequirements;
|
this.itemRequirements = itemRequirements;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private EmoteClue(String text, String locationName, @Nullable STASHUnit stashUnit, WorldPoint location, Emote firstEmote, Emote secondEmote, @Nonnull Varbits firePit, @Nonnull ItemRequirement... itemRequirements)
|
||||||
|
{
|
||||||
|
this(text, locationName, stashUnit, location, firstEmote, secondEmote, itemRequirements);
|
||||||
|
setRequiresLight(true);
|
||||||
|
setHasFirePit(firePit);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin)
|
public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin)
|
||||||
{
|
{
|
||||||
|
|||||||
+33
-33
@@ -43,18 +43,18 @@ import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.
|
|||||||
public enum HotColdLocation
|
public enum HotColdLocation
|
||||||
{
|
{
|
||||||
ASGARNIA_WARRIORS(new WorldPoint(2860, 3562, 0), ASGARNIA, "North of the Warriors' Guild in Burthorpe."),
|
ASGARNIA_WARRIORS(new WorldPoint(2860, 3562, 0), ASGARNIA, "North of the Warriors' Guild in Burthorpe."),
|
||||||
ASGARNIA_JATIX(new WorldPoint(2914, 3429, 0), ASGARNIA, "East of Jatix's Herblore Shop in Taverley."),
|
ASGARNIA_JATIX(new WorldPoint(2915, 3425, 0), ASGARNIA, "East of Jatix's Herblore Shop in Taverley."),
|
||||||
ASGARNIA_BARB(new WorldPoint(3036, 3439, 0), ASGARNIA, "West of Barbarian Village."),
|
ASGARNIA_BARB(new WorldPoint(3036, 3439, 0), ASGARNIA, "West of Barbarian Village."),
|
||||||
ASGARNIA_MIAZRQA(new WorldPoint(2973, 3489, 0), ASGARNIA, "North of Miazrqa's tower, outside Goblin Village."),
|
ASGARNIA_MIAZRQA(new WorldPoint(2973, 3489, 0), ASGARNIA, "North of Miazrqa's tower, outside Goblin Village."),
|
||||||
ASGARNIA_COW(new WorldPoint(3033, 3308, 0), ASGARNIA, "In the cow pen north of Sarah's Farming Shop."),
|
ASGARNIA_COW(new WorldPoint(3033, 3308, 0), ASGARNIA, "In the cow pen north of Sarah's Farming Shop."),
|
||||||
ASGARNIA_PARTY_ROOM(new WorldPoint(3026, 3363, 0), ASGARNIA, "Outside the Falador Party Room."),
|
ASGARNIA_PARTY_ROOM(new WorldPoint(3026, 3363, 0), ASGARNIA, "Outside the Falador Party Room."),
|
||||||
ASGARNIA_CRAFT_GUILD(new WorldPoint(2917, 3295, 0), ASGARNIA, "Outside the Crafting Guild cow pen."),
|
ASGARNIA_CRAFT_GUILD(new WorldPoint(2917, 3295, 0), ASGARNIA, "Outside the Crafting Guild cow pen."),
|
||||||
ASGARNIA_RIMMINGTON(new WorldPoint(2978, 3241, 0), ASGARNIA, "In the centre of the Rimmington mine."),
|
ASGARNIA_RIMMINGTON(new WorldPoint(2978, 3241, 0), ASGARNIA, "In the centre of the Rimmington mine."),
|
||||||
ASGARNIA_MUDSKIPPER(new WorldPoint(2984, 3109, 0), ASGARNIA, "Mudskipper Point, on the starfish in the south-west corner."),
|
ASGARNIA_MUDSKIPPER(new WorldPoint(2987, 3110, 0), ASGARNIA, "Mudskipper Point, near the starfish in the south-west corner."),
|
||||||
ASGARNIA_TROLL(new WorldPoint(2910, 3616, 0), ASGARNIA, "The Troll arena, where the player fights Dad during the Troll Stronghold quest. Bring climbing boots if travelling from Burthorpe."),
|
ASGARNIA_TROLL(new WorldPoint(2910, 3616, 0), ASGARNIA, "The Troll arena, where the player fights Dad during the Troll Stronghold quest. Bring climbing boots if travelling from Burthorpe."),
|
||||||
DESERT_GENIE(new WorldPoint(3364, 2910, 0), DESERT, "West of Nardah genie cave."),
|
DESERT_GENIE(new WorldPoint(3364, 2910, 0), DESERT, "West of Nardah genie cave."),
|
||||||
DESERT_ALKHARID_MINE(new WorldPoint(3282, 3270, 0), DESERT, "West of Al Kharid mine."),
|
DESERT_ALKHARID_MINE(new WorldPoint(3282, 3270, 0), DESERT, "West of Al Kharid mine."),
|
||||||
DESERT_MENAPHOS_GATE(new WorldPoint(3224, 2816, 0), DESERT, "North of Menaphos gate."),
|
DESERT_MENAPHOS_GATE(new WorldPoint(3223, 2820, 0), DESERT, "North of Menaphos gate."),
|
||||||
DESERT_BEDABIN_CAMP(new WorldPoint(3164, 3050, 0), DESERT, "Bedabin Camp, dig around the north tent."),
|
DESERT_BEDABIN_CAMP(new WorldPoint(3164, 3050, 0), DESERT, "Bedabin Camp, dig around the north tent."),
|
||||||
DESERT_UZER(new WorldPoint(3431, 3106, 0), DESERT, "West of Uzer."),
|
DESERT_UZER(new WorldPoint(3431, 3106, 0), DESERT, "West of Uzer."),
|
||||||
DESERT_POLLNIVNEACH(new WorldPoint(3287, 2975, 0), DESERT, "West of Pollnivneach."),
|
DESERT_POLLNIVNEACH(new WorldPoint(3287, 2975, 0), DESERT, "West of Pollnivneach."),
|
||||||
@@ -62,59 +62,59 @@ public enum HotColdLocation
|
|||||||
DESERT_SHANTY(new WorldPoint(3294, 3106, 0), DESERT, "South-west of Shantay Pass."),
|
DESERT_SHANTY(new WorldPoint(3294, 3106, 0), DESERT, "South-west of Shantay Pass."),
|
||||||
DRAYNOR_MANOR_MUSHROOMS(true, new WorldPoint(3096, 3379, 0), MISTHALIN, "Patch of mushrooms just northwest of Draynor Manor"),
|
DRAYNOR_MANOR_MUSHROOMS(true, new WorldPoint(3096, 3379, 0), MISTHALIN, "Patch of mushrooms just northwest of Draynor Manor"),
|
||||||
DRAYNOR_WHEAT_FIELD(true, new WorldPoint(3120, 3282, 0), MISTHALIN, "Inside the wheat field next to Draynor Village"),
|
DRAYNOR_WHEAT_FIELD(true, new WorldPoint(3120, 3282, 0), MISTHALIN, "Inside the wheat field next to Draynor Village"),
|
||||||
FELDIP_HILLS_JIGGIG(new WorldPoint(2413, 3055, 0), FELDIP_HILLS, "West of Jiggig, east of the fairy ring bkp."),
|
FELDIP_HILLS_JIGGIG(new WorldPoint(2409, 3053, 0), FELDIP_HILLS, "West of Jiggig, east of the fairy ring bkp."),
|
||||||
FELDIP_HILLS_SW(new WorldPoint(2582, 2895, 0), FELDIP_HILLS, "West of the southeasternmost lake in Feldip Hills."),
|
FELDIP_HILLS_SW(new WorldPoint(2586, 2897, 0), FELDIP_HILLS, "West of the southeasternmost lake in Feldip Hills."),
|
||||||
FELDIP_HILLS_GNOME_GLITER(new WorldPoint(2553, 2972, 0), FELDIP_HILLS, "East of the gnome glider (Lemantolly Undri)."),
|
FELDIP_HILLS_GNOME_GLITER(new WorldPoint(2555, 2972, 0), FELDIP_HILLS, "East of the gnome glider (Lemantolly Undri)."),
|
||||||
FELDIP_HILLS_RANTZ(new WorldPoint(2611, 2946, 0), FELDIP_HILLS, "South of Rantz, six steps west of the empty glass bottles."),
|
FELDIP_HILLS_RANTZ(new WorldPoint(2611, 2946, 0), FELDIP_HILLS, "South of Rantz, six steps west of the empty glass bottles."),
|
||||||
FELDIP_HILLS_SOUTH(new WorldPoint(2487, 3005, 0), FELDIP_HILLS, "South of Jiggig."),
|
FELDIP_HILLS_SOUTH(new WorldPoint(2487, 3005, 0), FELDIP_HILLS, "South of Jiggig."),
|
||||||
FELDIP_HILLS_RED_CHIN(new WorldPoint(2532, 2900, 0), FELDIP_HILLS, "Outside the red chinchompa hunting ground entrance, south of the Hunting expert's hut."),
|
FELDIP_HILLS_RED_CHIN(new WorldPoint(2532, 2900, 0), FELDIP_HILLS, "Outside the red chinchompa hunting ground entrance, south of the Hunting expert's hut."),
|
||||||
FELDIP_HILLS_SE(new WorldPoint(2567, 2916, 0), FELDIP_HILLS, "South-east of the ∩-shaped lake, near the icon."),
|
FELDIP_HILLS_SE(new WorldPoint(2567, 2916, 0), FELDIP_HILLS, "South-east of the ∩-shaped lake, near the icon."),
|
||||||
FELDIP_HILLS_CW_BALLOON(new WorldPoint(2452, 3108, 0), FELDIP_HILLS, "Directly west of the Castle Wars balloon."),
|
FELDIP_HILLS_CW_BALLOON(new WorldPoint(2452, 3108, 0), FELDIP_HILLS, "Directly west of the Castle Wars balloon."),
|
||||||
FREMENNIK_PROVINCE_MTN_CAMP(new WorldPoint(2804, 3672, 0), FREMENNIK_PROVINCE, "At the Mountain Camp."),
|
FREMENNIK_PROVINCE_MTN_CAMP(new WorldPoint(2800, 3669, 0), FREMENNIK_PROVINCE, "At the Mountain Camp."),
|
||||||
FREMENNIK_PROVINCE_RELLEKKA_HUNTER(new WorldPoint(2724, 3783, 0), FREMENNIK_PROVINCE, "At the Rellekka Hunter area, near the icon."),
|
FREMENNIK_PROVINCE_RELLEKKA_HUNTER(new WorldPoint(2724, 3783, 0), FREMENNIK_PROVINCE, "At the Rellekka Hunter area, near the icon."),
|
||||||
FREMENNIK_PROVINCE_KELGADRIM_ENTRANCE(new WorldPoint(2715, 3689, 0), FREMENNIK_PROVINCE, "West of the Keldagrim entrance mine."),
|
FREMENNIK_PROVINCE_KELGADRIM_ENTRANCE(new WorldPoint(2715, 3689, 0), FREMENNIK_PROVINCE, "West of the Keldagrim entrance mine."),
|
||||||
FREMENNIK_PROVINCE_SW(new WorldPoint(2605, 3648, 0), FREMENNIK_PROVINCE, "Outside the fence in the south-western corner of Rellekka."),
|
FREMENNIK_PROVINCE_SW(new WorldPoint(2605, 3648, 0), FREMENNIK_PROVINCE, "Outside the fence in the south-western corner of Rellekka."),
|
||||||
FREMENNIK_PROVINCE_LIGHTHOUSE(new WorldPoint(2589, 3598, 0), FREMENNIK_PROVINCE, "South-east of the Lighthouse."),
|
FREMENNIK_PROVINCE_LIGHTHOUSE(new WorldPoint(2585, 3601, 0), FREMENNIK_PROVINCE, "South-east of the Lighthouse."),
|
||||||
FREMENNIK_PROVINCE_ETCETERIA_CASTLE(new WorldPoint(2614, 3867, 0), FREMENNIK_PROVINCE, "Inside Etceteria's castle, in the southern staircase."),
|
FREMENNIK_PROVINCE_ETCETERIA_CASTLE(new WorldPoint(2617, 3862, 0), FREMENNIK_PROVINCE, "South-east of Etceteria's castle."),
|
||||||
FREMENNIK_PROVINCE_MISC_COURTYARD(new WorldPoint(2529, 3867, 0), FREMENNIK_PROVINCE, "Outside Miscellania's courtyard."),
|
FREMENNIK_PROVINCE_MISC_COURTYARD(new WorldPoint(2527, 3868, 0), FREMENNIK_PROVINCE, "Outside Miscellania's courtyard."),
|
||||||
FREMENNIK_PROVINCE_FREMMY_ISLES_MINE(new WorldPoint(2378, 3849, 0), FREMENNIK_PROVINCE, "Central Fremennik Isles mine."),
|
FREMENNIK_PROVINCE_FREMMY_ISLES_MINE(new WorldPoint(2374, 3850, 0), FREMENNIK_PROVINCE, "Central Fremennik Isles mine."),
|
||||||
FREMENNIK_PROVINCE_WEST_ISLES_MINE(new WorldPoint(2313, 3854, 0), FREMENNIK_PROVINCE, "West Fremennik Isles mine."),
|
FREMENNIK_PROVINCE_WEST_ISLES_MINE(new WorldPoint(2313, 3854, 0), FREMENNIK_PROVINCE, "West Fremennik Isles mine."),
|
||||||
FREMENNIK_PROVINCE_WEST_JATIZSO_ENTRANCE(new WorldPoint(2391, 3813, 0), FREMENNIK_PROVINCE, "West of the Jatizso mine entrance."),
|
FREMENNIK_PROVINCE_WEST_JATIZSO_ENTRANCE(new WorldPoint(2391, 3813, 0), FREMENNIK_PROVINCE, "West of the Jatizso mine entrance."),
|
||||||
FREMENNIK_PROVINCE_PIRATES_COVE(new WorldPoint(2210, 3814, 0), FREMENNIK_PROVINCE, "Pirates' Cove"),
|
FREMENNIK_PROVINCE_PIRATES_COVE(new WorldPoint(2210, 3814, 0), FREMENNIK_PROVINCE, "Pirates' Cove"),
|
||||||
FREMENNIK_PROVINCE_ASTRAL_ALTER(new WorldPoint(2147, 3862, 0), FREMENNIK_PROVINCE, "Astral altar"),
|
FREMENNIK_PROVINCE_ASTRAL_ALTER(new WorldPoint(2147, 3862, 0), FREMENNIK_PROVINCE, "Astral altar"),
|
||||||
FREMENNIK_PROVINCE_LUNAR_VILLAGE(new WorldPoint(2087, 3915, 0), FREMENNIK_PROVINCE, "Lunar Isle, inside the village."),
|
FREMENNIK_PROVINCE_LUNAR_VILLAGE(new WorldPoint(2084, 3916, 0), FREMENNIK_PROVINCE, "Lunar Isle, inside the village."),
|
||||||
FREMENNIK_PROVINCE_LUNAR_NORTH(new WorldPoint(2106, 3949, 0), FREMENNIK_PROVINCE, "Lunar Isle, north of the village."),
|
FREMENNIK_PROVINCE_LUNAR_NORTH(new WorldPoint(2106, 3949, 0), FREMENNIK_PROVINCE, "Lunar Isle, north of the village."),
|
||||||
ICE_MOUNTAIN(true, new WorldPoint(3007, 3475, 0), MISTHALIN, "Atop Ice Mountain"),
|
ICE_MOUNTAIN(true, new WorldPoint(3007, 3475, 0), MISTHALIN, "Atop Ice Mountain"),
|
||||||
KANDARIN_SINCLAR_MANSION(new WorldPoint(2726, 3588, 0), KANDARIN, "North-west of the Sinclair Mansion, near the log balance shortcut."),
|
KANDARIN_SINCLAR_MANSION(new WorldPoint(2730, 3588, 0), KANDARIN, "North-west of the Sinclair Mansion, near the log balance shortcut."),
|
||||||
KANDARIN_CATHERBY(new WorldPoint(2774, 3433, 0), KANDARIN, "Catherby, between the bank and the beehives, near small rock formation."),
|
KANDARIN_CATHERBY(new WorldPoint(2774, 3433, 0), KANDARIN, "Catherby, between the bank and the beehives, near small rock formation."),
|
||||||
KANDARIN_GRAND_TREE(new WorldPoint(2444, 3503, 0), KANDARIN, "Grand Tree, just east of the terrorchick gnome enclosure."),
|
KANDARIN_GRAND_TREE(new WorldPoint(2448, 3503, 0), KANDARIN, "Grand Tree, just east of the terrorchick gnome enclosure."),
|
||||||
KANDARIN_SEERS(new WorldPoint(2735, 3486, 0), KANDARIN, "Between the Seers' Village bank and Camelot."),
|
KANDARIN_SEERS(new WorldPoint(2735, 3486, 0), KANDARIN, "Between the Seers' Village bank and Camelot."),
|
||||||
KANDARIN_MCGRUBORS_WOOD(new WorldPoint(2653, 3485, 0), KANDARIN, "McGrubor's Wood"),
|
KANDARIN_MCGRUBORS_WOOD(new WorldPoint(2653, 3485, 0), KANDARIN, "McGrubor's Wood"),
|
||||||
KANDARIN_FISHING_BUILD(new WorldPoint(2586, 3372, 0), KANDARIN, "South of Fishing Guild"),
|
KANDARIN_FISHING_BUILD(new WorldPoint(2586, 3372, 0), KANDARIN, "South of Fishing Guild"),
|
||||||
KANDARIN_WITCHHAVEN(new WorldPoint(2708, 3304, 0), KANDARIN, "Outside Witchaven, west of Jeb, Holgart, and Caroline."),
|
KANDARIN_WITCHHAVEN(new WorldPoint(2708, 3304, 0), KANDARIN, "Outside Witchaven, west of Jeb, Holgart, and Caroline."),
|
||||||
KANDARIN_NECRO_TOWER(new WorldPoint(2669, 3242, 0), KANDARIN, "Ground floor inside the Necromancer Tower. Easily accessed by using fairy ring code djp."),
|
KANDARIN_NECRO_TOWER(new WorldPoint(2667, 3241, 0), KANDARIN, "Ground floor inside the Necromancer Tower. Easily accessed by using fairy ring code djp."),
|
||||||
KANDARIN_FIGHT_ARENA(new WorldPoint(2587, 3134, 0), KANDARIN, "South of the Fight Arena, north-west of the Nightmare Zone."),
|
KANDARIN_FIGHT_ARENA(new WorldPoint(2587, 3135, 0), KANDARIN, "South of the Fight Arena, north-west of the Nightmare Zone."),
|
||||||
KANDARIN_TREE_GNOME_VILLAGE(new WorldPoint(2526, 3160, 0), KANDARIN, "Tree Gnome Village, near the general store icon."),
|
KANDARIN_TREE_GNOME_VILLAGE(new WorldPoint(2526, 3160, 0), KANDARIN, "Tree Gnome Village, near the general store icon."),
|
||||||
KANDARIN_GRAVE_OF_SCORPIUS(new WorldPoint(2464, 3228, 0), KANDARIN, "Grave of Scorpius"),
|
KANDARIN_GRAVE_OF_SCORPIUS(new WorldPoint(2464, 3228, 0), KANDARIN, "Grave of Scorpius"),
|
||||||
KANDARIN_KHAZARD_BATTLEFIELD(new WorldPoint(2518, 3249, 0), KANDARIN, "Khazard Battlefield, in the small ruins south of tracker gnome 2."),
|
KANDARIN_KHAZARD_BATTLEFIELD(new WorldPoint(2518, 3249, 0), KANDARIN, "Khazard Battlefield, in the small ruins south of tracker gnome 2."),
|
||||||
KANDARIN_WEST_ARDY(new WorldPoint(2533, 3320, 0), KANDARIN, "West Ardougne, near the staircase outside the Civic Office."),
|
KANDARIN_WEST_ARDY(new WorldPoint(2535, 3322, 0), KANDARIN, "West Ardougne, near the staircase outside the Civic Office."),
|
||||||
KANDARIN_SW_TREE_GNOME_STRONGHOLD(new WorldPoint(2411, 3431, 0), KANDARIN, "South-west Tree Gnome Stronghold"),
|
KANDARIN_SW_TREE_GNOME_STRONGHOLD(new WorldPoint(2411, 3431, 0), KANDARIN, "South-west Tree Gnome Stronghold"),
|
||||||
KANDARIN_OUTPOST(new WorldPoint(2458, 3364, 0), KANDARIN, "South of the Tree Gnome Stronghold, north-east of the Outpost."),
|
KANDARIN_OUTPOST(new WorldPoint(2458, 3364, 0), KANDARIN, "South of the Tree Gnome Stronghold, north-east of the Outpost."),
|
||||||
KANDARIN_BAXTORIAN_FALLS(new WorldPoint(2534, 3479, 0), KANDARIN, "South-east of Almera's house on Baxtorian Falls."),
|
KANDARIN_BAXTORIAN_FALLS(new WorldPoint(2534, 3479, 0), KANDARIN, "South-east of Almera's house on Baxtorian Falls."),
|
||||||
KANDARIN_BA_AGILITY_COURSE(new WorldPoint(2536, 3546, 0), KANDARIN, "Inside the Barbarian Agility Course. Completion of Alfred Grimhand's Barcrawl is required."),
|
KANDARIN_BA_AGILITY_COURSE(new WorldPoint(2540, 3548, 0), KANDARIN, "Inside the Barbarian Agility Course. Completion of Alfred Grimhand's Barcrawl is required."),
|
||||||
KARAMJA_MUSA_POINT(new WorldPoint(2914, 3168, 0), KARAMJA, "Musa Point, banana plantation."),
|
KARAMJA_MUSA_POINT(new WorldPoint(2914, 3168, 0), KARAMJA, "Musa Point, banana plantation."),
|
||||||
KARAMJA_BRIMHAVEN_FRUIT_TREE(new WorldPoint(2783, 3214, 0), KARAMJA, "Brimhaven, east of the fruit tree patch."),
|
KARAMJA_BRIMHAVEN_FRUIT_TREE(new WorldPoint(2782, 3215, 0), KARAMJA, "Brimhaven, east of the fruit tree patch."),
|
||||||
KARAMJA_WEST_BRIMHAVEN(new WorldPoint(2721, 3169, 0), KARAMJA, "West of Brimhaven."),
|
KARAMJA_WEST_BRIMHAVEN(new WorldPoint(2721, 3169, 0), KARAMJA, "West of Brimhaven."),
|
||||||
KARAMJA_GLIDER(new WorldPoint(2966, 2975, 0), KARAMJA, "West of the gnome glider."),
|
KARAMJA_GLIDER(new WorldPoint(2966, 2975, 0), KARAMJA, "West of the gnome glider."),
|
||||||
KARAMJA_KHARAZI_NE(new WorldPoint(2904, 2925, 0), KARAMJA, "North-eastern part of Kharazi Jungle."),
|
KARAMJA_KHARAZI_NE(new WorldPoint(2904, 2925, 0), KARAMJA, "North-eastern part of Kharazi Jungle."),
|
||||||
KARAMJA_KHARAZI_SW(new WorldPoint(2783, 2898, 0), KARAMJA, "South-western part of Kharazi Jungle."),
|
KARAMJA_KHARAZI_SW(new WorldPoint(2783, 2898, 0), KARAMJA, "South-western part of Kharazi Jungle."),
|
||||||
KARAMJA_CRASH_ISLAND(new WorldPoint(2910, 2737, 0), KARAMJA, "Northern part of Crash Island."),
|
KARAMJA_CRASH_ISLAND(new WorldPoint(2909, 2737, 0), KARAMJA, "Northern part of Crash Island."),
|
||||||
LUMBRIDGE_COW_FIELD(true, new WorldPoint(3174, 3336, 0), MISTHALIN, "Cow field north of Lumbridge"),
|
LUMBRIDGE_COW_FIELD(true, new WorldPoint(3174, 3336, 0), MISTHALIN, "Cow field north of Lumbridge"),
|
||||||
MISTHALIN_VARROCK_STONE_CIRCLE(new WorldPoint(3225, 3355, 0), MISTHALIN, "South of the stone circle near Varrock's entrance."),
|
MISTHALIN_VARROCK_STONE_CIRCLE(new WorldPoint(3225, 3355, 0), MISTHALIN, "South of the stone circle near Varrock's entrance."),
|
||||||
MISTHALIN_LUMBRIDGE(new WorldPoint(3238, 3169, 0), MISTHALIN, "Just north-west of the Lumbridge Fishing tutor."),
|
MISTHALIN_LUMBRIDGE(new WorldPoint(3238, 3169, 0), MISTHALIN, "Just north-west of the Lumbridge Fishing tutor."),
|
||||||
MISTHALIN_LUMBRIDGE_2(new WorldPoint(3170, 3278, 0), MISTHALIN, "North of the pond between Lumbridge and Draynor Village."),
|
MISTHALIN_LUMBRIDGE_2(new WorldPoint(3170, 3278, 0), MISTHALIN, "North of the pond between Lumbridge and Draynor Village."),
|
||||||
MISTHALIN_GERTUDES(new WorldPoint(3158, 3421, 0), MISTHALIN, "North-east of Gertrude's house west of Varrock."),
|
MISTHALIN_GERTUDES(new WorldPoint(3158, 3421, 0), MISTHALIN, "North-east of Gertrude's house west of Varrock."),
|
||||||
MISTHALIN_DRAYNOR_BANK(new WorldPoint(3096, 3235, 0), MISTHALIN, "South of Draynor Village bank."),
|
MISTHALIN_DRAYNOR_BANK(new WorldPoint(3098, 3234, 0), MISTHALIN, "South of Draynor Village bank."),
|
||||||
MISTHALIN_LUMBER_YARD(new WorldPoint(3303, 3483, 0), MISTHALIN, "South of Lumber Yard, east of Assistant Serf."),
|
MISTHALIN_LUMBER_YARD(new WorldPoint(3303, 3483, 0), MISTHALIN, "South of Lumber Yard, east of Assistant Serf."),
|
||||||
MORYTANIA_BURGH_DE_ROTT(new WorldPoint(3545, 3253, 0), MORYTANIA, "In the north-east area of Burgh de Rott, by the reverse-L-shaped ruins."),
|
MORYTANIA_BURGH_DE_ROTT(new WorldPoint(3545, 3253, 0), MORYTANIA, "In the north-east area of Burgh de Rott, by the reverse-L-shaped ruins."),
|
||||||
MORYTANIA_PORT_PHASMATYS(new WorldPoint(3613, 3485, 0), MORYTANIA, "West of Port Phasmatys, south-east of fairy ring."),
|
MORYTANIA_PORT_PHASMATYS(new WorldPoint(3613, 3485, 0), MORYTANIA, "West of Port Phasmatys, south-east of fairy ring."),
|
||||||
@@ -124,22 +124,22 @@ public enum HotColdLocation
|
|||||||
MORYTANIA_MAUSOLEUM(new WorldPoint(3499, 3539, 0), MORYTANIA, "South of the Mausoleum."),
|
MORYTANIA_MAUSOLEUM(new WorldPoint(3499, 3539, 0), MORYTANIA, "South of the Mausoleum."),
|
||||||
MORYTANIA_MOS_LES_HARMLESS(new WorldPoint(3744, 3041, 0), MORYTANIA, "Northern area of Mos Le'Harmless, between the lakes."),
|
MORYTANIA_MOS_LES_HARMLESS(new WorldPoint(3744, 3041, 0), MORYTANIA, "Northern area of Mos Le'Harmless, between the lakes."),
|
||||||
MORYTANIA_MOS_LES_HARMLESS_BAR(new WorldPoint(3670, 2974, 0), MORYTANIA, "Near Mos Le'Harmless southern bar."),
|
MORYTANIA_MOS_LES_HARMLESS_BAR(new WorldPoint(3670, 2974, 0), MORYTANIA, "Near Mos Le'Harmless southern bar."),
|
||||||
MORYTANIA_DRAGONTOOTH_NORTH(new WorldPoint(3813, 3567, 0), MORYTANIA, "Northern part of Dragontooth Island."),
|
MORYTANIA_DRAGONTOOTH_NORTH(new WorldPoint(3811, 3569, 0), MORYTANIA, "Northern part of Dragontooth Island."),
|
||||||
MORYTANIA_DRAGONTOOTH_SOUTH(new WorldPoint(3803, 3532, 0), MORYTANIA, "Southern part of Dragontooth Island."),
|
MORYTANIA_DRAGONTOOTH_SOUTH(new WorldPoint(3803, 3532, 0), MORYTANIA, "Southern part of Dragontooth Island."),
|
||||||
NORTHEAST_OF_AL_KHARID_MINE(true, new WorldPoint(3332, 3313, 0), MISTHALIN, "Northeast of Al Kharid Mine"),
|
NORTHEAST_OF_AL_KHARID_MINE(true, new WorldPoint(3332, 3313, 0), MISTHALIN, "Northeast of Al Kharid Mine"),
|
||||||
WESTERN_PROVINCE_EAGLES_PEAK(new WorldPoint(2297, 3530, 0), WESTERN_PROVINCE, "North-west of Eagles' Peak."),
|
WESTERN_PROVINCE_EAGLES_PEAK(new WorldPoint(2297, 3529, 0), WESTERN_PROVINCE, "North-west of Eagles' Peak."),
|
||||||
WESTERN_PROVINCE_PISCATORIS(new WorldPoint(2337, 3689, 0), WESTERN_PROVINCE, "Piscatoris Fishing Colony"),
|
WESTERN_PROVINCE_PISCATORIS(new WorldPoint(2334, 3685, 0), WESTERN_PROVINCE, "Piscatoris Fishing Colony"),
|
||||||
WESTERN_PROVINCE_PISCATORIS_HUNTER_AREA(new WorldPoint(2359, 3564, 0), WESTERN_PROVINCE, "Eastern part of Piscatoris Hunter area, south-west of the Falconry."),
|
WESTERN_PROVINCE_PISCATORIS_HUNTER_AREA(new WorldPoint(2359, 3564, 0), WESTERN_PROVINCE, "Eastern part of Piscatoris Hunter area, south-west of the Falconry."),
|
||||||
WESTERN_PROVINCE_ARANDAR(new WorldPoint(2366, 3318, 0), WESTERN_PROVINCE, "South-west of the crystal gate to Arandar."),
|
WESTERN_PROVINCE_ARANDAR(new WorldPoint(2370, 3319, 0), WESTERN_PROVINCE, "South-west of the crystal gate to Arandar."),
|
||||||
WESTERN_PROVINCE_ELF_CAMP_EAST(new WorldPoint(2270, 3244, 0), WESTERN_PROVINCE, "East of Iorwerth Camp."),
|
WESTERN_PROVINCE_ELF_CAMP_EAST(new WorldPoint(2270, 3244, 0), WESTERN_PROVINCE, "East of Iorwerth Camp."),
|
||||||
WESTERN_PROVINCE_ELF_CAMP_NW(new WorldPoint(2174, 3280, 0), WESTERN_PROVINCE, "North-west of Iorwerth Camp."),
|
WESTERN_PROVINCE_ELF_CAMP_NW(new WorldPoint(2174, 3280, 0), WESTERN_PROVINCE, "North-west of Iorwerth Camp."),
|
||||||
WESTERN_PROVINCE_LLETYA(new WorldPoint(2335, 3166, 0), WESTERN_PROVINCE, "In Lletya."),
|
WESTERN_PROVINCE_LLETYA(new WorldPoint(2337, 3166, 0), WESTERN_PROVINCE, "In Lletya."),
|
||||||
WESTERN_PROVINCE_TYRAS(new WorldPoint(2204, 3157, 0), WESTERN_PROVINCE, "Near Tyras Camp."),
|
WESTERN_PROVINCE_TYRAS(new WorldPoint(2204, 3157, 0), WESTERN_PROVINCE, "Near Tyras Camp."),
|
||||||
WESTERN_PROVINCE_ZULANDRA(new WorldPoint(2196, 3057, 0), WESTERN_PROVINCE, "The northern house at Zul-Andra."),
|
WESTERN_PROVINCE_ZULANDRA(new WorldPoint(2196, 3057, 0), WESTERN_PROVINCE, "The northern house at Zul-Andra."),
|
||||||
WILDERNESS_5(new WorldPoint(3173, 3556, 0), WILDERNESS, "North of the Grand Exchange, level 5 Wilderness."),
|
WILDERNESS_5(new WorldPoint(3173, 3556, 0), WILDERNESS, "North of the Grand Exchange, level 5 Wilderness."),
|
||||||
WILDERNESS_12(new WorldPoint(3038, 3612, 0), WILDERNESS, "South-east of the Dark Warriors' Fortress, level 12 Wilderness."),
|
WILDERNESS_12(new WorldPoint(3038, 3612, 0), WILDERNESS, "South-east of the Dark Warriors' Fortress, level 12 Wilderness."),
|
||||||
WILDERNESS_20(new WorldPoint(3225, 3676, 0), WILDERNESS, "East of the Corporeal Beast's lair, level 20 Wilderness."),
|
WILDERNESS_20(new WorldPoint(3225, 3676, 0), WILDERNESS, "East of the Corporeal Beast's lair, level 20 Wilderness."),
|
||||||
WILDERNESS_27(new WorldPoint(3174, 3735, 0), WILDERNESS, "Inside the Ruins north of the Graveyard of Shadows, level 27 Wilderness."),
|
WILDERNESS_27(new WorldPoint(3174, 3736, 0), WILDERNESS, "Inside the Ruins north of the Graveyard of Shadows, level 27 Wilderness."),
|
||||||
WILDERNESS_28(new WorldPoint(3374, 3734, 0), WILDERNESS, "East of Venenatis' nest, level 28 Wilderness."),
|
WILDERNESS_28(new WorldPoint(3374, 3734, 0), WILDERNESS, "East of Venenatis' nest, level 28 Wilderness."),
|
||||||
WILDERNESS_32(new WorldPoint(3311, 3773, 0), WILDERNESS, "North of Venenatis' nest, level 32 Wilderness."),
|
WILDERNESS_32(new WorldPoint(3311, 3773, 0), WILDERNESS, "North of Venenatis' nest, level 32 Wilderness."),
|
||||||
WILDERNESS_35(new WorldPoint(3153, 3795, 0), WILDERNESS, "East of the Wilderness canoe exit, level 35 Wilderness."),
|
WILDERNESS_35(new WorldPoint(3153, 3795, 0), WILDERNESS, "East of the Wilderness canoe exit, level 35 Wilderness."),
|
||||||
@@ -151,18 +151,18 @@ public enum HotColdLocation
|
|||||||
ZEAH_BLASTMINE_NORTH(new WorldPoint(1488, 3881, 0), ZEAH, "Northern part of the Lovakengj blast mine."),
|
ZEAH_BLASTMINE_NORTH(new WorldPoint(1488, 3881, 0), ZEAH, "Northern part of the Lovakengj blast mine."),
|
||||||
ZEAH_LOVAKITE_FURNACE(new WorldPoint(1507, 3819, 0), ZEAH, "Next to the lovakite furnace in Lovakengj."),
|
ZEAH_LOVAKITE_FURNACE(new WorldPoint(1507, 3819, 0), ZEAH, "Next to the lovakite furnace in Lovakengj."),
|
||||||
ZEAH_LOVAKENGJ_MINE(new WorldPoint(1477, 3779, 0), ZEAH, "Next to mithril rock in the Lovakengj mine."),
|
ZEAH_LOVAKENGJ_MINE(new WorldPoint(1477, 3779, 0), ZEAH, "Next to mithril rock in the Lovakengj mine."),
|
||||||
ZEAH_SULPHR_MINE(new WorldPoint(1428, 3866, 0), ZEAH, "Western entrance in the Lovakengj sulphur mine."),
|
ZEAH_SULPHR_MINE(new WorldPoint(1428, 3869, 0), ZEAH, "Western entrance in the Lovakengj sulphur mine."),
|
||||||
ZEAH_SHAYZIEN_BANK(new WorldPoint(1517, 3603, 0), ZEAH, "South-east of the bank in Shayzien."),
|
ZEAH_SHAYZIEN_BANK(new WorldPoint(1517, 3603, 0), ZEAH, "South-east of the bank in Shayzien."),
|
||||||
ZEAH_OVERPASS(new WorldPoint(1467, 3714, 0), ZEAH, "Overpass between Lovakengj and Shayzien."),
|
ZEAH_OVERPASS(new WorldPoint(1467, 3714, 0), ZEAH, "Overpass between Lovakengj and Shayzien."),
|
||||||
ZEAH_LIZARDMAN(new WorldPoint(1493, 3694, 0), ZEAH, "Within Lizardman Canyon, east of the ladder. Requires 5% favour with Shayzien."),
|
ZEAH_LIZARDMAN(new WorldPoint(1490, 3698, 0), ZEAH, "Within Lizardman Canyon, east of the ladder. Requires 5% favour with Shayzien."),
|
||||||
ZEAH_COMBAT_RING(new WorldPoint(1557, 3580, 0), ZEAH, "Shayzien, south-east of the Combat Ring."),
|
ZEAH_COMBAT_RING(new WorldPoint(1559, 3582, 0), ZEAH, "Shayzien, south-east of the Combat Ring."),
|
||||||
ZEAH_SHAYZIEN_BANK_2(new WorldPoint(1494, 3622, 0), ZEAH, "North-west of the bank in Shayzien."),
|
ZEAH_SHAYZIEN_BANK_2(new WorldPoint(1494, 3622, 0), ZEAH, "North-west of the bank in Shayzien."),
|
||||||
ZEAH_LIBRARY(new WorldPoint(1601, 3842, 0), ZEAH, "North-west of the Arceuus Library."),
|
ZEAH_LIBRARY(new WorldPoint(1603, 3843, 0), ZEAH, "North-west of the Arceuus Library."),
|
||||||
ZEAH_HOUSECHURCH(new WorldPoint(1682, 3792, 0), ZEAH, "By the entrance to the Arceuus church."),
|
ZEAH_HOUSECHURCH(new WorldPoint(1682, 3792, 0), ZEAH, "By the entrance to the Arceuus church."),
|
||||||
ZEAH_DARK_ALTAR(new WorldPoint(1699, 3879, 0), ZEAH, "West of the Dark Altar."),
|
ZEAH_DARK_ALTAR(new WorldPoint(1699, 3879, 0), ZEAH, "West of the Dark Altar."),
|
||||||
ZEAH_ARCEUUS_HOUSE(new WorldPoint(1708, 3701, 0), ZEAH, "By the southern entrance to Arceuus."),
|
ZEAH_ARCEUUS_HOUSE(new WorldPoint(1710, 3700, 0), ZEAH, "By the southern entrance to Arceuus."),
|
||||||
ZEAH_ESSENCE_MINE(new WorldPoint(1762, 3852, 0), ZEAH, "By the Arceuus essence mine."),
|
ZEAH_ESSENCE_MINE(new WorldPoint(1762, 3852, 0), ZEAH, "By the Arceuus essence mine."),
|
||||||
ZEAH_ESSENCE_MINE_NE(new WorldPoint(1772, 3866, 0), ZEAH, "North-east of the Arceuus essence mine."),
|
ZEAH_ESSENCE_MINE_NE(new WorldPoint(1773, 3867, 0), ZEAH, "North-east of the Arceuus essence mine."),
|
||||||
ZEAH_PISCARILUS_MINE(new WorldPoint(1768, 3705, 0), ZEAH, "South of the Piscarilius mine."),
|
ZEAH_PISCARILUS_MINE(new WorldPoint(1768, 3705, 0), ZEAH, "South of the Piscarilius mine."),
|
||||||
ZEAH_GOLDEN_FIELD_TAVERN(new WorldPoint(1718, 3647, 0), ZEAH, "South of The Golden Field tavern in the northern area of Hosidius."),
|
ZEAH_GOLDEN_FIELD_TAVERN(new WorldPoint(1718, 3647, 0), ZEAH, "South of The Golden Field tavern in the northern area of Hosidius."),
|
||||||
ZEAH_MESS_HALL(new WorldPoint(1658, 3621, 0), ZEAH, "East of the Mess hall."),
|
ZEAH_MESS_HALL(new WorldPoint(1658, 3621, 0), ZEAH, "East of the Mess hall."),
|
||||||
|
|||||||
+6
-4
@@ -103,8 +103,10 @@ public class HotColdSolver
|
|||||||
possibleLocations.removeIf(entry -> isFirstPointCloserRect(lastWorldPoint, worldPoint, entry.getRect()));
|
possibleLocations.removeIf(entry -> isFirstPointCloserRect(lastWorldPoint, worldPoint, entry.getRect()));
|
||||||
break;
|
break;
|
||||||
case SAME:
|
case SAME:
|
||||||
// I couldn't figure out a clean implementation for this case
|
// eliminate spots which are absolutely colder or warmer (as they would not yield a SAME temperature change)
|
||||||
// not necessary for quickly determining final location
|
possibleLocations.removeIf(entry ->
|
||||||
|
isFirstPointCloserRect(worldPoint, lastWorldPoint, entry.getRect())
|
||||||
|
|| isFirstPointCloserRect(lastWorldPoint, worldPoint, entry.getRect()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,7 +125,7 @@ public class HotColdSolver
|
|||||||
* @see WorldPoint#distanceTo2D
|
* @see WorldPoint#distanceTo2D
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
private static boolean isFirstPointCloserRect(final WorldPoint firstPoint, final WorldPoint secondPoint, final Rectangle rect)
|
static boolean isFirstPointCloserRect(final WorldPoint firstPoint, final WorldPoint secondPoint, final Rectangle rect)
|
||||||
{
|
{
|
||||||
final WorldPoint nePoint = new WorldPoint((rect.x + rect.width), (rect.y + rect.height), 0);
|
final WorldPoint nePoint = new WorldPoint((rect.x + rect.width), (rect.y + rect.height), 0);
|
||||||
|
|
||||||
@@ -161,7 +163,7 @@ public class HotColdSolver
|
|||||||
* @see WorldPoint#distanceTo2D
|
* @see WorldPoint#distanceTo2D
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
private static boolean isFirstPointCloser(final WorldPoint firstPoint, final WorldPoint secondPoint, final WorldPoint worldPoint)
|
static boolean isFirstPointCloser(final WorldPoint firstPoint, final WorldPoint secondPoint, final WorldPoint worldPoint)
|
||||||
{
|
{
|
||||||
return firstPoint.distanceTo2D(worldPoint) < secondPoint.distanceTo2D(worldPoint);
|
return firstPoint.distanceTo2D(worldPoint) < secondPoint.distanceTo2D(worldPoint);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import java.awt.event.MouseEvent;
|
|||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -88,6 +89,7 @@ import net.runelite.client.config.ConfigTitleSection;
|
|||||||
import net.runelite.client.config.Keybind;
|
import net.runelite.client.config.Keybind;
|
||||||
import net.runelite.client.config.ModifierlessKeybind;
|
import net.runelite.client.config.ModifierlessKeybind;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.events.PluginChanged;
|
import net.runelite.client.events.PluginChanged;
|
||||||
import net.runelite.client.plugins.PluginManager;
|
import net.runelite.client.plugins.PluginManager;
|
||||||
@@ -543,6 +545,7 @@ class ConfigPanel extends PluginPanel
|
|||||||
{
|
{
|
||||||
int value = Integer.parseInt(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
int value = Integer.parseInt(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
||||||
|
|
||||||
|
Units units = cid.getUnits();
|
||||||
Range range = cid.getRange();
|
Range range = cid.getRange();
|
||||||
int min = 0, max = Integer.MAX_VALUE;
|
int min = 0, max = Integer.MAX_VALUE;
|
||||||
if (range != null)
|
if (range != null)
|
||||||
@@ -558,12 +561,27 @@ class ConfigPanel extends PluginPanel
|
|||||||
{
|
{
|
||||||
JLabel sliderValueLabel = new JLabel();
|
JLabel sliderValueLabel = new JLabel();
|
||||||
JSlider slider = new JSlider(min, max, value);
|
JSlider slider = new JSlider(min, max, value);
|
||||||
sliderValueLabel.setText(String.valueOf(slider.getValue()));
|
if (units != null)
|
||||||
|
{
|
||||||
|
sliderValueLabel.setText(slider.getValue() + " " + units.value());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sliderValueLabel.setText(String.valueOf(slider.getValue()));
|
||||||
|
}
|
||||||
slider.setPreferredSize(new Dimension(80, 25));
|
slider.setPreferredSize(new Dimension(80, 25));
|
||||||
slider.setBackground(Color.WHITE);
|
slider.setBackground(Color.WHITE);
|
||||||
slider.addChangeListener((l) ->
|
slider.addChangeListener((l) ->
|
||||||
{
|
{
|
||||||
sliderValueLabel.setText(String.valueOf(slider.getValue()));
|
if (units != null)
|
||||||
|
{
|
||||||
|
sliderValueLabel.setText(slider.getValue() + " " + units.value());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sliderValueLabel.setText(String.valueOf(slider.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
if (!slider.getValueIsAdjusting())
|
if (!slider.getValueIsAdjusting())
|
||||||
{
|
{
|
||||||
changeConfiguration(slider, cd, cid);
|
changeConfiguration(slider, cd, cid);
|
||||||
@@ -597,7 +615,14 @@ class ConfigPanel extends PluginPanel
|
|||||||
{
|
{
|
||||||
changeConfiguration(spinner, cd, cid);
|
changeConfiguration(spinner, cd, cid);
|
||||||
|
|
||||||
sliderValueLabel.setText(String.valueOf(spinner.getValue()));
|
if (units != null)
|
||||||
|
{
|
||||||
|
sliderValueLabel.setText(spinner.getValue() + " " + units.value());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sliderValueLabel.setText(String.valueOf(spinner.getValue()));
|
||||||
|
}
|
||||||
slider.setValue((Integer) spinner.getValue());
|
slider.setValue((Integer) spinner.getValue());
|
||||||
|
|
||||||
subPanel.add(sliderValueLabel, BorderLayout.WEST);
|
subPanel.add(sliderValueLabel, BorderLayout.WEST);
|
||||||
@@ -641,6 +666,15 @@ class ConfigPanel extends PluginPanel
|
|||||||
spinnerTextField.setColumns(SPINNER_FIELD_WIDTH);
|
spinnerTextField.setColumns(SPINNER_FIELD_WIDTH);
|
||||||
spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid));
|
spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid));
|
||||||
|
|
||||||
|
if (units != null)
|
||||||
|
{
|
||||||
|
DecimalFormat df = ((JSpinner.NumberEditor) spinner.getEditor()).getFormat();
|
||||||
|
df.setPositiveSuffix(units.value());
|
||||||
|
df.setNegativeSuffix(units.value());
|
||||||
|
// Force update the spinner to have it add the units initially
|
||||||
|
spinnerTextField.setValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
item.add(spinner, BorderLayout.EAST);
|
item.add(spinner, BorderLayout.EAST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -760,6 +794,7 @@ class ConfigPanel extends PluginPanel
|
|||||||
JPanel dimensionPanel = new JPanel();
|
JPanel dimensionPanel = new JPanel();
|
||||||
dimensionPanel.setLayout(new BorderLayout());
|
dimensionPanel.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
Units units = cid.getUnits();
|
||||||
String str = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName());
|
String str = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName());
|
||||||
String[] splitStr = str.split("x");
|
String[] splitStr = str.split("x");
|
||||||
int width = Integer.parseInt(splitStr[0]);
|
int width = Integer.parseInt(splitStr[0]);
|
||||||
@@ -771,12 +806,30 @@ class ConfigPanel extends PluginPanel
|
|||||||
JFormattedTextField widthSpinnerTextField = ((JSpinner.DefaultEditor) widthEditor).getTextField();
|
JFormattedTextField widthSpinnerTextField = ((JSpinner.DefaultEditor) widthEditor).getTextField();
|
||||||
widthSpinnerTextField.setColumns(4);
|
widthSpinnerTextField.setColumns(4);
|
||||||
|
|
||||||
|
if (units != null)
|
||||||
|
{
|
||||||
|
DecimalFormat df = ((JSpinner.NumberEditor) widthSpinner.getEditor()).getFormat();
|
||||||
|
df.setPositiveSuffix(units.value());
|
||||||
|
df.setNegativeSuffix(units.value());
|
||||||
|
// Force update the spinner to have it add the units initially
|
||||||
|
widthSpinnerTextField.setValue(width);
|
||||||
|
}
|
||||||
|
|
||||||
SpinnerModel heightModel = new SpinnerNumberModel(height, 0, Integer.MAX_VALUE, 1);
|
SpinnerModel heightModel = new SpinnerNumberModel(height, 0, Integer.MAX_VALUE, 1);
|
||||||
JSpinner heightSpinner = new JSpinner(heightModel);
|
JSpinner heightSpinner = new JSpinner(heightModel);
|
||||||
Component heightEditor = heightSpinner.getEditor();
|
Component heightEditor = heightSpinner.getEditor();
|
||||||
JFormattedTextField heightSpinnerTextField = ((JSpinner.DefaultEditor) heightEditor).getTextField();
|
JFormattedTextField heightSpinnerTextField = ((JSpinner.DefaultEditor) heightEditor).getTextField();
|
||||||
heightSpinnerTextField.setColumns(4);
|
heightSpinnerTextField.setColumns(4);
|
||||||
|
|
||||||
|
if (units != null)
|
||||||
|
{
|
||||||
|
DecimalFormat df = ((JSpinner.NumberEditor) heightSpinner.getEditor()).getFormat();
|
||||||
|
df.setPositiveSuffix(units.value());
|
||||||
|
df.setNegativeSuffix(units.value());
|
||||||
|
// Force update the spinner to have it add the units initially
|
||||||
|
heightSpinnerTextField.setValue(height);
|
||||||
|
}
|
||||||
|
|
||||||
ChangeListener listener = e ->
|
ChangeListener listener = e ->
|
||||||
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue());
|
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue());
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -28,6 +28,7 @@ package net.runelite.client.plugins.cooking;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("cooking")
|
@ConfigGroup("cooking")
|
||||||
public interface CookingConfig extends Config
|
public interface CookingConfig extends Config
|
||||||
@@ -35,9 +36,10 @@ public interface CookingConfig extends Config
|
|||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
position = 1,
|
position = 1,
|
||||||
keyName = "statTimeout",
|
keyName = "statTimeout",
|
||||||
name = "Reset stats (minutes)",
|
name = "Reset stats",
|
||||||
description = "Configures the time until the session resets and the overlay is hidden (0 = Disable feature)"
|
description = "Configures the time until the session resets and the overlay is hidden (0 = Disable feature)"
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int statTimeout()
|
default int statTimeout()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import net.runelite.client.config.ConfigItem;
|
|||||||
import net.runelite.client.config.ConfigTitleSection;
|
import net.runelite.client.config.ConfigTitleSection;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
import net.runelite.client.config.Title;
|
import net.runelite.client.config.Title;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("Cox")
|
@ConfigGroup("Cox")
|
||||||
|
|
||||||
@@ -220,6 +221,7 @@ public interface CoxConfig extends Config
|
|||||||
description = "Change the Size of the Olm Infobox.",
|
description = "Change the Size of the Olm Infobox.",
|
||||||
titleSection = "olmTitle"
|
titleSection = "olmTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.PIXELS)
|
||||||
default int prayAgainstOlmSize()
|
default int prayAgainstOlmSize()
|
||||||
{
|
{
|
||||||
return 40;
|
return 40;
|
||||||
@@ -390,6 +392,7 @@ public interface CoxConfig extends Config
|
|||||||
description = "Text Size for Timers.",
|
description = "Text Size for Timers.",
|
||||||
titleSection = "text"
|
titleSection = "text"
|
||||||
)
|
)
|
||||||
|
@Units(Units.POINTS)
|
||||||
default int textSize()
|
default int textSize()
|
||||||
{
|
{
|
||||||
return 14;
|
return 14;
|
||||||
|
|||||||
+11
-2
@@ -25,10 +25,12 @@
|
|||||||
package net.runelite.client.plugins.customcursor;
|
package net.runelite.client.plugins.customcursor;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.runelite.client.util.ImageUtil;
|
import net.runelite.client.util.ImageUtil;
|
||||||
|
|
||||||
|
@Getter(AccessLevel.PUBLIC)
|
||||||
public enum CustomCursor
|
public enum CustomCursor
|
||||||
{
|
{
|
||||||
RS3_GOLD("RS3 Gold", "cursor-rs3-gold.png"),
|
RS3_GOLD("RS3 Gold", "cursor-rs3-gold.png"),
|
||||||
@@ -42,12 +44,19 @@ public enum CustomCursor
|
|||||||
MOUSE("Mouse", "cursor-mouse.png"),
|
MOUSE("Mouse", "cursor-mouse.png"),
|
||||||
SARADOMIN_GODSWORD("Saradomin Godsword", "cursor-saradomin-godsword.png"),
|
SARADOMIN_GODSWORD("Saradomin Godsword", "cursor-saradomin-godsword.png"),
|
||||||
ZAMORAK_GODSWORD("Zamorak Godsword", "cursor-zamorak-godsword.png"),
|
ZAMORAK_GODSWORD("Zamorak Godsword", "cursor-zamorak-godsword.png"),
|
||||||
SKILL_SPECS("Skill Specs", "cursor-skill-specs.png");
|
SKILL_SPECS("Skill Specs", "cursor-skill-specs.png"),
|
||||||
|
CUSTOM_IMAGE("Custom Image");
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
@Getter(AccessLevel.PUBLIC)
|
@Nullable
|
||||||
private final BufferedImage cursorImage;
|
private final BufferedImage cursorImage;
|
||||||
|
|
||||||
|
CustomCursor(String name)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.cursorImage = null;
|
||||||
|
}
|
||||||
|
|
||||||
CustomCursor(final String name, final String icon)
|
CustomCursor(final String name, final String icon)
|
||||||
{
|
{
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|||||||
+34
@@ -25,7 +25,10 @@
|
|||||||
package net.runelite.client.plugins.customcursor;
|
package net.runelite.client.plugins.customcursor;
|
||||||
|
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import javax.sound.sampled.AudioInputStream;
|
import javax.sound.sampled.AudioInputStream;
|
||||||
@@ -35,6 +38,7 @@ import javax.sound.sampled.FloatControl;
|
|||||||
import javax.sound.sampled.LineUnavailableException;
|
import javax.sound.sampled.LineUnavailableException;
|
||||||
import javax.sound.sampled.UnsupportedAudioFileException;
|
import javax.sound.sampled.UnsupportedAudioFileException;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.runelite.client.RuneLite;
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.events.ConfigChanged;
|
import net.runelite.client.events.ConfigChanged;
|
||||||
@@ -53,6 +57,8 @@ import net.runelite.client.ui.ClientUI;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class CustomCursorPlugin extends Plugin
|
public class CustomCursorPlugin extends Plugin
|
||||||
{
|
{
|
||||||
|
private static final File CUSTOM_IMAGE_FILE = new File(RuneLite.RUNELITE_DIR, "cursor.png");
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ClientUI clientUI;
|
private ClientUI clientUI;
|
||||||
|
|
||||||
@@ -125,6 +131,34 @@ public class CustomCursorPlugin extends Plugin
|
|||||||
skillSpecsRage.start();
|
skillSpecsRage.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (selectedCursor == CustomCursor.CUSTOM_IMAGE)
|
||||||
|
{
|
||||||
|
if (CUSTOM_IMAGE_FILE.exists())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BufferedImage image;
|
||||||
|
synchronized (ImageIO.class)
|
||||||
|
{
|
||||||
|
image = ImageIO.read(CUSTOM_IMAGE_FILE);
|
||||||
|
}
|
||||||
|
clientUI.setCursor(image, selectedCursor.getName());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.error("error setting custom cursor", e);
|
||||||
|
clientUI.resetCursor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
clientUI.resetCursor();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert selectedCursor.getCursorImage() != null;
|
||||||
|
clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.getName());
|
||||||
|
|
||||||
clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.toString());
|
clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.toString());
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -27,16 +27,18 @@ package net.runelite.client.plugins.discord;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("discord")
|
@ConfigGroup("discord")
|
||||||
public interface DiscordConfig extends Config
|
public interface DiscordConfig extends Config
|
||||||
{
|
{
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "actionTimeout",
|
keyName = "actionTimeout",
|
||||||
name = "Action timeout (minutes)",
|
name = "Action timeout",
|
||||||
description = "Configures after how long of not updating status will be reset (in minutes)",
|
description = "Configures after how long of not updating status will be reset (in minutes)",
|
||||||
position = 0
|
position = 0
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int actionTimeout()
|
default int actionTimeout()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
+2
@@ -8,6 +8,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("drop")
|
@ConfigGroup("drop")
|
||||||
public interface DropPartyConfig extends Config
|
public interface DropPartyConfig extends Config
|
||||||
@@ -70,6 +71,7 @@ public interface DropPartyConfig extends Config
|
|||||||
name = "Text Size",
|
name = "Text Size",
|
||||||
description = "Text Size for Timers."
|
description = "Text Size for Timers."
|
||||||
)
|
)
|
||||||
|
@Units(Units.POINTS)
|
||||||
default int textSize()
|
default int textSize()
|
||||||
{
|
{
|
||||||
return 18;
|
return 18;
|
||||||
|
|||||||
+2
@@ -28,6 +28,7 @@ import java.awt.Color;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("xpdrop")
|
@ConfigGroup("xpdrop")
|
||||||
public interface XpDropConfig extends Config
|
public interface XpDropConfig extends Config
|
||||||
@@ -89,6 +90,7 @@ public interface XpDropConfig extends Config
|
|||||||
description = "Configures how many ticks should pass between fake XP drops, 0 to disable",
|
description = "Configures how many ticks should pass between fake XP drops, 0 to disable",
|
||||||
position = 4
|
position = 4
|
||||||
)
|
)
|
||||||
|
@Units(Units.TICKS)
|
||||||
default int fakeXpDropDelay()
|
default int fakeXpDropDelay()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
+2
@@ -33,6 +33,7 @@ import net.runelite.client.config.ConfigItem;
|
|||||||
import net.runelite.client.config.ConfigTitleSection;
|
import net.runelite.client.config.ConfigTitleSection;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
import net.runelite.client.config.Title;
|
import net.runelite.client.config.Title;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("fightcave")
|
@ConfigGroup("fightcave")
|
||||||
public interface FightCaveConfig extends Config
|
public interface FightCaveConfig extends Config
|
||||||
@@ -106,6 +107,7 @@ public interface FightCaveConfig extends Config
|
|||||||
description = "Text Size for Timers.",
|
description = "Text Size for Timers.",
|
||||||
titleSection = "text"
|
titleSection = "text"
|
||||||
)
|
)
|
||||||
|
@Units(Units.POINTS)
|
||||||
default int textSize()
|
default int textSize()
|
||||||
{
|
{
|
||||||
return 32;
|
return 32;
|
||||||
|
|||||||
+3
-1
@@ -28,6 +28,7 @@ import java.awt.Color;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("fishing")
|
@ConfigGroup("fishing")
|
||||||
public interface FishingConfig extends Config
|
public interface FishingConfig extends Config
|
||||||
@@ -112,9 +113,10 @@ public interface FishingConfig extends Config
|
|||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
position = 7,
|
position = 7,
|
||||||
keyName = "statTimeout",
|
keyName = "statTimeout",
|
||||||
name = "Reset stats (minutes)",
|
name = "Reset stats",
|
||||||
description = "The time until fishing session data is reset in minutes."
|
description = "The time until fishing session data is reset in minutes."
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int statTimeout()
|
default int statTimeout()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup(FpsPlugin.CONFIG_GROUP_KEY)
|
@ConfigGroup(FpsPlugin.CONFIG_GROUP_KEY)
|
||||||
public interface FpsConfig extends Config
|
public interface FpsConfig extends Config
|
||||||
@@ -54,6 +55,7 @@ public interface FpsConfig extends Config
|
|||||||
description = "Desired max global frames per second",
|
description = "Desired max global frames per second",
|
||||||
position = 2
|
position = 2
|
||||||
)
|
)
|
||||||
|
@Units(Units.FPS)
|
||||||
default int maxFps()
|
default int maxFps()
|
||||||
{
|
{
|
||||||
return 50;
|
return 50;
|
||||||
@@ -80,6 +82,7 @@ public interface FpsConfig extends Config
|
|||||||
description = "Desired max frames per second for unfocused",
|
description = "Desired max frames per second for unfocused",
|
||||||
position = 4
|
position = 4
|
||||||
)
|
)
|
||||||
|
@Units(Units.FPS)
|
||||||
default int maxFpsUnfocused()
|
default int maxFpsUnfocused()
|
||||||
{
|
{
|
||||||
return 50;
|
return 50;
|
||||||
|
|||||||
-170
@@ -1,170 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019, ganom <https://github.com/Ganom>
|
|
||||||
* Copyright (c) 2019, pklite <https://github.com/pklite/pklite>
|
|
||||||
* 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.freezetimers;
|
|
||||||
|
|
||||||
import net.runelite.client.config.Config;
|
|
||||||
import net.runelite.client.config.ConfigGroup;
|
|
||||||
import net.runelite.client.config.ConfigItem;
|
|
||||||
import net.runelite.client.config.ConfigTitleSection;
|
|
||||||
import net.runelite.client.config.Range;
|
|
||||||
import net.runelite.client.config.Title;
|
|
||||||
|
|
||||||
@ConfigGroup("freezetimers")
|
|
||||||
public interface FreezeTimersConfig extends Config
|
|
||||||
{
|
|
||||||
@ConfigTitleSection(
|
|
||||||
keyName = "timersTitle",
|
|
||||||
name = "Timers",
|
|
||||||
description = "",
|
|
||||||
position = 1
|
|
||||||
)
|
|
||||||
default Title timersTitle()
|
|
||||||
{
|
|
||||||
return new Title();
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(
|
|
||||||
keyName = "showOverlay",
|
|
||||||
name = "Show Players",
|
|
||||||
description = "Configure if the player overlay should be shown",
|
|
||||||
position = 2,
|
|
||||||
titleSection = "timersTitle"
|
|
||||||
)
|
|
||||||
default boolean showPlayers()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(
|
|
||||||
keyName = "showNpcs",
|
|
||||||
name = "Show NPCs",
|
|
||||||
description = "Configure if the npc overlay should be shown",
|
|
||||||
position = 3,
|
|
||||||
titleSection = "timersTitle"
|
|
||||||
)
|
|
||||||
default boolean showNpcs()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(
|
|
||||||
keyName = "FreezeTimers",
|
|
||||||
name = "Show Freeze Timers",
|
|
||||||
description = "Toggle overlay for Freeze timers",
|
|
||||||
position = 4,
|
|
||||||
titleSection = "timersTitle"
|
|
||||||
)
|
|
||||||
default boolean FreezeTimers()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(
|
|
||||||
keyName = "TB",
|
|
||||||
name = "Show TB Timers",
|
|
||||||
description = "Toggle overlay for TB timers",
|
|
||||||
position = 5,
|
|
||||||
titleSection = "timersTitle"
|
|
||||||
)
|
|
||||||
default boolean TB()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(
|
|
||||||
keyName = "Veng",
|
|
||||||
name = "Show Veng Timers",
|
|
||||||
description = "Toggle overlay for Veng timers",
|
|
||||||
position = 6,
|
|
||||||
titleSection = "timersTitle"
|
|
||||||
)
|
|
||||||
default boolean Veng()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigTitleSection(
|
|
||||||
keyName = "overlayTitle",
|
|
||||||
name = "Overlay",
|
|
||||||
description = "",
|
|
||||||
position = 7
|
|
||||||
)
|
|
||||||
default Title overlayTitle()
|
|
||||||
{
|
|
||||||
return new Title();
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(
|
|
||||||
keyName = "xoffset",
|
|
||||||
name = "X Offset",
|
|
||||||
description = "Increasing this will push further away from model. Does not apply to text timers.",
|
|
||||||
position = 8,
|
|
||||||
titleSection = "overlayTitle"
|
|
||||||
)
|
|
||||||
default int offset()
|
|
||||||
{
|
|
||||||
return 20;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(
|
|
||||||
keyName = "noImage",
|
|
||||||
name = "Text Timers",
|
|
||||||
description = "Remove Images from Timers",
|
|
||||||
position = 9,
|
|
||||||
titleSection = "overlayTitle"
|
|
||||||
)
|
|
||||||
default boolean noImage()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(
|
|
||||||
keyName = "fontStyle",
|
|
||||||
name = "Font Style",
|
|
||||||
description = "Bold/Italics/Plain",
|
|
||||||
position = 10,
|
|
||||||
titleSection = "overlayTitle"
|
|
||||||
)
|
|
||||||
default FontStyle fontStyle()
|
|
||||||
{
|
|
||||||
return FontStyle.BOLD;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Range(
|
|
||||||
min = 9,
|
|
||||||
max = 14
|
|
||||||
)
|
|
||||||
@ConfigItem(
|
|
||||||
keyName = "textSize",
|
|
||||||
name = "Text Size",
|
|
||||||
description = "Text Size for Timers.",
|
|
||||||
position = 11,
|
|
||||||
titleSection = "overlayTitle"
|
|
||||||
)
|
|
||||||
default int textSize()
|
|
||||||
{
|
|
||||||
return 11;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-303
@@ -1,303 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019, ganom <https://github.com/Ganom>
|
|
||||||
* Copyright (c) 2019, kyle <https://github.com/kyleeld>
|
|
||||||
* Copyright (c) 2019, pklite <https://github.com/pklite/pklite>
|
|
||||||
* 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.freezetimers;
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import static java.awt.Color.WHITE;
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
import net.runelite.api.Actor;
|
|
||||||
import net.runelite.api.Client;
|
|
||||||
import net.runelite.api.Point;
|
|
||||||
import net.runelite.client.ui.FontManager;
|
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayPriority;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
|
||||||
import net.runelite.client.util.ImageUtil;
|
|
||||||
|
|
||||||
@Singleton
|
|
||||||
public class FreezeTimersOverlay extends Overlay
|
|
||||||
{
|
|
||||||
private final FreezeTimersPlugin plugin;
|
|
||||||
private final Client client;
|
|
||||||
private final Font timerFont = FontManager.getRunescapeBoldFont().deriveFont(14.0f);
|
|
||||||
private final BufferedImage FREEZE_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "freeze.png");
|
|
||||||
private final BufferedImage FREEZE_IMMUNE_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "freezeimmune.png");
|
|
||||||
private final BufferedImage TB_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "teleblock.png");
|
|
||||||
private final BufferedImage TB_IMMUNE_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "teleblockimmune.png");
|
|
||||||
private final BufferedImage VENG_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "veng.png");
|
|
||||||
private final Timers timers;
|
|
||||||
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public FreezeTimersOverlay(final FreezeTimersPlugin plugin, final Client client, final Timers timers)
|
|
||||||
{
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.client = client;
|
|
||||||
this.timers = timers;
|
|
||||||
setPriority(OverlayPriority.HIGHEST);
|
|
||||||
setPosition(OverlayPosition.DYNAMIC);
|
|
||||||
setLayer(OverlayLayer.UNDER_WIDGETS);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Dimension render(Graphics2D graphics)
|
|
||||||
{
|
|
||||||
if (plugin.isShowPlayers())
|
|
||||||
{
|
|
||||||
client.getPlayers().forEach((p) -> renderOverlayFor(graphics, p));
|
|
||||||
}
|
|
||||||
if (plugin.isShowNpcs())
|
|
||||||
{
|
|
||||||
client.getNpcs().forEach((npc) -> renderOverlayFor(graphics, npc));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderOverlayFor(Graphics2D g, Actor actor)
|
|
||||||
{
|
|
||||||
if (timers.areAllTimersZero(actor))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int overlaysDrawn = 0;
|
|
||||||
|
|
||||||
if (drawFreezeOverlay(g, actor, overlaysDrawn) && plugin.isFreezeTimers())
|
|
||||||
{
|
|
||||||
overlaysDrawn++;
|
|
||||||
}
|
|
||||||
if (drawTBOverlay(g, actor, overlaysDrawn) && plugin.isTB())
|
|
||||||
{
|
|
||||||
overlaysDrawn++;
|
|
||||||
}
|
|
||||||
if (drawVengOverlay(g, actor, overlaysDrawn) && plugin.isVeng())
|
|
||||||
{
|
|
||||||
overlaysDrawn++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean drawFreezeOverlay(Graphics2D g, Actor actor, int overlaysDrawn)
|
|
||||||
{
|
|
||||||
final long currentTick = System.currentTimeMillis();
|
|
||||||
if (timers.getTimerReApply(actor, TimerType.FREEZE) <= currentTick)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
long finishedAt;
|
|
||||||
BufferedImage image;
|
|
||||||
if (timers.getTimerEnd(actor, TimerType.FREEZE) > currentTick)
|
|
||||||
{
|
|
||||||
finishedAt = timers.getTimerEnd(actor, TimerType.FREEZE);
|
|
||||||
image = FREEZE_IMAGE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
finishedAt = timers.getTimerReApply(actor, TimerType.FREEZE);
|
|
||||||
image = FREEZE_IMMUNE_IMAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
final String text = processTickCounter(finishedAt);
|
|
||||||
final Point poi = actor.getCanvasTextLocation(g, text, 0);
|
|
||||||
|
|
||||||
if (poi == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Point fixedPoint = new Point(poi.getX(), poi.getY());
|
|
||||||
|
|
||||||
if (plugin.isNoImage())
|
|
||||||
{
|
|
||||||
if (image == FREEZE_IMAGE)
|
|
||||||
{
|
|
||||||
OverlayUtil.renderTextLocation(g, text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.WHITE, fixedPoint, false, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OverlayUtil.renderTextLocation(g, text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.YELLOW, fixedPoint, false, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
renderActorText(g, actor, text, overlaysDrawn, image);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean drawTBOverlay(Graphics2D g, Actor actor, int overlaysDrawn)
|
|
||||||
{
|
|
||||||
final long currentTick = System.currentTimeMillis();
|
|
||||||
if (!plugin.isTB())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (timers.getTimerReApply(actor, TimerType.TELEBLOCK) <= currentTick)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
long finishedAt;
|
|
||||||
BufferedImage image;
|
|
||||||
if (timers.getTimerEnd(actor, TimerType.TELEBLOCK) > currentTick)
|
|
||||||
{
|
|
||||||
finishedAt = timers.getTimerEnd(actor, TimerType.TELEBLOCK);
|
|
||||||
image = TB_IMAGE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
finishedAt = timers.getTimerReApply(actor, TimerType.TELEBLOCK);
|
|
||||||
image = TB_IMMUNE_IMAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
final String text = processTickCounter(finishedAt);
|
|
||||||
final Point poi = actor.getCanvasTextLocation(g, text, 0);
|
|
||||||
|
|
||||||
if (poi == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Point fixedPoint = new Point(poi.getX() + 20, poi.getY());
|
|
||||||
|
|
||||||
if (plugin.isNoImage())
|
|
||||||
{
|
|
||||||
if (timers.getTimerReApply(actor, TimerType.FREEZE) <= currentTick)
|
|
||||||
{
|
|
||||||
OverlayUtil.renderTextLocation(g, text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.CYAN, poi, false, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OverlayUtil.renderTextLocation(g, " | " + text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.CYAN, fixedPoint, false, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timers.getTimerReApply(actor, TimerType.VENG) >= currentTick)
|
|
||||||
{
|
|
||||||
OverlayUtil.renderTextLocation(g, " | " + text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.CYAN, fixedPoint, false, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
renderActorText(g, actor, text, overlaysDrawn, image);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean drawVengOverlay(Graphics2D g, Actor actor, int overlaysDrawn)
|
|
||||||
{
|
|
||||||
final long currentTick = System.currentTimeMillis();
|
|
||||||
if (!plugin.isVeng())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (timers.getTimerEnd(actor, TimerType.VENG) <= currentTick)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
final long finishedAt = timers.getTimerEnd(actor, TimerType.VENG);
|
|
||||||
|
|
||||||
final String text = processTickCounter(finishedAt);
|
|
||||||
final Point poi = actor.getCanvasTextLocation(g, text, 0);
|
|
||||||
|
|
||||||
if (poi == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Point fixedPoint = new Point(poi.getX() - 20, poi.getY());
|
|
||||||
if (plugin.isNoImage())
|
|
||||||
{
|
|
||||||
if (timers.getTimerEnd(actor, TimerType.FREEZE) <= currentTick)
|
|
||||||
{
|
|
||||||
OverlayUtil.renderTextLocation(g, text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.RED, poi, false, 0);
|
|
||||||
}
|
|
||||||
if (timers.getTimerEnd(actor, TimerType.FREEZE) >= currentTick)
|
|
||||||
{
|
|
||||||
OverlayUtil.renderTextLocation(g, text + " | ", plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.RED, fixedPoint, false, 0);
|
|
||||||
}
|
|
||||||
if (timers.getTimerEnd(actor, TimerType.TELEBLOCK) >= currentTick)
|
|
||||||
{
|
|
||||||
OverlayUtil.renderTextLocation(g, text + " | ", plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.RED, fixedPoint, false, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
renderActorText(g, actor, text, overlaysDrawn, VENG_IMAGE);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderActorText(Graphics2D g, Actor actor, String text, int overlaysDrawn, BufferedImage image)
|
|
||||||
{
|
|
||||||
final int yOffset = (overlaysDrawn * 18);
|
|
||||||
g.setFont(timerFont);
|
|
||||||
g.setColor(WHITE);
|
|
||||||
final int xOffset = plugin.getOffset();
|
|
||||||
renderActorTextAndImage(g, actor, text, Color.WHITE, image, yOffset,
|
|
||||||
xOffset);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderImageLocation(Graphics2D graphics, Point imgLoc, BufferedImage image)
|
|
||||||
{
|
|
||||||
final int x = imgLoc.getX();
|
|
||||||
final int y = imgLoc.getY();
|
|
||||||
|
|
||||||
graphics.drawImage(image, x, y, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderActorTextAndImage(Graphics2D graphics, Actor actor, String text, Color color, BufferedImage image, int yOffset, int xOffset)
|
|
||||||
{
|
|
||||||
Point textLocation = new Point(actor.getCanvasImageLocation(image, 0).getX() + xOffset, actor.getCanvasImageLocation(image, 0).getY() + yOffset);
|
|
||||||
renderImageLocation(graphics, textLocation, image);
|
|
||||||
xOffset = image.getWidth() + 1;
|
|
||||||
yOffset = (image.getHeight() - (int) graphics.getFontMetrics().getStringBounds(text, graphics).getHeight());
|
|
||||||
textLocation = new Point(textLocation.getX() + xOffset, textLocation.getY() + image.getHeight() - yOffset);
|
|
||||||
OverlayUtil.renderTextLocation(graphics, textLocation, text, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String processTickCounter(long finishedAt)
|
|
||||||
{
|
|
||||||
final long currentTick = System.currentTimeMillis();
|
|
||||||
final long tickDifference = finishedAt - currentTick;
|
|
||||||
long seconds = tickDifference / 1000;
|
|
||||||
seconds++;
|
|
||||||
final int minutes = (int) (seconds / 60);
|
|
||||||
seconds = seconds % 60;
|
|
||||||
String text = seconds > 9 ? seconds + "" : "0" + seconds;
|
|
||||||
if (minutes > 0)
|
|
||||||
{
|
|
||||||
text = minutes + ":" + text;
|
|
||||||
}
|
|
||||||
return text + "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-270
@@ -1,270 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019, ganom <https://github.com/Ganom>
|
|
||||||
* Copyright (c) 2019, pklite <https://github.com/pklite/pklite>
|
|
||||||
* 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.freezetimers;
|
|
||||||
|
|
||||||
import com.google.inject.Provides;
|
|
||||||
import java.util.EnumSet;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
import lombok.AccessLevel;
|
|
||||||
import lombok.Getter;
|
|
||||||
import net.runelite.api.Actor;
|
|
||||||
import net.runelite.api.ChatMessageType;
|
|
||||||
import net.runelite.api.Client;
|
|
||||||
import net.runelite.api.NPC;
|
|
||||||
import net.runelite.api.Player;
|
|
||||||
import net.runelite.api.WorldType;
|
|
||||||
import net.runelite.api.coords.WorldPoint;
|
|
||||||
import net.runelite.api.events.ChatMessage;
|
|
||||||
import net.runelite.api.events.GameTick;
|
|
||||||
import net.runelite.api.events.NpcDespawned;
|
|
||||||
import net.runelite.api.events.PlayerDeath;
|
|
||||||
import net.runelite.api.events.SpotAnimationChanged;
|
|
||||||
import net.runelite.client.config.ConfigManager;
|
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
|
||||||
import net.runelite.client.events.ConfigChanged;
|
|
||||||
import net.runelite.client.plugins.Plugin;
|
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
|
||||||
import net.runelite.client.plugins.PluginType;
|
|
||||||
import net.runelite.client.plugins.multiindicators.MapLocations;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayManager;
|
|
||||||
import net.runelite.client.util.PvPUtil;
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
|
|
||||||
@PluginDescriptor(
|
|
||||||
name = "Freeze Timers",
|
|
||||||
description = "Shows a freeze timer overlay on players",
|
|
||||||
tags = {"freeze", "timers", "barrage", "teleblock", "pklite"},
|
|
||||||
type = PluginType.PVP,
|
|
||||||
enabledByDefault = false
|
|
||||||
)
|
|
||||||
@Singleton
|
|
||||||
public class FreezeTimersPlugin extends Plugin
|
|
||||||
{
|
|
||||||
private static final int VORKATH_REGION = 9023;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Client client;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private OverlayManager overlayManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Timers timers;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private PrayerTracker prayerTracker;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private FreezeTimersOverlay overlay;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private FreezeTimersConfig config;
|
|
||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private boolean showPlayers;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private boolean showNpcs;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private boolean FreezeTimers;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private boolean TB;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private boolean Veng;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private int offset;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private boolean noImage;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private FontStyle fontStyle;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private int textSize;
|
|
||||||
|
|
||||||
public void startUp()
|
|
||||||
{
|
|
||||||
updateConfig();
|
|
||||||
|
|
||||||
overlayManager.add(overlay);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void shutDown()
|
|
||||||
{
|
|
||||||
overlayManager.remove(overlay);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
public FreezeTimersConfig getConfig(ConfigManager configManager)
|
|
||||||
{
|
|
||||||
return configManager.getConfig(FreezeTimersConfig.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onSpotAnimationChanged(SpotAnimationChanged graphicChanged)
|
|
||||||
{
|
|
||||||
final int oldGraphic = prayerTracker.getSpotanimLastTick(graphicChanged.getActor());
|
|
||||||
final int newGraphic = graphicChanged.getActor().getSpotAnimation();
|
|
||||||
|
|
||||||
if (oldGraphic == newGraphic)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final PlayerSpellEffect effect = PlayerSpellEffect.getFromSpotAnim(newGraphic);
|
|
||||||
|
|
||||||
if (effect == PlayerSpellEffect.NONE)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final long currentTime = System.currentTimeMillis();
|
|
||||||
|
|
||||||
if (timers.getTimerReApply(graphicChanged.getActor(), effect.getType()) > currentTime)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
long length = effect.getTimerLengthTicks();
|
|
||||||
|
|
||||||
if (effect.isHalvable() && prayerTracker.getPrayerIconLastTick(graphicChanged.getActor()) == 2)
|
|
||||||
{
|
|
||||||
length /= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
timers.setTimerEnd(graphicChanged.getActor(), effect.getType(),
|
|
||||||
currentTime + length);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onGameTick(GameTick tickEvent)
|
|
||||||
{
|
|
||||||
prayerTracker.gameTick();
|
|
||||||
|
|
||||||
List<Actor> teleblocked = timers.getAllActorsOnTimer(TimerType.TELEBLOCK);
|
|
||||||
|
|
||||||
if (!teleblocked.isEmpty())
|
|
||||||
{
|
|
||||||
final EnumSet<WorldType> worldTypes = client.getWorldType();
|
|
||||||
|
|
||||||
for (Actor actor : teleblocked)
|
|
||||||
{
|
|
||||||
final WorldPoint actorLoc = actor.getWorldLocation();
|
|
||||||
|
|
||||||
if (!WorldType.isAllPvpWorld(worldTypes) && (actorLoc.getY() < 3525 || PvPUtil.getWildernessLevelFrom(actorLoc) <= 0))
|
|
||||||
{
|
|
||||||
timers.setTimerReApply(actor, TimerType.TELEBLOCK, System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
else if (WorldType.isPvpWorld(worldTypes) &&
|
|
||||||
MapLocations.getPvpSafeZones(actorLoc.getPlane()).contains(actorLoc.getX(), actorLoc.getY()))
|
|
||||||
{
|
|
||||||
timers.setTimerReApply(actor, TimerType.TELEBLOCK, System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
else if (WorldType.isDeadmanWorld(worldTypes) &&
|
|
||||||
MapLocations.getDeadmanSafeZones(actorLoc.getPlane()).contains(actorLoc.getX(), actorLoc.getY()))
|
|
||||||
{
|
|
||||||
timers.setTimerReApply(actor, TimerType.TELEBLOCK, System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
private void onPlayerDeath(PlayerDeath event)
|
|
||||||
{
|
|
||||||
final Player localPlayer = client.getLocalPlayer();
|
|
||||||
final long currentTime = System.currentTimeMillis();
|
|
||||||
|
|
||||||
for (TimerType type : TimerType.values())
|
|
||||||
{
|
|
||||||
if (timers.getTimerReApply(localPlayer, type) <= currentTime)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
timers.setTimerReApply(localPlayer, type, currentTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onNpcDespawned(NpcDespawned event)
|
|
||||||
{
|
|
||||||
if (!isAtVorkath())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final NPC npc = event.getNpc();
|
|
||||||
|
|
||||||
if (npc.getName() == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (npc.getName().equals("Zombified Spawn"))
|
|
||||||
{
|
|
||||||
timers.setTimerReApply(client.getLocalPlayer(), TimerType.FREEZE,
|
|
||||||
System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onChatMessage(ChatMessage event)
|
|
||||||
{
|
|
||||||
if (event.getType() != ChatMessageType.GAMEMESSAGE
|
|
||||||
|| !event.getMessage().contains("Your Tele Block has been removed"))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
timers.setTimerReApply(client.getLocalPlayer(), TimerType.TELEBLOCK, System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isAtVorkath()
|
|
||||||
{
|
|
||||||
return ArrayUtils.contains(client.getMapRegions(), VORKATH_REGION);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
private void onConfigChanged(ConfigChanged event)
|
|
||||||
{
|
|
||||||
if (event.getGroup().equals("freezetimers"))
|
|
||||||
{
|
|
||||||
updateConfig();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateConfig()
|
|
||||||
{
|
|
||||||
this.showPlayers = config.showPlayers();
|
|
||||||
this.showNpcs = config.showNpcs();
|
|
||||||
this.FreezeTimers = config.FreezeTimers();
|
|
||||||
this.TB = config.TB();
|
|
||||||
this.Veng = config.Veng();
|
|
||||||
this.offset = config.offset();
|
|
||||||
this.noImage = config.noImage();
|
|
||||||
this.fontStyle = config.fontStyle();
|
|
||||||
this.textSize = config.textSize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-71
@@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019, ganom <https://github.com/Ganom>
|
|
||||||
* Copyright (c) 2019, pklite <https://github.com/pklite/pklite>
|
|
||||||
* 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.freezetimers;
|
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
@AllArgsConstructor
|
|
||||||
public enum PlayerSpellEffect
|
|
||||||
{
|
|
||||||
BIND("Bind", 181, 4800, false, 0, TimerType.FREEZE),
|
|
||||||
SNARE("Snare", 180, 9600, false, 1, TimerType.FREEZE),
|
|
||||||
ENTANGLE("Entangle", 179, 14400, false, 2, TimerType.FREEZE),
|
|
||||||
RUSH("Ice Rush", 361, 4800, false, 3, TimerType.FREEZE),
|
|
||||||
BURST("Ice Burst", 363, 9600, false, 4, TimerType.FREEZE),
|
|
||||||
BLITZ("Ice Blitz", 367, 14400, false, 5, TimerType.FREEZE),
|
|
||||||
BARRAGE("Ice Barrage", 369, 19200, false, 6, TimerType.FREEZE),
|
|
||||||
TELEBLOCK("Teleblock", 345, 300000, true, 7, TimerType.TELEBLOCK),
|
|
||||||
VENG("Vengeance", 726, 30000, false, 8, TimerType.VENG),
|
|
||||||
VENG_OTHER("Vengeance Other", 725, 30000, false, 9, TimerType.VENG),
|
|
||||||
NONE("Nothing", -69, 420, true, 9999, TimerType.THIS_SHIT_BROKE);
|
|
||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private final String name;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private final int spotAnimId;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private final int timerLengthTicks;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private boolean halvable;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private final int spriteIdx;
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private final TimerType type;
|
|
||||||
|
|
||||||
static PlayerSpellEffect getFromSpotAnim(int spotAnim)
|
|
||||||
{
|
|
||||||
for (PlayerSpellEffect effect : values())
|
|
||||||
{
|
|
||||||
if (effect.getSpotAnimId() == spotAnim)
|
|
||||||
{
|
|
||||||
return effect;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
-85
@@ -1,85 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019, pklite <https://github.com/pklite/pklite>
|
|
||||||
* 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.freezetimers;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import net.runelite.api.Actor;
|
|
||||||
import net.runelite.api.Client;
|
|
||||||
import net.runelite.api.NPC;
|
|
||||||
import net.runelite.api.Player;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
@Singleton
|
|
||||||
class PrayerTracker
|
|
||||||
{
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Client client;
|
|
||||||
|
|
||||||
private final Map<Actor, HashMap<String, Integer>> lastTick = new HashMap<>();
|
|
||||||
private final Map<Actor, HashMap<String, Integer>> newTick = new HashMap<>();
|
|
||||||
|
|
||||||
public void gameTick()
|
|
||||||
{
|
|
||||||
lastTick.clear();
|
|
||||||
lastTick.putAll(newTick);
|
|
||||||
newTick.clear();
|
|
||||||
for (Player p : client.getPlayers())
|
|
||||||
{
|
|
||||||
processActor(p);
|
|
||||||
}
|
|
||||||
for (NPC npc : client.getNpcs())
|
|
||||||
{
|
|
||||||
processActor(npc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processActor(Actor actor)
|
|
||||||
{
|
|
||||||
if (!newTick.containsKey(actor))
|
|
||||||
{
|
|
||||||
newTick.put(actor, new HashMap<>());
|
|
||||||
}
|
|
||||||
if (actor instanceof Player)
|
|
||||||
{
|
|
||||||
newTick.get(actor).put("PrayerIcon", ((Player) actor).getOverheadIcon() == null ? -1 : ((Player) actor).getOverheadIcon().ordinal());
|
|
||||||
}
|
|
||||||
newTick.get(actor).put("SpotAnim", actor.getSpotAnimation());
|
|
||||||
}
|
|
||||||
|
|
||||||
int getPrayerIconLastTick(Actor p)
|
|
||||||
{
|
|
||||||
return lastTick.getOrDefault(p, new HashMap<>()).getOrDefault("PrayerIcon", -1337);
|
|
||||||
}
|
|
||||||
|
|
||||||
int getSpotanimLastTick(Actor p)
|
|
||||||
{
|
|
||||||
return lastTick.getOrDefault(p, new HashMap<>()).getOrDefault("SpotAnim", -1337);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019, pklite <https://github.com/pklite/pklite>
|
|
||||||
* 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.freezetimers;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import net.runelite.api.Actor;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
@Singleton
|
|
||||||
class Timers
|
|
||||||
{
|
|
||||||
private final Map<Actor, HashMap<TimerType, Long>> timerMap = new HashMap<>();
|
|
||||||
|
|
||||||
void setTimerEnd(Actor actor, TimerType type, long n)
|
|
||||||
{
|
|
||||||
if (!timerMap.containsKey(actor))
|
|
||||||
{
|
|
||||||
timerMap.put(actor, new HashMap<>());
|
|
||||||
}
|
|
||||||
|
|
||||||
timerMap.get(actor).put(type, n + type.getImmunityTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
void setTimerReApply(Actor actor, TimerType type, long n)
|
|
||||||
{
|
|
||||||
if (!timerMap.containsKey(actor))
|
|
||||||
{
|
|
||||||
timerMap.put(actor, new HashMap<>());
|
|
||||||
}
|
|
||||||
|
|
||||||
timerMap.get(actor).put(type, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
long getTimerEnd(Actor actor, TimerType type)
|
|
||||||
{
|
|
||||||
if (!timerMap.containsKey(actor))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return timerMap.get(actor).getOrDefault(type, (long) type.getImmunityTime()) - type.getImmunityTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
long getTimerReApply(Actor actor, TimerType type)
|
|
||||||
{
|
|
||||||
if (!timerMap.containsKey(actor))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return timerMap.get(actor).getOrDefault(type, (long) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Actor> getAllActorsOnTimer(TimerType type)
|
|
||||||
{
|
|
||||||
final List<Actor> actors = new ArrayList<>();
|
|
||||||
final Iterator<Actor> it = timerMap.keySet().iterator();
|
|
||||||
|
|
||||||
while (it.hasNext())
|
|
||||||
{
|
|
||||||
final Actor actor = it.next();
|
|
||||||
|
|
||||||
for (TimerType timerType : TimerType.values())
|
|
||||||
{
|
|
||||||
if (getTimerReApply(actor, timerType) > System.currentTimeMillis())
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
it.remove();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
final long end = getTimerReApply(actor, type);
|
|
||||||
|
|
||||||
if (end > System.currentTimeMillis())
|
|
||||||
{
|
|
||||||
actors.add(actor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return actors;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean areAllTimersZero(Actor actor)
|
|
||||||
{
|
|
||||||
for (TimerType type : TimerType.values())
|
|
||||||
{
|
|
||||||
if (getTimerReApply(actor, type) > System.currentTimeMillis())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -35,6 +35,7 @@ import net.runelite.client.config.ConfigItem;
|
|||||||
import net.runelite.client.config.ConfigTitleSection;
|
import net.runelite.client.config.ConfigTitleSection;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
import net.runelite.client.config.Title;
|
import net.runelite.client.config.Title;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("Gauntlet")
|
@ConfigGroup("Gauntlet")
|
||||||
|
|
||||||
@@ -282,6 +283,7 @@ public interface GauntletConfig extends Config
|
|||||||
description = " change the size of Projectile icons.",
|
description = " change the size of Projectile icons.",
|
||||||
titleSection = "boss"
|
titleSection = "boss"
|
||||||
)
|
)
|
||||||
|
@Units(Units.PIXELS)
|
||||||
default int projectileIconSize()
|
default int projectileIconSize()
|
||||||
{
|
{
|
||||||
return 20;
|
return 20;
|
||||||
|
|||||||
+8
@@ -32,6 +32,7 @@ import net.runelite.client.config.ConfigGroup;
|
|||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.ConfigTitleSection;
|
import net.runelite.client.config.ConfigTitleSection;
|
||||||
import net.runelite.client.config.Title;
|
import net.runelite.client.config.Title;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
import net.runelite.client.plugins.grounditems.config.ItemHighlightMode;
|
import net.runelite.client.plugins.grounditems.config.ItemHighlightMode;
|
||||||
import net.runelite.client.plugins.grounditems.config.MenuHighlightMode;
|
import net.runelite.client.plugins.grounditems.config.MenuHighlightMode;
|
||||||
import net.runelite.client.plugins.grounditems.config.PriceDisplayMode;
|
import net.runelite.client.plugins.grounditems.config.PriceDisplayMode;
|
||||||
@@ -152,6 +153,7 @@ public interface GroundItemsConfig extends Config
|
|||||||
position = 9,
|
position = 9,
|
||||||
titleSection = "highlightedTitle"
|
titleSection = "highlightedTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.GP)
|
||||||
default int getHighlightOverValue()
|
default int getHighlightOverValue()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@@ -231,6 +233,7 @@ public interface GroundItemsConfig extends Config
|
|||||||
position = 15,
|
position = 15,
|
||||||
titleSection = "hiddenTitle"
|
titleSection = "hiddenTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.GP)
|
||||||
default int getHideUnderValue()
|
default int getHideUnderValue()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@@ -338,6 +341,7 @@ public interface GroundItemsConfig extends Config
|
|||||||
position = 24,
|
position = 24,
|
||||||
titleSection = "lowValueTitle"
|
titleSection = "lowValueTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.GP)
|
||||||
default int lowValuePrice()
|
default int lowValuePrice()
|
||||||
{
|
{
|
||||||
return 20000;
|
return 20000;
|
||||||
@@ -386,6 +390,7 @@ public interface GroundItemsConfig extends Config
|
|||||||
position = 28,
|
position = 28,
|
||||||
titleSection = "mediumValueTitle"
|
titleSection = "mediumValueTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.GP)
|
||||||
default int mediumValuePrice()
|
default int mediumValuePrice()
|
||||||
{
|
{
|
||||||
return 100000;
|
return 100000;
|
||||||
@@ -434,6 +439,7 @@ public interface GroundItemsConfig extends Config
|
|||||||
position = 32,
|
position = 32,
|
||||||
titleSection = "highValueTitle"
|
titleSection = "highValueTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.GP)
|
||||||
default int highValuePrice()
|
default int highValuePrice()
|
||||||
{
|
{
|
||||||
return 1000000;
|
return 1000000;
|
||||||
@@ -482,6 +488,7 @@ public interface GroundItemsConfig extends Config
|
|||||||
position = 36,
|
position = 36,
|
||||||
titleSection = "insaneValueTitle"
|
titleSection = "insaneValueTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.GP)
|
||||||
default int insaneValuePrice()
|
default int insaneValuePrice()
|
||||||
{
|
{
|
||||||
return 10000000;
|
return 10000000;
|
||||||
@@ -600,6 +607,7 @@ public interface GroundItemsConfig extends Config
|
|||||||
position = 46,
|
position = 46,
|
||||||
titleSection = "miscTitle"
|
titleSection = "miscTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.MILLISECONDS)
|
||||||
default int doubleTapDelay()
|
default int doubleTapDelay()
|
||||||
{
|
{
|
||||||
return 250;
|
return 250;
|
||||||
|
|||||||
+2
@@ -33,6 +33,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("groundMarker")
|
@ConfigGroup("groundMarker")
|
||||||
public interface GroundMarkerConfig extends Config
|
public interface GroundMarkerConfig extends Config
|
||||||
@@ -279,6 +280,7 @@ public interface GroundMarkerConfig extends Config
|
|||||||
name = "Minimap opacity",
|
name = "Minimap opacity",
|
||||||
description = "The opacity of the minimap markers"
|
description = "The opacity of the minimap markers"
|
||||||
)
|
)
|
||||||
|
@Units(Units.PERCENT)
|
||||||
default int minimapOverlayOpacity()
|
default int minimapOverlayOpacity()
|
||||||
{
|
{
|
||||||
return 100;
|
return 100;
|
||||||
|
|||||||
+5
-1
@@ -28,6 +28,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.ConfigSection;
|
import net.runelite.client.config.ConfigSection;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("idlenotifier")
|
@ConfigGroup("idlenotifier")
|
||||||
public interface IdleNotifierConfig extends Config
|
public interface IdleNotifierConfig extends Config
|
||||||
@@ -144,10 +145,11 @@ public interface IdleNotifierConfig extends Config
|
|||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "timeout",
|
keyName = "timeout",
|
||||||
name = "Idle Notification Delay (ms)",
|
name = "Idle Notification Delay",
|
||||||
description = "The notification delay after the player is idle",
|
description = "The notification delay after the player is idle",
|
||||||
position = 11
|
position = 11
|
||||||
)
|
)
|
||||||
|
@Units(Units.MILLISECONDS)
|
||||||
default int getIdleNotificationDelay()
|
default int getIdleNotificationDelay()
|
||||||
{
|
{
|
||||||
return 5000;
|
return 5000;
|
||||||
@@ -203,6 +205,7 @@ public interface IdleNotifierConfig extends Config
|
|||||||
description = "The amount of remaining oxygen to send a notification at. A value of 0 will disable notification.",
|
description = "The amount of remaining oxygen to send a notification at. A value of 0 will disable notification.",
|
||||||
position = 16
|
position = 16
|
||||||
)
|
)
|
||||||
|
@Units(Units.PERCENT)
|
||||||
default int getOxygenThreshold()
|
default int getOxygenThreshold()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@@ -214,6 +217,7 @@ public interface IdleNotifierConfig extends Config
|
|||||||
description = "The amount of spec energy reached to send a notification at. A value of 0 will disable notification.",
|
description = "The amount of spec energy reached to send a notification at. A value of 0 will disable notification.",
|
||||||
position = 17
|
position = 17
|
||||||
)
|
)
|
||||||
|
@Units(Units.PERCENT)
|
||||||
default int getSpecEnergyThreshold()
|
default int getSpecEnergyThreshold()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
+10
@@ -782,6 +782,11 @@ public class IdleNotifierPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
lastInteract = null;
|
lastInteract = null;
|
||||||
lastInteracting = null;
|
lastInteracting = null;
|
||||||
|
|
||||||
|
// prevent animation notifications from firing too
|
||||||
|
lastAnimation = IDLE;
|
||||||
|
lastAnimating = null;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -869,6 +874,11 @@ public class IdleNotifierPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
lastAnimation = IDLE;
|
lastAnimation = IDLE;
|
||||||
lastAnimating = null;
|
lastAnimating = null;
|
||||||
|
|
||||||
|
// prevent interaction notifications from firing too
|
||||||
|
lastInteract = null;
|
||||||
|
lastInteracting = null;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
@@ -72,4 +72,14 @@ public interface InterfaceStylesConfig extends Config
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "alwaysStack",
|
||||||
|
name = "Always stack bottom bar",
|
||||||
|
description = "Always stack the bottom bar in resizable"
|
||||||
|
)
|
||||||
|
default boolean alwaysStack()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+12
@@ -39,6 +39,7 @@ import net.runelite.api.SpriteID;
|
|||||||
import net.runelite.api.events.BeforeMenuRender;
|
import net.runelite.api.events.BeforeMenuRender;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.PostHealthBar;
|
import net.runelite.api.events.PostHealthBar;
|
||||||
|
import net.runelite.api.events.ScriptCallbackEvent;
|
||||||
import net.runelite.api.events.WidgetPositioned;
|
import net.runelite.api.events.WidgetPositioned;
|
||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
import net.runelite.api.widgets.WidgetInfo;
|
import net.runelite.api.widgets.WidgetInfo;
|
||||||
@@ -117,6 +118,17 @@ public class InterfaceStylesPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onScriptCallbackEvent(ScriptCallbackEvent event)
|
||||||
|
{
|
||||||
|
if ("forceStackStones".equals(event.getEventName()) && config.alwaysStack())
|
||||||
|
{
|
||||||
|
int[] intStack = client.getIntStack();
|
||||||
|
int intStackSize = client.getIntStackSize();
|
||||||
|
intStack[intStackSize - 1] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
private void onWidgetPositioned(WidgetPositioned widgetPositioned)
|
private void onWidgetPositioned(WidgetPositioned widgetPositioned)
|
||||||
{
|
{
|
||||||
|
|||||||
+2
@@ -30,6 +30,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("inventorygrid")
|
@ConfigGroup("inventorygrid")
|
||||||
public interface InventoryGridConfig extends Config
|
public interface InventoryGridConfig extends Config
|
||||||
@@ -74,6 +75,7 @@ public interface InventoryGridConfig extends Config
|
|||||||
position = 4
|
position = 4
|
||||||
)
|
)
|
||||||
@Range(min = 100)
|
@Range(min = 100)
|
||||||
|
@Units(Units.MILLISECONDS)
|
||||||
default int dragDelay()
|
default int dragDelay()
|
||||||
{
|
{
|
||||||
return 100;
|
return 100;
|
||||||
|
|||||||
+1
-1
@@ -102,7 +102,7 @@ class InventoryGridOverlay extends Overlay
|
|||||||
{
|
{
|
||||||
WidgetItem targetWidgetItem = inventoryWidget.getWidgetItem(i);
|
WidgetItem targetWidgetItem = inventoryWidget.getWidgetItem(i);
|
||||||
|
|
||||||
final Rectangle bounds = targetWidgetItem.getCanvasBounds();
|
final Rectangle bounds = targetWidgetItem.getCanvasBounds(false);
|
||||||
boolean inBounds = bounds.contains(mousePoint);
|
boolean inBounds = bounds.contains(mousePoint);
|
||||||
|
|
||||||
if (plugin.isShowItem() && inBounds)
|
if (plugin.isShowItem() && inBounds)
|
||||||
|
|||||||
+69
-9
@@ -45,7 +45,11 @@ public interface InventoryTagsConfig extends Config
|
|||||||
FIVE("5"),
|
FIVE("5"),
|
||||||
SIX("6"),
|
SIX("6"),
|
||||||
SEVEN("7"),
|
SEVEN("7"),
|
||||||
EIGHT("8");
|
EIGHT("8"),
|
||||||
|
NINE("9"),
|
||||||
|
TEN("10"),
|
||||||
|
ELEVEN("11"),
|
||||||
|
TWELVE("12");
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
@@ -79,7 +83,7 @@ public interface InventoryTagsConfig extends Config
|
|||||||
description = "Color of the Tag",
|
description = "Color of the Tag",
|
||||||
hidden = true,
|
hidden = true,
|
||||||
unhide = "amount",
|
unhide = "amount",
|
||||||
unhideValue = "1 || 2 || 3 || 4 || 5 || 6 || 7 || 8"
|
unhideValue = "1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12"
|
||||||
)
|
)
|
||||||
default Color getGroup1Color()
|
default Color getGroup1Color()
|
||||||
{
|
{
|
||||||
@@ -93,7 +97,7 @@ public interface InventoryTagsConfig extends Config
|
|||||||
description = "Color of the Tag",
|
description = "Color of the Tag",
|
||||||
hidden = true,
|
hidden = true,
|
||||||
unhide = "amount",
|
unhide = "amount",
|
||||||
unhideValue = "2 || 3 || 4 || 5 || 6 || 7 || 8"
|
unhideValue = "2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12"
|
||||||
)
|
)
|
||||||
default Color getGroup2Color()
|
default Color getGroup2Color()
|
||||||
{
|
{
|
||||||
@@ -107,7 +111,7 @@ public interface InventoryTagsConfig extends Config
|
|||||||
description = "Color of the Tag",
|
description = "Color of the Tag",
|
||||||
hidden = true,
|
hidden = true,
|
||||||
unhide = "amount",
|
unhide = "amount",
|
||||||
unhideValue = "3 || 4 || 5 || 6 || 7 || 8"
|
unhideValue = "3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12"
|
||||||
)
|
)
|
||||||
default Color getGroup3Color()
|
default Color getGroup3Color()
|
||||||
{
|
{
|
||||||
@@ -121,7 +125,7 @@ public interface InventoryTagsConfig extends Config
|
|||||||
description = "Color of the Tag",
|
description = "Color of the Tag",
|
||||||
hidden = true,
|
hidden = true,
|
||||||
unhide = "amount",
|
unhide = "amount",
|
||||||
unhideValue = "4 || 5 || 6 || 7 || 8"
|
unhideValue = "4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12"
|
||||||
)
|
)
|
||||||
default Color getGroup4Color()
|
default Color getGroup4Color()
|
||||||
{
|
{
|
||||||
@@ -135,7 +139,7 @@ public interface InventoryTagsConfig extends Config
|
|||||||
description = "Color of the Tag",
|
description = "Color of the Tag",
|
||||||
hidden = true,
|
hidden = true,
|
||||||
unhide = "amount",
|
unhide = "amount",
|
||||||
unhideValue = "5 || 6 || 7 || 8"
|
unhideValue = "5 || 6 || 7 || 8 || 9 || 10 || 11 || 12"
|
||||||
)
|
)
|
||||||
default Color getGroup5Color()
|
default Color getGroup5Color()
|
||||||
{
|
{
|
||||||
@@ -149,7 +153,7 @@ public interface InventoryTagsConfig extends Config
|
|||||||
description = "Color of the Tag",
|
description = "Color of the Tag",
|
||||||
hidden = true,
|
hidden = true,
|
||||||
unhide = "amount",
|
unhide = "amount",
|
||||||
unhideValue = "6 || 7 || 8"
|
unhideValue = "6 || 7 || 8 || 9 || 10 || 11 || 12"
|
||||||
)
|
)
|
||||||
default Color getGroup6Color()
|
default Color getGroup6Color()
|
||||||
{
|
{
|
||||||
@@ -163,7 +167,7 @@ public interface InventoryTagsConfig extends Config
|
|||||||
description = "Color of the Tag",
|
description = "Color of the Tag",
|
||||||
hidden = true,
|
hidden = true,
|
||||||
unhide = "amount",
|
unhide = "amount",
|
||||||
unhideValue = "7 || 8"
|
unhideValue = "7 || 8 || 9 || 10 || 11 || 12"
|
||||||
)
|
)
|
||||||
default Color getGroup7Color()
|
default Color getGroup7Color()
|
||||||
{
|
{
|
||||||
@@ -177,10 +181,66 @@ public interface InventoryTagsConfig extends Config
|
|||||||
description = "Color of the Tag",
|
description = "Color of the Tag",
|
||||||
hidden = true,
|
hidden = true,
|
||||||
unhide = "amount",
|
unhide = "amount",
|
||||||
unhideValue = "8"
|
unhideValue = "8 || 9 || 10 || 11 || 12"
|
||||||
)
|
)
|
||||||
default Color getGroup8Color()
|
default Color getGroup8Color()
|
||||||
{
|
{
|
||||||
return new Color(104, 105, 255);
|
return new Color(104, 105, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
position = 9,
|
||||||
|
keyName = "groupColor9",
|
||||||
|
name = "Group 9 Color",
|
||||||
|
description = "Color of the Tag",
|
||||||
|
hidden = true,
|
||||||
|
unhide = "amount",
|
||||||
|
unhideValue = "9 || 10 || 11 || 12"
|
||||||
|
)
|
||||||
|
default Color getGroup9Color()
|
||||||
|
{
|
||||||
|
return new Color(255, 81, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
position = 10,
|
||||||
|
keyName = "groupColor10",
|
||||||
|
name = "Group 10 Color",
|
||||||
|
description = "Color of the Tag",
|
||||||
|
hidden = true,
|
||||||
|
unhide = "amount",
|
||||||
|
unhideValue = "10 || 11 || 12"
|
||||||
|
)
|
||||||
|
default Color getGroup10Color()
|
||||||
|
{
|
||||||
|
return new Color(255, 107, 229);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
position = 11,
|
||||||
|
keyName = "groupColor11",
|
||||||
|
name = "Group 11 Color",
|
||||||
|
description = "Color of the Tag",
|
||||||
|
hidden = true,
|
||||||
|
unhide = "amount",
|
||||||
|
unhideValue = "11 || 12"
|
||||||
|
)
|
||||||
|
default Color getGroup11Color()
|
||||||
|
{
|
||||||
|
return new Color(121, 255, 157);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
position = 12,
|
||||||
|
keyName = "groupColor12",
|
||||||
|
name = "Group 12 Color",
|
||||||
|
description = "Color of the Tag",
|
||||||
|
hidden = true,
|
||||||
|
unhide = "amount",
|
||||||
|
unhideValue = "12"
|
||||||
|
)
|
||||||
|
default Color getGroup12Color()
|
||||||
|
{
|
||||||
|
return new Color(65, 61, 64);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-2
@@ -69,6 +69,10 @@ public class InventoryTagsPlugin extends Plugin
|
|||||||
private static final String SETNAME_GROUP_6 = "Group 6";
|
private static final String SETNAME_GROUP_6 = "Group 6";
|
||||||
private static final String SETNAME_GROUP_7 = "Group 7";
|
private static final String SETNAME_GROUP_7 = "Group 7";
|
||||||
private static final String SETNAME_GROUP_8 = "Group 8";
|
private static final String SETNAME_GROUP_8 = "Group 8";
|
||||||
|
private static final String SETNAME_GROUP_9 = "Group 9";
|
||||||
|
private static final String SETNAME_GROUP_10 = "Group 10";
|
||||||
|
private static final String SETNAME_GROUP_11 = "Group 11";
|
||||||
|
private static final String SETNAME_GROUP_12 = "Group 12";
|
||||||
|
|
||||||
|
|
||||||
private static final String CONFIGURE = "Configure";
|
private static final String CONFIGURE = "Configure";
|
||||||
@@ -90,8 +94,8 @@ public class InventoryTagsPlugin extends Plugin
|
|||||||
private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE = new WidgetMenuOption(SAVE,
|
private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE = new WidgetMenuOption(SAVE,
|
||||||
MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB);
|
MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB);
|
||||||
|
|
||||||
private static final List<String> GROUPS = ImmutableList.of(SETNAME_GROUP_8, SETNAME_GROUP_7, SETNAME_GROUP_6,
|
private static final List<String> GROUPS = ImmutableList.of(SETNAME_GROUP_12, SETNAME_GROUP_11, SETNAME_GROUP_10, SETNAME_GROUP_9,
|
||||||
SETNAME_GROUP_5, SETNAME_GROUP_4, SETNAME_GROUP_3, SETNAME_GROUP_2, SETNAME_GROUP_1);
|
SETNAME_GROUP_8, SETNAME_GROUP_7, SETNAME_GROUP_6, SETNAME_GROUP_5, SETNAME_GROUP_4, SETNAME_GROUP_3, SETNAME_GROUP_2, SETNAME_GROUP_1);
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ConfigManager configManager;
|
private ConfigManager configManager;
|
||||||
@@ -119,6 +123,10 @@ public class InventoryTagsPlugin extends Plugin
|
|||||||
private Color group6Color;
|
private Color group6Color;
|
||||||
private Color group7Color;
|
private Color group7Color;
|
||||||
private Color group8Color;
|
private Color group8Color;
|
||||||
|
private Color group9Color;
|
||||||
|
private Color group10Color;
|
||||||
|
private Color group11Color;
|
||||||
|
private Color group12Color;
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
InventoryTagsConfig provideConfig(ConfigManager configManager)
|
InventoryTagsConfig provideConfig(ConfigManager configManager)
|
||||||
@@ -265,6 +273,14 @@ public class InventoryTagsPlugin extends Plugin
|
|||||||
return this.group7Color;
|
return this.group7Color;
|
||||||
case SETNAME_GROUP_8:
|
case SETNAME_GROUP_8:
|
||||||
return this.group8Color;
|
return this.group8Color;
|
||||||
|
case SETNAME_GROUP_9:
|
||||||
|
return this.group9Color;
|
||||||
|
case SETNAME_GROUP_10:
|
||||||
|
return this.group10Color;
|
||||||
|
case SETNAME_GROUP_11:
|
||||||
|
return this.group11Color;
|
||||||
|
case SETNAME_GROUP_12:
|
||||||
|
return this.group12Color;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -316,5 +332,9 @@ public class InventoryTagsPlugin extends Plugin
|
|||||||
this.group6Color = config.getGroup6Color();
|
this.group6Color = config.getGroup6Color();
|
||||||
this.group7Color = config.getGroup7Color();
|
this.group7Color = config.getGroup7Color();
|
||||||
this.group8Color = config.getGroup8Color();
|
this.group8Color = config.getGroup8Color();
|
||||||
|
this.group9Color = config.getGroup9Color();
|
||||||
|
this.group10Color = config.getGroup10Color();
|
||||||
|
this.group11Color = config.getGroup11Color();
|
||||||
|
this.group12Color = config.getGroup12Color();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -26,6 +26,7 @@ package net.runelite.client.plugins.kingdomofmiscellania;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("kingdomofmiscellania")
|
@ConfigGroup("kingdomofmiscellania")
|
||||||
public interface KingdomConfig extends Config
|
public interface KingdomConfig extends Config
|
||||||
@@ -59,6 +60,7 @@ public interface KingdomConfig extends Config
|
|||||||
description = "Sends a message to your chatbox when your kingdom's coffer is below the threshold. Leave at 0 to disable.",
|
description = "Sends a message to your chatbox when your kingdom's coffer is below the threshold. Leave at 0 to disable.",
|
||||||
position = 2
|
position = 2
|
||||||
)
|
)
|
||||||
|
@Units(Units.GP)
|
||||||
default int notifyCofferThreshold()
|
default int notifyCofferThreshold()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
+2
-2
@@ -63,6 +63,7 @@ import net.runelite.client.ui.components.PluginErrorPanel;
|
|||||||
import net.runelite.client.util.ColorUtil;
|
import net.runelite.client.util.ColorUtil;
|
||||||
import net.runelite.client.util.ImageUtil;
|
import net.runelite.client.util.ImageUtil;
|
||||||
import net.runelite.client.util.QuantityFormatter;
|
import net.runelite.client.util.QuantityFormatter;
|
||||||
|
import net.runelite.client.util.SwingUtil;
|
||||||
import net.runelite.http.api.loottracker.LootTrackerClient;
|
import net.runelite.http.api.loottracker.LootTrackerClient;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -575,8 +576,7 @@ class LootTrackerPanel extends PluginPanel
|
|||||||
*/
|
*/
|
||||||
public void rebuild()
|
public void rebuild()
|
||||||
{
|
{
|
||||||
|
SwingUtil.fastRemoveAll(logsContainer);
|
||||||
logsContainer.removeAll();
|
|
||||||
boxes.clear();
|
boxes.clear();
|
||||||
int start = 0;
|
int start = 0;
|
||||||
records.sort(lootRecordSortType);
|
records.sort(lootRecordSortType);
|
||||||
|
|||||||
-1
@@ -1217,7 +1217,6 @@ public class LootTrackerPlugin extends Plugin
|
|||||||
|
|
||||||
config.setIgnoredItems(Text.toCSV(ignoredItemSet));
|
config.setIgnoredItems(Text.toCSV(ignoredItemSet));
|
||||||
this.getIgnoredItems = Text.toCSV(ignoredItemSet);
|
this.getIgnoredItems = Text.toCSV(ignoredItemSet);
|
||||||
panel.updateIgnoredRecords();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isIgnored(String name)
|
boolean isIgnored(String name)
|
||||||
|
|||||||
+4
@@ -29,6 +29,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("metronome")
|
@ConfigGroup("metronome")
|
||||||
public interface MetronomePluginConfiguration extends Config
|
public interface MetronomePluginConfiguration extends Config
|
||||||
@@ -38,6 +39,7 @@ public interface MetronomePluginConfiguration extends Config
|
|||||||
name = "Tick count",
|
name = "Tick count",
|
||||||
description = "Configures the number of game ticks between metronome sounds"
|
description = "Configures the number of game ticks between metronome sounds"
|
||||||
)
|
)
|
||||||
|
@Units(Units.TICKS)
|
||||||
default int tickCount()
|
default int tickCount()
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
@@ -58,6 +60,7 @@ public interface MetronomePluginConfiguration extends Config
|
|||||||
name = "Tock every nth \"tick\"",
|
name = "Tock every nth \"tick\"",
|
||||||
description = "Configures how many \"ticks\" between each \"tock\""
|
description = "Configures how many \"ticks\" between each \"tock\""
|
||||||
)
|
)
|
||||||
|
@Units(Units.TICKS)
|
||||||
default int tockNumber()
|
default int tockNumber()
|
||||||
{
|
{
|
||||||
return 2;
|
return 2;
|
||||||
@@ -102,6 +105,7 @@ public interface MetronomePluginConfiguration extends Config
|
|||||||
name = "Volume modification",
|
name = "Volume modification",
|
||||||
description = "Configures tick/tock volume; only effects custom sounds."
|
description = "Configures tick/tock volume; only effects custom sounds."
|
||||||
)
|
)
|
||||||
|
@Units(Units.PERCENT)
|
||||||
default int volume()
|
default int volume()
|
||||||
{
|
{
|
||||||
return 35;
|
return 35;
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("mining")
|
@ConfigGroup("mining")
|
||||||
public interface MiningConfig extends Config
|
public interface MiningConfig extends Config
|
||||||
@@ -104,6 +105,7 @@ public interface MiningConfig extends Config
|
|||||||
name = "Progress pie diameter",
|
name = "Progress pie diameter",
|
||||||
description = "Configures how big the progress pie is"
|
description = "Configures how big the progress pie is"
|
||||||
)
|
)
|
||||||
|
@Units(Units.PIXELS)
|
||||||
default int progressPieDiameter()
|
default int progressPieDiameter()
|
||||||
{
|
{
|
||||||
return 30;
|
return 30;
|
||||||
|
|||||||
+3
-1
@@ -28,6 +28,7 @@ package net.runelite.client.plugins.motherlode;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("motherlode")
|
@ConfigGroup("motherlode")
|
||||||
public interface MotherlodeConfig extends Config
|
public interface MotherlodeConfig extends Config
|
||||||
@@ -54,9 +55,10 @@ public interface MotherlodeConfig extends Config
|
|||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "statTimeout",
|
keyName = "statTimeout",
|
||||||
name = "Reset stats (minutes)",
|
name = "Reset stats",
|
||||||
description = "Configures the time until statistics are reset"
|
description = "Configures the time until statistics are reset"
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int statTimeout()
|
default int statTimeout()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
+8
-3
@@ -28,6 +28,7 @@ import java.awt.Color;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("npcindicators")
|
@ConfigGroup("npcindicators")
|
||||||
public interface NpcIndicatorsConfig extends Config
|
public interface NpcIndicatorsConfig extends Config
|
||||||
@@ -124,7 +125,8 @@ public interface NpcIndicatorsConfig extends Config
|
|||||||
position = 7,
|
position = 7,
|
||||||
keyName = "showRespawnTimer",
|
keyName = "showRespawnTimer",
|
||||||
name = "Show respawn timer",
|
name = "Show respawn timer",
|
||||||
description = "Show respawn timer of tagged NPCs")
|
description = "Show respawn timer of tagged NPCs"
|
||||||
|
)
|
||||||
default boolean showRespawnTimer()
|
default boolean showRespawnTimer()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@@ -134,7 +136,8 @@ public interface NpcIndicatorsConfig extends Config
|
|||||||
position = 7,
|
position = 7,
|
||||||
keyName = "notifyOnRespawn",
|
keyName = "notifyOnRespawn",
|
||||||
name = "Notify on Respawn",
|
name = "Notify on Respawn",
|
||||||
description = "Enable notification on respawn")
|
description = "Enable notification on respawn"
|
||||||
|
)
|
||||||
default boolean getNotifyOnRespawn()
|
default boolean getNotifyOnRespawn()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@@ -144,7 +147,9 @@ public interface NpcIndicatorsConfig extends Config
|
|||||||
position = 8,
|
position = 8,
|
||||||
keyName = "notifyOnRespawnDelay",
|
keyName = "notifyOnRespawnDelay",
|
||||||
name = "Notification Delay",
|
name = "Notification Delay",
|
||||||
description = "Notify when NPC is x ms from respawning")
|
description = "Notify when NPC is x ms from respawning"
|
||||||
|
)
|
||||||
|
@Units(Units.MILLISECONDS)
|
||||||
default int getNotifyOnRespawnDelay()
|
default int getNotifyOnRespawnDelay()
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
+2
@@ -33,6 +33,7 @@ import net.runelite.client.config.ConfigItem;
|
|||||||
import net.runelite.client.config.ConfigTitleSection;
|
import net.runelite.client.config.ConfigTitleSection;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
import net.runelite.client.config.Title;
|
import net.runelite.client.config.Title;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("objectindicators")
|
@ConfigGroup("objectindicators")
|
||||||
public interface ObjectIndicatorsConfig extends Config
|
public interface ObjectIndicatorsConfig extends Config
|
||||||
@@ -109,6 +110,7 @@ public interface ObjectIndicatorsConfig extends Config
|
|||||||
description = "Configures the opacity/alpha of object marker",
|
description = "Configures the opacity/alpha of object marker",
|
||||||
titleSection = "colorTitle"
|
titleSection = "colorTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.PERCENT)
|
||||||
default int objectMarkerAlpha()
|
default int objectMarkerAlpha()
|
||||||
{
|
{
|
||||||
return 100;
|
return 100;
|
||||||
|
|||||||
+3
-1
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.performancestats;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("performancestats")
|
@ConfigGroup("performancestats")
|
||||||
public interface PerformanceStatsConfig extends Config
|
public interface PerformanceStatsConfig extends Config
|
||||||
@@ -34,9 +35,10 @@ public interface PerformanceStatsConfig extends Config
|
|||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
position = 0,
|
position = 0,
|
||||||
keyName = "submitTimeout",
|
keyName = "submitTimeout",
|
||||||
name = "Submit Timeout (seconds)",
|
name = "Submit Timeout",
|
||||||
description = "Submits after this many seconds of inactivity"
|
description = "Submits after this many seconds of inactivity"
|
||||||
)
|
)
|
||||||
|
@Units(Units.SECONDS)
|
||||||
default int submitTimeout()
|
default int submitTimeout()
|
||||||
{
|
{
|
||||||
return 30;
|
return 30;
|
||||||
|
|||||||
+3
@@ -27,6 +27,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("playerscouter")
|
@ConfigGroup("playerscouter")
|
||||||
public interface PlayerScouterConfig extends Config
|
public interface PlayerScouterConfig extends Config
|
||||||
@@ -116,6 +117,7 @@ public interface PlayerScouterConfig extends Config
|
|||||||
description = "Minimum value for the item to be posted on discord.",
|
description = "Minimum value for the item to be posted on discord.",
|
||||||
position = 6
|
position = 6
|
||||||
)
|
)
|
||||||
|
@Units(Units.GP)
|
||||||
default int minimumValue()
|
default int minimumValue()
|
||||||
{
|
{
|
||||||
return 1000;
|
return 1000;
|
||||||
@@ -157,6 +159,7 @@ public interface PlayerScouterConfig extends Config
|
|||||||
description = "Minimum amount of ticks before the player can be scouted again. (1 tick = 600ms)",
|
description = "Minimum amount of ticks before the player can be scouted again. (1 tick = 600ms)",
|
||||||
position = 9
|
position = 9
|
||||||
)
|
)
|
||||||
|
@Units(Units.TICKS)
|
||||||
default int timeout()
|
default int timeout()
|
||||||
{
|
{
|
||||||
return 500;
|
return 500;
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.poison;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup(PoisonConfig.GROUP)
|
@ConfigGroup(PoisonConfig.GROUP)
|
||||||
public interface PoisonConfig extends Config
|
public interface PoisonConfig extends Config
|
||||||
@@ -81,6 +82,7 @@ public interface PoisonConfig extends Config
|
|||||||
description = "The size the time left text for other players/npc's will be",
|
description = "The size the time left text for other players/npc's will be",
|
||||||
position = 3
|
position = 3
|
||||||
)
|
)
|
||||||
|
@Units(Units.POINTS)
|
||||||
default int fontSize()
|
default int fontSize()
|
||||||
{
|
{
|
||||||
return 8;
|
return 8;
|
||||||
|
|||||||
+3
@@ -29,6 +29,7 @@ import net.runelite.client.config.ConfigGroup;
|
|||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.ConfigTitleSection;
|
import net.runelite.client.config.ConfigTitleSection;
|
||||||
import net.runelite.client.config.Title;
|
import net.runelite.client.config.Title;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("pyramidplunder")
|
@ConfigGroup("pyramidplunder")
|
||||||
public interface PyramidPlunderConfig extends Config
|
public interface PyramidPlunderConfig extends Config
|
||||||
@@ -133,6 +134,7 @@ public interface PyramidPlunderConfig extends Config
|
|||||||
description = "Recolor time left(s)",
|
description = "Recolor time left(s)",
|
||||||
titleSection = "warningsTitle"
|
titleSection = "warningsTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.SECONDS)
|
||||||
default int firstWarningTime()
|
default int firstWarningTime()
|
||||||
{
|
{
|
||||||
return 90;
|
return 90;
|
||||||
@@ -145,6 +147,7 @@ public interface PyramidPlunderConfig extends Config
|
|||||||
description = "Recolor time left(s)",
|
description = "Recolor time left(s)",
|
||||||
titleSection = "warningsTitle"
|
titleSection = "warningsTitle"
|
||||||
)
|
)
|
||||||
|
@Units(Units.SECONDS)
|
||||||
default int secondWarningTime()
|
default int secondWarningTime()
|
||||||
{
|
{
|
||||||
return 30;
|
return 30;
|
||||||
|
|||||||
+2
-1
@@ -31,6 +31,7 @@ import java.awt.Graphics2D;
|
|||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.NonNull;
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
import net.runelite.client.ui.overlay.Overlay;
|
||||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
import net.runelite.client.ui.overlay.OverlayLayer;
|
||||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||||
@@ -43,7 +44,7 @@ public class ScreenMarkerOverlay extends Overlay
|
|||||||
private final ScreenMarker marker;
|
private final ScreenMarker marker;
|
||||||
private final ScreenMarkerRenderable screenMarkerRenderable;
|
private final ScreenMarkerRenderable screenMarkerRenderable;
|
||||||
|
|
||||||
ScreenMarkerOverlay(final ScreenMarker marker)
|
ScreenMarkerOverlay(@NonNull ScreenMarker marker)
|
||||||
{
|
{
|
||||||
this.marker = marker;
|
this.marker = marker;
|
||||||
this.screenMarkerRenderable = new ScreenMarkerRenderable();
|
this.screenMarkerRenderable = new ScreenMarkerRenderable();
|
||||||
|
|||||||
+5
-3
@@ -36,6 +36,7 @@ import java.awt.image.BufferedImage;
|
|||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -188,9 +189,10 @@ public class ScreenMarkerPlugin extends Plugin
|
|||||||
|
|
||||||
public void finishCreation(boolean aborted)
|
public void finishCreation(boolean aborted)
|
||||||
{
|
{
|
||||||
if (!aborted && currentMarker != null)
|
ScreenMarker marker = currentMarker;
|
||||||
|
if (!aborted && marker != null)
|
||||||
{
|
{
|
||||||
final ScreenMarkerOverlay screenMarkerOverlay = new ScreenMarkerOverlay(currentMarker);
|
final ScreenMarkerOverlay screenMarkerOverlay = new ScreenMarkerOverlay(marker);
|
||||||
screenMarkerOverlay.setPreferredLocation(overlay.getBounds().getLocation());
|
screenMarkerOverlay.setPreferredLocation(overlay.getBounds().getLocation());
|
||||||
screenMarkerOverlay.setPreferredSize(overlay.getBounds().getSize());
|
screenMarkerOverlay.setPreferredSize(overlay.getBounds().getSize());
|
||||||
|
|
||||||
@@ -258,6 +260,6 @@ public class ScreenMarkerPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
}.getType());
|
}.getType());
|
||||||
|
|
||||||
return screenMarkerData.stream().map(ScreenMarkerOverlay::new);
|
return screenMarkerData.stream().filter(Objects::nonNull).map(ScreenMarkerOverlay::new);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -28,6 +28,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.Keybind;
|
import net.runelite.client.config.Keybind;
|
||||||
|
import net.runelite.client.util.ImageUploadStyle;
|
||||||
|
|
||||||
@ConfigGroup("screenshot")
|
@ConfigGroup("screenshot")
|
||||||
public interface ScreenshotConfig extends Config
|
public interface ScreenshotConfig extends Config
|
||||||
@@ -115,9 +116,9 @@ public interface ScreenshotConfig extends Config
|
|||||||
description = "Configures whether or not screenshots are uploaded to Imgur, or placed on your clipboard",
|
description = "Configures whether or not screenshots are uploaded to Imgur, or placed on your clipboard",
|
||||||
position = 7
|
position = 7
|
||||||
)
|
)
|
||||||
default UploadStyle uploadScreenshot()
|
default ImageUploadStyle uploadScreenshot()
|
||||||
{
|
{
|
||||||
return UploadStyle.NEITHER;
|
return ImageUploadStyle.NEITHER;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
|
|||||||
+11
-162
@@ -32,26 +32,17 @@ import com.google.inject.Provides;
|
|||||||
import java.awt.Desktop;
|
import java.awt.Desktop;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.Toolkit;
|
|
||||||
import java.awt.TrayIcon;
|
|
||||||
import java.awt.datatransfer.Clipboard;
|
|
||||||
import java.awt.datatransfer.StringSelection;
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.EnumSet;
|
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
@@ -66,7 +57,6 @@ import net.runelite.api.Player;
|
|||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
import net.runelite.api.SpriteID;
|
import net.runelite.api.SpriteID;
|
||||||
import net.runelite.api.Varbits;
|
import net.runelite.api.Varbits;
|
||||||
import net.runelite.api.WorldType;
|
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.GameTick;
|
import net.runelite.api.events.GameTick;
|
||||||
@@ -96,24 +86,14 @@ import net.runelite.client.input.KeyManager;
|
|||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
import net.runelite.client.plugins.PluginType;
|
import net.runelite.client.plugins.PluginType;
|
||||||
import net.runelite.client.plugins.screenshot.imgur.ImageUploadRequest;
|
|
||||||
import net.runelite.client.plugins.screenshot.imgur.ImageUploadResponse;
|
|
||||||
import net.runelite.client.ui.ClientToolbar;
|
import net.runelite.client.ui.ClientToolbar;
|
||||||
import net.runelite.client.ui.ClientUI;
|
import net.runelite.client.ui.ClientUI;
|
||||||
import net.runelite.client.ui.DrawManager;
|
import net.runelite.client.ui.DrawManager;
|
||||||
import net.runelite.client.ui.NavigationButton;
|
import net.runelite.client.ui.NavigationButton;
|
||||||
import net.runelite.client.ui.overlay.OverlayManager;
|
import net.runelite.client.ui.overlay.OverlayManager;
|
||||||
import net.runelite.client.util.HotkeyListener;
|
import net.runelite.client.util.HotkeyListener;
|
||||||
|
import net.runelite.client.util.ImageCapture;
|
||||||
import net.runelite.client.util.ImageUtil;
|
import net.runelite.client.util.ImageUtil;
|
||||||
import net.runelite.http.api.RuneLiteAPI;
|
|
||||||
import okhttp3.Call;
|
|
||||||
import okhttp3.Callback;
|
|
||||||
import okhttp3.HttpUrl;
|
|
||||||
import okhttp3.MediaType;
|
|
||||||
import okhttp3.Request;
|
|
||||||
import okhttp3.RequestBody;
|
|
||||||
import okhttp3.Response;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@PluginDescriptor(
|
@PluginDescriptor(
|
||||||
@@ -126,10 +106,6 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class ScreenshotPlugin extends Plugin
|
public class ScreenshotPlugin extends Plugin
|
||||||
{
|
{
|
||||||
private static final String IMGUR_CLIENT_ID = "30d71e5f6860809";
|
|
||||||
private static final HttpUrl IMGUR_IMAGE_UPLOAD_URL = HttpUrl.parse("https://api.imgur.com/3/image");
|
|
||||||
private static final MediaType JSON = MediaType.parse("application/json");
|
|
||||||
|
|
||||||
private static final DateFormat TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
|
private static final DateFormat TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
|
||||||
|
|
||||||
private static final Pattern NUMBER_PATTERN = Pattern.compile("([0-9]+)");
|
private static final Pattern NUMBER_PATTERN = Pattern.compile("([0-9]+)");
|
||||||
@@ -196,6 +172,9 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private SpriteManager spriteManager;
|
private SpriteManager spriteManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ImageCapture imageCapture;
|
||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
@Getter(AccessLevel.PACKAGE)
|
||||||
private BufferedImage reportButton;
|
private BufferedImage reportButton;
|
||||||
|
|
||||||
@@ -206,7 +185,7 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
@Override
|
@Override
|
||||||
public void hotkeyPressed()
|
public void hotkeyPressed()
|
||||||
{
|
{
|
||||||
takeScreenshot(format(new Date()));
|
takeScreenshot("");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -220,7 +199,6 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
private boolean screenshotLevels;
|
private boolean screenshotLevels;
|
||||||
private boolean screenshotKingdom;
|
private boolean screenshotKingdom;
|
||||||
private boolean screenshotPet;
|
private boolean screenshotPet;
|
||||||
private UploadStyle uploadScreenshot;
|
|
||||||
private boolean screenshotKills;
|
private boolean screenshotKills;
|
||||||
private boolean screenshotBossKills;
|
private boolean screenshotBossKills;
|
||||||
private boolean screenshotFriendDeath;
|
private boolean screenshotFriendDeath;
|
||||||
@@ -253,7 +231,7 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
.tab(false)
|
.tab(false)
|
||||||
.tooltip("Take screenshot")
|
.tooltip("Take screenshot")
|
||||||
.icon(iconImage)
|
.icon(iconImage)
|
||||||
.onClick(() -> takeScreenshot(format(new Date())))
|
.onClick(() -> takeScreenshot(""))
|
||||||
.popup(ImmutableMap
|
.popup(ImmutableMap
|
||||||
.<String, Runnable>builder()
|
.<String, Runnable>builder()
|
||||||
.put("Open screenshot folder...", () ->
|
.put("Open screenshot folder...", () ->
|
||||||
@@ -353,7 +331,7 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
final Player player = playerLootReceived.getPlayer();
|
final Player player = playerLootReceived.getPlayer();
|
||||||
final String name = player.getName();
|
final String name = player.getName();
|
||||||
String fileName = "Kill " + name + " " + format(new Date());
|
String fileName = "Kill " + name;
|
||||||
takeScreenshot(fileName);
|
takeScreenshot(fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -421,7 +399,7 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
|
|
||||||
if (this.screenshotPet && PET_MESSAGES.stream().anyMatch(chatMessage::contains))
|
if (this.screenshotPet && PET_MESSAGES.stream().anyMatch(chatMessage::contains))
|
||||||
{
|
{
|
||||||
String fileName = "Pet " + format(new Date());
|
String fileName = "Pet";
|
||||||
takeScreenshot(fileName);
|
takeScreenshot(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -443,7 +421,7 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
if (m.matches())
|
if (m.matches())
|
||||||
{
|
{
|
||||||
String valuableDropName = m.group(1);
|
String valuableDropName = m.group(1);
|
||||||
String fileName = "Valuable drop " + valuableDropName + " " + format(new Date());
|
String fileName = "Valuable drop " + valuableDropName;
|
||||||
takeScreenshot(fileName);
|
takeScreenshot(fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -454,7 +432,7 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
if (m.matches())
|
if (m.matches())
|
||||||
{
|
{
|
||||||
String untradeableDropName = m.group(1);
|
String untradeableDropName = m.group(1);
|
||||||
String fileName = "Untradeable drop " + untradeableDropName + " " + format(new Date());
|
String fileName = "Untradeable drop " + untradeableDropName;
|
||||||
takeScreenshot(fileName);
|
takeScreenshot(fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -703,135 +681,7 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
|
|
||||||
// Draw the game onto the screenshot
|
// Draw the game onto the screenshot
|
||||||
graphics.drawImage(image, gameOffsetX, gameOffsetY, null);
|
graphics.drawImage(image, gameOffsetX, gameOffsetY, null);
|
||||||
|
imageCapture.takeScreenshot(screenshot, fileName, config.notifyWhenTaken(), config.uploadScreenshot());
|
||||||
File playerFolder;
|
|
||||||
if (client.getLocalPlayer() != null && client.getLocalPlayer().getName() != null)
|
|
||||||
{
|
|
||||||
final EnumSet<WorldType> worldTypes = client.getWorldType();
|
|
||||||
|
|
||||||
String playerDir = client.getLocalPlayer().getName();
|
|
||||||
if (worldTypes.contains(WorldType.DEADMAN))
|
|
||||||
{
|
|
||||||
playerDir += "-Deadman";
|
|
||||||
}
|
|
||||||
else if (worldTypes.contains(WorldType.LEAGUE))
|
|
||||||
{
|
|
||||||
playerDir += "-League";
|
|
||||||
}
|
|
||||||
playerFolder = new File(SCREENSHOT_DIR, playerDir);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
playerFolder = SCREENSHOT_DIR;
|
|
||||||
}
|
|
||||||
|
|
||||||
playerFolder.mkdirs();
|
|
||||||
|
|
||||||
if (subdirectory != null)
|
|
||||||
{
|
|
||||||
//uhh just tried to do this as workaround, not sure if it's the best idea tho
|
|
||||||
File actualplayerFolder = new File(playerFolder, subdirectory);
|
|
||||||
actualplayerFolder.mkdir();
|
|
||||||
playerFolder = actualplayerFolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
File screenshotFile = new File(playerFolder, fileName + ".png");
|
|
||||||
|
|
||||||
// To make sure that screenshots don't get overwritten, check if file exists,
|
|
||||||
// and if it does create file with same name and suffix.
|
|
||||||
int i = 1;
|
|
||||||
while (screenshotFile.exists())
|
|
||||||
{
|
|
||||||
screenshotFile = new File(playerFolder, fileName + String.format("(%d)", i++) + ".png");
|
|
||||||
}
|
|
||||||
|
|
||||||
ImageIO.write(screenshot, "PNG", screenshotFile);
|
|
||||||
UploadStyle uploadStyle = this.uploadScreenshot;
|
|
||||||
|
|
||||||
if (uploadStyle == UploadStyle.IMGUR)
|
|
||||||
{
|
|
||||||
uploadScreenshot(screenshotFile);
|
|
||||||
}
|
|
||||||
else if (uploadStyle == UploadStyle.CLIPBOARD)
|
|
||||||
{
|
|
||||||
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
|
|
||||||
TransferableBufferedImage transferableBufferedImage = new TransferableBufferedImage(screenshot);
|
|
||||||
clipboard.setContents(transferableBufferedImage, null);
|
|
||||||
|
|
||||||
if (this.notifyWhenTaken)
|
|
||||||
{
|
|
||||||
notifier.notify("A screenshot was saved and inserted into your clipboard!", TrayIcon.MessageType.INFO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (this.notifyWhenTaken)
|
|
||||||
{
|
|
||||||
notifier.notify("A screenshot was saved to " + screenshotFile, TrayIcon.MessageType.INFO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (IOException ex)
|
|
||||||
{
|
|
||||||
log.warn("error writing screenshot", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uploads a screenshot to the Imgur image-hosting service,
|
|
||||||
* and copies the image link to the clipboard.
|
|
||||||
*
|
|
||||||
* @param screenshotFile Image file to upload.
|
|
||||||
* @throws IOException Thrown if the file cannot be read.
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Uploads a screenshot to the Imgur image-hosting service,
|
|
||||||
* and copies the image link to the clipboard.
|
|
||||||
*
|
|
||||||
* @param screenshotFile Image file to upload.
|
|
||||||
* @throws IOException Thrown if the file cannot be read.
|
|
||||||
*/
|
|
||||||
private void uploadScreenshot(File screenshotFile) throws IOException
|
|
||||||
{
|
|
||||||
String json = RuneLiteAPI.GSON.toJson(new ImageUploadRequest(screenshotFile));
|
|
||||||
|
|
||||||
Request request = new Request.Builder()
|
|
||||||
.url(IMGUR_IMAGE_UPLOAD_URL)
|
|
||||||
.addHeader("Authorization", "Client-ID " + IMGUR_CLIENT_ID)
|
|
||||||
.post(RequestBody.create(JSON, json))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NotNull Call call, @NotNull IOException ex)
|
|
||||||
{
|
|
||||||
log.warn("error uploading screenshot", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException
|
|
||||||
{
|
|
||||||
try (InputStream in = response.body().byteStream())
|
|
||||||
{
|
|
||||||
ImageUploadResponse imageUploadResponse = RuneLiteAPI.GSON
|
|
||||||
.fromJson(new InputStreamReader(in), ImageUploadResponse.class);
|
|
||||||
|
|
||||||
if (imageUploadResponse.isSuccess())
|
|
||||||
{
|
|
||||||
String link = imageUploadResponse.getData().getLink();
|
|
||||||
|
|
||||||
StringSelection selection = new StringSelection(link);
|
|
||||||
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
|
|
||||||
clipboard.setContents(selection, selection);
|
|
||||||
|
|
||||||
if (notifyWhenTaken)
|
|
||||||
{
|
|
||||||
notifier.notify("A screenshot was uploaded and inserted into your clipboard!", TrayIcon.MessageType.INFO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -890,7 +740,6 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
this.screenshotLevels = config.screenshotLevels();
|
this.screenshotLevels = config.screenshotLevels();
|
||||||
this.screenshotKingdom = config.screenshotKingdom();
|
this.screenshotKingdom = config.screenshotKingdom();
|
||||||
this.screenshotPet = config.screenshotPet();
|
this.screenshotPet = config.screenshotPet();
|
||||||
this.uploadScreenshot = config.uploadScreenshot();
|
|
||||||
this.screenshotKills = config.screenshotKills();
|
this.screenshotKills = config.screenshotKills();
|
||||||
this.screenshotBossKills = config.screenshotBossKills();
|
this.screenshotBossKills = config.screenshotBossKills();
|
||||||
this.screenshotFriendDeath = config.screenshotFriendDeath();
|
this.screenshotFriendDeath = config.screenshotFriendDeath();
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import java.awt.Color;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("slayer")
|
@ConfigGroup("slayer")
|
||||||
public interface SlayerConfig extends Config
|
public interface SlayerConfig extends Config
|
||||||
@@ -70,9 +71,10 @@ public interface SlayerConfig extends Config
|
|||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
position = 4,
|
position = 4,
|
||||||
keyName = "statTimeout",
|
keyName = "statTimeout",
|
||||||
name = "InfoBox Expiry (minutes)",
|
name = "InfoBox Expiry",
|
||||||
description = "Set the time until the InfoBox expires"
|
description = "Set the time until the InfoBox expires"
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int statTimeout()
|
default int statTimeout()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ class SlayerOverlay extends WidgetItemOverlay
|
|||||||
ItemID.RED_SLAYER_HELMET_I,
|
ItemID.RED_SLAYER_HELMET_I,
|
||||||
ItemID.TURQUOISE_SLAYER_HELMET,
|
ItemID.TURQUOISE_SLAYER_HELMET,
|
||||||
ItemID.TURQUOISE_SLAYER_HELMET_I,
|
ItemID.TURQUOISE_SLAYER_HELMET_I,
|
||||||
|
ItemID.TWISTED_SLAYER_HELMET,
|
||||||
|
ItemID.TWISTED_SLAYER_HELMET_I,
|
||||||
ItemID.HYDRA_SLAYER_HELMET,
|
ItemID.HYDRA_SLAYER_HELMET,
|
||||||
ItemID.HYDRA_SLAYER_HELMET_I,
|
ItemID.HYDRA_SLAYER_HELMET_I,
|
||||||
ItemID.SLAYER_RING_ETERNAL,
|
ItemID.SLAYER_RING_ETERNAL,
|
||||||
|
|||||||
+3
-1
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.smelting;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("smelting")
|
@ConfigGroup("smelting")
|
||||||
public interface SmeltingConfig extends Config
|
public interface SmeltingConfig extends Config
|
||||||
@@ -34,9 +35,10 @@ public interface SmeltingConfig extends Config
|
|||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
position = 1,
|
position = 1,
|
||||||
keyName = "statTimeout",
|
keyName = "statTimeout",
|
||||||
name = "Reset stats (minutes)",
|
name = "Reset stats",
|
||||||
description = "The time it takes for the current smelting session to be reset"
|
description = "The time it takes for the current smelting session to be reset"
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int statTimeout()
|
default int statTimeout()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
+2
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.spellbook;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("spellbook")
|
@ConfigGroup("spellbook")
|
||||||
public interface SpellbookConfig extends Config
|
public interface SpellbookConfig extends Config
|
||||||
@@ -70,6 +71,7 @@ public interface SpellbookConfig extends Config
|
|||||||
description = "Size (in px) of spells. Normal mobile size is 40px, use common sense for this setting",
|
description = "Size (in px) of spells. Normal mobile size is 40px, use common sense for this setting",
|
||||||
position = 4
|
position = 4
|
||||||
)
|
)
|
||||||
|
@Units(Units.PIXELS)
|
||||||
default int size()
|
default int size()
|
||||||
{
|
{
|
||||||
return 40;
|
return 40;
|
||||||
|
|||||||
+3
-1
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.statusbars;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
import net.runelite.client.plugins.statusbars.config.BarMode;
|
import net.runelite.client.plugins.statusbars.config.BarMode;
|
||||||
|
|
||||||
@ConfigGroup("statusbars")
|
@ConfigGroup("statusbars")
|
||||||
@@ -101,9 +102,10 @@ public interface StatusBarsConfig extends Config
|
|||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
position = 7,
|
position = 7,
|
||||||
keyName = "hideStatusBarDelay",
|
keyName = "hideStatusBarDelay",
|
||||||
name = "Delay (seconds)",
|
name = "Delay",
|
||||||
description = "Number of seconds after combat to hide the status bars."
|
description = "Number of seconds after combat to hide the status bars."
|
||||||
)
|
)
|
||||||
|
@Units(Units.SECONDS)
|
||||||
default int hideStatusBarDelay()
|
default int hideStatusBarDelay()
|
||||||
{
|
{
|
||||||
return 3;
|
return 3;
|
||||||
|
|||||||
+3
-1
@@ -30,6 +30,7 @@ import net.runelite.client.config.ConfigGroup;
|
|||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.ConfigTitleSection;
|
import net.runelite.client.config.ConfigTitleSection;
|
||||||
import net.runelite.client.config.Title;
|
import net.runelite.client.config.Title;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("statusorbs")
|
@ConfigGroup("statusorbs")
|
||||||
public interface StatusOrbsConfig extends Config
|
public interface StatusOrbsConfig extends Config
|
||||||
@@ -83,11 +84,12 @@ public interface StatusOrbsConfig extends Config
|
|||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "notifyBeforeHpRegenDuration",
|
keyName = "notifyBeforeHpRegenDuration",
|
||||||
name = "Hitpoint Regen Notification (seconds)",
|
name = "Hitpoint Regen Notification",
|
||||||
description = "Notify approximately when your next hitpoint is about to regen. A value of 0 will disable notification.",
|
description = "Notify approximately when your next hitpoint is about to regen. A value of 0 will disable notification.",
|
||||||
titleSection = "hp",
|
titleSection = "hp",
|
||||||
position = 4
|
position = 4
|
||||||
)
|
)
|
||||||
|
@Units(Units.SECONDS)
|
||||||
default int getNotifyBeforeHpRegenSeconds()
|
default int getNotifyBeforeHpRegenSeconds()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
+3
-1
@@ -28,6 +28,7 @@ package net.runelite.client.plugins.stretchedmode;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("stretchedmode")
|
@ConfigGroup("stretchedmode")
|
||||||
public interface StretchedModeConfig extends Config
|
public interface StretchedModeConfig extends Config
|
||||||
@@ -64,9 +65,10 @@ public interface StretchedModeConfig extends Config
|
|||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "scalingFactor",
|
keyName = "scalingFactor",
|
||||||
name = "Resizable Scaling (%)",
|
name = "Resizable Scaling",
|
||||||
description = "In resizable mode, the game is reduced in size this much before it's stretched."
|
description = "In resizable mode, the game is reduced in size this much before it's stretched."
|
||||||
)
|
)
|
||||||
|
@Units(Units.PERCENT)
|
||||||
default int scalingFactor()
|
default int scalingFactor()
|
||||||
{
|
{
|
||||||
return 50;
|
return 50;
|
||||||
|
|||||||
+3
-1
@@ -33,6 +33,7 @@ import net.runelite.client.config.ConfigGroup;
|
|||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.ConfigSection;
|
import net.runelite.client.config.ConfigSection;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("thieving")
|
@ConfigGroup("thieving")
|
||||||
public interface ThievingConfig extends Config
|
public interface ThievingConfig extends Config
|
||||||
@@ -40,9 +41,10 @@ public interface ThievingConfig extends Config
|
|||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
position = 1,
|
position = 1,
|
||||||
keyName = "statTimeout",
|
keyName = "statTimeout",
|
||||||
name = "Reset stats (minutes)",
|
name = "Reset stats",
|
||||||
description = "Change the time until the thieving session is reset and the overlay is hidden"
|
description = "Change the time until the thieving session is reset and the overlay is hidden"
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int statTimeout()
|
default int statTimeout()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
+3
-1
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.timetracking;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("timetracking")
|
@ConfigGroup("timetracking")
|
||||||
public interface TimeTrackingConfig extends Config
|
public interface TimeTrackingConfig extends Config
|
||||||
@@ -72,10 +73,11 @@ public interface TimeTrackingConfig extends Config
|
|||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "defaultTimerMinutes",
|
keyName = "defaultTimerMinutes",
|
||||||
name = "Default Time (Minutes)",
|
name = "Default Time",
|
||||||
description = "The default time for the timer in minutes",
|
description = "The default time for the timer in minutes",
|
||||||
position = 4
|
position = 4
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int defaultTimerMinutes()
|
default int defaultTimerMinutes()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
+15
-15
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Lotto <https://github.com/devLotto>
|
* Copyright (c) 2020, Henry Darnell <hjdarnel@gmail.com>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,23 +22,23 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.screenshot.imgur;
|
package net.runelite.client.plugins.wiki;
|
||||||
|
|
||||||
import java.io.File;
|
import net.runelite.client.config.Config;
|
||||||
import java.io.IOException;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import java.nio.file.Files;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import java.util.Base64;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Data
|
@ConfigGroup(WikiPlugin.CONFIG_GROUP_KEY)
|
||||||
public class ImageUploadRequest
|
public interface WikiConfig extends Config
|
||||||
{
|
{
|
||||||
private final String image;
|
@ConfigItem(
|
||||||
private final String type;
|
keyName = "leftClickSearch",
|
||||||
|
name = "Left Click Search",
|
||||||
public ImageUploadRequest(File imageFile) throws IOException
|
description = "Swap left-click on the Wiki button to Search",
|
||||||
|
position = 1
|
||||||
|
)
|
||||||
|
default boolean leftClickSearch()
|
||||||
{
|
{
|
||||||
this.image = Base64.getEncoder().encodeToString(Files.readAllBytes(imageFile.toPath()));
|
return false;
|
||||||
this.type = "base64";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.wiki;
|
package net.runelite.client.plugins.wiki;
|
||||||
|
|
||||||
|
import com.google.inject.Provides;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Provider;
|
import javax.inject.Provider;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -48,7 +49,9 @@ import net.runelite.api.widgets.WidgetInfo;
|
|||||||
import net.runelite.api.widgets.WidgetPositionMode;
|
import net.runelite.api.widgets.WidgetPositionMode;
|
||||||
import net.runelite.api.widgets.WidgetType;
|
import net.runelite.api.widgets.WidgetType;
|
||||||
import net.runelite.client.callback.ClientThread;
|
import net.runelite.client.callback.ClientThread;
|
||||||
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
|
import net.runelite.client.events.ConfigChanged;
|
||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.game.SpriteManager;
|
import net.runelite.client.game.SpriteManager;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
@@ -86,6 +89,9 @@ public class WikiPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private SpriteManager spriteManager;
|
private SpriteManager spriteManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private WikiConfig config;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ClientThread clientThread;
|
private ClientThread clientThread;
|
||||||
|
|
||||||
@@ -102,6 +108,14 @@ public class WikiPlugin extends Plugin
|
|||||||
|
|
||||||
private boolean wikiSelected = false;
|
private boolean wikiSelected = false;
|
||||||
|
|
||||||
|
static final String CONFIG_GROUP_KEY = "wiki";
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
WikiConfig getConfig(ConfigManager configManager)
|
||||||
|
{
|
||||||
|
return configManager.getConfig(WikiConfig.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startUp()
|
public void startUp()
|
||||||
{
|
{
|
||||||
@@ -111,29 +125,32 @@ public class WikiPlugin extends Plugin
|
|||||||
@Override
|
@Override
|
||||||
public void shutDown()
|
public void shutDown()
|
||||||
{
|
{
|
||||||
clientThread.invokeLater(() ->
|
clientThread.invokeLater(this::removeWidgets);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeWidgets()
|
||||||
|
{
|
||||||
|
|
||||||
|
Widget minimapOrbs = client.getWidget(WidgetInfo.MINIMAP_ORBS);
|
||||||
|
if (minimapOrbs == null)
|
||||||
{
|
{
|
||||||
Widget minimapOrbs = client.getWidget(WidgetInfo.MINIMAP_ORBS);
|
return;
|
||||||
if (minimapOrbs == null)
|
}
|
||||||
{
|
Widget[] children = minimapOrbs.getChildren();
|
||||||
return;
|
if (children == null || children.length < 1)
|
||||||
}
|
{
|
||||||
Widget[] children = minimapOrbs.getChildren();
|
return;
|
||||||
if (children == null || children.length < 1)
|
}
|
||||||
{
|
children[0] = null;
|
||||||
return;
|
|
||||||
}
|
|
||||||
children[0] = null;
|
|
||||||
|
|
||||||
Widget vanilla = client.getWidget(WidgetInfo.MINIMAP_WIKI_BANNER);
|
Widget vanilla = client.getWidget(WidgetInfo.MINIMAP_WIKI_BANNER);
|
||||||
if (vanilla != null)
|
if (vanilla != null)
|
||||||
{
|
{
|
||||||
vanilla.setHidden(false);
|
vanilla.setHidden(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
onDeselect();
|
onDeselect();
|
||||||
client.setSpellSelected(false);
|
client.setSpellSelected(false);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@@ -178,14 +195,17 @@ public class WikiPlugin extends Plugin
|
|||||||
icon.setSpriteId(SpriteID.WIKI_SELECTED);
|
icon.setSpriteId(SpriteID.WIKI_SELECTED);
|
||||||
client.setAllWidgetsAreOpTargetable(true);
|
client.setAllWidgetsAreOpTargetable(true);
|
||||||
});
|
});
|
||||||
icon.setAction(5, "Search"); // Start at option 5 so the target op is ontop
|
|
||||||
|
final int searchIndex = config.leftClickSearch() ? 4 : 5;
|
||||||
|
icon.setAction(searchIndex, "Search");
|
||||||
icon.setOnOpListener((JavaScriptCallback) ev ->
|
icon.setOnOpListener((JavaScriptCallback) ev ->
|
||||||
{
|
{
|
||||||
if (ev.getOp() == 6)
|
if (ev.getOp() == searchIndex + 1)
|
||||||
{
|
{
|
||||||
openSearchInput();
|
openSearchInput();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// This doesn't always run because we cancel the menuop
|
// This doesn't always run because we cancel the menuop
|
||||||
icon.setOnTargetLeaveListener((JavaScriptCallback) ev -> onDeselect());
|
icon.setOnTargetLeaveListener((JavaScriptCallback) ev -> onDeselect());
|
||||||
icon.revalidate();
|
icon.revalidate();
|
||||||
@@ -200,6 +220,19 @@ public class WikiPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onConfigChanged(ConfigChanged event)
|
||||||
|
{
|
||||||
|
if (event.getGroup().equals(CONFIG_GROUP_KEY))
|
||||||
|
{
|
||||||
|
clientThread.invokeLater(() ->
|
||||||
|
{
|
||||||
|
removeWidgets();
|
||||||
|
addWidgets();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void onDeselect()
|
private void onDeselect()
|
||||||
{
|
{
|
||||||
client.setAllWidgetsAreOpTargetable(false);
|
client.setAllWidgetsAreOpTargetable(false);
|
||||||
|
|||||||
+2
@@ -30,6 +30,7 @@ import net.runelite.client.config.Config;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
import net.runelite.client.config.Range;
|
import net.runelite.client.config.Range;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
import net.runelite.client.plugins.wintertodt.config.WintertodtNotifyMode;
|
import net.runelite.client.plugins.wintertodt.config.WintertodtNotifyMode;
|
||||||
|
|
||||||
@ConfigGroup("wintertodt")
|
@ConfigGroup("wintertodt")
|
||||||
@@ -66,6 +67,7 @@ public interface WintertodtConfig extends Config
|
|||||||
@Range(
|
@Range(
|
||||||
max = 60
|
max = 60
|
||||||
)
|
)
|
||||||
|
@Units(Units.SECONDS)
|
||||||
default int roundNotification()
|
default int roundNotification()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
+2
-2
@@ -311,8 +311,8 @@ public class WintertodtPlugin extends Plugin
|
|||||||
chatMessageManager.update(messageNode);
|
chatMessageManager.update(messageNode);
|
||||||
client.refreshChat();
|
client.refreshChat();
|
||||||
|
|
||||||
// all actions except woodcutting are interrupted from damage
|
// all actions except woodcutting and idle are interrupted from damage
|
||||||
if (currentActivity != WintertodtActivity.WOODCUTTING)
|
if (currentActivity != WintertodtActivity.WOODCUTTING && currentActivity != WintertodtActivity.IDLE)
|
||||||
{
|
{
|
||||||
wasInterrupted = true;
|
wasInterrupted = true;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.woodcutting;
|
|||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Units;
|
||||||
|
|
||||||
@ConfigGroup("woodcutting")
|
@ConfigGroup("woodcutting")
|
||||||
public interface WoodcuttingConfig extends Config
|
public interface WoodcuttingConfig extends Config
|
||||||
@@ -34,9 +35,10 @@ public interface WoodcuttingConfig extends Config
|
|||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
position = 1,
|
position = 1,
|
||||||
keyName = "statTimeout",
|
keyName = "statTimeout",
|
||||||
name = "Reset stats (minutes)",
|
name = "Reset stats",
|
||||||
description = "Configures the time until statistic is reset. Also configures when tree indicator is hidden"
|
description = "Configures the time until statistic is reset. Also configures when tree indicator is hidden"
|
||||||
)
|
)
|
||||||
|
@Units(Units.MINUTES)
|
||||||
default int statTimeout()
|
default int statTimeout()
|
||||||
{
|
{
|
||||||
return 5;
|
return 5;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user