diff --git a/protocol-api/pom.xml b/protocol-api/pom.xml
index 5e78a1afd5..d70b02d9f4 100644
--- a/protocol-api/pom.xml
+++ b/protocol-api/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.24-SNAPSHOT
+ 1.5.25-SNAPSHOT
protocol-api
diff --git a/protocol/pom.xml b/protocol/pom.xml
index d044439864..e0771e0264 100644
--- a/protocol/pom.xml
+++ b/protocol/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.24-SNAPSHOT
+ 1.5.25-SNAPSHOT
protocol
diff --git a/runelite-api/pom.xml b/runelite-api/pom.xml
index 9e765db295..26b3e53c73 100644
--- a/runelite-api/pom.xml
+++ b/runelite-api/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.24-SNAPSHOT
+ 1.5.25-SNAPSHOT
runelite-api
diff --git a/runelite-api/src/main/java/net/runelite/api/Actor.java b/runelite-api/src/main/java/net/runelite/api/Actor.java
index 6357a91ebc..a736b32fa4 100644
--- a/runelite-api/src/main/java/net/runelite/api/Actor.java
+++ b/runelite-api/src/main/java/net/runelite/api/Actor.java
@@ -153,13 +153,6 @@ public interface Actor extends Renderable
@VisibleForDevtools
void setSpotAnimFrame(int spotAnimFrame);
- /**
- * Gets the height of the actors model.
- *
- * @return the height
- */
- int getModelHeight();
-
/**
* Gets the canvas area of the current tile the actor is standing on.
*
diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java
index 17dd82f7bc..213bda81cd 100644
--- a/runelite-api/src/main/java/net/runelite/api/Client.java
+++ b/runelite-api/src/main/java/net/runelite/api/Client.java
@@ -60,6 +60,8 @@ public interface Client extends GameEngine
*/
Logger getLogger();
+ String getBuildID();
+
/**
* Gets a list of all valid players from the player cache.
*
diff --git a/runelite-api/src/main/java/net/runelite/api/Experience.java b/runelite-api/src/main/java/net/runelite/api/Experience.java
index 088a88d544..d83a61c97b 100644
--- a/runelite-api/src/main/java/net/runelite/api/Experience.java
+++ b/runelite-api/src/main/java/net/runelite/api/Experience.java
@@ -24,9 +24,6 @@
*/
package net.runelite.api;
-import static java.lang.Math.floor;
-import static java.lang.Math.max;
-
/**
* A utility class used for calculating experience related values.
*
@@ -127,6 +124,15 @@ public class Experience
return high + 1;
}
+ private static double getMeleeRangeOrMagicCombatLevelContribution(int attackLevel, int strengthLevel, int magicLevel, int rangeLevel)
+ {
+ double melee = 0.325 * (attackLevel + strengthLevel);
+ double range = 0.325 * (Math.floor(rangeLevel / 2) + rangeLevel);
+ double magic = 0.325 * (Math.floor(magicLevel / 2) + magicLevel);
+
+ return Math.max(melee, Math.max(range, magic));
+ }
+
/**
* Calculates a non-virtual high-precision combat level without integer
* rounding.
@@ -146,13 +152,11 @@ public class Experience
int defenceLevel, int hitpointsLevel, int magicLevel,
int rangeLevel, int prayerLevel)
{
- double base = 0.25 * (defenceLevel + hitpointsLevel + floor(prayerLevel / 2));
+ double base = 0.25 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2));
- double melee = 0.325 * (attackLevel + strengthLevel);
- double range = 0.325 * (floor(rangeLevel / 2) + rangeLevel);
- double magic = 0.325 * (floor(magicLevel / 2) + magicLevel);
+ double typeContribution = getMeleeRangeOrMagicCombatLevelContribution(attackLevel, strengthLevel, magicLevel, rangeLevel);
- return base + max(melee, max(range, magic));
+ return base + typeContribution;
}
/**
@@ -173,4 +177,101 @@ public class Experience
{
return (int) getCombatLevelPrecise(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel);
}
+
+ /**
+ * Calculate number of attack/strength levels required to increase combat level.
+ *
+ * @param attackLevel the attack level
+ * @param strengthLevel the strength level
+ * @param defenceLevel the defence level
+ * @param hitpointsLevel the hitpoints level
+ * @param magicLevel the magic level
+ * @param rangeLevel the range level
+ * @param prayerLevel the prayer level
+ * @return the number of levels required
+ */
+ public static int getNextCombatLevelMelee(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
+ int magicLevel, int rangeLevel, int prayerLevel)
+ {
+ int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
+ return (int) Math.ceil(-10. / 13 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2) - 4 * nextCombatLevel)) - strengthLevel - attackLevel;
+ }
+
+ /**
+ * Calculate number of hitpoints/defence levels required to increase combat level.
+ *
+ * @param attackLevel the attack level
+ * @param strengthLevel the strength level
+ * @param defenceLevel the defence level
+ * @param hitpointsLevel the hitpoints level
+ * @param magicLevel the magic level
+ * @param rangeLevel the range level
+ * @param prayerLevel the prayer level
+ * @return the number of levels required
+ */
+ public static int getNextCombatLevelHpDef(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
+ int magicLevel, int rangeLevel, int prayerLevel)
+ {
+ int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
+ double typeContribution = Experience.getMeleeRangeOrMagicCombatLevelContribution(attackLevel, strengthLevel, magicLevel, rangeLevel);
+ return (int) Math.ceil(4 * nextCombatLevel - Math.floor(prayerLevel / 2) - 4 * typeContribution) - hitpointsLevel - defenceLevel;
+ }
+
+ /**
+ * Calculate number of magic levels required to increase combat level.
+ *
+ * @param attackLevel the attack level
+ * @param strengthLevel the strength level
+ * @param defenceLevel the defence level
+ * @param hitpointsLevel the hitpoints level
+ * @param magicLevel the magic level
+ * @param rangeLevel the range level
+ * @param prayerLevel the prayer level
+ * @return the number of levels required
+ */
+ public static int getNextCombatLevelMagic(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
+ int magicLevel, int rangeLevel, int prayerLevel)
+ {
+ int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
+ return (int) Math.ceil(2. / 3 * Math.ceil(-10. / 13 * (hitpointsLevel + defenceLevel - 4 * nextCombatLevel + Math.floor(prayerLevel / 2)))) - magicLevel;
+ }
+
+ /**
+ * Calculate number of ranged levels required to increase combat level.
+ *
+ * @param attackLevel the attack level
+ * @param strengthLevel the strength level
+ * @param defenceLevel the defence level
+ * @param hitpointsLevel the hitpoints level
+ * @param magicLevel the magic level
+ * @param rangeLevel the range level
+ * @param prayerLevel the prayer level
+ * @return the number of levels required
+ */
+ public static int getNextCombatLevelRange(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
+ int magicLevel, int rangeLevel, int prayerLevel)
+ {
+ int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
+ return (int) Math.ceil(2. / 3 * Math.ceil(-10. / 13 * (hitpointsLevel + defenceLevel - 4 * nextCombatLevel + Math.floor(prayerLevel / 2)))) - rangeLevel;
+ }
+
+ /**
+ * Calculate number of prayer levels required to increase combat level.
+ *
+ * @param attackLevel the attack level
+ * @param strengthLevel the strength level
+ * @param defenceLevel the defence level
+ * @param hitpointsLevel the hitpoints level
+ * @param magicLevel the magic level
+ * @param rangeLevel the range level
+ * @param prayerLevel the prayer level
+ * @return the number of levels required
+ */
+ public static int getNextCombatLevelPrayer(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
+ int magicLevel, int rangeLevel, int prayerLevel)
+ {
+ int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
+ double typeContribution = Experience.getMeleeRangeOrMagicCombatLevelContribution(attackLevel, strengthLevel, magicLevel, rangeLevel);
+ return 2 * (int) Math.ceil(-hitpointsLevel - defenceLevel + 4 * nextCombatLevel - 4 * typeContribution) - prayerLevel;
+ }
}
diff --git a/runelite-api/src/main/java/net/runelite/api/NpcID.java b/runelite-api/src/main/java/net/runelite/api/NpcID.java
index bc496b3cbe..1ab55200fd 100644
--- a/runelite-api/src/main/java/net/runelite/api/NpcID.java
+++ b/runelite-api/src/main/java/net/runelite/api/NpcID.java
@@ -384,13 +384,13 @@ public final class NpcID
public static final int EVIL_BOB_391 = 391;
public static final int SERVANT = 392;
public static final int SERVANT_393 = 393;
- public static final int BANKER = 394;
- public static final int BANKER_395 = 395;
- public static final int BANKER_396 = 396;
- public static final int BANKER_397 = 397;
- public static final int BANKER_398 = 398;
- public static final int BANKER_399 = 399;
- public static final int BANKER_400 = 400;
+ public static final int ROD_FISHING_SPOT = 394;
+ public static final int CAT = 395;
+ public static final int JON = 396;
+ public static final int TOWN_GUARD = 397;
+ public static final int TOWN_GUARD_398 = 398;
+ public static final int TOWN_GUARD_399 = 399;
+ public static final int TOWN_GUARD_400 = 400;
public static final int TURAEL = 401;
public static final int MAZCHNA = 402;
public static final int VANNAKA = 403;
@@ -744,7 +744,7 @@ public final class NpcID
public static final int GIANT_ROC = 763;
public static final int SHADOW = 764;
public static final int QUEEN_SIGRID = 765;
- public static final int BANKER_766 = 766;
+ public static final int BANKER = 766;
public static final int ARNOR = 767;
public static final int HAMING = 768;
public static final int MOLDOF = 769;
@@ -865,7 +865,6 @@ public final class NpcID
public static final int GRUH = 887;
public static final int IRWIN_FEASELBAUM = 888;
public static final int ELUNED = 889;
- public static final int ISLWYN = 890;
public static final int MOSS_GIANT = 891;
public static final int GOLRIE = 892;
public static final int FATHER_REEN = 893;
@@ -1440,7 +1439,7 @@ public final class NpcID
public static final int HUNTING_EXPERT = 1503;
public static final int HUNTING_EXPERT_1504 = 1504;
public static final int FERRET = 1505;
- public static final int ROD_FISHING_SPOT = 1506;
+ public static final int ROD_FISHING_SPOT_1506 = 1506;
public static final int ROD_FISHING_SPOT_1507 = 1507;
public static final int ROD_FISHING_SPOT_1508 = 1508;
public static final int ROD_FISHING_SPOT_1509 = 1509;
@@ -1551,7 +1550,7 @@ public final class NpcID
public static final int BANKNOTE_EXCHANGE_MERCHANT = 1615;
public static final int HIGH_PRIESTESS_ZULHARCINQA = 1616;
public static final int PRIESTESS_ZULGWENWYNIG = 1617;
- public static final int CAT = 1619;
+ public static final int CAT_1619 = 1619;
public static final int CAT_1620 = 1620;
public static final int CAT_1621 = 1621;
public static final int CAT_1622 = 1622;
@@ -3722,7 +3721,7 @@ public final class NpcID
public static final int BRUNDT_THE_CHIEFTAIN = 3926;
public static final int GUARD_3928 = 3928;
public static final int GUARD_3929 = 3929;
- public static final int TOWN_GUARD = 3930;
+ public static final int TOWN_GUARD_3930 = 3930;
public static final int TOWN_GUARD_3931 = 3931;
public static final int THORA_THE_BARKEEP = 3932;
public static final int YRSA_3933 = 3933;
@@ -3791,7 +3790,6 @@ public final class NpcID
public static final int MOUSE = 4000;
public static final int CHOMPY_CHICK = 4001;
public static final int CHOMPY_CHICK_4002 = 4002;
- public static final int ILFEEN = 4003;
public static final int SHADOW_4004 = 4004;
public static final int DARK_BEAST = 4005;
public static final int MOURNER_4006 = 4006;
@@ -5178,10 +5176,10 @@ public final class NpcID
public static final int MURKY_MATT_RUNES = 5450;
public static final int RELOBO_BLINYO_LOGS = 5451;
public static final int HOFUTHAND_WEAPONS_AND_ARMOUR = 5452;
- public static final int BANKER_5453 = 5453;
+ public static final int RESHI = 5453;
public static final int THUMPY = 5454;
- public static final int BANKER_5455 = 5455;
- public static final int BANKER_5456 = 5456;
+ public static final int THOMDRIL = 5455;
+ public static final int KENDALL = 5456;
public static final int DRUID_5457 = 5457;
public static final int SUSPECT_5458 = 5458;
public static final int SUSPECT_5459 = 5459;
@@ -5592,8 +5590,12 @@ public final class NpcID
public static final int ABYSSAL_SIRE_5891 = 5891;
public static final int TZREKJAD = 5892;
public static final int TZREKJAD_5893 = 5893;
- public static final int PORTAL_5895 = 5895;
- public static final int PORTAL_5897 = 5897;
+ public static final int BAST = 5894;
+ public static final int BANKER_5895 = 5895;
+ public static final int BANKER_5896 = 5896;
+ public static final int BANKER_5897 = 5897;
+ public static final int BANKER_5904 = 5904;
+ public static final int BANKER_5905 = 5905;
public static final int PROBITA = 5906;
public static final int CHAOS_ELEMENTAL_JR_5907 = 5907;
public static final int ABYSSAL_SIRE_5908 = 5908;
@@ -6019,8 +6021,8 @@ public final class NpcID
public static final int FIDELIO = 6525;
public static final int SBOTT = 6526;
public static final int ROAVAR = 6527;
- public static final int FERAL_VAMPYRE_6529 = 6529;
- public static final int ABIDOR_CRANK_6530 = 6530;
+ public static final int BANKER_6529 = 6529;
+ public static final int BANKER_6530 = 6530;
public static final int BLURBERRY = 6531;
public static final int BARMAN_6532 = 6532;
public static final int ROMILY_WEAKLAX = 6533;
@@ -7115,8 +7117,8 @@ public final class NpcID
public static final int WEVE = 7777;
public static final int IRENE = 7778;
public static final int BOBBING_FOSSIL = 7779;
- public static final int PUFFER_FISH = 7780;
- public static final int PUFFER_FISH_7781 = 7781;
+ public static final int ISLWYN = 7780;
+ public static final int PUFFER_FISH = 7781;
public static final int FISH_SHOAL = 7782;
public static final int CETO = 7783;
public static final int MAIRIN = 7784;
@@ -7847,6 +7849,17 @@ public final class NpcID
public static final int DODGY_GEEZER = 8644;
public static final int ARTHUR_THE_CLUE_HUNTER = 8665;
public static final int BANKER_8666 = 8666;
+ public static final int PUFFER_FISH_8667 = 8667;
+ public static final int ISLWYN_8675 = 8675;
+ public static final int ILFEEN = 8676;
+ public static final int ILFEEN_8677 = 8677;
+ public static final int FERAL_VAMPYRE_8678 = 8678;
+ public static final int ABIDOR_CRANK_8679 = 8679;
+ public static final int BANKER_8680 = 8680;
+ public static final int BANKER_8681 = 8681;
+ public static final int BANKER_8682 = 8682;
+ public static final int PORTAL_8684 = 8684;
+ public static final int PORTAL_8686 = 8686;
public static final int MOSOL_REI_8696 = 8696;
/* This file is automatically generated. Do not edit. */
}
diff --git a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java
index 7d5c3edab5..279f795689 100644
--- a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java
+++ b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java
@@ -842,9 +842,16 @@ public final class NullObjectID
public static final int NULL_1746 = 1746;
public static final int NULL_1747 = 1747;
public static final int NULL_1748 = 1748;
- public static final int NULL_1754 = 1754;
+ public static final int NULL_1750 = 1750;
+ public static final int NULL_1751 = 1751;
+ public static final int NULL_1752 = 1752;
public static final int NULL_1755 = 1755;
- public static final int NULL_1762 = 1762;
+ public static final int NULL_1756 = 1756;
+ public static final int NULL_1757 = 1757;
+ public static final int NULL_1758 = 1758;
+ public static final int NULL_1759 = 1759;
+ public static final int NULL_1760 = 1760;
+ public static final int NULL_1761 = 1761;
public static final int NULL_1765 = 1765;
public static final int NULL_1766 = 1766;
public static final int NULL_1769 = 1769;
@@ -3242,7 +3249,6 @@ public final class NullObjectID
public static final int NULL_6926 = 6926;
public static final int NULL_6941 = 6941;
public static final int NULL_6942 = 6942;
- public static final int NULL_6944 = 6944;
public static final int NULL_6949 = 6949;
public static final int NULL_6954 = 6954;
public static final int NULL_6955 = 6955;
@@ -3434,6 +3440,7 @@ public final class NullObjectID
public static final int NULL_7389 = 7389;
public static final int NULL_7390 = 7390;
public static final int NULL_7395 = 7395;
+ public static final int NULL_7410 = 7410;
public static final int NULL_7411 = 7411;
public static final int NULL_7412 = 7412;
public static final int NULL_7413 = 7413;
@@ -3450,11 +3457,39 @@ public final class NullObjectID
public static final int NULL_7449 = 7449;
public static final int NULL_7450 = 7450;
public static final int NULL_7451 = 7451;
+ public static final int NULL_7455 = 7455;
+ public static final int NULL_7456 = 7456;
+ public static final int NULL_7457 = 7457;
+ public static final int NULL_7458 = 7458;
+ public static final int NULL_7459 = 7459;
+ public static final int NULL_7460 = 7460;
+ public static final int NULL_7461 = 7461;
+ public static final int NULL_7462 = 7462;
+ public static final int NULL_7467 = 7467;
+ public static final int NULL_7468 = 7468;
+ public static final int NULL_7469 = 7469;
+ public static final int NULL_7470 = 7470;
+ public static final int NULL_7471 = 7471;
+ public static final int NULL_7472 = 7472;
+ public static final int NULL_7473 = 7473;
+ public static final int NULL_7474 = 7474;
+ public static final int NULL_7475 = 7475;
+ public static final int NULL_7476 = 7476;
public static final int NULL_7477 = 7477;
public static final int NULL_7478 = 7478;
public static final int NULL_7479 = 7479;
public static final int NULL_7480 = 7480;
public static final int NULL_7481 = 7481;
+ public static final int NULL_7486 = 7486;
+ public static final int NULL_7487 = 7487;
+ public static final int NULL_7488 = 7488;
+ public static final int NULL_7489 = 7489;
+ public static final int NULL_7490 = 7490;
+ public static final int NULL_7491 = 7491;
+ public static final int NULL_7492 = 7492;
+ public static final int NULL_7493 = 7493;
+ public static final int NULL_7494 = 7494;
+ public static final int NULL_7495 = 7495;
public static final int NULL_7503 = 7503;
public static final int NULL_7515 = 7515;
public static final int NULL_7517 = 7517;
@@ -3583,6 +3618,9 @@ public final class NullObjectID
public static final int NULL_8722 = 8722;
public static final int NULL_8723 = 8723;
public static final int NULL_8724 = 8724;
+ public static final int NULL_8725 = 8725;
+ public static final int NULL_8726 = 8726;
+ public static final int NULL_8727 = 8727;
public static final int NULL_8728 = 8728;
public static final int NULL_8735 = 8735;
public static final int NULL_8736 = 8736;
@@ -4190,7 +4228,8 @@ public final class NullObjectID
public static final int NULL_10069 = 10069;
public static final int NULL_10070 = 10070;
public static final int NULL_10071 = 10071;
- public static final int NULL_10076 = 10076;
+ public static final int NULL_10072 = 10072;
+ public static final int NULL_10073 = 10073;
public static final int NULL_10092 = 10092;
public static final int NULL_10095 = 10095;
public static final int NULL_10096 = 10096;
@@ -4288,7 +4327,7 @@ public final class NullObjectID
public static final int NULL_10341 = 10341;
public static final int NULL_10351 = 10351;
public static final int NULL_10353 = 10353;
- public static final int NULL_10354 = 10354;
+ public static final int NULL_10356 = 10356;
public static final int NULL_10363 = 10363;
public static final int NULL_10364 = 10364;
public static final int NULL_10365 = 10365;
@@ -4393,7 +4432,8 @@ public final class NullObjectID
public static final int NULL_10577 = 10577;
public static final int NULL_10579 = 10579;
public static final int NULL_10581 = 10581;
- public static final int NULL_10584 = 10584;
+ public static final int NULL_10586 = 10586;
+ public static final int NULL_10587 = 10587;
public static final int NULL_10588 = 10588;
public static final int NULL_10589 = 10589;
public static final int NULL_10590 = 10590;
@@ -4422,6 +4462,7 @@ public final class NullObjectID
public static final int NULL_10636 = 10636;
public static final int NULL_10637 = 10637;
public static final int NULL_10638 = 10638;
+ public static final int NULL_10642 = 10642;
public static final int NULL_10643 = 10643;
public static final int NULL_10644 = 10644;
public static final int NULL_10645 = 10645;
@@ -4527,6 +4568,11 @@ public final class NullObjectID
public static final int NULL_10767 = 10767;
public static final int NULL_10769 = 10769;
public static final int NULL_10770 = 10770;
+ public static final int NULL_10777 = 10777;
+ public static final int NULL_10778 = 10778;
+ public static final int NULL_10779 = 10779;
+ public static final int NULL_10780 = 10780;
+ public static final int NULL_10781 = 10781;
public static final int NULL_10789 = 10789;
public static final int NULL_10794 = 10794;
public static final int NULL_10796 = 10796;
@@ -4541,9 +4587,10 @@ public final class NullObjectID
public static final int NULL_10815 = 10815;
public static final int NULL_10816 = 10816;
public static final int NULL_10818 = 10818;
+ public static final int NULL_10823 = 10823;
public static final int NULL_10825 = 10825;
public static final int NULL_10826 = 10826;
- public static final int NULL_10830 = 10830;
+ public static final int NULL_10828 = 10828;
public static final int NULL_10835 = 10835;
public static final int NULL_10837 = 10837;
public static final int NULL_10838 = 10838;
@@ -4624,7 +4671,6 @@ public final class NullObjectID
public static final int NULL_10940 = 10940;
public static final int NULL_10941 = 10941;
public static final int NULL_10942 = 10942;
- public static final int NULL_10943 = 10943;
public static final int NULL_10946 = 10946;
public static final int NULL_10947 = 10947;
public static final int NULL_10948 = 10948;
@@ -4802,14 +4848,10 @@ public final class NullObjectID
public static final int NULL_11353 = 11353;
public static final int NULL_11355 = 11355;
public static final int NULL_11359 = 11359;
- public static final int NULL_11362 = 11362;
- public static final int NULL_11363 = 11363;
- public static final int NULL_11372 = 11372;
- public static final int NULL_11379 = 11379;
- public static final int NULL_11387 = 11387;
- public static final int NULL_11388 = 11388;
public static final int NULL_11394 = 11394;
- public static final int NULL_11402 = 11402;
+ public static final int NULL_11395 = 11395;
+ public static final int NULL_11396 = 11396;
+ public static final int NULL_11397 = 11397;
public static final int NULL_11403 = 11403;
public static final int NULL_11407 = 11407;
public static final int NULL_11408 = 11408;
@@ -4817,6 +4859,7 @@ public final class NullObjectID
public static final int NULL_11420 = 11420;
public static final int NULL_11421 = 11421;
public static final int NULL_11422 = 11422;
+ public static final int NULL_11429 = 11429;
public static final int NULL_11436 = 11436;
public static final int NULL_11437 = 11437;
public static final int NULL_11438 = 11438;
@@ -4941,7 +4984,6 @@ public final class NullObjectID
public static final int NULL_11622 = 11622;
public static final int NULL_11623 = 11623;
public static final int NULL_11628 = 11628;
- public static final int NULL_11632 = 11632;
public static final int NULL_11642 = 11642;
public static final int NULL_11654 = 11654;
public static final int NULL_11655 = 11655;
@@ -6195,6 +6237,9 @@ public final class NullObjectID
public static final int NULL_14394 = 14394;
public static final int NULL_14396 = 14396;
public static final int NULL_14397 = 14397;
+ public static final int NULL_14400 = 14400;
+ public static final int NULL_14401 = 14401;
+ public static final int NULL_14410 = 14410;
public static final int NULL_14416 = 14416;
public static final int NULL_14417 = 14417;
public static final int NULL_14418 = 14418;
@@ -6347,6 +6392,7 @@ public final class NullObjectID
public static final int NULL_14838 = 14838;
public static final int NULL_14839 = 14839;
public static final int NULL_14840 = 14840;
+ public static final int NULL_14842 = 14842;
public static final int NULL_14862 = 14862;
public static final int NULL_14863 = 14863;
public static final int NULL_14864 = 14864;
@@ -6359,16 +6405,20 @@ public final class NullObjectID
public static final int NULL_14879 = 14879;
public static final int NULL_14881 = 14881;
public static final int NULL_14882 = 14882;
+ public static final int NULL_14893 = 14893;
public static final int NULL_14895 = 14895;
+ public static final int NULL_14900 = 14900;
+ public static final int NULL_14902 = 14902;
+ public static final int NULL_14906 = 14906;
+ public static final int NULL_14907 = 14907;
public static final int NULL_14908 = 14908;
public static final int NULL_14909 = 14909;
public static final int NULL_14912 = 14912;
public static final int NULL_14913 = 14913;
- public static final int NULL_14925 = 14925;
public static final int NULL_14926 = 14926;
- public static final int NULL_14945 = 14945;
- public static final int NULL_14946 = 14946;
- public static final int NULL_14947 = 14947;
+ public static final int NULL_14933 = 14933;
+ public static final int NULL_14942 = 14942;
+ public static final int NULL_14943 = 14943;
public static final int NULL_14949 = 14949;
public static final int NULL_14950 = 14950;
public static final int NULL_14951 = 14951;
@@ -6399,13 +6449,8 @@ public final class NullObjectID
public static final int NULL_14977 = 14977;
public static final int NULL_14978 = 14978;
public static final int NULL_14984 = 14984;
- public static final int NULL_14987 = 14987;
public static final int NULL_14989 = 14989;
- public static final int NULL_14990 = 14990;
- public static final int NULL_14991 = 14991;
- public static final int NULL_14992 = 14992;
public static final int NULL_14993 = 14993;
- public static final int NULL_14994 = 14994;
public static final int NULL_14997 = 14997;
public static final int NULL_14999 = 14999;
public static final int NULL_15000 = 15000;
@@ -6600,11 +6645,6 @@ public final class NullObjectID
public static final int NULL_15597 = 15597;
public static final int NULL_15606 = 15606;
public static final int NULL_15607 = 15607;
- public static final int NULL_15608 = 15608;
- public static final int NULL_15609 = 15609;
- public static final int NULL_15610 = 15610;
- public static final int NULL_15611 = 15611;
- public static final int NULL_15612 = 15612;
public static final int NULL_15613 = 15613;
public static final int NULL_15614 = 15614;
public static final int NULL_15618 = 15618;
@@ -13608,10 +13648,9 @@ public final class NullObjectID
public static final int NULL_28906 = 28906;
public static final int NULL_28907 = 28907;
public static final int NULL_28908 = 28908;
+ public static final int NULL_28909 = 28909;
public static final int NULL_28910 = 28910;
public static final int NULL_28911 = 28911;
- public static final int NULL_28913 = 28913;
- public static final int NULL_28914 = 28914;
public static final int NULL_28916 = 28916;
public static final int NULL_28917 = 28917;
public static final int NULL_28918 = 28918;
@@ -13726,11 +13765,6 @@ public final class NullObjectID
public static final int NULL_29084 = 29084;
public static final int NULL_29086 = 29086;
public static final int NULL_29093 = 29093;
- public static final int NULL_29094 = 29094;
- public static final int NULL_29095 = 29095;
- public static final int NULL_29096 = 29096;
- public static final int NULL_29097 = 29097;
- public static final int NULL_29099 = 29099;
public static final int NULL_29109 = 29109;
public static final int NULL_29110 = 29110;
public static final int NULL_29134 = 29134;
@@ -14812,7 +14846,6 @@ public final class NullObjectID
public static final int NULL_31603 = 31603;
public static final int NULL_31604 = 31604;
public static final int NULL_31605 = 31605;
- public static final int NULL_31607 = 31607;
public static final int NULL_31608 = 31608;
public static final int NULL_31614 = 31614;
public static final int NULL_31615 = 31615;
@@ -14864,7 +14897,6 @@ public final class NullObjectID
public static final int NULL_31702 = 31702;
public static final int NULL_31720 = 31720;
public static final int NULL_31724 = 31724;
- public static final int NULL_31725 = 31725;
public static final int NULL_31727 = 31727;
public static final int NULL_31728 = 31728;
public static final int NULL_31729 = 31729;
@@ -16154,5 +16186,28 @@ public final class NullObjectID
public static final int NULL_34738 = 34738;
public static final int NULL_34739 = 34739;
public static final int NULL_34740 = 34740;
+ public static final int NULL_34779 = 34779;
+ public static final int NULL_34786 = 34786;
+ public static final int NULL_34787 = 34787;
+ public static final int NULL_34806 = 34806;
+ public static final int NULL_34807 = 34807;
+ public static final int NULL_34808 = 34808;
+ public static final int NULL_34809 = 34809;
+ public static final int NULL_34810 = 34810;
+ public static final int NULL_34811 = 34811;
+ public static final int NULL_34812 = 34812;
+ public static final int NULL_34813 = 34813;
+ public static final int NULL_34814 = 34814;
+ public static final int NULL_34815 = 34815;
+ public static final int NULL_34816 = 34816;
+ public static final int NULL_34817 = 34817;
+ public static final int NULL_34818 = 34818;
+ public static final int NULL_34819 = 34819;
+ public static final int NULL_34820 = 34820;
+ public static final int NULL_34821 = 34821;
+ public static final int NULL_34822 = 34822;
+ public static final int NULL_34823 = 34823;
+ public static final int NULL_34824 = 34824;
+ public static final int NULL_34825 = 34825;
/* This file is automatically generated. Do not edit. */
}
diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectID.java b/runelite-api/src/main/java/net/runelite/api/ObjectID.java
index 82bfa6b5d2..e31bd024d8 100644
--- a/runelite-api/src/main/java/net/runelite/api/ObjectID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ObjectID.java
@@ -914,16 +914,9 @@ public final class ObjectID
public static final int DOOR_1742 = 1742;
public static final int DOOR_1743 = 1743;
public static final int DOOR_1749 = 1749;
- public static final int WILLOW = 1750;
- public static final int OAK = 1751;
- public static final int HOLLOW_TREE_1752 = 1752;
- public static final int YEW = 1753;
- public static final int WILLOW_1756 = 1756;
- public static final int HOLLOW_TREE_1757 = 1757;
- public static final int WILLOW_1758 = 1758;
- public static final int MAPLE_TREE = 1759;
- public static final int WILLOW_1760 = 1760;
- public static final int MAGIC_TREE = 1761;
+ public static final int GRAPEVINE = 1753;
+ public static final int GRAPEVINE_1754 = 1754;
+ public static final int GLASS_DOOR = 1762;
public static final int PUMP_AND_DRAIN = 1763;
public static final int DUMMY_1764 = 1764;
public static final int LEAFLETS = 1767;
@@ -2518,9 +2511,9 @@ public final class ObjectID
public static final int TREE_4532 = 4532;
public static final int OAK_TREE = 4533;
public static final int WILLOW_TREE = 4534;
- public static final int MAPLE_TREE_4535 = 4535;
+ public static final int MAPLE_TREE = 4535;
public static final int YEW_TREE = 4536;
- public static final int MAGIC_TREE_4537 = 4537;
+ public static final int MAGIC_TREE = 4537;
public static final int DEAD_TREE_4538 = 4538;
public static final int TREE_4539 = 4539;
public static final int OAK_TREE_4540 = 4540;
@@ -3706,11 +3699,12 @@ public final class ObjectID
public static final int BONE_ARCH_6938 = 6938;
public static final int BONE_ARCH_6939 = 6939;
public static final int BONE_ARCH_6940 = 6940;
- public static final int BANK_BOOTH_6943 = 6943;
- public static final int BANK_BOOTH_6945 = 6945;
- public static final int BANK_BOOTH_6946 = 6946;
- public static final int CLOSED_BANK_BOOTH_6947 = 6947;
- public static final int BANK_DEPOSIT_BOX = 6948;
+ public static final int GLASS_DOOR_6943 = 6943;
+ public static final int EMPTY_STALL = 6944;
+ public static final int BAKERS_STALL = 6945;
+ public static final int UTENSIL_STALL = 6946;
+ public static final int SEED_STALL = 6947;
+ public static final int HERB_STALL = 6948;
public static final int BOULDER_6950 = 6950;
public static final int NOTHING = 6951;
public static final int NOTHING_6952 = 6952;
@@ -3763,7 +3757,7 @@ public final class ObjectID
public static final int GIANT_DWARF_7041 = 7041;
public static final int GIANT_DWARF_7043 = 7043;
public static final int BUFFERS_7044 = 7044;
- public static final int SEED_STALL = 7053;
+ public static final int SEED_STALL_7053 = 7053;
public static final int NOTICE = 7054;
public static final int OLD_BOOKSHELF = 7058;
public static final int OLD_BOOKSHELF_7059 = 7059;
@@ -3980,8 +3974,7 @@ public final class ObjectID
public static final int TEAK_TABLE_7406 = 7406;
public static final int TABLE_7407 = 7407;
public static final int TABLE_7408 = 7408;
- public static final int BANK_BOOTH_7409 = 7409;
- public static final int BANK_BOOTH_7410 = 7410;
+ public static final int VEGETABLE_STALL = 7409;
public static final int TABLE_7417 = 7417;
public static final int THRONE_7418 = 7418;
public static final int CABINET_7419 = 7419;
@@ -4007,45 +4000,17 @@ public final class ObjectID
public static final int PIANO_7444 = 7444;
public static final int PIANO_STOOL_7445 = 7445;
public static final int SMASHED_TABLE_7446 = 7446;
- public static final int COAL_TRUCK = 7452;
- public static final int ROCKS_7453 = 7453;
- public static final int ROCKS_7454 = 7454;
- public static final int ROCKS_7455 = 7455;
- public static final int ROCKS_7456 = 7456;
- public static final int ROCKS_7457 = 7457;
- public static final int ROCKS_7458 = 7458;
- public static final int ROCKS_7459 = 7459;
- public static final int ROCKS_7460 = 7460;
- public static final int ROCKS_7461 = 7461;
- public static final int ROCKS_7462 = 7462;
- public static final int ROCKS_7463 = 7463;
- public static final int ROCKS_7464 = 7464;
- public static final int PILE_OF_ROCK = 7465;
- public static final int PILE_OF_ROCK_7466 = 7466;
- public static final int ROCKS_7467 = 7467;
- public static final int ROCKS_7468 = 7468;
- public static final int ROCKS_7469 = 7469;
- public static final int ROCKS_7470 = 7470;
- public static final int RUNE_ESSENCE = 7471;
- public static final int PORTAL_7472 = 7472;
- public static final int PORTAL_7473 = 7473;
- public static final int PORTAL_7474 = 7474;
- public static final int PORTAL_7475 = 7475;
- public static final int PORTAL_7476 = 7476;
+ public static final int DOOR_7452 = 7452;
+ public static final int DOOR_7453 = 7453;
+ public static final int LOCKED_DOOR = 7454;
+ public static final int WHEAT_7463 = 7463;
+ public static final int WHEAT_7464 = 7464;
+ public static final int WHEAT_7465 = 7465;
+ public static final int APPLE_TREE = 7466;
public static final int STOOL_7482 = 7482;
public static final int COOKING_POT_7483 = 7483;
- public static final int ROCKS_7484 = 7484;
- public static final int ROCKS_7485 = 7485;
- public static final int ROCKS_7486 = 7486;
- public static final int ROCKS_7487 = 7487;
- public static final int ROCKS_7488 = 7488;
- public static final int ROCKS_7489 = 7489;
- public static final int ROCKS_7490 = 7490;
- public static final int ROCKS_7491 = 7491;
- public static final int ROCKS_7492 = 7492;
- public static final int ROCKS_7493 = 7493;
- public static final int ROCKS_7494 = 7494;
- public static final int ROCKS_7495 = 7495;
+ public static final int STONE_PILE = 7484;
+ public static final int STONE_PILE_7485 = 7485;
public static final int COUNTER_7496 = 7496;
public static final int COUNTER_7497 = 7497;
public static final int SHELVES_7498 = 7498;
@@ -4414,7 +4379,7 @@ public final class ObjectID
public static final int DEAD_WOAD_PLANT_7932 = 7932;
public static final int DEAD_WOAD_PLANT_7933 = 7933;
public static final int DEAD_WOAD_PLANT_7934 = 7934;
- public static final int APPLE_TREE = 7935;
+ public static final int APPLE_TREE_7935 = 7935;
public static final int APPLE_TREE_7936 = 7936;
public static final int APPLE_TREE_7937 = 7937;
public static final int APPLE_TREE_7938 = 7938;
@@ -4917,7 +4882,7 @@ public final class ObjectID
public static final int DEAD_MAPLE_8459 = 8459;
public static final int DEAD_MAPLE_8460 = 8460;
public static final int DEAD_MAPLE_8461 = 8461;
- public static final int OAK_8462 = 8462;
+ public static final int OAK = 8462;
public static final int OAK_8463 = 8463;
public static final int OAK_8464 = 8464;
public static final int OAK_8465 = 8465;
@@ -5147,9 +5112,6 @@ public final class ObjectID
public static final int HAY_BALE_8715 = 8715;
public static final int HAYSTACK_8716 = 8716;
public static final int LOOM_8717 = 8717;
- public static final int PILE_OF_ROCK_8725 = 8725;
- public static final int PILE_OF_ROCK_8726 = 8726;
- public static final int ROCKS_8727 = 8727;
public static final int STEPS = 8729;
public static final int YOUNG_TREE = 8730;
public static final int NET_TRAP = 8731;
@@ -5887,27 +5849,26 @@ public final class ObjectID
public static final int GRAND_EXCHANGE_BOOTH = 10060;
public static final int GRAND_EXCHANGE_BOOTH_10061 = 10061;
public static final int SACRIFICIAL_BOAT = 10068;
- public static final int SIGN_10072 = 10072;
- public static final int ROUGH_WALL = 10073;
- public static final int TIGHTROPE = 10074;
- public static final int TIGHTROPE_10075 = 10075;
- public static final int NARROW_WALL = 10077;
+ public static final int PAINTING_10074 = 10074;
+ public static final int DRAWERS_10075 = 10075;
+ public static final int STAFF_OF_BOB_THE_CAT = 10076;
+ public static final int ARMOUR_10077 = 10077;
public static final int CUPBOARD_10078 = 10078;
public static final int ROCKS_10079 = 10079;
public static final int ROCKS_10080 = 10080;
public static final int ROCKS_10081 = 10081;
public static final int FURNACE_10082 = 10082;
public static final int BANK_BOOTH_10083 = 10083;
- public static final int WALL_10084 = 10084;
- public static final int GAP_10085 = 10085;
- public static final int CRATE_10086 = 10086;
+ public static final int ARCEUUS_STATUE = 10084;
+ public static final int HOSIDIUS_STATUE = 10085;
+ public static final int LOVAKENGJ_STATUE = 10086;
public static final int OMINOUS_FISHING_SPOT = 10087;
public static final int OMINOUS_FISHING_SPOT_10088 = 10088;
public static final int OMINOUS_FISHING_SPOT_10089 = 10089;
public static final int SIGNPOST_10090 = 10090;
public static final int AQUARIUM = 10091;
- public static final int ROUGH_WALL_10093 = 10093;
- public static final int ROOF_TOP_BEAMS = 10094;
+ public static final int PISCARILIUS_STATUE = 10093;
+ public static final int SHAYZIEN_STATUE = 10094;
public static final int BLINDWEED_PATCH = 10097;
public static final int BLINDWEED_PATCH_10098 = 10098;
public static final int BLINDWEED_PATCH_10099 = 10099;
@@ -6016,7 +5977,7 @@ public final class ObjectID
public static final int CRATE_10281 = 10281;
public static final int CRATES_10282 = 10282;
public static final int RIVER = 10283;
- public static final int TIGHTROPE_10284 = 10284;
+ public static final int LADDER_10284 = 10284;
public static final int SACK_10286 = 10286;
public static final int STAIRS_10287 = 10287;
public static final int STAIRS_10288 = 10288;
@@ -6070,10 +6031,10 @@ public final class ObjectID
public static final int RAT_HOLE_10348 = 10348;
public static final int RAT_HOLE_10349 = 10349;
public static final int RAT_HOLE_10350 = 10350;
- public static final int GAP_10352 = 10352;
- public static final int CABLE = 10355;
- public static final int ZIP_LINE = 10356;
- public static final int TROPICAL_TREE_10357 = 10357;
+ public static final int WHITE_ROSES = 10352;
+ public static final int BOULDER_10354 = 10354;
+ public static final int BANK_BOOTH_10355 = 10355;
+ public static final int BANK_BOOTH_10357 = 10357;
public static final int BED_10358 = 10358;
public static final int BED_10359 = 10359;
public static final int ROLLED_UP_RUGS_10360 = 10360;
@@ -6161,10 +6122,10 @@ public final class ObjectID
public static final int TAPESTRY = 10522;
public static final int STAIRCASE_10525 = 10525;
public static final int STAIRCASE_10526 = 10526;
- public static final int ZIP_LINE_10527 = 10527;
- public static final int ZIP_LINE_10528 = 10528;
- public static final int ZIP_LINE_10529 = 10529;
- public static final int ZIP_LINE_10530 = 10530;
+ public static final int BANK_BOOTH_10527 = 10527;
+ public static final int CLOSED_BANK_BOOTH_10528 = 10528;
+ public static final int BANK_DEPOSIT_BOX = 10529;
+ public static final int BANK_DEPOSIT_CHEST = 10530;
public static final int HUMAN_FLAG = 10541;
public static final int HUMAN_FLAG_10542 = 10542;
public static final int DWARF_FLAG = 10543;
@@ -6195,10 +6156,9 @@ public final class ObjectID
public static final int BANNER_10578 = 10578;
public static final int BANNER_10580 = 10580;
public static final int BANNER_10582 = 10582;
- public static final int TIGHTROPE_10583 = 10583;
- public static final int TREE_10585 = 10585;
- public static final int ROUGH_WALL_10586 = 10586;
- public static final int CLOTHES_LINE = 10587;
+ public static final int BANK_BOOTH_10583 = 10583;
+ public static final int BANK_BOOTH_10584 = 10584;
+ public static final int CLOSED_BOOTH = 10585;
public static final int ICY_CAVERN = 10595;
public static final int ICY_CAVERN_10596 = 10596;
public static final int DANGER_SIGN_10605 = 10605;
@@ -6224,7 +6184,6 @@ public final class ObjectID
public static final int ALTAR_10639 = 10639;
public static final int ALTAR_10640 = 10640;
public static final int DORICS_WHETSTONE = 10641;
- public static final int GAP_10642 = 10642;
public static final int TORCH = 10658;
public static final int FIRE_10660 = 10660;
public static final int CHEST_10661 = 10661;
@@ -6254,11 +6213,6 @@ public final class ObjectID
public static final int STAIRS_10774 = 10774;
public static final int STAIRS_10775 = 10775;
public static final int STAIRS_10776 = 10776;
- public static final int WALL_10777 = 10777;
- public static final int GAP_10778 = 10778;
- public static final int GAP_10779 = 10779;
- public static final int GAP_10780 = 10780;
- public static final int LEDGE_10781 = 10781;
public static final int ROCK_10782 = 10782;
public static final int ROCK_10783 = 10783;
public static final int ROCK_10784 = 10784;
@@ -6281,21 +6235,20 @@ public final class ObjectID
public static final int WASTE_PAPER_BIN = 10809;
public static final int COUNTER_10813 = 10813;
public static final int SANDPIT = 10814;
- public static final int EDGE = 10817;
- public static final int TALL_TREE_10819 = 10819;
- public static final int GAP_10820 = 10820;
- public static final int GAP_10821 = 10821;
- public static final int GAP_10822 = 10822;
- public static final int GAP_10823 = 10823;
+ public static final int ARMOUR_STAND = 10817;
+ public static final int WILLOW = 10819;
+ public static final int OAK_10820 = 10820;
+ public static final int HOLLOW_TREE_10821 = 10821;
+ public static final int YEW = 10822;
public static final int FIREPLACE_10824 = 10824;
public static final int FOUNTAIN_10827 = 10827;
- public static final int GAP_10828 = 10828;
- public static final int TIGHTROPE_10829 = 10829;
- public static final int POLEVAULT = 10831;
- public static final int GAP_10832 = 10832;
- public static final int ROUGH_WALL_10833 = 10833;
- public static final int TIGHTROPE_10834 = 10834;
- public static final int HAND_HOLDS_10836 = 10836;
+ public static final int WILLOW_10829 = 10829;
+ public static final int HOLLOW_TREE_10830 = 10830;
+ public static final int WILLOW_10831 = 10831;
+ public static final int MAPLE_TREE_10832 = 10832;
+ public static final int WILLOW_10833 = 10833;
+ public static final int MAGIC_TREE_10834 = 10834;
+ public static final int COAL_TRUCK = 10836;
public static final int DOORWAY_10848 = 10848;
public static final int DOORWAY_10849 = 10849;
public static final int CLIMBING_ROCKS_10851 = 10851;
@@ -6323,6 +6276,7 @@ public final class ObjectID
public static final int LEDGE_10887 = 10887;
public static final int LEDGE_10888 = 10888;
public static final int LEDGE_10889 = 10889;
+ public static final int ROCKS_10943 = 10943;
public static final int CRATE_10944 = 10944;
public static final int CRATE_10945 = 10945;
public static final int VINE_PATCH_10949 = 10949;
@@ -6445,7 +6399,7 @@ public final class ObjectID
public static final int DOOR_11151 = 11151;
public static final int DOOR_11152 = 11152;
public static final int PEDESTAL_11153 = 11153;
- public static final int GAP_11161 = 11161;
+ public static final int ROCKS_11161 = 11161;
public static final int TREATED_PATCH = 11164;
public static final int VINE_11166 = 11166;
public static final int VINE_11168 = 11168;
@@ -6562,44 +6516,48 @@ public final class ObjectID
public static final int PORTAL_HOME = 11356;
public static final int PORTAL_MACHINE = 11357;
public static final int STAIRCASE_11358 = 11358;
- public static final int GAP_11360 = 11360;
- public static final int TIGHTROPE_11361 = 11361;
- public static final int TIGHTROPE_11364 = 11364;
- public static final int GAP_11365 = 11365;
- public static final int LEDGE_11366 = 11366;
- public static final int LEDGE_11367 = 11367;
- public static final int LEDGE_11368 = 11368;
- public static final int LEDGE_11369 = 11369;
- public static final int LEDGE_11370 = 11370;
- public static final int EDGE_11371 = 11371;
- public static final int WALL_11373 = 11373;
- public static final int GAP_11374 = 11374;
- public static final int GAP_11375 = 11375;
- public static final int GAP_11376 = 11376;
- public static final int EDGE_11377 = 11377;
- public static final int TIGHTROPE_11378 = 11378;
- public static final int BASKET_11380 = 11380;
- public static final int MARKET_STALL_11381 = 11381;
- public static final int BANNER_11382 = 11382;
- public static final int GAP_11383 = 11383;
- public static final int TREE_11384 = 11384;
- public static final int ROUGH_WALL_11385 = 11385;
- public static final int MONKEYBARS = 11386;
- public static final int TREE_11389 = 11389;
- public static final int DRYING_LINE = 11390;
- public static final int ROUGH_WALL_11391 = 11391;
- public static final int GAP_11392 = 11392;
- public static final int TIGHTROPE_11393 = 11393;
- public static final int GAP_11395 = 11395;
- public static final int GAP_11396 = 11396;
- public static final int TIGHTROPE_11397 = 11397;
+ public static final int ROCKS_11360 = 11360;
+ public static final int ROCKS_11361 = 11361;
+ public static final int ROCKS_11362 = 11362;
+ public static final int ROCKS_11363 = 11363;
+ public static final int ROCKS_11364 = 11364;
+ public static final int ROCKS_11365 = 11365;
+ public static final int ROCKS_11366 = 11366;
+ public static final int ROCKS_11367 = 11367;
+ public static final int ROCKS_11368 = 11368;
+ public static final int ROCKS_11369 = 11369;
+ public static final int ROCKS_11370 = 11370;
+ public static final int ROCKS_11371 = 11371;
+ public static final int ROCKS_11372 = 11372;
+ public static final int ROCKS_11373 = 11373;
+ public static final int ROCKS_11374 = 11374;
+ public static final int ROCKS_11375 = 11375;
+ public static final int ROCKS_11376 = 11376;
+ public static final int ROCKS_11377 = 11377;
+ public static final int ROCKS_11378 = 11378;
+ public static final int ROCKS_11379 = 11379;
+ public static final int ROCKS_11380 = 11380;
+ public static final int ROCKS_11381 = 11381;
+ public static final int PILE_OF_ROCK = 11382;
+ public static final int PILE_OF_ROCK_11383 = 11383;
+ public static final int PILE_OF_ROCK_11384 = 11384;
+ public static final int PILE_OF_ROCK_11385 = 11385;
+ public static final int ROCKS_11386 = 11386;
+ public static final int ROCKS_11387 = 11387;
+ public static final int CRYSTALS = 11388;
+ public static final int CRYSTALS_11389 = 11389;
+ public static final int ROCKS_11390 = 11390;
+ public static final int ROCKS_11391 = 11391;
+ public static final int ROCKS_11392 = 11392;
+ public static final int EMPTY_WALL = 11393;
public static final int OUR_LIVES = 11398;
public static final int CAVE_ENTRANCE_11399 = 11399;
public static final int WEB_11400 = 11400;
public static final int SLASHED_WEB_11401 = 11401;
- public static final int PILE_OF_FISH = 11404;
- public static final int WOODEN_BEAMS = 11405;
- public static final int GAP_11406 = 11406;
+ public static final int SIGN_11402 = 11402;
+ public static final int ROUGH_WALL = 11404;
+ public static final int TIGHTROPE = 11405;
+ public static final int TIGHTROPE_11406 = 11406;
public static final int PIPE_WITH_ROPE = 11409;
public static final int PIPE_11410 = 11410;
public static final int ROPE_11411 = 11411;
@@ -6616,8 +6574,7 @@ public final class ObjectID
public static final int ROCKSLIDE_11426 = 11426;
public static final int ROCKSLIDE_11427 = 11427;
public static final int ROCKSLIDE_11428 = 11428;
- public static final int GAP_11429 = 11429;
- public static final int GAP_11430 = 11430;
+ public static final int NARROW_WALL = 11430;
public static final int ROCKSLIDE_11431 = 11431;
public static final int ROCKSLIDE_11432 = 11432;
public static final int ROCKSLIDE_11433 = 11433;
@@ -6693,10 +6650,11 @@ public final class ObjectID
public static final int COUNTER_11626 = 11626;
public static final int SMALL_TABLE_11627 = 11627;
public static final int VINE_11629 = 11629;
- public static final int GAP_11630 = 11630;
- public static final int PLANK_11631 = 11631;
- public static final int STEEP_ROOF = 11633;
- public static final int GAP_11634 = 11634;
+ public static final int WALL_11630 = 11630;
+ public static final int GAP_11631 = 11631;
+ public static final int CRATE_11632 = 11632;
+ public static final int ROUGH_WALL_11633 = 11633;
+ public static final int ROOF_TOP_BEAMS = 11634;
public static final int LADDER_11635 = 11635;
public static final int TRAPDOOR_11636 = 11636;
public static final int TRAPDOOR_11637 = 11637;
@@ -6705,7 +6663,7 @@ public final class ObjectID
public static final int HURDLE_11640 = 11640;
public static final int SKULL_SLOPE = 11641;
public static final int STEPPING_STONE_11643 = 11643;
- public static final int ZIP_LINE_11644 = 11644;
+ public static final int ZIP_LINE = 11644;
public static final int ZIP_LINE_11645 = 11645;
public static final int ZIP_LINE_11646 = 11646;
public static final int ZIP_LINE_11647 = 11647;
@@ -6764,7 +6722,7 @@ public final class ObjectID
public static final int DOOR_11727 = 11727;
public static final int DOOR_11728 = 11728;
public static final int SILK_STALL_11729 = 11729;
- public static final int BAKERS_STALL = 11730;
+ public static final int BAKERS_STALL_11730 = 11730;
public static final int GEM_STALL_11731 = 11731;
public static final int FUR_STALL_11732 = 11732;
public static final int SPICE_STALL_11733 = 11733;
@@ -8206,23 +8164,20 @@ public final class ObjectID
public static final int STOOL_14381 = 14381;
public static final int BANK_CHEST_14382 = 14382;
public static final int BOXES_14395 = 14395;
- public static final int MYSTERIOUS_RUINS = 14398;
- public static final int MYSTERIOUS_RUINS_14399 = 14399;
- public static final int MYSTERIOUS_RUINS_14400 = 14400;
- public static final int MYSTERIOUS_RUINS_14401 = 14401;
- public static final int MYSTERIOUS_RUINS_14402 = 14402;
- public static final int MYSTERIOUS_RUINS_14403 = 14403;
- public static final int MYSTERIOUS_RUINS_14404 = 14404;
- public static final int MYSTERIOUS_RUINS_14405 = 14405;
- public static final int MYSTERIOUS_RUINS_14406 = 14406;
- public static final int MYSTERIOUS_RUINS_14407 = 14407;
- public static final int MYSTERIOUS_RUINS_14408 = 14408;
- public static final int MYSTERIOUS_RUINS_14409 = 14409;
- public static final int MYSTERIOUS_RUINS_14410 = 14410;
- public static final int MYSTERIOUS_RUINS_14411 = 14411;
- public static final int MYSTERIOUS_RUINS_14412 = 14412;
- public static final int MYSTERIOUS_RUINS_14413 = 14413;
- public static final int MYSTERIOUS_RUINS_14414 = 14414;
+ public static final int TIGHTROPE_14398 = 14398;
+ public static final int GAP_14399 = 14399;
+ public static final int CABLE = 14402;
+ public static final int ZIP_LINE_14403 = 14403;
+ public static final int TROPICAL_TREE_14404 = 14404;
+ public static final int ZIP_LINE_14405 = 14405;
+ public static final int ZIP_LINE_14406 = 14406;
+ public static final int ZIP_LINE_14407 = 14407;
+ public static final int ZIP_LINE_14408 = 14408;
+ public static final int TIGHTROPE_14409 = 14409;
+ public static final int TREE_14411 = 14411;
+ public static final int ROUGH_WALL_14412 = 14412;
+ public static final int CLOTHES_LINE = 14413;
+ public static final int GAP_14414 = 14414;
public static final int STUDY_DESK_14415 = 14415;
public static final int RIFT_14431 = 14431;
public static final int GAS_BUBBLE = 14434;
@@ -8278,7 +8233,7 @@ public final class ObjectID
public static final int MUSHROOM_14540 = 14540;
public static final int MUSHROOM_14541 = 14541;
public static final int MUSHROOM_14542 = 14542;
- public static final int STONE_PILE = 14556;
+ public static final int STONE_PILE_14556 = 14556;
public static final int STONE_PILE_14557 = 14557;
public static final int TREE_14564 = 14564;
public static final int TREE_14565 = 14565;
@@ -8492,19 +8447,18 @@ public final class ObjectID
public static final int OBELISK_14829 = 14829;
public static final int OBELISK_14830 = 14830;
public static final int OBELISK_14831 = 14831;
- public static final int MYSTERIOUS_RUINS_14832 = 14832;
- public static final int MYSTERIOUS_RUINS_14833 = 14833;
- public static final int MYSTERIOUS_RUINS_14834 = 14834;
- public static final int MYSTERIOUS_RUINS_14835 = 14835;
- public static final int MYSTERIOUS_RUINS_14836 = 14836;
- public static final int PORTAL_14841 = 14841;
- public static final int PORTAL_14842 = 14842;
- public static final int PORTAL_14843 = 14843;
- public static final int PORTAL_14844 = 14844;
- public static final int PORTAL_14845 = 14845;
- public static final int PORTAL_14846 = 14846;
- public static final int PORTAL_14847 = 14847;
- public static final int PORTAL_14848 = 14848;
+ public static final int WALL_14832 = 14832;
+ public static final int GAP_14833 = 14833;
+ public static final int GAP_14834 = 14834;
+ public static final int GAP_14835 = 14835;
+ public static final int LEDGE_14836 = 14836;
+ public static final int EDGE = 14841;
+ public static final int TALL_TREE_14843 = 14843;
+ public static final int GAP_14844 = 14844;
+ public static final int GAP_14845 = 14845;
+ public static final int GAP_14846 = 14846;
+ public static final int GAP_14847 = 14847;
+ public static final int GAP_14848 = 14848;
public static final int CHAIR_14849 = 14849;
public static final int CHAIR_14850 = 14850;
public static final int TABLE_14851 = 14851;
@@ -8536,52 +8490,48 @@ public final class ObjectID
public static final int SPINNING_WHEEL_14889 = 14889;
public static final int SAND_PIT_14890 = 14890;
public static final int BED_14891 = 14891;
- public static final int PORTAL_14892 = 14892;
- public static final int PORTAL_14893 = 14893;
- public static final int PORTAL_14894 = 14894;
+ public static final int TIGHTROPE_14892 = 14892;
+ public static final int POLEVAULT = 14894;
public static final int FLAX = 14896;
- public static final int ALTAR_14897 = 14897;
- public static final int ALTAR_14898 = 14898;
- public static final int ALTAR_14899 = 14899;
- public static final int ALTAR_14900 = 14900;
- public static final int ALTAR_14901 = 14901;
- public static final int ALTAR_14902 = 14902;
- public static final int ALTAR_14903 = 14903;
- public static final int ALTAR_14904 = 14904;
- public static final int ALTAR_14905 = 14905;
- public static final int ALTAR_14906 = 14906;
- public static final int ALTAR_14907 = 14907;
+ public static final int GAP_14897 = 14897;
+ public static final int ROUGH_WALL_14898 = 14898;
+ public static final int TIGHTROPE_14899 = 14899;
+ public static final int HAND_HOLDS_14901 = 14901;
+ public static final int GAP_14903 = 14903;
+ public static final int GAP_14904 = 14904;
+ public static final int TIGHTROPE_14905 = 14905;
public static final int GUILD_DOOR_14910 = 14910;
- public static final int ALTAR_14911 = 14911;
+ public static final int TIGHTROPE_14911 = 14911;
public static final int SAND = 14914;
public static final int SAND_14915 = 14915;
public static final int BROKEN_MULTICANNON_14916 = 14916;
public static final int STEPPING_STONE_14917 = 14917;
public static final int STEPPING_STONE_14918 = 14918;
- public static final int PILLAR_14919 = 14919;
- public static final int PILLAR_14920 = 14920;
- public static final int PILLAR_14921 = 14921;
- public static final int PILLAR_14922 = 14922;
- public static final int PILLAR_14923 = 14923;
- public static final int PILLAR_14924 = 14924;
- public static final int MYSTERIOUS_STONE = 14927;
- public static final int MYSTERIOUS_GLOW = 14928;
- public static final int MYSTERIOUS_GLOW_14929 = 14929;
- public static final int MYSTERIOUS_GLOW_14930 = 14930;
- public static final int MYSTERIOUS_GLOW_14931 = 14931;
- public static final int MYSTERIOUS_GLOW_14932 = 14932;
- public static final int MYSTERIOUS_GLOW_14933 = 14933;
- public static final int RUINED_PILLAR = 14934;
- public static final int RUINED_PILLAR_14935 = 14935;
- public static final int PILLAR_14936 = 14936;
- public static final int RUINED_PILLAR_14937 = 14937;
- public static final int PILLAR_14938 = 14938;
- public static final int RUINED_PILLAR_14939 = 14939;
- public static final int RUINED_PILLAR_14940 = 14940;
- public static final int RUINED_PILLAR_14941 = 14941;
- public static final int RUBBLE_14942 = 14942;
- public static final int RUBBLE_14943 = 14943;
- public static final int RUBBLE_14944 = 14944;
+ public static final int GAP_14919 = 14919;
+ public static final int LEDGE_14920 = 14920;
+ public static final int LEDGE_14921 = 14921;
+ public static final int LEDGE_14922 = 14922;
+ public static final int LEDGE_14923 = 14923;
+ public static final int LEDGE_14924 = 14924;
+ public static final int EDGE_14925 = 14925;
+ public static final int WALL_14927 = 14927;
+ public static final int GAP_14928 = 14928;
+ public static final int GAP_14929 = 14929;
+ public static final int GAP_14930 = 14930;
+ public static final int EDGE_14931 = 14931;
+ public static final int TIGHTROPE_14932 = 14932;
+ public static final int CRATE_14934 = 14934;
+ public static final int BASKET_14935 = 14935;
+ public static final int MARKET_STALL_14936 = 14936;
+ public static final int BANNER_14937 = 14937;
+ public static final int GAP_14938 = 14938;
+ public static final int TREE_14939 = 14939;
+ public static final int ROUGH_WALL_14940 = 14940;
+ public static final int MONKEYBARS = 14941;
+ public static final int TREE_14944 = 14944;
+ public static final int DRYING_LINE = 14945;
+ public static final int ROUGH_WALL_14946 = 14946;
+ public static final int GAP_14947 = 14947;
public static final int SAND_14948 = 14948;
public static final int BAMBOO_DOOR_14974 = 14974;
public static final int GATE_14979 = 14979;
@@ -8591,7 +8541,12 @@ public final class ObjectID
public static final int GATE_14983 = 14983;
public static final int STRANGE_SHRINE = 14985;
public static final int CHEST_14986 = 14986;
+ public static final int TIGHTROPE_14987 = 14987;
public static final int CHEST_14988 = 14988;
+ public static final int GAP_14990 = 14990;
+ public static final int GAP_14991 = 14991;
+ public static final int TIGHTROPE_14992 = 14992;
+ public static final int PILE_OF_FISH = 14994;
public static final int LADDER_14995 = 14995;
public static final int LADDER_14996 = 14996;
public static final int WATER_SOURCE = 14998;
@@ -9011,6 +8966,11 @@ public final class ObjectID
public static final int RAILING_15603 = 15603;
public static final int GATE_15604 = 15604;
public static final int GATE_15605 = 15605;
+ public static final int WOODEN_BEAMS = 15608;
+ public static final int GAP_15609 = 15609;
+ public static final int GAP_15610 = 15610;
+ public static final int GAP_15611 = 15611;
+ public static final int GAP_15612 = 15612;
public static final int SNOW = 15615;
public static final int SNOW_15616 = 15616;
public static final int SNOW_15617 = 15617;
@@ -9541,7 +9501,7 @@ public final class ObjectID
public static final int LADDER_16684 = 16684;
public static final int LADDER_16685 = 16685;
public static final int PORTAL_16686 = 16686;
- public static final int RUNE_ESSENCE_16687 = 16687;
+ public static final int RUNE_ESSENCE = 16687;
public static final int TAR_BARREL = 16688;
public static final int TANNING_BARREL = 16689;
public static final int HAT_RACK = 16691;
@@ -10381,7 +10341,7 @@ public final class ObjectID
public static final int DOOR_18489 = 18489;
public static final int DOOR_18490 = 18490;
public static final int BANK_BOOTH_18491 = 18491;
- public static final int CLOSED_BOOTH = 18492;
+ public static final int CLOSED_BOOTH_18492 = 18492;
public static final int SIGNPOST_18493 = 18493;
public static final int BOOKCASE_18495 = 18495;
public static final int CRANE_18501 = 18501;
@@ -11524,7 +11484,7 @@ public final class ObjectID
public static final int SACK_PILE_20834 = 20834;
public static final int SACK_PILE_20835 = 20835;
public static final int LEVER_20836 = 20836;
- public static final int LOCKED_DOOR = 20837;
+ public static final int LOCKED_DOOR_20837 = 20837;
public static final int LOCKED_DOOR_20838 = 20838;
public static final int ENERGY_BARRIER_20839 = 20839;
public static final int EXIT_PORTAL_20843 = 20843;
@@ -14077,7 +14037,7 @@ public final class ObjectID
public static final int BOOKCASE_26632 = 26632;
public static final int STONES_26633 = 26633;
public static final int TREASURE_TRAIL_STATISTICS_26634 = 26634;
- public static final int CRATE_26635 = 26635;
+ public static final int PLANK_26635 = 26635;
public static final int CHALLENGE_PORTAL = 26642;
public static final int CHALLENGE_PORTAL_26643 = 26643;
public static final int CHALLENGE_PORTAL_26644 = 26644;
@@ -14431,15 +14391,15 @@ public final class ObjectID
public static final int BLIGHTED_GOLOVANOVA_SEEDLING_27417 = 27417;
public static final int BLIGHTED_GOLOVANOVA_PLANT_27418 = 27418;
public static final int BLIGHTED_GOLOVANOVA_PLANT_27419 = 27419;
- public static final int BLIGHTED_GOLOVANOVA_PLANT_27420 = 27420;
+ public static final int GOLOVANOVA_PLANT_27420 = 27420;
public static final int BLIGHTED_BOLOGANO_SEEDLING_27421 = 27421;
public static final int BLIGHTED_BOLOGANO_PLANT_27422 = 27422;
- public static final int BLIGHTED_BOLOGANO_PLANT_27423 = 27423;
+ public static final int BOLOGANO_PLANT_27423 = 27423;
public static final int BLIGHTED_BOLOGANO_PLANT_27424 = 27424;
public static final int BLIGHTED_LOGAVANO_SEEDLING_27425 = 27425;
public static final int BLIGHTED_LOGAVANO_PLANT_27426 = 27426;
public static final int BLIGHTED_LOGAVANO_PLANT_27427 = 27427;
- public static final int BLIGHTED_LOGAVANO_PLANT_27428 = 27428;
+ public static final int LOGAVANO_PLANT_27428 = 27428;
public static final int FRUIT_CART = 27429;
public static final int SEED_TABLE = 27430;
public static final int SACK_27431 = 27431;
@@ -14451,7 +14411,7 @@ public final class ObjectID
public static final int DOOR_27443 = 27443;
public static final int DOOR_27444 = 27444;
public static final int FARM_DOOR = 27445;
- public static final int GLASS_DOOR = 27485;
+ public static final int GLASS_DOOR_27485 = 27485;
public static final int GLASS_DOOR_27486 = 27486;
public static final int GLASS_DOOR_27487 = 27487;
public static final int GLASS_DOOR_27488 = 27488;
@@ -15102,7 +15062,7 @@ public final class ObjectID
public static final int BANK_LIGHT = 28551;
public static final int BANK_LIGHT_28552 = 28552;
public static final int BANK_PAPERS = 28553;
- public static final int ARMOUR_STAND = 28559;
+ public static final int ARMOUR_STAND_28559 = 28559;
public static final int ARMOUR_STAND_28560 = 28560;
public static final int DRAWERS_28561 = 28561;
public static final int LOVAKITE_FURNACE = 28562;
@@ -15287,10 +15247,11 @@ public final class ObjectID
public static final int ROPE_28897 = 28897;
public static final int ROPE_28898 = 28898;
public static final int ALTAR_28900 = 28900;
- public static final int GRASS_28901 = 28901;
- public static final int GRASS_28904 = 28904;
- public static final int SOIL_28909 = 28909;
- public static final int HOLE_28912 = 28912;
+ public static final int BOULDER_28901 = 28901;
+ public static final int BOULDER_28904 = 28904;
+ public static final int STEEP_ROOF = 28912;
+ public static final int GAP_28913 = 28913;
+ public static final int MYSTERIOUS_RUINS = 28914;
public static final int HOLE_28915 = 28915;
public static final int INANIMATE_ALTAR = 28922;
public static final int AWAKENED_ALTAR = 28923;
@@ -15353,10 +15314,15 @@ public final class ObjectID
public static final int COFFER = 29087;
public static final int SHRINE = 29088;
public static final int LADDER_29089 = 29089;
- public static final int BANK_DEPOSIT_CHEST = 29090;
+ public static final int MYSTERIOUS_RUINS_29090 = 29090;
public static final int VENDING_SHRINE = 29091;
public static final int LADDER_29092 = 29092;
- public static final int ARMOUR_STAND_29098 = 29098;
+ public static final int MYSTERIOUS_RUINS_29094 = 29094;
+ public static final int MYSTERIOUS_RUINS_29095 = 29095;
+ public static final int MYSTERIOUS_RUINS_29096 = 29096;
+ public static final int MYSTERIOUS_RUINS_29097 = 29097;
+ public static final int MYSTERIOUS_RUINS_29098 = 29098;
+ public static final int MYSTERIOUS_RUINS_29099 = 29099;
public static final int WELL_29100 = 29100;
public static final int BARREL_29101 = 29101;
public static final int ROCK_29102 = 29102;
@@ -16148,9 +16114,9 @@ public final class ObjectID
public static final int DOOR_30365 = 30365;
public static final int DOOR_30366 = 30366;
public static final int LADDER_30367 = 30367;
- public static final int CRYSTALS = 30371;
- public static final int CRYSTALS_30372 = 30372;
- public static final int EMPTY_WALL = 30373;
+ public static final int MYSTERIOUS_RUINS_30371 = 30371;
+ public static final int MYSTERIOUS_RUINS_30372 = 30372;
+ public static final int MYSTERIOUS_RUINS_30373 = 30373;
public static final int CAVE_30374 = 30374;
public static final int TUNNEL_30375 = 30375;
public static final int ROW_BOAT_30376 = 30376;
@@ -16779,10 +16745,11 @@ public final class ObjectID
public static final int TABLE_31581 = 31581;
public static final int BANK_COUNTER_31582 = 31582;
public static final int DEADMAN_SUPPLY_CHEST = 31583;
- public static final int CLOSED_BOOTH_31584 = 31584;
+ public static final int MYSTERIOUS_RUINS_31584 = 31584;
public static final int SPADE_31585 = 31585;
public static final int TABLE_31587 = 31587;
public static final int CAVE_ENTRANCE_31606 = 31606;
+ public static final int MYSTERIOUS_RUINS_31607 = 31607;
public static final int STAIRS_31609 = 31609;
public static final int STAIRS_31610 = 31610;
public static final int LADDER_31611 = 31611;
@@ -16849,6 +16816,7 @@ public final class ObjectID
public static final int DRIFTWOOD_31721 = 31721;
public static final int BURNING_DRIFTWOOD = 31722;
public static final int WET_DRIFTWOOD = 31723;
+ public static final int MYSTERIOUS_RUINS_31725 = 31725;
public static final int BANK_DEPOSIT_BOX_31726 = 31726;
public static final int TRAPDOOR_31731 = 31731;
public static final int CURTAIN_31732 = 31732;
@@ -17253,8 +17221,8 @@ public final class ObjectID
public static final int SKELETON_32488 = 32488;
public static final int MYSTERIOUS_RUINS_32489 = 32489;
public static final int MYSTERIOUS_RUINS_32490 = 32490;
- public static final int PORTAL_32491 = 32491;
- public static final int ALTAR_32492 = 32492;
+ public static final int MYSTERIOUS_RUINS_32491 = 32491;
+ public static final int MYSTERIOUS_RUINS_32492 = 32492;
public static final int GLOWING_ORB = 32501;
public static final int ROCKFALL_32503 = 32503;
public static final int BOULDER_32504 = 32504;
@@ -18576,5 +18544,66 @@ public final class ObjectID
public static final int INCONSPICUOUS_BUSH_BEGINNER = 34734;
public static final int STASH_BEGINNER = 34735;
public static final int ROCKS_34741 = 34741;
+ public static final int MYSTERIOUS_RUINS_34742 = 34742;
+ public static final int MYSTERIOUS_RUINS_34743 = 34743;
+ public static final int MYSTERIOUS_RUINS_34744 = 34744;
+ public static final int MYSTERIOUS_RUINS_34745 = 34745;
+ public static final int MYSTERIOUS_RUINS_34746 = 34746;
+ public static final int MYSTERIOUS_RUINS_34747 = 34747;
+ public static final int PORTAL_34748 = 34748;
+ public static final int PORTAL_34749 = 34749;
+ public static final int PORTAL_34750 = 34750;
+ public static final int PORTAL_34751 = 34751;
+ public static final int PORTAL_34752 = 34752;
+ public static final int PORTAL_34753 = 34753;
+ public static final int PORTAL_34754 = 34754;
+ public static final int PORTAL_34755 = 34755;
+ public static final int PORTAL_34756 = 34756;
+ public static final int PORTAL_34757 = 34757;
+ public static final int PORTAL_34758 = 34758;
+ public static final int PORTAL_34759 = 34759;
+ public static final int ALTAR_34760 = 34760;
+ public static final int ALTAR_34761 = 34761;
+ public static final int ALTAR_34762 = 34762;
+ public static final int ALTAR_34763 = 34763;
+ public static final int ALTAR_34764 = 34764;
+ public static final int ALTAR_34765 = 34765;
+ public static final int ALTAR_34766 = 34766;
+ public static final int ALTAR_34767 = 34767;
+ public static final int ALTAR_34768 = 34768;
+ public static final int ALTAR_34769 = 34769;
+ public static final int ALTAR_34770 = 34770;
+ public static final int ALTAR_34771 = 34771;
+ public static final int ALTAR_34772 = 34772;
+ public static final int RUNE_ESSENCE_34773 = 34773;
+ public static final int PORTAL_34774 = 34774;
+ public static final int PORTAL_34775 = 34775;
+ public static final int PORTAL_34776 = 34776;
+ public static final int PORTAL_34777 = 34777;
+ public static final int PORTAL_34778 = 34778;
+ public static final int PILLAR_34780 = 34780;
+ public static final int PILLAR_34781 = 34781;
+ public static final int PILLAR_34782 = 34782;
+ public static final int PILLAR_34783 = 34783;
+ public static final int PILLAR_34784 = 34784;
+ public static final int PILLAR_34785 = 34785;
+ public static final int MYSTERIOUS_STONE = 34788;
+ public static final int MYSTERIOUS_GLOW = 34789;
+ public static final int MYSTERIOUS_GLOW_34790 = 34790;
+ public static final int MYSTERIOUS_GLOW_34791 = 34791;
+ public static final int MYSTERIOUS_GLOW_34792 = 34792;
+ public static final int MYSTERIOUS_GLOW_34793 = 34793;
+ public static final int MYSTERIOUS_GLOW_34794 = 34794;
+ public static final int RUINED_PILLAR = 34795;
+ public static final int RUINED_PILLAR_34796 = 34796;
+ public static final int PILLAR_34797 = 34797;
+ public static final int RUINED_PILLAR_34798 = 34798;
+ public static final int PILLAR_34799 = 34799;
+ public static final int RUINED_PILLAR_34800 = 34800;
+ public static final int RUINED_PILLAR_34801 = 34801;
+ public static final int RUINED_PILLAR_34802 = 34802;
+ public static final int RUBBLE_34803 = 34803;
+ public static final int RUBBLE_34804 = 34804;
+ public static final int RUBBLE_34805 = 34805;
/* This file is automatically generated. Do not edit. */
}
diff --git a/runelite-api/src/main/java/net/runelite/api/Renderable.java b/runelite-api/src/main/java/net/runelite/api/Renderable.java
index 15569316a3..d8d2114a8d 100644
--- a/runelite-api/src/main/java/net/runelite/api/Renderable.java
+++ b/runelite-api/src/main/java/net/runelite/api/Renderable.java
@@ -31,11 +31,14 @@ public interface Renderable extends Node
{
/**
* Gets the model of the object.
- *
- * @return the model
*/
Model getModel();
+ /**
+ * Gets the height of the model.
+ */
+ int getModelHeight();
+
void setModelHeight(int modelHeight);
void draw(int orientation, int pitchSin, int pitchCos, int yawSin, int yawCos, int x, int y, int z, long hash);
diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java
index 68abc5e0f7..7f33380f28 100644
--- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java
@@ -95,6 +95,19 @@ public final class ScriptID
*/
public static final int CHAT_PROMPT_INIT = 223;
+ /**
+ * Checks the state of the given stash unit.
+ *
+ * - int (loc) The stash unit object id
+ * - int Bitpacked stash unit states
+ * - int Bitpacked stash unit states 2
+ * - int Bitpacked stash unit states 3
+ *
+ *
+ * Returns a pair of booleans indicating if the stash unit is built and if it is filled
+ */
+ public static final int WATSON_STASH_UNIT_CHECK = 1479;
+
/**
* Queries the completion state of a quest by its struct id
*
diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java
index f1768c2aaf..58cdc80380 100644
--- a/runelite-api/src/main/java/net/runelite/api/Varbits.java
+++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java
@@ -487,7 +487,15 @@ public enum Varbits
/**
* The active tab within the quest interface
*/
- QUEST_TAB(8168);
+ QUEST_TAB(8168),
+
+ /**
+ * Explorer ring
+ */
+ EXPLORER_RING_ALCHTYPE(5398),
+ EXPLORER_RING_TELEPORTS(4552),
+ EXPLORER_RING_ALCHS(4554),
+ EXPLORER_RING_RUNENERGY(4553);
/**
* The raw varbit ID.
diff --git a/runelite-api/src/main/java/net/runelite/api/WallObject.java b/runelite-api/src/main/java/net/runelite/api/WallObject.java
index 9a7156b654..ddc4a734cd 100644
--- a/runelite-api/src/main/java/net/runelite/api/WallObject.java
+++ b/runelite-api/src/main/java/net/runelite/api/WallObject.java
@@ -25,28 +25,33 @@
package net.runelite.api;
/**
- * Represents the wall of a tile, which is an un-passable boundary.
+ * Represents one or two walls on a tile
*/
public interface WallObject extends TileObject
{
/**
- * Gets the first orientation of the wall.
- *
- * @return the first orientation, 0-2048 where 0 is north
+ * A bitfield with the orientation of a wall
+ * 1 = East
+ * 2 = North
+ * 4 = West
+ * 8 = South
*/
int getOrientationA();
/**
- * Gets the second orientation value of the wall.
- *
- * @return the second orientation, 0-2048 where 0 is north
+ * A bitfield containing the orientation of the second wall on this tile,
+ * or 0 if there is no second wall.
+ * @see #getOrientationA
*/
int getOrientationB();
/**
- * Gets the boundary configuration of the wall.
- *
- * @return the boundary configuration
+ * A bitfield containing various flags:
+ *
{@code
+ * object type id = bits & 0x20
+ * orientation (0-3) = bits >>> 6 & 3
+ * supports items = bits >>> 8 & 1
+ * }
*/
int getConfig();
diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java
index c450620abd..523c0335c8 100644
--- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java
+++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java
@@ -134,6 +134,11 @@ public class WidgetID
public static final int KEPT_ON_DEATH_GROUP_ID = 4;
public static final int GUIDE_PRICE_GROUP_ID = 464;
public static final int SEED_VAULT_INVENTORY_GROUP_ID = 630;
+ public static final int BEGINNER_CLUE_MAP_CHAMPIONS_GUILD = 346;
+ public static final int BEGINNER_CLUE_MAP_VARROCK_EAST_MINE = 347;
+ public static final int BEGINNER_CLUE_MAP_DRAYNOR = 348;
+ public static final int BEGINNER_CLUE_MAP_NORTH_OF_FALADOR = 351;
+ public static final int BEGINNER_CLUE_MAP_WIZARDS_TOWER = 356;
static class WorldMap
{
diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml
index b45a41dc5f..146a24db7f 100644
--- a/runelite-client/pom.xml
+++ b/runelite-client/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.24-SNAPSHOT
+ 1.5.25-SNAPSHOT
client
@@ -197,12 +197,6 @@
runelite-api
${project.version}
-
- net.runelite.rs
- runescape-api
- ${project.version}
- runtime
-
net.runelite
client-patch
@@ -309,12 +303,6 @@
**
-
- net.runelite.rs:runescape-api
-
- **
-
-
net.runelite.pushingpixels:*
diff --git a/runelite-client/src/main/java/net/runelite/client/SessionClient.java b/runelite-client/src/main/java/net/runelite/client/SessionClient.java
index 9d02ee1961..e3166dfc98 100644
--- a/runelite-client/src/main/java/net/runelite/client/SessionClient.java
+++ b/runelite-client/src/main/java/net/runelite/client/SessionClient.java
@@ -39,8 +39,7 @@ class SessionClient
{
UUID open() throws IOException
{
- HttpUrl url = RuneLiteAPI.getApiRoot().newBuilder()
- .addPathSegment("session")
+ HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder()
.build();
Request request = new Request.Builder()
@@ -62,8 +61,7 @@ class SessionClient
void ping(UUID uuid) throws IOException
{
- HttpUrl url = RuneLiteAPI.getApiRoot().newBuilder()
- .addPathSegment("session")
+ HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder()
.addPathSegment("ping")
.addQueryParameter("session", uuid.toString())
.build();
@@ -83,8 +81,7 @@ class SessionClient
void delete(UUID uuid) throws IOException
{
- HttpUrl url = RuneLiteAPI.getApiRoot().newBuilder()
- .addPathSegment("session")
+ HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder()
.addQueryParameter("session", uuid.toString())
.build();
diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java
index d4a3964e08..b1aa9b3ac2 100644
--- a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java
+++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java
@@ -98,6 +98,7 @@ public class ChatCommandManager implements ChatboxInputListener
case MODCHAT:
case FRIENDSCHAT:
case PRIVATECHAT:
+ case MODPRIVATECHAT:
case PRIVATECHATOUT:
break;
default:
diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java
index 782a77dc7f..aee270096f 100644
--- a/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java
+++ b/runelite-client/src/main/java/net/runelite/client/game/ItemMapping.java
@@ -101,8 +101,8 @@ public enum ItemMapping
ITEM_ANGUISH_ORNAMENT_KIT(ANGUISH_ORNAMENT_KIT, NECKLACE_OF_ANGUISH_OR),
ITEM_OCCULT_NECKLACE(OCCULT_NECKLACE, OCCULT_NECKLACE_OR),
ITEM_OCCULT_ORNAMENT_KIT(OCCULT_ORNAMENT_KIT, OCCULT_NECKLACE_OR),
- ITE_AMULET_OF_FURY(AMULET_OF_FURY, AMULET_OF_FURY_OR),
- ITE_FURY_ORNAMENT_KIT(FURY_ORNAMENT_KIT, AMULET_OF_FURY_OR),
+ ITEM_AMULET_OF_FURY(AMULET_OF_FURY, AMULET_OF_FURY_OR),
+ ITEM_FURY_ORNAMENT_KIT(FURY_ORNAMENT_KIT, AMULET_OF_FURY_OR),
ITEM_TORMENTED_BRACELET(TORMENTED_BRACELET, TORMENTED_BRACELET_OR),
ITEM_TORMENTED_ORNAMENT_KIT(TORMENTED_ORNAMENT_KIT, TORMENTED_BRACELET_OR),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/Obstacles.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/Obstacles.java
index 92df605a36..19f4dc565e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/Obstacles.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/Obstacles.java
@@ -30,20 +30,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import java.util.List;
import java.util.Set;
-import static net.runelite.api.NullObjectID.NULL_10872;
-import static net.runelite.api.NullObjectID.NULL_10873;
-import static net.runelite.api.NullObjectID.NULL_12945;
-import static net.runelite.api.NullObjectID.NULL_18083;
-import static net.runelite.api.NullObjectID.NULL_18116;
-import static net.runelite.api.NullObjectID.NULL_18122;
-import static net.runelite.api.NullObjectID.NULL_18124;
-import static net.runelite.api.NullObjectID.NULL_18129;
-import static net.runelite.api.NullObjectID.NULL_18130;
-import static net.runelite.api.NullObjectID.NULL_18132;
-import static net.runelite.api.NullObjectID.NULL_18133;
-import static net.runelite.api.NullObjectID.NULL_18135;
-import static net.runelite.api.NullObjectID.NULL_18136;
-import static net.runelite.api.NullObjectID.NULL_3550;
+import static net.runelite.api.NullObjectID.*;
import static net.runelite.api.ObjectID.*;
import net.runelite.client.game.AgilityShortcut;
@@ -57,15 +44,15 @@ class Obstacles
PLANK_3572, PLANK_3571, PLANK_3570, ROPE_SWING, PILLAR_3578, LOW_WALL, LOG_BALANCE, LOG_BALANCE_3557,
BALANCING_LEDGE_3561, BALANCING_LEDGE, MONKEY_BARS_3564, BALANCING_ROPE, HAND_HOLDS_3583,
// Draynor
- ROUGH_WALL, TIGHTROPE, TIGHTROPE_10075, NARROW_WALL, WALL_10084, GAP_10085, CRATE_10086, STILE_7527,
+ ROUGH_WALL, TIGHTROPE, TIGHTROPE_11406, NARROW_WALL, WALL_11630, GAP_11631, CRATE_11632, STILE_7527,
// Al-Kharid
- ROUGH_WALL_10093, TIGHTROPE_10284, CABLE, ZIP_LINE, TROPICAL_TREE_10357, ROOF_TOP_BEAMS,
- TIGHTROPE_10583, GAP_10352,
+ ROUGH_WALL_11633, TIGHTROPE_14398, CABLE, ZIP_LINE, TROPICAL_TREE_14404, ROOF_TOP_BEAMS,
+ TIGHTROPE_14409, GAP_14399,
// Pyramid
STAIRS_10857, LOW_WALL_10865, LEDGE_10860, PLANK_10868, GAP_10882, LEDGE_10886, STAIRS_10857, GAP_10884,
GAP_10859, GAP_10861, LOW_WALL_10865, GAP_10859, LEDGE_10888, PLANK_10868, CLIMBING_ROCKS_10851, DOORWAY_10855,
// Varrock
- ROUGH_WALL_10586, CLOTHES_LINE, GAP_10642, WALL_10777, GAP_10778, GAP_10779, GAP_10780, LEDGE_10781, EDGE,
+ ROUGH_WALL_14412, CLOTHES_LINE, GAP_14414, WALL_14832, GAP_14833, GAP_14834, GAP_14835, LEDGE_14836, EDGE,
// Penguin
STEPPING_STONE_21120, STEPPING_STONE_21126, STEPPING_STONE_21128, STEPPING_STONE_21129,
STEPPING_STONE_21130, STEPPING_STONE_21131, STEPPING_STONE_21132, STEPPING_STONE_21133,
@@ -73,26 +60,26 @@ class Obstacles
// Barbarian
ROPESWING_23131, LOG_BALANCE_23144, OBSTACLE_NET_20211, BALANCING_LEDGE_23547, LADDER_16682, CRUMBLING_WALL_1948,
// Canifis
- TALL_TREE_10819, GAP_10820, GAP_10821, GAP_10828, GAP_10822, POLEVAULT, GAP_10823, GAP_10832,
+ TALL_TREE_14843, GAP_14844, GAP_14845, GAP_14848, GAP_14846, POLEVAULT, GAP_14847, GAP_14897,
// Ape atoll
STEPPING_STONE_15412, TROPICAL_TREE_15414, MONKEYBARS_15417, SKULL_SLOPE_15483, ROPE_15487, TROPICAL_TREE_16062,
// Falador
- ROUGH_WALL_10833, TIGHTROPE_10834, HAND_HOLDS_10836, GAP_11161, GAP_11360, TIGHTROPE_11361,
- TIGHTROPE_11364, GAP_11365, LEDGE_11366, LEDGE_11367, LEDGE_11369, LEDGE_11370, EDGE_11371,
+ ROUGH_WALL_14898, TIGHTROPE_14899, HAND_HOLDS_14901, GAP_14903, GAP_14904, TIGHTROPE_14905,
+ TIGHTROPE_14911, GAP_14919, LEDGE_14920, LEDGE_14921, LEDGE_14922, LEDGE_14924, EDGE_14925,
// Wilderness
OBSTACLE_PIPE_23137, ROPESWING_23132, STEPPING_STONE_23556, LOG_BALANCE_23542, ROCKS_23640,
// Seers
- WALL_11373, GAP_11374, TIGHTROPE_11378, GAP_11375, GAP_11376, EDGE_11377,
+ WALL_14927, GAP_14928, TIGHTROPE_14932, GAP_14929, GAP_14930, EDGE_14931,
// Dorgesh-Kaan
CABLE_22569, CABLE_22572, LADDER_22564, JUTTING_WALL_22552, TUNNEL_22557, PYLON_22664,
CONSOLE, BOILER_22635, STAIRS_22650, STAIRS_22651, STAIRS_22609, STAIRS_22608,
// Pollniveach
- BASKET_11380, MARKET_STALL_11381, BANNER_11382, GAP_11383, TREE_11384, ROUGH_WALL_11385,
- MONKEYBARS, TREE_11389, DRYING_LINE,
+ BASKET_14935, MARKET_STALL_14936, BANNER_14937, GAP_14938, TREE_14939, ROUGH_WALL_14940,
+ MONKEYBARS, TREE_14944, DRYING_LINE,
// Rellaka
- ROUGH_WALL_11391, GAP_11392, TIGHTROPE_11393, GAP_11395, GAP_11396, TIGHTROPE_11397, PILE_OF_FISH,
+ ROUGH_WALL_14946, GAP_14947, TIGHTROPE_14987, GAP_14990, GAP_14991, TIGHTROPE_14992, PILE_OF_FISH,
// Ardougne
- GAP_11406, GAP_11429, GAP_11430, STEEP_ROOF, GAP_11630, PLANK_11631, WOODEN_BEAMS,
+ WOODEN_BEAMS, GAP_15609, PLANK_26635, GAP_15610, GAP_15611, STEEP_ROOF, GAP_15612,
// Meiyerditch
NULL_12945, ROCK_17958, ROCK_17959, ROCK_17960, BOAT_17961, NULL_18122, NULL_18124, WALL_RUBBLE,
WALL_RUBBLE_18038, FLOORBOARDS, FLOORBOARDS_18071, FLOORBOARDS_18072, FLOORBOARDS_18073, NULL_18129, NULL_18130,
@@ -103,7 +90,7 @@ class Obstacles
FLOORBOARDS_18110, FLOORBOARDS_18112, FLOORBOARDS_18111, FLOORBOARDS_18114, FLOORBOARDS_18113,
NULL_18116, FLOORBOARDS_18117, FLOORBOARDS_18118, STAIRS_DOWN, WALL_17980,
// Werewolf
- STEPPING_STONE_11643, HURDLE, HURDLE_11639, HURDLE_11640, PIPE_11657, SKULL_SLOPE, ZIP_LINE_11644,
+ STEPPING_STONE_11643, HURDLE, HURDLE_11639, HURDLE_11640, PIPE_11657, SKULL_SLOPE, ZIP_LINE,
ZIP_LINE_11645, ZIP_LINE_11646
);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java
index de44d67c59..f95f21dc72 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java
@@ -295,7 +295,8 @@ public class CannonPlugin extends Plugin
cballsLeft = 0;
}
- if (event.getMessage().contains("You pick up the cannon"))
+ if (event.getMessage().contains("You pick up the cannon")
+ || event.getMessage().contains("Your cannon has decayed. Speak to Nulodion to get a new one!"))
{
cannonPlaced = false;
cballsLeft = 0;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java
index abc1747b4a..264e5ae425 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018, Magic fTail
+ * Copyright (c) 2019, osrs-music-map
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -63,4 +64,26 @@ public interface ChatFilterConfig extends Config
{
return "";
}
+
+ @ConfigItem(
+ keyName = "filterFriends",
+ name = "Filter Friends",
+ description = "Filter your friends' messages",
+ position = 4
+ )
+ default boolean filterFriends()
+ {
+ return false;
+ }
+
+ @ConfigItem(
+ keyName = "filterClan",
+ name = "Filter Clan Chat Members",
+ description = "Filter your clan chat members' messages",
+ position = 5
+ )
+ default boolean filterClan()
+ {
+ return false;
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java
index 3f49a1f7e4..690669cc54 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018, Magic fTail
+ * Copyright (c) 2019, osrs-music-map
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -35,6 +36,7 @@ import java.util.regex.PatternSyntaxException;
import javax.inject.Inject;
import net.runelite.api.ChatMessageType;
import net.runelite.api.Client;
+import net.runelite.api.MessageNode;
import net.runelite.api.Player;
import net.runelite.api.events.ConfigChanged;
import net.runelite.api.events.OverheadTextChanged;
@@ -97,7 +99,10 @@ public class ChatFilterPlugin extends Plugin
int[] intStack = client.getIntStack();
int intStackSize = client.getIntStackSize();
- ChatMessageType chatMessageType = ChatMessageType.of(intStack[intStackSize - 1]);
+ int messageType = intStack[intStackSize - 2];
+ int messageId = intStack[intStackSize - 1];
+
+ ChatMessageType chatMessageType = ChatMessageType.of(messageType);
// Only filter public chat and private messages
switch (chatMessageType)
@@ -113,6 +118,13 @@ public class ChatFilterPlugin extends Plugin
return;
}
+ MessageNode messageNode = (MessageNode) client.getMessages().get(messageId);
+ String name = messageNode.getName();
+ if (!shouldFilterPlayerMessage(name))
+ {
+ return;
+ }
+
String[] stringStack = client.getStringStack();
int stringStackSize = client.getStringStackSize();
@@ -122,7 +134,7 @@ public class ChatFilterPlugin extends Plugin
if (censoredMessage == null)
{
// Block the message
- intStack[intStackSize - 2] = 0;
+ intStack[intStackSize - 3] = 0;
}
else
{
@@ -134,7 +146,7 @@ public class ChatFilterPlugin extends Plugin
@Subscribe
public void onOverheadTextChanged(OverheadTextChanged event)
{
- if (!(event.getActor() instanceof Player))
+ if (!(event.getActor() instanceof Player) || !shouldFilterPlayerMessage(event.getActor().getName()))
{
return;
}
@@ -149,6 +161,14 @@ public class ChatFilterPlugin extends Plugin
event.getActor().setOverheadText(message);
}
+ boolean shouldFilterPlayerMessage(String playerName)
+ {
+ boolean isMessageFromSelf = playerName.equals(client.getLocalPlayer().getName());
+ return !isMessageFromSelf &&
+ (config.filterFriends() || !client.isFriended(playerName, false)) &&
+ (config.filterClan() || !client.isClanMember(playerName));
+ }
+
String censorMessage(final String message)
{
String strippedMessage = jagexPrintableCharMatcher.retainFrom(message)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java
index 5fdd7996be..393008f7fe 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java
@@ -126,4 +126,15 @@ public interface ClanChatConfig extends Config
{
return false;
}
+
+ @ConfigItem(
+ keyName = "clanTabChat",
+ name = "Clan Tab Chat",
+ description = "Allows clan chat without prepending '/' to messages when on clan tab",
+ position = 8
+ )
+ default boolean clanTabChat()
+ {
+ return false;
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java
index fcc8728e92..d166916b7e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java
@@ -60,6 +60,7 @@ import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.PlayerDespawned;
import net.runelite.api.events.PlayerSpawned;
+import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.api.events.VarClientStrChanged;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
@@ -491,6 +492,19 @@ public class ClanChatPlugin extends Plugin
activityBuffer.clear();
}
+ @Subscribe
+ public void onScriptCallbackEvent(ScriptCallbackEvent scriptCallbackEvent)
+ {
+ if (!scriptCallbackEvent.getEventName().equalsIgnoreCase("clanchatInput"))
+ {
+ return;
+ }
+
+ final int[] intStack = client.getIntStack();
+ final int size = client.getIntStackSize();
+ intStack[size - 1] = config.clanTabChat() ? 1 : 0;
+ }
+
int getClanAmount()
{
return clanMembers.size();
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java
index d060f1a3e4..24d9aad896 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java
@@ -68,7 +68,9 @@ import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.events.NpcDespawned;
import net.runelite.api.events.NpcSpawned;
+import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget;
+import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
@@ -76,6 +78,7 @@ import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.cluescrolls.clues.AnagramClue;
+import net.runelite.client.plugins.cluescrolls.clues.BeginnerMapClue;
import net.runelite.client.plugins.cluescrolls.clues.CipherClue;
import net.runelite.client.plugins.cluescrolls.clues.ClueScroll;
import net.runelite.client.plugins.cluescrolls.clues.CoordinateClue;
@@ -389,6 +392,18 @@ public class ClueScrollPlugin extends Plugin
updateClue(findClueScroll());
}
+ @Subscribe
+ public void onWidgetLoaded(WidgetLoaded event)
+ {
+ if (event.getGroupId() < WidgetID.BEGINNER_CLUE_MAP_CHAMPIONS_GUILD
+ || event.getGroupId() > WidgetID.BEGINNER_CLUE_MAP_WIZARDS_TOWER)
+ {
+ return;
+ }
+
+ updateClue(BeginnerMapClue.forWidgetID(event.getGroupId()));
+ }
+
public BufferedImage getClueScrollImage()
{
return itemManager.getImage(ItemID.CLUE_SCROLL_MASTER);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/BeginnerMapClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/BeginnerMapClue.java
new file mode 100644
index 0000000000..caaeaeeb61
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/BeginnerMapClue.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2019, Hydrox6
+ * 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.cluescrolls.clues;
+
+import com.google.common.collect.ImmutableList;
+import lombok.Getter;
+import net.runelite.api.coords.WorldPoint;
+import net.runelite.api.widgets.WidgetID;
+
+@Getter
+public class BeginnerMapClue extends MapClue implements LocationClueScroll
+{
+ private static final ImmutableList CLUES = ImmutableList.of(
+ new BeginnerMapClue(WidgetID.BEGINNER_CLUE_MAP_CHAMPIONS_GUILD, new WorldPoint(3166, 3361, 0), "South West of the Champion's Guild"),
+ new BeginnerMapClue(WidgetID.BEGINNER_CLUE_MAP_VARROCK_EAST_MINE, new WorldPoint(3290, 3374, 0), "Outside Varrock East Mine"),
+ new BeginnerMapClue(WidgetID.BEGINNER_CLUE_MAP_DRAYNOR, new WorldPoint(3093, 3226, 0), "South of Draynor Village Bank"),
+ new BeginnerMapClue(WidgetID.BEGINNER_CLUE_MAP_NORTH_OF_FALADOR, new WorldPoint(3043, 3398, 0), "In the standing stones north of Falador"),
+ new BeginnerMapClue(WidgetID.BEGINNER_CLUE_MAP_WIZARDS_TOWER, new WorldPoint(3110, 3152, 0), "On the south side of the Wizard's Tower")
+ );
+
+ private final int widgetGroupID;
+
+ private BeginnerMapClue(int widgetGroupID, WorldPoint location, String description)
+ {
+ super(-1, location, description);
+ this.widgetGroupID = widgetGroupID;
+ setRequiresSpade(true);
+ }
+
+ // Beginner Map Clues all use the same ItemID, but the WidgetID used to display them is unique
+ public static BeginnerMapClue forWidgetID(int widgetGroupID)
+ {
+ for (BeginnerMapClue clue : CLUES)
+ {
+ if (clue.widgetGroupID == widgetGroupID)
+ {
+ return clue;
+ }
+ }
+
+ return null;
+ }
+}
+
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java
index f8582fe1c0..a8129cce78 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java
@@ -114,7 +114,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
new CrypticClue("I am the one who watches the giants. The giants in turn watch me. I watch with two while they watch with one. Come seek where I may be.", "Kamfreena", new WorldPoint(2845, 3539, 0), "Speak to Kamfreena on the top floor of the Warriors' Guild."),
new CrypticClue("In a town where wizards are known to gather, search upstairs in a large house to the north.", "Man", 375, new WorldPoint(2593, 3108, 1), "Search the chest upstairs in the house north of Yanille Wizard's Guild. Kill a man for the key."),
new CrypticClue("Probably filled with wizards socks.", "Wizard", DRAWERS_350, new WorldPoint(3116, 9562, 0), "Search the drawers in the basement of the Wizard's Tower south of Draynor Village. Kill one of the Wizards for the key. Fairy ring DIS"),
- new CrypticClue("Even the seers say this clue goes right over their heads.", CRATE_26635, new WorldPoint(2707, 3488, 2), "Search the crate on the Seers Agility Course in Seers Village"),
+ new CrypticClue("Even the seers say this clue goes right over their heads.", CRATE_14934, new WorldPoint(2707, 3488, 2), "Search the crate on the Seers Agility Course in Seers Village"),
new CrypticClue("Speak to a Wyse man.", "Wyson the gardener", new WorldPoint(3026, 3378, 0), "Talk to Wyson the gardener at Falador Park."),
new CrypticClue("You'll need to look for a town with a central fountain. Look for a locked chest in the town's chapel.", "Monk" , CLOSED_CHEST_5108, new WorldPoint(3256, 3487, 0), "Search the chest by the stairs in the Varrock church. Kill a Monk in Ardougne Monastery to obtain the key."),
new CrypticClue("Talk to Ambassador Spanfipple in the White Knights Castle.", "Ambassador Spanfipple", new WorldPoint(2979, 3340, 0), "Ambassador Spanfipple can be found roaming on the first floor of the White Knights Castle."),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java
index eb4e89cef0..d4fd2ce0ee 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java
@@ -27,15 +27,19 @@ package net.runelite.client.plugins.cluescrolls.clues;
import com.google.common.collect.ImmutableSet;
import java.awt.Color;
import java.awt.Graphics2D;
+import java.awt.Polygon;
import java.util.Set;
import javax.annotation.Nonnull;
import lombok.Getter;
+import net.runelite.api.Client;
import net.runelite.api.EquipmentInventorySlot;
import static net.runelite.api.EquipmentInventorySlot.*;
import static net.runelite.api.EquipmentInventorySlot.LEGS;
import net.runelite.api.Item;
import net.runelite.api.ItemID;
import static net.runelite.api.ItemID.*;
+import net.runelite.api.Perspective;
+import net.runelite.api.ScriptID;
import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldPoint;
import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR;
@@ -47,6 +51,7 @@ import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.*;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BULL_ROARER;
import net.runelite.client.plugins.cluescrolls.clues.emote.ItemRequirement;
import net.runelite.client.plugins.cluescrolls.clues.emote.RangeItemRequirement;
+import net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit;
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.*;
import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SHANTAY_PASS;
import net.runelite.client.plugins.cluescrolls.clues.emote.SingleItemRequirement;
@@ -175,6 +180,9 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
new EmoteClue("Panic at Al Kharid mine.", null, new WorldPoint(3300, 3314, 0), PANIC),
new EmoteClue("Spin at Flynn's Mace Shop.", null, new WorldPoint(2950, 3387, 0), SPIN));
+ private static final String UNICODE_CHECK_MARK = "\u2713";
+ private static final String UNICODE_BALLOT_X = "\u2717";
+
private static SingleItemRequirement item(int itemId)
{
return new SingleItemRequirement(itemId);
@@ -206,19 +214,18 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
}
private final String text;
- private final Integer stashUnit;
+ private final STASHUnit stashUnit;
private final WorldPoint location;
private final Emote firstEmote;
private final Emote secondEmote;
- @Nonnull
private final ItemRequirement[] itemRequirements;
- private EmoteClue(String text, Integer stashUnit, WorldPoint location, Emote firstEmote, @Nonnull ItemRequirement... itemRequirements)
+ private EmoteClue(String text, STASHUnit stashUnit, WorldPoint location, Emote firstEmote, @Nonnull ItemRequirement... itemRequirements)
{
this(text, stashUnit, location, firstEmote, null, itemRequirements);
}
- private EmoteClue(String text, Integer stashUnit, WorldPoint location, Emote firstEmote, Emote secondEmote, @Nonnull ItemRequirement... itemRequirements)
+ private EmoteClue(String text, STASHUnit stashUnit, WorldPoint location, Emote firstEmote, Emote secondEmote, @Nonnull ItemRequirement... itemRequirements)
{
this.text = text;
this.stashUnit = stashUnit;
@@ -248,6 +255,17 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
if (itemRequirements.length > 0)
{
+ Client client = plugin.getClient();
+ client.runScript(ScriptID.WATSON_STASH_UNIT_CHECK, stashUnit.getObjectId(), 0, 0, 0);
+ int[] intStack = client.getIntStack();
+ boolean stashUnitBuilt = intStack[0] == 1;
+
+ panelComponent.getChildren().add(LineComponent.builder()
+ .left("STASH Unit:")
+ .right(stashUnitBuilt ? UNICODE_CHECK_MARK : UNICODE_BALLOT_X)
+ .rightColor(stashUnitBuilt ? Color.GREEN : Color.RED)
+ .build());
+
panelComponent.getChildren().add(LineComponent.builder().left("Equip:").build());
Item[] equipment = plugin.getEquippedItems();
@@ -275,9 +293,9 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
boolean combinedFulfilled = requirement.fulfilledBy(combined);
panelComponent.getChildren().add(LineComponent.builder()
- .left(requirement.getCollectiveName(plugin.getClient()))
+ .left(requirement.getCollectiveName(client))
.leftColor(TITLED_CONTENT_COLOR)
- .right(combinedFulfilled ? "\u2713" : "\u2717")
+ .right(combinedFulfilled ? UNICODE_CHECK_MARK : UNICODE_BALLOT_X)
.rightColor(equipmentFulfilled ? Color.GREEN : (combinedFulfilled ? Color.ORANGE : Color.RED))
.build());
}
@@ -287,14 +305,28 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
@Override
public void makeWorldOverlayHint(Graphics2D graphics, ClueScrollPlugin plugin)
{
- LocalPoint localLocation = LocalPoint.fromWorld(plugin.getClient(), getLocation());
+ LocalPoint localPoint = LocalPoint.fromWorld(plugin.getClient(), getLocation());
- if (localLocation == null)
+ if (localPoint != null)
{
- return;
+ OverlayUtil.renderTileOverlay(plugin.getClient(), graphics, localPoint, plugin.getEmoteImage(), Color.ORANGE);
}
- OverlayUtil.renderTileOverlay(plugin.getClient(), graphics, localLocation, plugin.getEmoteImage(), Color.ORANGE);
+ final WorldPoint[] worldPoints = stashUnit.getWorldPoints();
+
+ for (final WorldPoint worldPoint : worldPoints)
+ {
+ final LocalPoint stashUnitLocalPoint = LocalPoint.fromWorld(plugin.getClient(), worldPoint);
+
+ if (stashUnitLocalPoint != null)
+ {
+ final Polygon poly = Perspective.getCanvasTilePoly(plugin.getClient(), stashUnitLocalPoint);
+ if (poly != null)
+ {
+ OverlayUtil.renderPolygon(graphics, poly, Color.RED);
+ }
+ }
+ }
}
public static EmoteClue forText(String text)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java
index 99b1eef058..ec95a7b946 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java
@@ -102,7 +102,7 @@ public class MapClue extends ClueScroll implements ObjectClueScroll
this(itemId, location, objectId, null);
}
- private MapClue(int itemId, WorldPoint location, String description)
+ MapClue(int itemId, WorldPoint location, String description)
{
this(itemId, location, -1, description);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java
index 6edca56a02..b6d2038cea 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java
@@ -24,115 +24,127 @@
*/
package net.runelite.client.plugins.cluescrolls.clues.emote;
+import lombok.Getter;
import net.runelite.api.NullObjectID;
+import net.runelite.api.coords.WorldPoint;
-public final class STASHUnit
+@Getter
+public enum STASHUnit
{
- public static final int NEAR_A_SHED_IN_LUMBRIDGE_SWAMP = NullObjectID.NULL_28958;
- public static final int ON_THE_BRIDGE_TO_THE_MISTHALIN_WIZARDS_TOWER = NullObjectID.NULL_28959;
- public static final int DRAYNOR_VILLAGE_MARKET = NullObjectID.NULL_28960;
- public static final int LIMESTONE_MINE = NullObjectID.NULL_28961;
- public static final int OUTSIDE_THE_LEGENDS_GUILD_GATES = NullObjectID.NULL_28962;
- public static final int MUDSKIPPER_POINT = NullObjectID.NULL_28963;
- public static final int NEAR_THE_ENTRANA_FERRY_IN_PORT_SARIM = NullObjectID.NULL_28964;
- public static final int AL_KHARID_SCORPION_MINE = NullObjectID.NULL_28965;
- public static final int DRAYNOR_MANOR_BY_THE_FOUNTAIN = NullObjectID.NULL_28966;
- public static final int WHEAT_FIELD_NEAR_THE_LUMBRIDGE_WINDMILL = NullObjectID.NULL_28967;
- public static final int CROSSROADS_NORTH_OF_DRAYNOR_VILLAGE = NullObjectID.NULL_28968;
- public static final int RIMMINGTON_MINE = NullObjectID.NULL_28969;
- public static final int VARROCK_PALACE_LIBRARY = NullObjectID.NULL_28970;
- public static final int UPSTAIRS_IN_THE_ARDOUGNE_WINDMILL = NullObjectID.NULL_28971;
- public static final int OUTSIDE_THE_FALADOR_PARTY_ROOM = NullObjectID.NULL_28972;
- public static final int TAVERLEY_STONE_CIRCLE = NullObjectID.NULL_28973;
- public static final int CATHERBY_BEEHIVE_FIELD = NullObjectID.NULL_28974;
- public static final int NEAR_THE_PARROTS_IN_ARDOUGNE_ZOO = NullObjectID.NULL_28975;
- public static final int ROAD_JUNCTION_NORTH_OF_RIMMINGTON = NullObjectID.NULL_28976;
- public static final int OUTSIDE_THE_FISHING_GUILD = NullObjectID.NULL_28977;
- public static final int OUTSIDE_KEEP_LE_FAYE = NullObjectID.NULL_28978;
- public static final int ROAD_JUNCTION_SOUTH_OF_SINCLAIR_MANSION = NullObjectID.NULL_28979;
- public static final int OUTSIDE_THE_DIGSITE_EXAM_CENTRE = NullObjectID.NULL_28980;
- public static final int NEAR_THE_SAWMILL_OPERATORS_BOOTH = NullObjectID.NULL_28981;
- public static final int MUBARIZS_ROOM_AT_THE_DUEL_ARENA = NullObjectID.NULL_28982;
- public static final int OUTSIDE_VARROCK_PALACE_COURTYARD = NullObjectID.NULL_28983;
- public static final int NEAR_HERQUINS_SHOP_IN_FALADOR = NullObjectID.NULL_28984;
- public static final int SOUTH_OF_THE_GRAND_EXCHANGE = NullObjectID.NULL_28985;
- public static final int AUBURYS_SHOP_IN_VARROCK = NullObjectID.NULL_28986;
- public static final int CENTRE_OF_CANIFIS = NullObjectID.NULL_28987;
- public static final int MAUSOLEUM_OFF_THE_MORYTANIA_COAST = NullObjectID.NULL_28988;
- public static final int EAST_OF_THE_BARBARIAN_VILLAGE_BRIDGE = NullObjectID.NULL_28989;
- public static final int SOUTH_OF_THE_SHRINE_IN_TAI_BWO_WANNAI_VILLAGE = NullObjectID.NULL_28990;
- public static final int CASTLE_WARS_BANK = NullObjectID.NULL_28991;
- public static final int BARBARIAN_OUTPOST_OBSTACLE_COURSE = NullObjectID.NULL_28992;
- public static final int GNOME_STRONGHOLD_BALANCING_ROPE = NullObjectID.NULL_28993;
- public static final int OUTSIDE_YANILLE_BANK = NullObjectID.NULL_28994;
- public static final int OBSERVATORY = NullObjectID.NULL_28995;
- public static final int OGRE_CAGE_IN_KING_LATHAS_TRAINING_CAMP = NullObjectID.NULL_28996;
- public static final int DIGSITE = NullObjectID.NULL_28997;
- public static final int HICKTONS_ARCHERY_EMPORIUM = NullObjectID.NULL_28998;
- public static final int SHANTAY_PASS = NullObjectID.NULL_28999;
- public static final int LUMBRIDGE_SWAMP_CAVES = NullObjectID.NULL_29000;
- public static final int OUTSIDE_CATHERBY_BANK = NullObjectID.NULL_29001;
- public static final int OUTSIDE_THE_SEERS_VILLAGE_COURTHOUSE = NullObjectID.NULL_29002;
- public static final int OUTSIDE_HARRYS_FISHING_SHOP_IN_CATHERBY = NullObjectID.NULL_29003;
- public static final int TZHAAR_WEAPONS_STORE = NullObjectID.NULL_29004;
- public static final int NORTH_OF_EVIL_DAVES_HOUSE_IN_EDGEVILLE = NullObjectID.NULL_29005;
- public static final int WEST_OF_THE_SHAYZIEN_COMBAT_RING = NullObjectID.NULL_29006;
- public static final int ENTRANCE_OF_THE_ARCEUUS_LIBRARY = NullObjectID.NULL_29007;
- public static final int OUTSIDE_DRAYNOR_VILLAGE_JAIL = NullObjectID.NULL_29008;
- public static final int CHAOS_TEMPLE_IN_THE_SOUTHEASTERN_WILDERNESS = NullObjectID.NULL_29009;
- public static final int FISHING_GUILD_BANK = NullObjectID.NULL_29010;
- public static final int TOP_FLOOR_OF_THE_LIGHTHOUSE = NullObjectID.NULL_29011;
- public static final int OUTSIDE_THE_GREAT_PYRAMID_OF_SOPHANEM = NullObjectID.NULL_29012;
- public static final int NOTERAZZOS_SHOP_IN_THE_WILDERNESS = NullObjectID.NULL_29013;
- public static final int WEST_SIDE_OF_THE_KARAMJA_BANANA_PLANTATION = NullObjectID.NULL_29014;
- public static final int MOUNTAIN_CAMP_GOAT_ENCLOSURE = NullObjectID.NULL_29015;
- public static final int GNOME_GLIDER_ON_WHITE_WOLF_MOUNTAIN = NullObjectID.NULL_29016;
- public static final int SHILO_VILLAGE_BANK = NullObjectID.NULL_29017;
- public static final int INSIDE_THE_DIGSITE_EXAM_CENTRE = NullObjectID.NULL_29018;
- public static final int NORTHEAST_CORNER_OF_THE_KHARAZI_JUNGLE = NullObjectID.NULL_29019;
- public static final int VOLCANO_IN_THE_NORTHEASTERN_WILDERNESS = NullObjectID.NULL_29020;
- public static final int IN_THE_MIDDLE_OF_JIGGIG = NullObjectID.NULL_29021;
- public static final int AGILITY_PYRAMID = NullObjectID.NULL_29022;
- public static final int HOSIDIUS_MESS = NullObjectID.NULL_29023;
- public static final int CHAPEL_IN_WEST_ARDOUGNE = NullObjectID.NULL_29024;
- public static final int NEAR_A_RUNITE_ROCK_IN_THE_FREMENNIK_ISLES = NullObjectID.NULL_29025;
- public static final int NEAR_A_LADDER_IN_THE_WILDERNESS_LAVA_MAZE = NullObjectID.NULL_29026;
- public static final int ENTRANCE_OF_THE_CAVE_OF_DAMIS = NullObjectID.NULL_29027;
- public static final int WARRIORS_GUILD_BANK = NullObjectID.NULL_29028;
- public static final int SOUTHEAST_CORNER_OF_THE_MONASTERY = NullObjectID.NULL_29029;
- public static final int SOUTHEAST_CORNER_OF_THE_FISHING_PLATFORM = NullObjectID.NULL_29030;
- public static final int OUTSIDE_THE_SLAYER_TOWER_GARGOYLE_ROOM = NullObjectID.NULL_29031;
- public static final int ON_TOP_OF_TROLLHEIM_MOUNTAIN = NullObjectID.NULL_29032;
- public static final int FOUNTAIN_OF_HEROES = NullObjectID.NULL_29033;
- public static final int ENTRANCE_OF_THE_CAVERN_UNDER_THE_WHIRLPOOL = NullObjectID.NULL_29034;
- public static final int HALFWAY_DOWN_TROLLWEISS_MOUNTAIN = NullObjectID.NULL_29035;
- public static final int SHAYZIEN_WAR_TENT = NullObjectID.NULL_29036;
- public static final int OUTSIDE_THE_LEGENDS_GUILD_DOOR = NullObjectID.NULL_29037;
- public static final int NEAR_THE_GEM_STALL_IN_ARDOUGNE_MARKET = NullObjectID.NULL_29038;
- public static final int OUTSIDE_THE_BAR_BY_THE_FIGHT_ARENA = NullObjectID.NULL_29039;
- public static final int SOUTHEAST_CORNER_OF_LAVA_DRAGON_ISLE = NullObjectID.NULL_29040;
- public static final int NEAR_THE_PIER_IN_ZULANDRA = NullObjectID.NULL_29041;
- public static final int BARROWS_CHEST = NullObjectID.NULL_29042;
- public static final int WELL_OF_VOYAGE = NullObjectID.NULL_29043;
- public static final int NORTHERN_WALL_OF_CASTLE_DRAKAN = NullObjectID.NULL_29044;
- public static final int _7TH_CHAMBER_OF_JALSAVRAH = NullObjectID.NULL_29045;
- public static final int SOUL_ALTAR = NullObjectID.NULL_29046;
- public static final int WARRIORS_GUILD_BANK_29047 = NullObjectID.NULL_29047;
- public static final int ENTRANA_CHAPEL = NullObjectID.NULL_29048;
- public static final int TZHAAR_GEM_STORE = NullObjectID.NULL_29049;
- public static final int TENT_IN_LORD_IORWERTHS_ENCAMPMENT = NullObjectID.NULL_29050;
- public static final int OUTSIDE_MUDKNUCKLES_HUT = NullObjectID.NULL_29051;
- public static final int CENTRE_OF_THE_CATACOMBS_OF_KOUREND = NullObjectID.NULL_29052;
- public static final int KING_BLACK_DRAGONS_LAIR = NullObjectID.NULL_29053;
- public static final int OUTSIDE_KRIL_TSUTSAROTHS_ROOM = NullObjectID.NULL_29054;
- public static final int BY_THE_BEAR_CAGE_IN_VARROCK_PALACE_GARDENS = NullObjectID.NULL_29055;
- public static final int OUTSIDE_THE_WILDERNESS_AXE_HUT = NullObjectID.NULL_29056;
- public static final int TOP_FLOOR_OF_THE_YANILLE_WATCHTOWER = NullObjectID.NULL_29057;
- public static final int DEATH_ALTAR = NullObjectID.NULL_29058;
- public static final int BEHIND_MISS_SCHISM_IN_DRAYNOR_VILLAGE = NullObjectID.NULL_29059;
- public static final int NORTHWESTERN_CORNER_OF_THE_ENCHANTED_VALLEY = NullObjectID.NULL_29060;
- public static final int NORTH_OF_MOUNT_KARUULM = NullObjectID.NULL_34647;
- public static final int GYPSY_TENT_ENTRANCE = NullObjectID.NULL_34736;
- public static final int FINE_CLOTHES_ENTRANCE = NullObjectID.NULL_34737;
- public static final int BOB_AXES_ENTRANCE = NullObjectID.NULL_34738;
+ NEAR_A_SHED_IN_LUMBRIDGE_SWAMP(NullObjectID.NULL_28958, new WorldPoint(3201, 3171, 0)),
+ ON_THE_BRIDGE_TO_THE_MISTHALIN_WIZARDS_TOWER(NullObjectID.NULL_28959, new WorldPoint(3115, 3194, 1)),
+ DRAYNOR_VILLAGE_MARKET(NullObjectID.NULL_28960, new WorldPoint(3083, 3254, 0)),
+ LIMESTONE_MINE(NullObjectID.NULL_28961, new WorldPoint(3373, 3498, 0)),
+ OUTSIDE_THE_LEGENDS_GUILD_GATES(NullObjectID.NULL_28962, new WorldPoint(2735, 3350, 0)),
+ MUDSKIPPER_POINT(NullObjectID.NULL_28963, new WorldPoint(2988, 3111, 0)),
+ NEAR_THE_ENTRANA_FERRY_IN_PORT_SARIM(NullObjectID.NULL_28964, new WorldPoint(3050, 3237, 1)),
+ AL_KHARID_SCORPION_MINE(NullObjectID.NULL_28965, new WorldPoint(3303, 3289, 0)),
+ DRAYNOR_MANOR_BY_THE_FOUNTAIN(NullObjectID.NULL_28966, new WorldPoint(3089, 3331, 0)),
+ WHEAT_FIELD_NEAR_THE_LUMBRIDGE_WINDMILL(NullObjectID.NULL_28967, new WorldPoint(3163, 3297, 0)),
+ CROSSROADS_NORTH_OF_DRAYNOR_VILLAGE(NullObjectID.NULL_28968, new WorldPoint(3111, 3289, 0)),
+ RIMMINGTON_MINE(NullObjectID.NULL_28969, new WorldPoint(2976, 3239, 0)),
+ VARROCK_PALACE_LIBRARY(NullObjectID.NULL_28970, new WorldPoint(3214, 3490, 0)),
+ UPSTAIRS_IN_THE_ARDOUGNE_WINDMILL(NullObjectID.NULL_28971, new WorldPoint(2635, 3386, 2)),
+ OUTSIDE_THE_FALADOR_PARTY_ROOM(NullObjectID.NULL_28972, new WorldPoint(3043, 3371, 0)),
+ TAVERLEY_STONE_CIRCLE(NullObjectID.NULL_28973, new WorldPoint(2924, 3477, 0)),
+ CATHERBY_BEEHIVE_FIELD(NullObjectID.NULL_28974, new WorldPoint(2764, 3438, 0)),
+ NEAR_THE_PARROTS_IN_ARDOUGNE_ZOO(NullObjectID.NULL_28975, new WorldPoint(2608, 3284, 0)),
+ ROAD_JUNCTION_NORTH_OF_RIMMINGTON(NullObjectID.NULL_28976, new WorldPoint(2981, 3278, 0)),
+ OUTSIDE_THE_FISHING_GUILD(NullObjectID.NULL_28977, new WorldPoint(2608, 3393, 0)),
+ OUTSIDE_KEEP_LE_FAYE(NullObjectID.NULL_28978, new WorldPoint(2756, 3399, 0)),
+ ROAD_JUNCTION_SOUTH_OF_SINCLAIR_MANSION(NullObjectID.NULL_28979, new WorldPoint(2735, 3534, 0)),
+ OUTSIDE_THE_DIGSITE_EXAM_CENTRE(NullObjectID.NULL_28980, new WorldPoint(3353, 3343, 0)),
+ NEAR_THE_SAWMILL_OPERATORS_BOOTH(NullObjectID.NULL_28981, new WorldPoint(3298, 3490, 0)),
+ MUBARIZS_ROOM_AT_THE_DUEL_ARENA(NullObjectID.NULL_28982, new WorldPoint(3316, 3242, 0)),
+ OUTSIDE_VARROCK_PALACE_COURTYARD(NullObjectID.NULL_28983, new WorldPoint(3211, 3456, 0)),
+ NEAR_HERQUINS_SHOP_IN_FALADOR(NullObjectID.NULL_28984, new WorldPoint(2941, 3339, 0)),
+ SOUTH_OF_THE_GRAND_EXCHANGE(NullObjectID.NULL_28985, new WorldPoint(3159, 3464, 0)),
+ AUBURYS_SHOP_IN_VARROCK(NullObjectID.NULL_28986, new WorldPoint(3252, 3404, 0)),
+ CENTRE_OF_CANIFIS(NullObjectID.NULL_28987, new WorldPoint(3491, 3489, 0)),
+ MAUSOLEUM_OFF_THE_MORYTANIA_COAST(NullObjectID.NULL_28988, new WorldPoint(3500, 3575, 0)),
+ EAST_OF_THE_BARBARIAN_VILLAGE_BRIDGE(NullObjectID.NULL_28989, new WorldPoint(3110, 3422, 0)),
+ SOUTH_OF_THE_SHRINE_IN_TAI_BWO_WANNAI_VILLAGE(NullObjectID.NULL_28990, new WorldPoint(2802, 3081, 0)),
+ CASTLE_WARS_BANK(NullObjectID.NULL_28991, new WorldPoint(2444, 3093, 0)),
+ BARBARIAN_OUTPOST_OBSTACLE_COURSE(NullObjectID.NULL_28992, new WorldPoint(2541, 3550, 0)),
+ GNOME_STRONGHOLD_BALANCING_ROPE(NullObjectID.NULL_28993, new WorldPoint(2473, 3418, 2)),
+ OUTSIDE_YANILLE_BANK(NullObjectID.NULL_28994, new WorldPoint(2603, 3091, 0)),
+ OBSERVATORY(NullObjectID.NULL_28995, new WorldPoint(2439, 3166, 0)),
+ OGRE_CAGE_IN_KING_LATHAS_TRAINING_CAMP(NullObjectID.NULL_28996, new WorldPoint(2533, 3377, 0)),
+ DIGSITE(NullObjectID.NULL_28997, new WorldPoint(3370, 3420, 0)),
+ HICKTONS_ARCHERY_EMPORIUM(NullObjectID.NULL_28998, new WorldPoint(2825, 3441, 0)),
+ SHANTAY_PASS(NullObjectID.NULL_28999, new WorldPoint(3308, 3125, 0)),
+ LUMBRIDGE_SWAMP_CAVES(NullObjectID.NULL_29000, new WorldPoint(3222, 9584, 0), new WorldPoint(3167, 9570, 0)),
+ OUTSIDE_CATHERBY_BANK(NullObjectID.NULL_29001, new WorldPoint(2807, 3437, 0)),
+ OUTSIDE_THE_SEERS_VILLAGE_COURTHOUSE(NullObjectID.NULL_29002, new WorldPoint(2731, 3475, 0)),
+ OUTSIDE_HARRYS_FISHING_SHOP_IN_CATHERBY(NullObjectID.NULL_29003, new WorldPoint(2837, 3436, 0)),
+ TZHAAR_WEAPONS_STORE(NullObjectID.NULL_29004, new WorldPoint(2479, 5146, 0)),
+ NORTH_OF_EVIL_DAVES_HOUSE_IN_EDGEVILLE(NullObjectID.NULL_29005, new WorldPoint(3077, 3503, 0)),
+ WEST_OF_THE_SHAYZIEN_COMBAT_RING(NullObjectID.NULL_29006, new WorldPoint(1534, 3591, 0)),
+ ENTRANCE_OF_THE_ARCEUUS_LIBRARY(NullObjectID.NULL_29007, new WorldPoint(1642, 3809, 0)),
+ OUTSIDE_DRAYNOR_VILLAGE_JAIL(NullObjectID.NULL_29008, new WorldPoint(3130, 3250, 0)),
+ CHAOS_TEMPLE_IN_THE_SOUTHEASTERN_WILDERNESS(NullObjectID.NULL_29009, new WorldPoint(3245, 3609, 0)),
+ FISHING_GUILD_BANK(NullObjectID.NULL_29010, new WorldPoint(2593, 3409, 0)),
+ TOP_FLOOR_OF_THE_LIGHTHOUSE(NullObjectID.NULL_29011, new WorldPoint(2512, 3640, 2)),
+ OUTSIDE_THE_GREAT_PYRAMID_OF_SOPHANEM(NullObjectID.NULL_29012, new WorldPoint(3291, 2780, 0)),
+ NOTERAZZOS_SHOP_IN_THE_WILDERNESS(NullObjectID.NULL_29013, new WorldPoint(3027, 3699, 0)),
+ WEST_SIDE_OF_THE_KARAMJA_BANANA_PLANTATION(NullObjectID.NULL_29014, new WorldPoint(2909, 3169, 0)),
+ MOUNTAIN_CAMP_GOAT_ENCLOSURE(NullObjectID.NULL_29015, new WorldPoint(2810, 3677, 0)),
+ GNOME_GLIDER_ON_WHITE_WOLF_MOUNTAIN(NullObjectID.NULL_29016, new WorldPoint(2849, 3496, 0)),
+ SHILO_VILLAGE_BANK(NullObjectID.NULL_29017, new WorldPoint(2853, 2952, 0)),
+ INSIDE_THE_DIGSITE_EXAM_CENTRE(NullObjectID.NULL_29018, new WorldPoint(3356, 3333, 0)),
+ NORTHEAST_CORNER_OF_THE_KHARAZI_JUNGLE(NullObjectID.NULL_29019, new WorldPoint(2952, 2932, 0)),
+ VOLCANO_IN_THE_NORTHEASTERN_WILDERNESS(NullObjectID.NULL_29020, new WorldPoint(3368, 3930, 0)),
+ IN_THE_MIDDLE_OF_JIGGIG(NullObjectID.NULL_29021, new WorldPoint(2478, 3048, 0)),
+ AGILITY_PYRAMID(NullObjectID.NULL_29022, new WorldPoint(3357, 2830, 0)),
+ HOSIDIUS_MESS(NullObjectID.NULL_29023, new WorldPoint(1648, 3631, 0)),
+ CHAPEL_IN_WEST_ARDOUGNE(NullObjectID.NULL_29024, new WorldPoint(2527, 3294, 0)),
+ NEAR_A_RUNITE_ROCK_IN_THE_FREMENNIK_ISLES(NullObjectID.NULL_29025, new WorldPoint(2374, 3847, 0)),
+ NEAR_A_LADDER_IN_THE_WILDERNESS_LAVA_MAZE(NullObjectID.NULL_29026, new WorldPoint(3069, 3862, 0)),
+ ENTRANCE_OF_THE_CAVE_OF_DAMIS(NullObjectID.NULL_29027, new WorldPoint(2629, 5070, 0)),
+ WARRIORS_GUILD_BANK(NullObjectID.NULL_29028, new WorldPoint(2844, 3537, 0)),
+ SOUTHEAST_CORNER_OF_THE_MONASTERY(NullObjectID.NULL_29029, new WorldPoint(3056, 3482, 0)),
+ SOUTHEAST_CORNER_OF_THE_FISHING_PLATFORM(NullObjectID.NULL_29030, new WorldPoint(2787, 3277, 1)),
+ OUTSIDE_THE_SLAYER_TOWER_GARGOYLE_ROOM(NullObjectID.NULL_29031, new WorldPoint(3423, 3534, 2)),
+ ON_TOP_OF_TROLLHEIM_MOUNTAIN(NullObjectID.NULL_29032, new WorldPoint(2886, 3676, 0)),
+ FOUNTAIN_OF_HEROES(NullObjectID.NULL_29033, new WorldPoint(2916, 9891, 0)),
+ ENTRANCE_OF_THE_CAVERN_UNDER_THE_WHIRLPOOL(NullObjectID.NULL_29034, new WorldPoint(1764, 5367, 1), new WorldPoint(1636, 5367, 1)),
+ HALFWAY_DOWN_TROLLWEISS_MOUNTAIN(NullObjectID.NULL_29035, new WorldPoint(2782, 3787, 0)),
+ SHAYZIEN_WAR_TENT(NullObjectID.NULL_29036, new WorldPoint(1550, 3541, 0)),
+ OUTSIDE_THE_LEGENDS_GUILD_DOOR(NullObjectID.NULL_29037, new WorldPoint(2727, 3371, 0)),
+ NEAR_THE_GEM_STALL_IN_ARDOUGNE_MARKET(NullObjectID.NULL_29038, new WorldPoint(2672, 3302, 0)),
+ OUTSIDE_THE_BAR_BY_THE_FIGHT_ARENA(NullObjectID.NULL_29039, new WorldPoint(2571, 3150, 0)),
+ SOUTHEAST_CORNER_OF_LAVA_DRAGON_ISLE(NullObjectID.NULL_29040, new WorldPoint(3228, 3830, 0)),
+ NEAR_THE_PIER_IN_ZULANDRA(NullObjectID.NULL_29041, new WorldPoint(2203, 3059, 0)),
+ BARROWS_CHEST(NullObjectID.NULL_29042, new WorldPoint(3547, 9690, 0)),
+ WELL_OF_VOYAGE(NullObjectID.NULL_29043, new WorldPoint(2006, 4709, 1)),
+ NORTHERN_WALL_OF_CASTLE_DRAKAN(NullObjectID.NULL_29044, new WorldPoint(3559, 3385, 1)),
+ _7TH_CHAMBER_OF_JALSAVRAH(NullObjectID.NULL_29045, new WorldPoint(1951, 4431, 0)),
+ SOUL_ALTAR(NullObjectID.NULL_29046, new WorldPoint(1810, 3855, 0)),
+ WARRIORS_GUILD_BANK_29047(NullObjectID.NULL_29047, new WorldPoint(2845, 3545, 0)),
+ ENTRANA_CHAPEL(NullObjectID.NULL_29048, new WorldPoint(2851, 3355, 0)),
+ TZHAAR_GEM_STORE(NullObjectID.NULL_29049, new WorldPoint(2466, 5150, 0)),
+ TENT_IN_LORD_IORWERTHS_ENCAMPMENT(NullObjectID.NULL_29050, new WorldPoint(2198, 3257, 0)),
+ OUTSIDE_MUDKNUCKLES_HUT(NullObjectID.NULL_29051, new WorldPoint(2959, 3502, 0)),
+ CENTRE_OF_THE_CATACOMBS_OF_KOUREND(NullObjectID.NULL_29052, new WorldPoint(1661, 10045, 0)),
+ KING_BLACK_DRAGONS_LAIR(NullObjectID.NULL_29053, new WorldPoint(2286, 4680, 0)),
+ OUTSIDE_KRIL_TSUTSAROTHS_ROOM(NullObjectID.NULL_29054, new WorldPoint(2931, 5337, 2)),
+ BY_THE_BEAR_CAGE_IN_VARROCK_PALACE_GARDENS(NullObjectID.NULL_29055, new WorldPoint(3232, 3494, 0)),
+ OUTSIDE_THE_WILDERNESS_AXE_HUT(NullObjectID.NULL_29056, new WorldPoint(3186, 3958, 0)),
+ TOP_FLOOR_OF_THE_YANILLE_WATCHTOWER(NullObjectID.NULL_29057, new WorldPoint(2930, 4718, 2)),
+ DEATH_ALTAR(NullObjectID.NULL_29058, new WorldPoint(2210, 4842, 0)),
+ BEHIND_MISS_SCHISM_IN_DRAYNOR_VILLAGE(NullObjectID.NULL_29059, new WorldPoint(3095, 3254, 0)),
+ NORTHWESTERN_CORNER_OF_THE_ENCHANTED_VALLEY(NullObjectID.NULL_29060, new WorldPoint(3022, 4517, 0)),
+ NORTH_OF_MOUNT_KARUULM(NullObjectID.NULL_34647, new WorldPoint(1308, 3840, 0)),
+ GYPSY_TENT_ENTRANCE(NullObjectID.NULL_34736, new WorldPoint(3206, 3422, 0)),
+ FINE_CLOTHES_ENTRANCE(NullObjectID.NULL_34737, new WorldPoint(3209, 3416, 0)),
+ BOB_AXES_ENTRANCE(NullObjectID.NULL_34738, new WorldPoint(3233, 3200, 0));
+
+ private final int objectId;
+ private final WorldPoint[] worldPoints;
+
+ STASHUnit(int objectId, WorldPoint... worldPoints)
+ {
+ this.objectId = objectId;
+ this.worldPoints = worldPoints;
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelOverlay.java
index 6e81a7a983..01586b9e2e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelOverlay.java
@@ -24,7 +24,6 @@
*/
package net.runelite.client.plugins.combatlevel;
-import com.google.common.annotations.VisibleForTesting;
import net.runelite.api.Client;
import net.runelite.api.Experience;
import net.runelite.api.Skill;
@@ -43,11 +42,6 @@ import java.awt.Rectangle;
class CombatLevelOverlay extends Overlay
{
private static final Color COMBAT_LEVEL_COLOUR = new Color(0xff981f);
- private static final double PRAY_MULT = 0.125;
- static final double ATT_STR_MULT = 0.325;
- static final double DEF_HP_MULT = 0.25;
- static final double RANGE_MAGIC_LEVEL_MULT = 1.5;
- static final double RANGE_MAGIC_MULT = 0.325;
private final Client client;
private final CombatLevelConfig config;
@@ -95,23 +89,20 @@ class CombatLevelOverlay extends Overlay
int defenceLevel = client.getRealSkillLevel(Skill.DEFENCE);
int hitpointsLevel = client.getRealSkillLevel(Skill.HITPOINTS);
int magicLevel = client.getRealSkillLevel(Skill.MAGIC);
- int rangedLevel = client.getRealSkillLevel(Skill.RANGED);
+ int rangeLevel = client.getRealSkillLevel(Skill.RANGED);
int prayerLevel = client.getRealSkillLevel(Skill.PRAYER);
- // calculate initial required numbers
- double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2));
- double melee = ATT_STR_MULT * (attackLevel + strengthLevel);
- double range = RANGE_MAGIC_MULT * Math.floor(rangedLevel * RANGE_MAGIC_LEVEL_MULT);
- double mage = RANGE_MAGIC_MULT * Math.floor(magicLevel * RANGE_MAGIC_LEVEL_MULT);
- double max = Math.max(melee, Math.max(range, mage));
-
// find the needed levels until level up
- int next = client.getLocalPlayer().getCombatLevel() + 1;
- int meleeNeed = calcLevels(base + melee, next, ATT_STR_MULT);
- int hpdefNeed = calcLevels(base + max, next, DEF_HP_MULT);
- int prayNeed = calcLevelsPray(base + max, next, prayerLevel);
- int rangeNeed = calcLevelsRM(rangedLevel, next, base);
- int magicNeed = calcLevelsRM(magicLevel, next, base);
+ int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
// create tooltip string
StringBuilder sb = new StringBuilder();
@@ -121,11 +112,11 @@ class CombatLevelOverlay extends Overlay
{
sb.append(meleeNeed).append(" Attack/Strength");
}
- if ((hitpointsLevel + defenceLevel + hpdefNeed) <= Experience.MAX_REAL_LEVEL * 2)
+ if ((hitpointsLevel + defenceLevel + hpDefNeed) <= Experience.MAX_REAL_LEVEL * 2)
{
- sb.append(hpdefNeed).append(" Defence/Hitpoints");
+ sb.append(hpDefNeed).append(" Defence/Hitpoints");
}
- if ((rangedLevel + rangeNeed) <= Experience.MAX_REAL_LEVEL)
+ if ((rangeLevel + rangeNeed) <= Experience.MAX_REAL_LEVEL)
{
sb.append(rangeNeed).append(" Ranged");
}
@@ -133,73 +124,11 @@ class CombatLevelOverlay extends Overlay
{
sb.append(magicNeed).append(" Magic");
}
- if ((prayerLevel + prayNeed) <= Experience.MAX_REAL_LEVEL)
+ if ((prayerLevel + prayerNeed) <= Experience.MAX_REAL_LEVEL)
{
- sb.append(prayNeed).append(" Prayer");
+ sb.append(prayerNeed).append(" Prayer");
}
return sb.toString();
}
- /**
- * Calculate skill levels required for increasing combat level, meant
- * for all combat skills besides prayer, ranged, and magic.
- * @param start initial value
- * @param end ending value (combat level + 1)
- * @param multiple how much adding one skill level will change combat
- * @return levels required for a specific skill to level up combat
- */
- @VisibleForTesting
- static int calcLevels(double start, int end, double multiple)
- {
- return (int) Math.ceil(calcMultipliedLevels(start, end, multiple));
- }
-
- /**
- * Calculate skill levels for increasing combat level, meant ONLY for the Prayer skill.
- *
- * Note: Prayer is a special case, only leveling up upon even level numbers. This is accounted
- * for in this function.
- *
- * @param start current combat level
- * @param end ending value (combat level + 1)
- * @param prayerLevel the player's current prayer level
- * @return Prayer levels required to level up combat
- */
- @VisibleForTesting
- static int calcLevelsPray(double start, int end, int prayerLevel)
- {
- int neededLevels = (int) Math.ceil(calcMultipliedLevels(start, end, PRAY_MULT));
-
- if (prayerLevel % 2 != 0)
- {
- neededLevels--;
- }
-
- if ((prayerLevel + neededLevels) % 2 != 0)
- {
- return neededLevels + 1;
- }
-
- return neededLevels;
- }
-
- private static double calcMultipliedLevels(double start, int end, double multiple)
- {
- return (end - start) / multiple;
- }
-
- /**
- * Calculate skill levels required for increasing combat level, meant
- * ONLY for Ranged and Magic skills.
- * @param start either the current ranged or magic level
- * @param end ending value (combat level + 1)
- * @param dhp defence, hitpoints, and prayer; this is the initial calculated "base" value
- * @return levels required for a specific skill to level up combat
- */
- @VisibleForTesting
- static int calcLevelsRM(double start, int end, double dhp)
- {
- start = Math.floor(start * RANGE_MAGIC_LEVEL_MULT) * RANGE_MAGIC_MULT;
- return (int) Math.ceil((end - dhp - start) / (RANGE_MAGIC_MULT * RANGE_MAGIC_LEVEL_MULT));
- }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java
index 93ee8e6412..a08497663d 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java
@@ -31,7 +31,11 @@ import java.time.Instant;
import javax.inject.Inject;
import lombok.AccessLevel;
import lombok.Getter;
+import static net.runelite.api.AnimationID.COOKING_WINE;
import net.runelite.api.ChatMessageType;
+import net.runelite.api.Client;
+import net.runelite.api.Player;
+import net.runelite.api.events.AnimationChanged;
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.GameTick;
import net.runelite.client.config.ConfigManager;
@@ -50,7 +54,8 @@ import net.runelite.client.ui.overlay.OverlayManager;
@PluginDependency(XpTrackerPlugin.class)
public class CookingPlugin extends Plugin
{
- private static final String WINE_MESSAGE = "You squeeze the grapes into the jug";
+ @Inject
+ private Client client;
@Inject
private CookingConfig config;
@@ -124,6 +129,27 @@ public class CookingPlugin extends Plugin
}
}
+ @Subscribe
+ public void onAnimationChanged(AnimationChanged animationChanged)
+ {
+ Player localPlayer = client.getLocalPlayer();
+
+ if (localPlayer != animationChanged.getActor())
+ {
+ return;
+ }
+
+ if (localPlayer.getAnimation() == COOKING_WINE && config.fermentTimer())
+ {
+ if (fermentTimerSession == null)
+ {
+ fermentTimerSession = new FermentTimerSession();
+ }
+
+ fermentTimerSession.updateLastWineMakingAction();
+ }
+ }
+
@Subscribe
public void onChatMessage(ChatMessage event)
{
@@ -134,22 +160,11 @@ public class CookingPlugin extends Plugin
final String message = event.getMessage();
- if (message.startsWith(WINE_MESSAGE) && config.fermentTimer())
- {
- if (fermentTimerSession == null)
- {
- fermentTimerSession = new FermentTimerSession();
- }
-
- fermentTimerSession.updateLastWineMakingAction();
- }
-
if (message.startsWith("You successfully cook")
|| message.startsWith("You successfully bake")
|| message.startsWith("You manage to cook")
|| message.startsWith("You roast a")
- || message.startsWith("You cook")
- || message.startsWith(WINE_MESSAGE))
+ || message.startsWith("You cook"))
{
if (cookingSession == null)
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java
index 275aa31d24..84667abcf3 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017, Devin French
+ * Copyright (c) 2019, Aleios
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -244,11 +245,40 @@ public interface ItemChargeConfig extends Config
return true;
}
+ @ConfigItem(
+ keyName = "showExplorerRingCharges",
+ name = "Show Explorer's Ring Alch Charges",
+ description = "Configures if explorer's ring alchemy charges are shown",
+ position = 17
+ )
+ default boolean showExplorerRingCharges()
+ {
+ return true;
+ }
+
+ @ConfigItem(
+ keyName = "explorerRing",
+ name = "",
+ description = "",
+ hidden = true
+ )
+ default int explorerRing()
+ {
+ return -1;
+ }
+
+ @ConfigItem(
+ keyName = "explorerRing",
+ name = "",
+ description = ""
+ )
+ void explorerRing(int explorerRing);
+
@ConfigItem(
keyName = "showInfoboxes",
name = "Show Infoboxes",
description = "Configures whether to show an infobox equipped charge items",
- position = 17
+ position = 18
)
default boolean showInfoboxes()
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java
index 5082ab2ccd..2c8220e1a6 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017, Seth
+ * Copyright (c) 2019, Aleios
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -84,6 +85,15 @@ class ItemChargeOverlay extends WidgetItemOverlay
charges = config.bindingNecklace();
}
+ else if (itemId >= ItemID.EXPLORERS_RING_1 && itemId <= ItemID.EXPLORERS_RING_4)
+ {
+ if (!config.showExplorerRingCharges())
+ {
+ return;
+ }
+
+ charges = config.explorerRing();
+ }
else
{
ItemWithCharge chargeItem = ItemWithCharge.findItem(itemId);
@@ -119,6 +129,6 @@ class ItemChargeOverlay extends WidgetItemOverlay
{
return config.showTeleportCharges() || config.showDodgyCount() || config.showFungicideCharges()
|| config.showImpCharges() || config.showWateringCanCharges() || config.showWaterskinCharges()
- || config.showBellowCharges() || config.showAbyssalBraceletCharges();
+ || config.showBellowCharges() || config.showAbyssalBraceletCharges() || config.showExplorerRingCharges();
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java
index 3a6c44a0fb..d6b4417c55 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java
@@ -1,6 +1,7 @@
/*
* Copyright (c) 2017, Seth
* Copyright (c) 2018, Hydrox6
+ * Copyright (c) 2019, Aleios
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -38,10 +39,12 @@ import net.runelite.api.InventoryID;
import net.runelite.api.Item;
import net.runelite.api.ItemContainer;
import net.runelite.api.ItemID;
+import net.runelite.api.Varbits;
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.ConfigChanged;
import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.events.ScriptCallbackEvent;
+import net.runelite.api.events.VarbitChanged;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.Notifier;
@@ -75,6 +78,9 @@ public class ItemChargePlugin extends Plugin
private static final int MAX_DODGY_CHARGES = 10;
private static final int MAX_BINDING_CHARGES = 16;
+ private static final int MAX_EXPLORER_RING_CHARGES = 30;
+
+ private int lastExplorerRingCharge = -1;
@Inject
private Client client;
@@ -153,6 +159,11 @@ public class ItemChargePlugin extends Plugin
{
removeInfobox(ItemWithSlot.BINDING_NECKLACE);
}
+
+ if (!config.showExplorerRingCharges())
+ {
+ removeInfobox(ItemWithSlot.EXPLORER_RING);
+ }
}
@Subscribe
@@ -246,6 +257,11 @@ public class ItemChargePlugin extends Plugin
{
updateJewelleryInfobox(ItemWithSlot.BINDING_NECKLACE, items);
}
+
+ if (config.showExplorerRingCharges())
+ {
+ updateJewelleryInfobox(ItemWithSlot.EXPLORER_RING, items);
+ }
}
@Subscribe
@@ -263,6 +279,16 @@ public class ItemChargePlugin extends Plugin
}
}
+ @Subscribe
+ private void onVarbitChanged(VarbitChanged event)
+ {
+ int explorerRingCharge = client.getVar(Varbits.EXPLORER_RING_ALCHS);
+ if (lastExplorerRingCharge != explorerRingCharge)
+ {
+ updateExplorerRingCharges(explorerRingCharge);
+ }
+ }
+
private void updateDodgyNecklaceCharges(final int value)
{
config.dodgyNecklace(value);
@@ -297,6 +323,24 @@ public class ItemChargePlugin extends Plugin
}
}
+ private void updateExplorerRingCharges(final int value)
+ {
+ // Note: Varbit counts upwards. We count down from the maximum charges.
+ config.explorerRing(MAX_EXPLORER_RING_CHARGES - value);
+
+ if (config.showInfoboxes() && config.showExplorerRingCharges())
+ {
+ final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT);
+
+ if (itemContainer == null)
+ {
+ return;
+ }
+
+ updateJewelleryInfobox(ItemWithSlot.EXPLORER_RING, itemContainer.getItems());
+ }
+ }
+
private void checkDestroyWidget()
{
final int currentTick = client.getTickCount();
@@ -359,6 +403,10 @@ public class ItemChargePlugin extends Plugin
{
charges = config.bindingNecklace();
}
+ else if ((id >= ItemID.EXPLORERS_RING_1 && id <= ItemID.EXPLORERS_RING_4) && type == ItemWithSlot.EXPLORER_RING)
+ {
+ charges = config.explorerRing();
+ }
}
else if (itemWithCharge.getType() == type.getType())
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java
index d941bf0962..827858d4d4 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java
@@ -34,5 +34,6 @@ enum ItemChargeType
WATERCAN,
WATERSKIN,
DODGY_NECKLACE,
- BINDING_NECKLACE
+ BINDING_NECKLACE,
+ EXPLORER_RING
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java
index 4ec4aa36be..16c2b0fd1b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2019, Tomas Slusny
+ * Copyright (c) 2019, Aleios
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -35,6 +36,7 @@ enum ItemWithSlot
ABYSSAL_BRACELET(ItemChargeType.ABYSSAL_BRACELET, EquipmentInventorySlot.GLOVES),
DODGY_NECKLACE(ItemChargeType.DODGY_NECKLACE, EquipmentInventorySlot.AMULET),
BINDING_NECKLACE(ItemChargeType.BINDING_NECKLACE, EquipmentInventorySlot.AMULET),
+ EXPLORER_RING(ItemChargeType.EXPLORER_RING, EquipmentInventorySlot.RING),
TELEPORT(ItemChargeType.TELEPORT, EquipmentInventorySlot.WEAPON, EquipmentInventorySlot.AMULET, EquipmentInventorySlot.GLOVES, EquipmentInventorySlot.RING);
private final ItemChargeType type;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java
index 23ab63df16..58fc922c7b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java
@@ -162,6 +162,16 @@ public interface MenuEntrySwapperConfig extends Config
return FairyRingMode.LAST_DESTINATION;
}
+ @ConfigItem(
+ keyName = "swapHardWoodGrove",
+ name = "Hardwood Grove",
+ description = "Swap Quick-Pay(100) and Send-Parcel at Hardwood Grove"
+ )
+ default boolean swapHardWoodGrove()
+ {
+ return true;
+ }
+
@ConfigItem(
keyName = "swapHarpoon",
name = "Harpoon",
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java
index b164d10b86..9d6cfd3fba 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java
@@ -383,6 +383,11 @@ public class MenuEntrySwapperPlugin extends Plugin
swap("teleport", option, target, true);
}
+ if (config.swapHardWoodGrove() && target.contains("rionasta"))
+ {
+ swap("send-parcel", option, target, true);
+ }
+
if (config.swapBank())
{
swap("bank", option, target, true);
@@ -458,6 +463,10 @@ public class MenuEntrySwapperPlugin extends Plugin
{
swap("pay-toll(10gp)", option, target, true);
}
+ else if (config.swapHardWoodGrove() && option.equals("open") && target.equals("hardwood grove doors"))
+ {
+ swap("quick-pay(100)", option, target, true);
+ }
else if (config.swapTravel() && option.equals("inspect") && target.equals("trapdoor"))
{
swap("travel", option, target, true);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/musiclist/MusicListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/musiclist/MusicListPlugin.java
new file mode 100644
index 0000000000..61a40bd10e
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/musiclist/MusicListPlugin.java
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2019, Anthony Chen
+ * 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.musiclist;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.Client;
+import net.runelite.api.GameState;
+import net.runelite.api.ScriptID;
+import net.runelite.api.SoundEffectID;
+import net.runelite.api.SpriteID;
+import net.runelite.api.VarClientInt;
+import net.runelite.api.events.GameStateChanged;
+import net.runelite.api.events.VarClientIntChanged;
+import net.runelite.api.events.WidgetLoaded;
+import net.runelite.api.widgets.JavaScriptCallback;
+import net.runelite.api.widgets.Widget;
+import net.runelite.api.widgets.WidgetID;
+import net.runelite.api.widgets.WidgetInfo;
+import net.runelite.api.widgets.WidgetPositionMode;
+import net.runelite.api.widgets.WidgetType;
+import net.runelite.client.callback.ClientThread;
+import net.runelite.client.eventbus.Subscribe;
+import net.runelite.client.game.chatbox.ChatboxPanelManager;
+import net.runelite.client.game.chatbox.ChatboxTextInput;
+import net.runelite.client.plugins.Plugin;
+import net.runelite.client.plugins.PluginDescriptor;
+
+@PluginDescriptor(
+ name = "Music List",
+ description = "Adds search and filter for the music list"
+)
+public class MusicListPlugin extends Plugin
+{
+ @Inject
+ private Client client;
+
+ @Inject
+ private ClientThread clientThread;
+
+ @Inject
+ private ChatboxPanelManager chatboxPanelManager;
+
+ private ChatboxTextInput searchInput;
+
+ private Widget musicSearchButton;
+ private Widget musicFilterButton;
+
+ private Collection tracks;
+
+ private MusicState currentMusicFilter;
+
+ @Override
+ protected void startUp()
+ {
+ clientThread.invoke(this::addMusicButtons);
+ }
+
+ @Override
+ protected void shutDown()
+ {
+ Widget header = client.getWidget(WidgetInfo.MUSIC_WINDOW);
+ if (header != null)
+ {
+ header.deleteAllChildren();
+ }
+
+ tracks = null;
+ }
+
+ @Subscribe
+ public void onGameStateChanged(GameStateChanged gameStateChanged)
+ {
+ if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN)
+ {
+ currentMusicFilter = MusicState.ALL;
+ tracks = null;
+ }
+ }
+
+ @Subscribe
+ public void onWidgetLoaded(WidgetLoaded widgetLoaded)
+ {
+ if (widgetLoaded.getGroupId() == WidgetID.MUSIC_GROUP_ID)
+ {
+ addMusicButtons();
+ }
+ }
+
+ private void addMusicButtons()
+ {
+ Widget header = client.getWidget(WidgetInfo.MUSIC_WINDOW);
+
+ if (header == null)
+ {
+ return;
+ }
+
+ //Creation of the search and toggle status buttons
+ musicSearchButton = header.createChild(-1, WidgetType.GRAPHIC);
+ musicSearchButton.setSpriteId(SpriteID.GE_SEARCH);
+ musicSearchButton.setOriginalWidth(18);
+ musicSearchButton.setOriginalHeight(17);
+ musicSearchButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
+ musicSearchButton.setOriginalX(5);
+ musicSearchButton.setOriginalY(32);
+ musicSearchButton.setHasListener(true);
+ musicSearchButton.setAction(1, "Open");
+ musicSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch());
+ musicSearchButton.setName("Search");
+ musicSearchButton.revalidate();
+
+ musicFilterButton = header.createChild(-1, WidgetType.GRAPHIC);
+ musicFilterButton.setSpriteId(SpriteID.MINIMAP_ORB_HITPOINTS);
+ musicFilterButton.setOriginalWidth(15);
+ musicFilterButton.setOriginalHeight(15);
+ musicFilterButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
+ musicFilterButton.setOriginalX(25);
+ musicFilterButton.setOriginalY(34);
+ musicFilterButton.setHasListener(true);
+ musicFilterButton.setAction(1, "Toggle");
+ musicFilterButton.setOnOpListener((JavaScriptCallback) e -> toggleStatus());
+ musicFilterButton.setName("All");
+ musicFilterButton.revalidate();
+ }
+
+ @Subscribe
+ public void onVarClientIntChanged(VarClientIntChanged varClientIntChanged)
+ {
+ if (isChatboxOpen() && !isOnMusicTab())
+ {
+ chatboxPanelManager.close();
+ }
+ }
+
+ private boolean isOnMusicTab()
+ {
+ return client.getVar(VarClientInt.INVENTORY_TAB) == 13;
+ }
+
+ private boolean isChatboxOpen()
+ {
+ return searchInput != null && chatboxPanelManager.getCurrentInput() == searchInput;
+ }
+
+ private String getChatboxInput()
+ {
+ return isChatboxOpen() ? searchInput.getValue() : "";
+ }
+
+ private void toggleStatus()
+ {
+ MusicState[] states = MusicState.values();
+ currentMusicFilter = states[(currentMusicFilter.ordinal() + 1) % states.length];
+ musicFilterButton.setSpriteId(currentMusicFilter.getSpriteID());
+ musicFilterButton.setName(currentMusicFilter.getName());
+ updateFilter(getChatboxInput());
+ client.playSoundEffect(SoundEffectID.UI_BOOP);
+ }
+
+ private void openSearch()
+ {
+ updateFilter("");
+ client.playSoundEffect(SoundEffectID.UI_BOOP);
+ musicSearchButton.setAction(1, "Close");
+ musicSearchButton.setOnOpListener((JavaScriptCallback) e -> closeSearch());
+ searchInput = chatboxPanelManager.openTextInput("Search music list")
+ .onChanged(s -> clientThread.invokeLater(() -> updateFilter(s.trim())))
+ .onClose(() ->
+ {
+ clientThread.invokeLater(() -> updateFilter(""));
+ musicSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch());
+ musicSearchButton.setAction(1, "Open");
+ })
+ .build();
+ }
+
+ private void closeSearch()
+ {
+ updateFilter("");
+ chatboxPanelManager.close();
+ client.playSoundEffect(SoundEffectID.UI_BOOP);
+ }
+
+ private void updateFilter(String input)
+ {
+ final Widget container = client.getWidget(WidgetInfo.MUSIC_WINDOW);
+ final Widget musicList = client.getWidget(WidgetInfo.MUSIC_TRACK_LIST);
+
+ if (container == null || musicList == null)
+ {
+ return;
+ }
+
+ String filter = input.toLowerCase();
+ updateList(musicList, filter);
+ }
+
+ private void updateList(Widget musicList, String filter)
+ {
+ if (tracks == null)
+ {
+ tracks = Arrays.stream(musicList.getDynamicChildren())
+ .sorted(Comparator.comparing(Widget::getRelativeY))
+ .collect(Collectors.toList());
+ }
+
+ tracks.forEach(w -> w.setHidden(true));
+
+ Collection relevantTracks = tracks.stream()
+ .filter(w -> w.getText().toLowerCase().contains(filter))
+ .filter(w -> currentMusicFilter == MusicState.ALL || w.getTextColor() == currentMusicFilter.getColor())
+ .collect(Collectors.toList());
+
+ // Original music track list has a little offset
+ int y = 3;
+
+ for (Widget track : relevantTracks)
+ {
+ track.setHidden(false);
+ track.setOriginalY(y);
+ track.revalidate();
+
+ y += track.getHeight();
+ }
+
+ y += 3;
+
+ int newHeight = 0;
+
+ if (musicList.getScrollHeight() > 0)
+ {
+ newHeight = (musicList.getScrollY() * y) / musicList.getScrollHeight();
+ }
+
+ musicList.setScrollHeight(y);
+ musicList.revalidateScroll();
+
+ client.runScript(
+ ScriptID.UPDATE_SCROLLBAR,
+ WidgetInfo.MUSIC_TRACK_SCROLLBAR.getId(),
+ WidgetInfo.MUSIC_TRACK_LIST.getId(),
+ newHeight
+ );
+ }
+
+ @AllArgsConstructor
+ @Getter
+ private enum MusicState
+ {
+ NOT_FOUND(0xff0000, "Locked", SpriteID.MINIMAP_ORB_HITPOINTS),
+ FOUND(0xdc10d, "Unlocked", SpriteID.MINIMAP_ORB_HITPOINTS_POISON),
+ ALL(0, "All", SpriteID.MINIMAP_ORB_PRAYER);
+
+ private final int color;
+ private final String name;
+ private final int spriteID;
+ }
+}
diff --git a/runescape-api/src/main/java/net/runelite/mapping/Protect.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/HitpointsDisplayStyle.java
similarity index 72%
rename from runescape-api/src/main/java/net/runelite/mapping/Protect.java
rename to runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/HitpointsDisplayStyle.java
index a5c780a94d..0ed6649f16 100644
--- a/runescape-api/src/main/java/net/runelite/mapping/Protect.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/HitpointsDisplayStyle.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Lotto
+ * Copyright (c) 2019, Sean Dewar
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -22,19 +22,11 @@
* (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.mapping;
+package net.runelite.client.plugins.opponentinfo;
-import java.lang.annotation.Documented;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Used to indicate a method can only be called from within mixins.
- * Calling methods annotated with this annotation outside mixins results in a AbstractMethodError.
- * Only works in net.runelite.rs.api.*
- */
-@Documented
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Protect
+public enum HitpointsDisplayStyle
{
+ HITPOINTS,
+ PERCENTAGE,
+ BOTH;
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java
index 82a7c5f214..07a84629c8 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java
@@ -43,14 +43,14 @@ public interface OpponentInfoConfig extends Config
}
@ConfigItem(
- keyName = "showPercent",
- name = "Show percent",
- description = "Shows hitpoints as a percentage even if hitpoints are known",
+ keyName = "hitpointsDisplayStyle",
+ name = "Hitpoints display style",
+ description = "Show opponent's hitpoints as a value (if known), percentage, or both",
position = 1
)
- default boolean showPercent()
+ default HitpointsDisplayStyle hitpointsDisplayStyle()
{
- return false;
+ return HitpointsDisplayStyle.HITPOINTS;
}
@ConfigItem(
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java
index 63432efa20..f7945a5646 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java
@@ -164,7 +164,10 @@ class OpponentInfoOverlay extends Overlay
progressBarComponent.setBackgroundColor(HP_RED);
progressBarComponent.setForegroundColor(HP_GREEN);
- if (lastMaxHealth != null && !opponentInfoConfig.showPercent())
+ final HitpointsDisplayStyle displayStyle = opponentInfoConfig.hitpointsDisplayStyle();
+
+ if ((displayStyle == HitpointsDisplayStyle.HITPOINTS || displayStyle == HitpointsDisplayStyle.BOTH)
+ && lastMaxHealth != null)
{
// This is the reverse of the calculation of healthRatio done by the server
// which is: healthRatio = 1 + (healthScale - 1) * health / maxHealth (if health > 0, 0 otherwise)
@@ -194,11 +197,15 @@ class OpponentInfoOverlay extends Overlay
// so we know nothing about the upper limit except that it can't be higher than maxHealth
maxHealth = lastMaxHealth;
}
- // Take the average of min and max possible healts
+ // Take the average of min and max possible healths
health = (minHealth + maxHealth + 1) / 2;
}
- progressBarComponent.setLabelDisplayMode(ProgressBarComponent.LabelDisplayMode.FULL);
+ // Show both the hitpoint and percentage values if enabled in the config
+ final ProgressBarComponent.LabelDisplayMode progressBarDisplayMode = displayStyle == HitpointsDisplayStyle.BOTH ?
+ ProgressBarComponent.LabelDisplayMode.BOTH : ProgressBarComponent.LabelDisplayMode.FULL;
+
+ progressBarComponent.setLabelDisplayMode(progressBarDisplayMode);
progressBarComponent.setMaximum(lastMaxHealth);
progressBarComponent.setValue(health);
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java
index 2ebf2a4318..0a18b8d2c9 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java
@@ -25,6 +25,13 @@
package net.runelite.client.plugins.questlist;
import com.google.common.collect.ImmutableList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.EnumMap;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
@@ -51,13 +58,6 @@ import net.runelite.client.game.chatbox.ChatboxTextInput;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.Text;
-import javax.inject.Inject;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.EnumMap;
-import java.util.List;
-import java.util.stream.Collectors;
@PluginDescriptor(
name = "Quest List",
@@ -93,6 +93,22 @@ public class QuestListPlugin extends Plugin
private QuestState currentFilterState;
+ @Override
+ protected void startUp()
+ {
+ clientThread.invoke(this::addQuestButtons);
+ }
+
+ @Override
+ protected void shutDown()
+ {
+ Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX);
+ if (header != null)
+ {
+ header.deleteAllChildren();
+ }
+ }
+
@Subscribe
public void onGameStateChanged(GameStateChanged e)
{
@@ -110,6 +126,11 @@ public class QuestListPlugin extends Plugin
return;
}
+ addQuestButtons();
+ }
+
+ private void addQuestButtons()
+ {
Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX);
if (header != null)
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java
index aa4027b98e..ec32d63379 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java
@@ -187,6 +187,11 @@ public class FarmingTracker
PatchState state = patch.getImplementation().forVarbitValue(value);
+ if (state == null)
+ {
+ return null;
+ }
+
int stage = state.getStage();
int stages = state.getStages();
int tickrate = state.getTickRate() * 60;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingWorld.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingWorld.java
index 865c0e5517..d74d9027f3 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingWorld.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingWorld.java
@@ -139,28 +139,28 @@ class FarmingWorld
new FarmingPatch("", Varbits.FARMING_4772, PatchImplementation.HERB)
));
- add(new FarmingRegion("Kourend", 7222,
+ add(new FarmingRegion("Kourend", 6967,
new FarmingPatch("North East", Varbits.FARMING_4771, PatchImplementation.ALLOTMENT),
new FarmingPatch("South West", Varbits.FARMING_4772, PatchImplementation.ALLOTMENT),
new FarmingPatch("", Varbits.FARMING_4773, PatchImplementation.FLOWER),
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB)
));
add(new FarmingRegion("Kourend", 6711,
- new FarmingPatch("", Varbits.FARMING_4771, PatchImplementation.SPIRIT_TREE)
+ new FarmingPatch("", Varbits.FARMING_7904, PatchImplementation.SPIRIT_TREE)
));
add(new FarmingRegion("Kourend", 7223,
- new FarmingPatch("West 1", Varbits.GRAPES_4953, PatchImplementation.GRAPES),
- new FarmingPatch("West 2", Varbits.GRAPES_4954, PatchImplementation.GRAPES),
- new FarmingPatch("West 3", Varbits.GRAPES_4955, PatchImplementation.GRAPES),
- new FarmingPatch("West 4", Varbits.GRAPES_4956, PatchImplementation.GRAPES),
- new FarmingPatch("West 5", Varbits.GRAPES_4957, PatchImplementation.GRAPES),
- new FarmingPatch("West 6", Varbits.GRAPES_4958, PatchImplementation.GRAPES),
- new FarmingPatch("East 1", Varbits.GRAPES_4959, PatchImplementation.GRAPES),
- new FarmingPatch("East 2", Varbits.GRAPES_4960, PatchImplementation.GRAPES),
- new FarmingPatch("East 3", Varbits.GRAPES_4961, PatchImplementation.GRAPES),
- new FarmingPatch("East 4", Varbits.GRAPES_4962, PatchImplementation.GRAPES),
- new FarmingPatch("East 5", Varbits.GRAPES_4963, PatchImplementation.GRAPES),
- new FarmingPatch("East 6", Varbits.GRAPES_4964, PatchImplementation.GRAPES)
+ new FarmingPatch("East 1", Varbits.GRAPES_4953, PatchImplementation.GRAPES),
+ new FarmingPatch("East 2", Varbits.GRAPES_4954, PatchImplementation.GRAPES),
+ new FarmingPatch("East 3", Varbits.GRAPES_4955, PatchImplementation.GRAPES),
+ new FarmingPatch("East 4", Varbits.GRAPES_4956, PatchImplementation.GRAPES),
+ new FarmingPatch("East 5", Varbits.GRAPES_4957, PatchImplementation.GRAPES),
+ new FarmingPatch("East 6", Varbits.GRAPES_4958, PatchImplementation.GRAPES),
+ new FarmingPatch("West 1", Varbits.GRAPES_4959, PatchImplementation.GRAPES),
+ new FarmingPatch("West 2", Varbits.GRAPES_4960, PatchImplementation.GRAPES),
+ new FarmingPatch("West 3", Varbits.GRAPES_4961, PatchImplementation.GRAPES),
+ new FarmingPatch("West 4", Varbits.GRAPES_4962, PatchImplementation.GRAPES),
+ new FarmingPatch("West 5", Varbits.GRAPES_4963, PatchImplementation.GRAPES),
+ new FarmingPatch("West 6", Varbits.GRAPES_4964, PatchImplementation.GRAPES)
));
add(new FarmingRegion("Lletya", 9265,
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PatchImplementation.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PatchImplementation.java
index 8bec7a88a6..1aab9a7320 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PatchImplementation.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PatchImplementation.java
@@ -24,6 +24,7 @@
*/
package net.runelite.client.plugins.timetracking.farming;
+import javax.annotation.Nullable;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.runelite.client.plugins.timetracking.Tab;
@@ -2576,6 +2577,7 @@ public enum PatchImplementation
}
};
+ @Nullable
abstract PatchState forVarbitValue(int value);
private final Tab tab;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java
index b877be8810..2e0852d6c0 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java
@@ -115,7 +115,7 @@ enum TeleportLocationData
// Misc
XERICS_LOOKOUT(TeleportType.OTHER, "Xeric's Talisman", "Xeric's Lookout", new WorldPoint(1576, 3528, 0), "xerics_talisman_teleport_icon.png"),
- XERICS_GLADE(TeleportType.OTHER, "Xeric's Talisman", "Xeric's Glade", new WorldPoint(1773, 3502, 0), "xerics_talisman_teleport_icon.png"),
+ XERICS_GLADE(TeleportType.OTHER, "Xeric's Talisman", "Xeric's Glade", new WorldPoint(1754, 3564, 0), "xerics_talisman_teleport_icon.png"),
XERICS_INFERNO(TeleportType.OTHER, "Xeric's Talisman", "Xeric's Inferno", new WorldPoint(1504, 3819, 0), "xerics_talisman_teleport_icon.png"),
XERICS_HEART(TeleportType.OTHER, "Xeric's Talisman", "Xeric's Heart", new WorldPoint(1641, 3670, 0), "xerics_talisman_teleport_icon.png"),
XERICS_HONOUR(TeleportType.OTHER, "Xeric's Talisman", "Xeric's Honour", new WorldPoint(1254, 3559, 0), "xerics_talisman_teleport_icon.png"),
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java
index 5ff11871e5..e64f398d07 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java
@@ -125,14 +125,30 @@ class XpInfoBoxOverlay extends Overlay
.right(StackFormatter.quantityToRSDecimalStack(rightNum, true))
.build();
- final LineComponent xpHour = LineComponent.builder()
- .left("XP/Hour:")
- .right(StackFormatter.quantityToRSDecimalStack(snapshot.getXpPerHour(), true))
+ final String bottemLeftStr;
+ final int bottomRightNum;
+
+ switch (config.onScreenDisplayModeBottom())
+ {
+ case ACTIONS_HOUR:
+ bottemLeftStr = snapshot.getActionType().getLabel() + "/Hour";
+ bottomRightNum = snapshot.getActionsPerHour();
+ break;
+ case XP_HOUR:
+ default:
+ bottemLeftStr = "XP/Hour";
+ bottomRightNum = snapshot.getXpPerHour();
+ break;
+ }
+
+ final LineComponent xpLineBottom = LineComponent.builder()
+ .left(bottemLeftStr + ":")
+ .right(StackFormatter.quantityToRSDecimalStack(bottomRightNum, true))
.build();
final SplitComponent xpSplit = SplitComponent.builder()
.first(xpLine)
- .second(xpHour)
+ .second(xpLineBottom)
.orientation(ComponentOrientation.VERTICAL)
.build();
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java
index d3ded4f54c..616844739b 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java
@@ -41,6 +41,13 @@ public interface XpTrackerConfig extends Config
ACTIONS_LEFT
}
+ @AllArgsConstructor
+ enum OnScreenDisplayModeBottom
+ {
+ XP_HOUR,
+ ACTIONS_HOUR,
+ }
+
@ConfigItem(
position = 0,
keyName = "hideMaxed",
@@ -88,11 +95,22 @@ public interface XpTrackerConfig extends Config
@ConfigItem(
position = 4,
keyName = "onScreenDisplayMode",
- name = "On-screen tracker display mode",
+ name = "On-screen tracker display mode (top)",
description = "Configures the information displayed in the first line of on-screen XP overlays"
)
default OnScreenDisplayMode onScreenDisplayMode()
{
return OnScreenDisplayMode.XP_GAINED;
}
+
+ @ConfigItem(
+ position = 4,
+ keyName = "onScreenDisplayModeBottom",
+ name = "On-screen tracker display mode (bottom)",
+ description = "Configures the information displayed in the second line of on-screen XP overlays"
+ )
+ default OnScreenDisplayModeBottom onScreenDisplayModeBottom()
+ {
+ return OnScreenDisplayModeBottom.XP_HOUR;
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java
index 56ba0799d2..fb16dda6d2 100644
--- a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java
+++ b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java
@@ -51,6 +51,7 @@ import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j;
+import net.runelite.api.Client;
import static net.runelite.client.rs.ClientUpdateCheckMode.AUTO;
import static net.runelite.client.rs.ClientUpdateCheckMode.NONE;
import static net.runelite.client.rs.ClientUpdateCheckMode.VANILLA;
@@ -220,6 +221,12 @@ public class ClientLoader
Applet rs = (Applet) clientClass.newInstance();
rs.setStub(new RSAppletStub(config));
+
+ if (rs instanceof Client)
+ {
+ log.info("client-patch {}", ((Client) rs).getBuildID());
+ }
+
return rs;
}
catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException
diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java
index cadced4e96..a891eaba41 100644
--- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java
+++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java
@@ -40,7 +40,8 @@ public class ProgressBarComponent implements LayoutableRenderableEntity
public enum LabelDisplayMode
{
PERCENTAGE,
- FULL
+ FULL,
+ BOTH
}
private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("0.0");
@@ -79,10 +80,13 @@ public class ProgressBarComponent implements LayoutableRenderableEntity
switch (labelDisplayMode)
{
case PERCENTAGE:
- textToWrite = DECIMAL_FORMAT.format(pc * 100d) + "%";
+ textToWrite = formatPercentageProgress(pc);
+ break;
+ case BOTH:
+ textToWrite = formatFullProgress(currentValue, maximum) + " (" + formatPercentageProgress(pc) + ")";
break;
default:
- textToWrite = DECIMAL_FORMAT_ABS.format(Math.floor(currentValue)) + "/" + maximum;
+ textToWrite = formatFullProgress(currentValue, maximum);
}
final int width = preferredSize.width;
@@ -126,4 +130,14 @@ public class ProgressBarComponent implements LayoutableRenderableEntity
bounds.setSize(dimension);
return dimension;
}
+
+ private static String formatFullProgress(double current, long maximum)
+ {
+ return DECIMAL_FORMAT_ABS.format(Math.floor(current)) + "/" + maximum;
+ }
+
+ private static String formatPercentageProgress(double ratio)
+ {
+ return DECIMAL_FORMAT.format(ratio * 100d) + "%";
+ }
}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json
index 15905e0a0c..0c53391ba7 100644
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json
+++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json
@@ -460,7 +460,7 @@
"level": 60,
"sprite": 354,
"name": "Bones To Peaches",
- "xp": 65
+ "xp": 35.5
},
{
"level": 61,
diff --git a/runelite-client/src/main/scripts/ChatBuilder.rs2asm b/runelite-client/src/main/scripts/ChatBuilder.rs2asm
index c30307da67..2e0bc1d37c 100644
--- a/runelite-client/src/main/scripts/ChatBuilder.rs2asm
+++ b/runelite-client/src/main/scripts/ChatBuilder.rs2asm
@@ -189,8 +189,10 @@ CHAT_FILTER:
sload 11 ; Load the message
iconst 1 ; Gets changed to 0 if message is blocked
iload 10 ; Load the messageType
+ iload 9 ; Load the id of the messageNode
sconst "chatFilterCheck"
runelite_callback
+ pop_int ; Pop the id of the messageNode
pop_int ; Pop the messageType
iconst 1 ; 2nd half of conditional
sstore 11 ; Override the message with our filtered message
diff --git a/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm b/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm
index 45b420248d..73badbb543 100644
--- a/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm
+++ b/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm
@@ -359,9 +359,11 @@ CHAT_FILTER:
sload 0 ; Load the message
iconst 1 ; Gets changed to 0 if message is blocked
iload 15 ; Load the messageType
+ iload 12 ; Load the id of the messageNode
sconst "chatFilterCheck"
- runelite_callback
- pop_int ; Pop the messageType
+ runelite_callback
+ pop_int ; Pop the id of the messageNode
+ pop_int ; Pop the messageType
iconst 1 ; 2nd half of conditional
sstore 0 ; Override the message with our filtered message
if_icmpeq LABEL327 ; Check if we are building this message
diff --git a/runelite-client/src/main/scripts/CommandScript.rs2asm b/runelite-client/src/main/scripts/CommandScript.rs2asm
index 0926703d6b..1c523d5aa2 100644
--- a/runelite-client/src/main/scripts/CommandScript.rs2asm
+++ b/runelite-client/src/main/scripts/CommandScript.rs2asm
@@ -37,6 +37,11 @@ LABEL20:
invoke 1972
iconst 1
if_icmpeq LABEL31
+ iconst 0 ; Modified to enable clanchat input
+ sconst "clanchatInput"
+ runelite_callback
+ iconst 1
+ if_icmpeq LABEL31 ; Compare to 1
jump LABEL37
LABEL31:
get_varc_int 41
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java
index 8f63169574..23196ff1cf 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java
@@ -38,6 +38,7 @@ import java.applet.Applet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
@@ -48,6 +49,8 @@ import net.runelite.api.Client;
import net.runelite.client.RuneLite;
import net.runelite.client.RuneLiteModule;
import net.runelite.client.eventbus.EventBus;
+import net.runelite.client.config.Config;
+import net.runelite.client.config.ConfigItem;
import net.runelite.client.rs.ClientUpdateCheckMode;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
@@ -75,6 +78,7 @@ public class PluginManagerTest
public Client client;
private Set pluginClasses;
+ private Set configClasses;
@Before
public void before() throws IOException
@@ -85,8 +89,9 @@ public class PluginManagerTest
RuneLite.setInjector(injector);
- // Find plugins we expect to have
+ // Find plugins and configs we expect to have
pluginClasses = new HashSet<>();
+ configClasses = new HashSet<>();
Set classes = ClassPath.from(getClass().getClassLoader()).getTopLevelClassesRecursive(PLUGIN_PACKAGE);
for (ClassInfo classInfo : classes)
{
@@ -95,6 +100,12 @@ public class PluginManagerTest
if (pluginDescriptor != null)
{
pluginClasses.add(clazz);
+ continue;
+ }
+
+ if (Config.class.isAssignableFrom(clazz))
+ {
+ configClasses.add(clazz);
}
}
@@ -155,4 +166,37 @@ public class PluginManagerTest
}
}
+ @Test
+ public void ensureNoDuplicateConfigKeyNames()
+ {
+ for (final Class clazz : configClasses)
+ {
+ final Set configKeyNames = new HashSet<>();
+
+ for (final Method method : clazz.getMethods())
+ {
+ if (!method.isDefault())
+ {
+ continue;
+ }
+
+ final ConfigItem annotation = method.getAnnotation(ConfigItem.class);
+
+ if (annotation == null)
+ {
+ continue;
+ }
+
+ final String configKeyName = annotation.keyName();
+
+ if (configKeyNames.contains(configKeyName))
+ {
+ throw new IllegalArgumentException("keyName " + configKeyName + " is duplicated in " + clazz);
+ }
+
+ configKeyNames.add(configKeyName);
+ }
+ }
+ }
+
}
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java
index 2fe4d88e05..a12a8b257b 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2019, Adam
+ * Copyright (c) 2019, osrs-music-map
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,8 +30,11 @@ import com.google.inject.testing.fieldbinder.Bind;
import com.google.inject.testing.fieldbinder.BoundFieldModule;
import javax.inject.Inject;
import net.runelite.api.Client;
+import net.runelite.api.Player;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -49,6 +53,10 @@ public class ChatFilterPluginTest
@Bind
private ChatFilterConfig chatFilterConfig;
+ @Mock
+ @Bind
+ private Player localPlayer;
+
@Inject
private ChatFilterPlugin chatFilterPlugin;
@@ -60,6 +68,7 @@ public class ChatFilterPluginTest
when(chatFilterConfig.filterType()).thenReturn(ChatFilterType.CENSOR_WORDS);
when(chatFilterConfig.filteredWords()).thenReturn("");
when(chatFilterConfig.filteredRegex()).thenReturn("");
+ when(client.getLocalPlayer()).thenReturn(localPlayer);
}
@Test
@@ -110,4 +119,51 @@ public class ChatFilterPluginTest
chatFilterPlugin.updateFilteredPatterns();
assertNull(chatFilterPlugin.censorMessage("te\u008Cst"));
}
+
+ @Test
+ public void testMessageFromFriendIsFiltered()
+ {
+ when(client.isFriended("Iron Mammal", false)).thenReturn(true);
+ when(chatFilterConfig.filterFriends()).thenReturn(true);
+ assertTrue(chatFilterPlugin.shouldFilterPlayerMessage("Iron Mammal"));
+ }
+
+ @Test
+ public void testMessageFromFriendIsNotFiltered()
+ {
+ when(client.isFriended("Iron Mammal", false)).thenReturn(true);
+ when(chatFilterConfig.filterFriends()).thenReturn(false);
+ assertFalse(chatFilterPlugin.shouldFilterPlayerMessage("Iron Mammal"));
+ }
+
+ @Test
+ public void testMessageFromClanIsFiltered()
+ {
+ when(client.isClanMember("B0aty")).thenReturn(true);
+ when(chatFilterConfig.filterClan()).thenReturn(true);
+ assertTrue(chatFilterPlugin.shouldFilterPlayerMessage("B0aty"));
+ }
+
+ @Test
+ public void testMessageFromClanIsNotFiltered()
+ {
+ when(client.isClanMember("B0aty")).thenReturn(true);
+ when(chatFilterConfig.filterClan()).thenReturn(false);
+ assertFalse(chatFilterPlugin.shouldFilterPlayerMessage("B0aty"));
+ }
+
+ @Test
+ public void testMessageFromSelfIsNotFiltered()
+ {
+ when(localPlayer.getName()).thenReturn("Swampletics");
+ assertFalse(chatFilterPlugin.shouldFilterPlayerMessage("Swampletics"));
+ }
+
+ @Test
+ public void testMessageFromNonFriendNonClanIsFiltered()
+ {
+ when(client.isFriended("Woox", false)).thenReturn(false);
+ when(client.isClanMember("Woox")).thenReturn(false);
+ assertTrue(chatFilterPlugin.shouldFilterPlayerMessage("Woox"));
+ }
}
\ No newline at end of file
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/combatlevel/CombatLevelPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/combatlevel/CombatLevelPluginTest.java
index 361fa04aea..e372ef763f 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/combatlevel/CombatLevelPluginTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/combatlevel/CombatLevelPluginTest.java
@@ -24,209 +24,184 @@
*/
package net.runelite.client.plugins.combatlevel;
-import com.google.inject.Guice;
-import com.google.inject.testing.fieldbinder.Bind;
-import com.google.inject.testing.fieldbinder.BoundFieldModule;
-import net.runelite.api.Client;
-import net.runelite.api.Player;
-import net.runelite.api.Skill;
-import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevels;
-import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevelsPray;
-import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevelsRM;
-import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.ATT_STR_MULT;
-import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.DEF_HP_MULT;
-import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.RANGE_MAGIC_LEVEL_MULT;
-import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.RANGE_MAGIC_MULT;
+import net.runelite.api.Experience;
import static org.junit.Assert.assertEquals;
-import org.junit.Before;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import static org.mockito.Mockito.when;
-import org.mockito.runners.MockitoJUnitRunner;
-import java.util.HashMap;
-@RunWith(MockitoJUnitRunner.class)
public class CombatLevelPluginTest
{
- @Mock
- @Bind
- private Client client;
-
- @Mock
- private Player player;
-
- @Before
- public void setUp()
- {
- Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
-
- when(client.getLocalPlayer()).thenReturn(player);
- }
-
- private HashMap getBaseValues()
- {
- int attackLevel = client.getRealSkillLevel(Skill.ATTACK);
- int strengthLevel = client.getRealSkillLevel(Skill.STRENGTH);
- int defenceLevel = client.getRealSkillLevel(Skill.DEFENCE);
- int hitpointsLevel = client.getRealSkillLevel(Skill.HITPOINTS);
- int magicLevel = client.getRealSkillLevel(Skill.MAGIC);
- int rangedLevel = client.getRealSkillLevel(Skill.RANGED);
- int prayerLevel = client.getRealSkillLevel(Skill.PRAYER);
-
- double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2));
- double melee = ATT_STR_MULT * (attackLevel + strengthLevel);
- double range = RANGE_MAGIC_MULT * Math.floor(rangedLevel * RANGE_MAGIC_LEVEL_MULT);
- double mage = RANGE_MAGIC_MULT * Math.floor(magicLevel * RANGE_MAGIC_LEVEL_MULT);
- double max = Math.max(melee, Math.max(range, mage));
-
- HashMap result = new HashMap<>();
- result.put("base", base);
- result.put("melee", melee);
- result.put("max", max);
- return result;
- }
-
@Test
public void testNewPlayer()
{
- when(player.getCombatLevel()).thenReturn(3);
- when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(1);
- when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(1);
- when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(1);
- when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(1);
- when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(1);
- when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(1);
- when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(10);
+ int attackLevel = 1;
+ int strengthLevel = 1;
+ int defenceLevel = 1;
+ int hitpointsLevel = 10;
+ int magicLevel = 1;
+ int rangeLevel = 1;
+ int prayerLevel = 1;
- HashMap baseValues = getBaseValues();
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(3, combatLevel);
// test attack/strength
- assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
- player.getCombatLevel() + 1, ATT_STR_MULT));
+ assertEquals(2, meleeNeed);
// test defence/hitpoints
- assertEquals(3, calcLevels(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, DEF_HP_MULT));
-
- // test prayer
- assertEquals(5, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
+ assertEquals(3, hpDefNeed);
// test ranged
- assertEquals(2, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
- player.getCombatLevel() + 1, baseValues.get("base")));
+ assertEquals(2, rangeNeed);
// test magic
- assertEquals(2, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
- player.getCombatLevel() + 1, baseValues.get("base")));
+ assertEquals(2, magicNeed);
+
+ // test prayer
+ assertEquals(5, prayerNeed);
}
@Test
public void testAll10()
{
- when(player.getCombatLevel()).thenReturn(12);
- when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(10);
- when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(10);
- when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(10);
- when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(10);
- when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(10);
- when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(10);
- when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(10);
+ int attackLevel = 10;
+ int strengthLevel = 10;
+ int defenceLevel = 10;
+ int hitpointsLevel = 10;
+ int magicLevel = 10;
+ int rangeLevel = 10;
+ int prayerLevel = 10;
- HashMap baseValues = getBaseValues();
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(12, combatLevel);
// test attack/strength
- assertEquals(1, calcLevels(baseValues.get("base") + baseValues.get("melee"),
- player.getCombatLevel() + 1, ATT_STR_MULT));
+ assertEquals(1, meleeNeed);
// test defence/hitpoints
- assertEquals(1, calcLevels(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, DEF_HP_MULT));
-
- // test prayer
- assertEquals(2, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
+ assertEquals(1, hpDefNeed);
// test ranged
- assertEquals(4, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
- player.getCombatLevel() + 1, baseValues.get("base")));
+ assertEquals(4, rangeNeed);
// test magic
- assertEquals(4, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
- player.getCombatLevel() + 1, baseValues.get("base")));
+ assertEquals(4, magicNeed);
+
+ // test prayer
+ assertEquals(2, prayerNeed);
}
@Test
public void testPlayerBmid()
{
// snapshot of current stats 2018-10-2
- when(player.getCombatLevel()).thenReturn(83);
- when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(65);
- when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(70);
- when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(60);
- when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(56);
- when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(75);
- when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(73);
- when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(71);
+ int attackLevel = 65;
+ int strengthLevel = 70;
+ int defenceLevel = 60;
+ int hitpointsLevel = 71;
+ int magicLevel = 73;
+ int rangeLevel = 75;
+ int prayerLevel = 56;
- HashMap baseValues = getBaseValues();
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(83, combatLevel);
// test attack/strength
- assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
- player.getCombatLevel() + 1, ATT_STR_MULT));
+ assertEquals(2, meleeNeed);
// test defence/hitpoints
- assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, DEF_HP_MULT));
-
- // test prayer
- assertEquals(4, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
+ assertEquals(2, hpDefNeed);
// test ranged
- assertEquals(17, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
- player.getCombatLevel() + 1, baseValues.get("base")));
+ assertEquals(17, rangeNeed);
// test magic
- assertEquals(19, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
- player.getCombatLevel() + 1, baseValues.get("base")));
+ assertEquals(19, magicNeed);
+
+ // test prayer
+ assertEquals(4, prayerNeed);
}
@Test
public void testPlayerRunelite()
{
// snapshot of current stats 2018-10-2
- when(player.getCombatLevel()).thenReturn(43);
- when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(43);
- when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(36);
- when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(1);
- when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(15);
- when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(51);
- when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(64);
- when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(42);
+ int attackLevel = 43;
+ int strengthLevel = 36;
+ int defenceLevel = 1;
+ int hitpointsLevel = 42;
+ int magicLevel = 64;
+ int rangeLevel = 51;
+ int prayerLevel = 15;
- HashMap baseValues = getBaseValues();
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(43, combatLevel);
// test attack/strength
- assertEquals(18, calcLevels(baseValues.get("base") + baseValues.get("melee"),
- player.getCombatLevel() + 1, ATT_STR_MULT));
+ assertEquals(18, meleeNeed);
// test defence/hitpoints
- assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, DEF_HP_MULT));
-
- // test prayer
- assertEquals(3, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
+ assertEquals(2, hpDefNeed);
// test ranged
- assertEquals(14, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
- player.getCombatLevel() + 1, baseValues.get("base")));
+ assertEquals(14, rangeNeed);
// test magic
- assertEquals(1, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
- player.getCombatLevel() + 1, baseValues.get("base")));
+ assertEquals(1, magicNeed);
+
+ // test prayer
+ assertEquals(3, prayerNeed);
}
@Test
@@ -234,83 +209,188 @@ public class CombatLevelPluginTest
{
// snapshot of current stats 2018-10-3
// Zezima cannot earn a combat level from ranged/magic anymore, so it won't show as the result is too high
- when(player.getCombatLevel()).thenReturn(90);
- when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
- when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(74);
- when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
- when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(52);
- when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
- when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
- when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
+ int attackLevel = 74;
+ int strengthLevel = 74;
+ int defenceLevel = 72;
+ int hitpointsLevel = 72;
+ int magicLevel = 60;
+ int rangeLevel = 44;
+ int prayerLevel = 52;
- HashMap baseValues = getBaseValues();
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(90, combatLevel);
// test attack/strength
- assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
- player.getCombatLevel() + 1, ATT_STR_MULT));
+ assertEquals(2, meleeNeed);
// test defence/hitpoints
- assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, DEF_HP_MULT));
+ assertEquals(2, hpDefNeed);
// test prayer
- assertEquals(4, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
+ assertEquals(4, prayerNeed);
}
@Test
public void testPrayerLevelsNeeded()
{
- when(player.getCombatLevel()).thenReturn(124);
- when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(99);
- when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(99);
- when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(99);
- when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(89);
- when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(99);
- when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(99);
- when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(99);
+ int attackLevel = 99;
+ int strengthLevel = 99;
+ int defenceLevel = 99;
+ int hitpointsLevel = 99;
+ int magicLevel = 99;
+ int rangeLevel = 99;
+ int prayerLevel = 89;
- assertEquals(1, neededPrayerLevels());
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(124, combatLevel);
+
+ // test prayer
+ assertEquals(1, prayerNeed);
}
@Test
public void testEvenPrayerLevelsNeededWhenNearNextCombatLevel()
{
- when(player.getCombatLevel()).thenReturn(90);
- when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
- when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(75);
- when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
- when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(52);
- when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
- when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
- when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
+ int attackLevel = 74;
+ int strengthLevel = 75;
+ int defenceLevel = 72;
+ int hitpointsLevel = 72;
+ int magicLevel = 60;
+ int rangeLevel = 44;
+ int prayerLevel = 52;
- assertEquals(2, neededPrayerLevels());
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(90, combatLevel);
+
+ // test prayer
+ assertEquals(2, prayerNeed);
}
@Test
public void testOddPrayerLevelsNeededWhenNearNextCombatLevel()
{
- when(player.getCombatLevel()).thenReturn(90);
- when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
- when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(75);
- when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
- when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(53);
- when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
- when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
- when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
+ int attackLevel = 74;
+ int strengthLevel = 75;
+ int defenceLevel = 72;
+ int hitpointsLevel = 72;
+ int magicLevel = 60;
+ int rangeLevel = 44;
+ int prayerLevel = 53;
- assertEquals(1, neededPrayerLevels());
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(90, combatLevel);
+
+ // test prayer
+ assertEquals(1, prayerNeed);
}
- private int neededPrayerLevels()
+ @Test
+ public void testNextMagicLevelBarelyReachesNextCombatLevel()
{
- HashMap baseValues = getBaseValues();
+ int attackLevel = 40;
+ int strengthLevel = 44;
+ int defenceLevel = 46;
+ int hitpointsLevel = 39;
+ int magicLevel = 57;
+ int rangeLevel = 40;
+ int prayerLevel = 29;
- return calcLevelsPray(
- baseValues.get("base") + baseValues.get("max"),
- player.getCombatLevel() + 1,
- client.getRealSkillLevel(Skill.PRAYER)
- );
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(52, combatLevel);
+
+ // test attack/strength
+ assertEquals(3, meleeNeed);
+
+ // test defence/hitpoints
+ assertEquals(3, hpDefNeed);
+
+ // test ranged
+ assertEquals(18, rangeNeed);
+
+ // test magic
+ assertEquals(1, magicNeed);
+
+ // test prayer
+ assertEquals(5, prayerNeed);
+ }
+
+ @Test
+ public void testRangeMagicLevelsNeeded()
+ {
+ int attackLevel = 60;
+ int strengthLevel = 69;
+ int defenceLevel = 1;
+ int hitpointsLevel = 78;
+ int magicLevel = 85;
+ int rangeLevel = 85;
+ int prayerLevel = 52;
+
+ int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+ int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
+ magicLevel, rangeLevel, prayerLevel);
+
+ // test combat level
+ assertEquals(68, combatLevel);
+
+ // test attack/strength
+ assertEquals(3, meleeNeed);
+
+ // test defence/hitpoints
+ assertEquals(4, hpDefNeed);
+
+ // test ranged
+ assertEquals(3, rangeNeed);
+
+ // test magic
+ assertEquals(3, magicNeed);
+
+ // test prayer
+ assertEquals(8, prayerNeed);
}
}
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/cooking/CookingPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/cooking/CookingPluginTest.java
index 067c02943c..d23fd934c0 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/cooking/CookingPluginTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/cooking/CookingPluginTest.java
@@ -29,12 +29,11 @@ import com.google.inject.testing.fieldbinder.Bind;
import com.google.inject.testing.fieldbinder.BoundFieldModule;
import javax.inject.Inject;
import net.runelite.api.ChatMessageType;
+import net.runelite.api.Client;
import net.runelite.api.events.ChatMessage;
import net.runelite.client.ui.overlay.OverlayManager;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
@@ -52,13 +51,16 @@ public class CookingPluginTest
"You cook the karambwan. It looks delicious.",
"You roast a lobster.",
"You cook a bass.",
- "You squeeze the grapes into the jug. The wine begins to ferment.",
"You successfully bake a tasty garden pie."
};
@Inject
CookingPlugin cookingPlugin;
+ @Mock
+ @Bind
+ Client client;
+
@Mock
@Bind
CookingConfig config;
@@ -94,26 +96,4 @@ public class CookingPluginTest
assertNotNull(cookingSession);
assertEquals(COOKING_MESSAGES.length, cookingSession.getCookAmount());
}
-
- @Test
- public void testFermentTimerOnChatMessage()
- {
- when(config.fermentTimer()).thenReturn(true);
- ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", COOKING_MESSAGES[6], "", 0);
- cookingPlugin.onChatMessage(chatMessage);
- FermentTimerSession fermentTimerSession = cookingPlugin.getFermentTimerSession();
-
- assertNotNull(fermentTimerSession);
- }
-
- @Test
- public void testFermentTimerOnChatMessage_pluginDisabled()
- {
- when(config.fermentTimer()).thenReturn(false);
- ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", COOKING_MESSAGES[6], "", 0);
- cookingPlugin.onChatMessage(chatMessage);
- FermentTimerSession fermentTimerSession = cookingPlugin.getFermentTimerSession();
-
- assertNull(fermentTimerSession);
- }
}
\ No newline at end of file
diff --git a/runelite-mixins/pom.xml b/runelite-mixins/pom.xml
index 11c63823e6..1728b50d75 100644
--- a/runelite-mixins/pom.xml
+++ b/runelite-mixins/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.24-SNAPSHOT
+ 1.5.25-SNAPSHOT
mixins
diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java
index e86e689fef..9bf27786eb 100644
--- a/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java
+++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java
@@ -110,7 +110,29 @@ public abstract class RSDecorativeObjectMixin implements RSDecorativeObject
@Override
public Area getClickbox()
{
- return Perspective.getClickbox(client, getModel(), getOrientation(), getLocalLocation());
+ Area clickbox = new Area();
+
+ LocalPoint lp = getLocalLocation();
+ Area clickboxA = Perspective.getClickbox(client, getModel(), 0,
+ new LocalPoint(lp.getX() + getXOffset(), lp.getY() + getYOffset()));
+ Area clickboxB = Perspective.getClickbox(client, getModel2(), 0, lp);
+
+ if (clickboxA == null && clickboxB == null)
+ {
+ return null;
+ }
+
+ if (clickboxA != null)
+ {
+ clickbox.add(clickboxA);
+ }
+
+ if (clickboxB != null)
+ {
+ clickbox.add(clickboxB);
+ }
+
+ return clickbox;
}
@Inject
diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSWallObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSWallObjectMixin.java
index 3ef5358ffd..e5db24d686 100644
--- a/runelite-mixins/src/main/java/net/runelite/mixins/RSWallObjectMixin.java
+++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSWallObjectMixin.java
@@ -101,8 +101,8 @@ public abstract class RSWallObjectMixin implements RSWallObject
{
Area clickbox = new Area();
- Area clickboxA = Perspective.getClickbox(client, getModelA(), getOrientationA(), getLocalLocation());
- Area clickboxB = Perspective.getClickbox(client, getModelB(), getOrientationB(), getLocalLocation());
+ Area clickboxA = Perspective.getClickbox(client, getModelA(), 0, getLocalLocation());
+ Area clickboxB = Perspective.getClickbox(client, getModelB(), 0, getLocalLocation());
if (clickboxA == null && clickboxB == null)
{
diff --git a/runelite-script-assembler-plugin/pom.xml b/runelite-script-assembler-plugin/pom.xml
index af940a8c50..67b717ef82 100644
--- a/runelite-script-assembler-plugin/pom.xml
+++ b/runelite-script-assembler-plugin/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.24-SNAPSHOT
+ 1.5.25-SNAPSHOT
script-assembler-plugin
diff --git a/runescape-api/pom.xml b/runescape-api/pom.xml
index 3990dada08..7d49ad3e13 100644
--- a/runescape-api/pom.xml
+++ b/runescape-api/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.24-SNAPSHOT
+ 1.5.25-SNAPSHOT
net.runelite.rs
diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java
index 77836e550f..838a7ea344 100644
--- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java
+++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java
@@ -31,7 +31,6 @@ import net.runelite.api.World;
import net.runelite.api.widgets.Widget;
import net.runelite.mapping.Construct;
import net.runelite.mapping.Import;
-import net.runelite.mapping.Protect;
public interface RSClient extends RSGameEngine, Client
{
@@ -823,7 +822,6 @@ public interface RSClient extends RSGameEngine, Client
void revalidateWidgetScroll(Widget[] group, Widget w, boolean postEvent);
@Import("menuAction")
- @Protect
void menuAction(int var0, int var1, int var2, int var3, String var4, String var5, int var6, int var7);
@Import("Viewport_entityCountAtMouse")
diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java
index bd8b0b16fb..ec8db1f005 100644
--- a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java
+++ b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java
@@ -26,7 +26,6 @@ package net.runelite.rs.api;
import net.runelite.api.Player;
import net.runelite.mapping.Import;
-import net.runelite.mapping.Protect;
public interface RSPlayer extends RSActor, Player
{
@@ -63,6 +62,5 @@ public interface RSPlayer extends RSActor, Player
int getRsOverheadIcon();
@Import("skullIcon")
- @Protect
int getRsSkullIcon();
}