Merge pull request #1772 from Owain94/1310-merge

project: Merge upstream
This commit is contained in:
Kyle
2019-10-13 21:49:38 +01:00
committed by GitHub
45 changed files with 371 additions and 588 deletions
+2 -2
View File
@@ -532,7 +532,7 @@ public class MapImageDumper
{ {
// this is a wall // this is a wall
int hash = (localY << 7) + localX + (location.getId() << 14) + 0x4000_0000; int hash = (localY << 7) + localX + (location.getId() << 14) + 0x4000_0000;
if (object.getAnInt2088() == 0) if (object.getWallOrDoor() == 0)
{ {
hash -= Integer.MIN_VALUE; hash -= Integer.MIN_VALUE;
} }
@@ -645,7 +645,7 @@ public class MapImageDumper
} }
int hash = (localY << 7) + localX + (location.getId() << 14) + 0x4000_0000; int hash = (localY << 7) + localX + (location.getId() << 14) + 0x4000_0000;
if (object.getAnInt2088() == 0) if (object.getWallOrDoor() == 0)
{ {
hash -= Integer.MIN_VALUE; hash -= Integer.MIN_VALUE;
} }
@@ -33,8 +33,8 @@ public class ObjectDefinition
{ {
private int id; private int id;
private short[] retextureToFind; private short[] retextureToFind;
private int anInt2069 = 16; private int decorDisplacement = 16;
private boolean isSolid = false; private boolean isHollow = false;
private String name = "null"; private String name = "null";
private int[] objectModels; private int[] objectModels;
private int[] objectTypes; private int[] objectTypes;
@@ -46,8 +46,8 @@ public class ObjectDefinition
private int anInt2083 = 0; private int anInt2083 = 0;
private int[] anIntArray2084; private int[] anIntArray2084;
private int offsetX = 0; private int offsetX = 0;
private boolean nonFlatShading = false; private boolean mergeNormals = false;
private int anInt2088 = -1; private int wallOrDoor = -1;
private int animationID = -1; private int animationID = -1;
private int varbitID = -1; private int varbitID = -1;
private int ambient = 0; private int ambient = 0;
@@ -56,20 +56,20 @@ public class ObjectDefinition
private int interactType = 2; private int interactType = 2;
private int mapSceneID = -1; private int mapSceneID = -1;
private short[] recolorToReplace; private short[] recolorToReplace;
private boolean aBool2097 = true; private boolean shadow = true;
private int modelSizeX = 128; private int modelSizeX = 128;
private int modelSizeHeight = 128; private int modelSizeHeight = 128;
private int modelSizeY = 128; private int modelSizeY = 128;
private int objectID; private int objectID;
private int offsetHeight = 0; private int offsetHeight = 0;
private int offsetY = 0; private int offsetY = 0;
private boolean aBool2104 = false; private boolean obstructsGround = false;
private int anInt2105 = -1; private int contouredGround = -1;
private int anInt2106 = -1; private int supportsItems = -1;
private int[] configChangeDest; private int[] configChangeDest;
private boolean isRotated = false; private boolean isRotated = false;
private int varpID = -1; private int varpID = -1;
private int anInt2110 = -1; private int ambientSoundId = -1;
private boolean aBool2111 = false; private boolean aBool2111 = false;
private int anInt2112 = 0; private int anInt2112 = 0;
private int anInt2113 = 0; private int anInt2113 = 0;
@@ -117,15 +117,15 @@ public class ObjectLoader
} }
else if (opcode == 19) else if (opcode == 19)
{ {
def.setAnInt2088(is.readUnsignedByte()); def.setWallOrDoor(is.readUnsignedByte());
} }
else if (opcode == 21) else if (opcode == 21)
{ {
def.setAnInt2105(0); def.setContouredGround(0);
} }
else if (opcode == 22) else if (opcode == 22)
{ {
def.setNonFlatShading(false); def.setMergeNormals(true);
} }
else if (opcode == 23) else if (opcode == 23)
{ {
@@ -145,7 +145,7 @@ public class ObjectLoader
} }
else if (opcode == 28) else if (opcode == 28)
{ {
def.setAnInt2069(is.readUnsignedByte()); def.setDecorDisplacement(is.readUnsignedByte());
} }
else if (opcode == 29) else if (opcode == 29)
{ {
@@ -153,7 +153,7 @@ public class ObjectLoader
} }
else if (opcode == 39) else if (opcode == 39)
{ {
def.setContrast(is.readByte()); def.setContrast(is.readByte() * 25);
} }
else if (opcode >= 30 && opcode < 35) else if (opcode >= 30 && opcode < 35)
{ {
@@ -200,7 +200,7 @@ public class ObjectLoader
} }
else if (opcode == 64) else if (opcode == 64)
{ {
def.setABool2097(false); def.setShadow(false);
} }
else if (opcode == 65) else if (opcode == 65)
{ {
@@ -236,15 +236,15 @@ public class ObjectLoader
} }
else if (opcode == 73) else if (opcode == 73)
{ {
def.setABool2104(true); def.setObstructsGround(true);
} }
else if (opcode == 74) else if (opcode == 74)
{ {
def.setSolid(true); def.setHollow(true);
} }
else if (opcode == 75) else if (opcode == 75)
{ {
def.setAnInt2106(is.readUnsignedByte()); def.setSupportsItems(is.readUnsignedByte());
} }
else if (opcode == 77) else if (opcode == 77)
{ {
@@ -280,7 +280,7 @@ public class ObjectLoader
} }
else if (opcode == 78) else if (opcode == 78)
{ {
def.setAnInt2110(is.readUnsignedShort()); def.setAmbientSoundId(is.readUnsignedShort());
def.setAnInt2083(is.readUnsignedByte()); def.setAnInt2083(is.readUnsignedByte());
} }
else if (opcode == 79) else if (opcode == 79)
@@ -300,7 +300,7 @@ public class ObjectLoader
} }
else if (opcode == 81) else if (opcode == 81)
{ {
def.setAnInt2105(is.readUnsignedByte() * 256); def.setContouredGround(is.readUnsignedByte() * 256);
} }
else if (opcode == 82) else if (opcode == 82)
{ {
@@ -380,26 +380,26 @@ public class ObjectLoader
private void post(ObjectDefinition def) private void post(ObjectDefinition def)
{ {
if (def.getAnInt2088() == -1) if (def.getWallOrDoor() == -1)
{ {
def.setAnInt2088(0); def.setWallOrDoor(0);
if (def.getObjectModels() != null && (def.getObjectTypes() == null || def.getObjectTypes()[0] == 10)) if (def.getObjectModels() != null && (def.getObjectTypes() == null || def.getObjectTypes()[0] == 10))
{ {
def.setAnInt2088(1); def.setWallOrDoor(1);
} }
for (int var1 = 0; var1 < 5; ++var1) for (int var1 = 0; var1 < 5; ++var1)
{ {
if (def.getActions()[var1] != null) if (def.getActions()[var1] != null)
{ {
def.setAnInt2088(1); def.setWallOrDoor(1);
} }
} }
} }
if (def.getAnInt2106() == -1) if (def.getSupportsItems() == -1)
{ {
def.setAnInt2106(def.getInteractType() != 0 ? 1 : 0); def.setSupportsItems(def.getInteractType() != 0 ? 1 : 0);
} }
} }
} }
@@ -69,16 +69,16 @@ public class ObjectSaver
{ {
out.writeByte(18); out.writeByte(18);
} }
if (obj.getAnInt2088() != -1) if (obj.getWallOrDoor() != -1)
{ {
out.writeByte(19); out.writeByte(19);
out.writeByte(obj.getAnInt2088()); out.writeByte(obj.getWallOrDoor());
} }
if (obj.getAnInt2105() == 0) if (obj.getContouredGround() == 0)
{ {
out.writeByte(21); out.writeByte(21);
} }
if (!obj.isNonFlatShading()) if (!obj.isMergeNormals())
{ {
out.writeByte(22); out.writeByte(22);
} }
@@ -96,11 +96,11 @@ public class ObjectSaver
out.writeByte(27); out.writeByte(27);
} }
out.writeByte(28); out.writeByte(28);
out.writeByte(obj.getAnInt2069()); out.writeByte(obj.getDecorDisplacement());
out.writeByte(29); out.writeByte(29);
out.writeByte(obj.getAmbient()); out.writeByte(obj.getAmbient());
out.writeByte(39); out.writeByte(39);
out.writeByte(obj.getContrast()); out.writeByte(obj.getContrast() / 25);
for (int i = 0; i < 5; ++i) for (int i = 0; i < 5; ++i)
{ {
out.writeByte(30 + i); out.writeByte(30 + i);
@@ -131,7 +131,7 @@ public class ObjectSaver
{ {
out.writeByte(62); out.writeByte(62);
} }
if (!obj.isABool2097()) if (!obj.isShadow())
{ {
out.writeByte(64); out.writeByte(64);
} }
@@ -152,23 +152,23 @@ public class ObjectSaver
out.writeShort(obj.getOffsetHeight()); out.writeShort(obj.getOffsetHeight());
out.writeByte(72); out.writeByte(72);
out.writeShort(obj.getOffsetY()); out.writeShort(obj.getOffsetY());
if (obj.isABool2104()) if (obj.isObstructsGround())
{ {
out.writeByte(73); out.writeByte(73);
} }
if (obj.isSolid()) if (obj.isHollow())
{ {
out.writeByte(74); out.writeByte(74);
} }
if (obj.getAnInt2106() != -1) if (obj.getSupportsItems() != -1)
{ {
out.writeByte(75); out.writeByte(75);
out.writeByte(obj.getAnInt2106()); out.writeByte(obj.getSupportsItems());
} }
if (obj.getAnInt2110() != -1) if (obj.getAmbientSoundId() != -1)
{ {
out.writeByte(78); out.writeByte(78);
out.writeShort(obj.getAnInt2110()); out.writeShort(obj.getAmbientSoundId());
out.writeByte(obj.getAnInt2083()); out.writeByte(obj.getAnInt2083());
} }
if (obj.getAnIntArray2084() != null) if (obj.getAnIntArray2084() != null)
@@ -183,10 +183,10 @@ public class ObjectSaver
out.writeShort(i); out.writeShort(i);
} }
} }
if (obj.getAnInt2105() != -1) if (obj.getContouredGround() != -1)
{ {
out.writeByte(81); out.writeByte(81);
out.writeByte(obj.getAnInt2105() / 256); out.writeByte(obj.getContouredGround() / 256);
} }
if (obj.getMapAreaId() != -1) if (obj.getMapAreaId() != -1)
{ {
@@ -6820,7 +6820,7 @@ public final class ItemID
public static final int CURED_YAKHIDE = 10820; public static final int CURED_YAKHIDE = 10820;
public static final int YAKHIDE_ARMOUR = 10822; public static final int YAKHIDE_ARMOUR = 10822;
public static final int YAKHIDE_ARMOUR_10824 = 10824; public static final int YAKHIDE_ARMOUR_10824 = 10824;
public static final int FREMENNIK_SHIELD_10826 = 10826; public static final int NEITIZNOT_SHIELD = 10826;
public static final int HELM_OF_NEITIZNOT = 10828; public static final int HELM_OF_NEITIZNOT = 10828;
public static final int DOCUMENTS = 10829; public static final int DOCUMENTS = 10829;
public static final int ROYAL_DECREE = 10830; public static final int ROYAL_DECREE = 10830;
@@ -11268,5 +11268,22 @@ public final class ItemID
public static final int IMBUED_SARADOMIN_CAPE_L = 24248; public static final int IMBUED_SARADOMIN_CAPE_L = 24248;
public static final int IMBUED_GUTHIX_CAPE_L = 24249; public static final int IMBUED_GUTHIX_CAPE_L = 24249;
public static final int IMBUED_ZAMORAK_CAPE_L = 24250; public static final int IMBUED_ZAMORAK_CAPE_L = 24250;
public static final int WILDERNESS_CRABS_TELEPORT = 24251;
public static final int CLUE_SCROLL_ELITE_24253 = 24253;
public static final int FANG = 24254;
public static final int VENOM_GLAND = 24255;
public static final int UNSEALED_LETTER = 24256;
public static final int UNSEALED_LETTER_24257 = 24257;
public static final int V_SIGIL = 24258;
public static final int V_SIGIL_E = 24259;
public static final int MOLTEN_GLASS_I = 24260;
public static final int LUNAR_GLASS = 24261;
public static final int POLISHING_ROCK = 24262;
public static final int BALLAD_OF_THE_BASILISK = 24263;
public static final int VS_SHIELD = 24265;
public static final int VS_SHIELD_24266 = 24266;
public static final int BASILISK_JAW = 24268;
public static final int NEITIZNOT_FACEGUARD = 24271;
public static final int BASILISK_KNIGHT = 24276;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -3690,7 +3690,6 @@ public final class NpcID
public static final int BUTTERFLY_3923 = 3923; public static final int BUTTERFLY_3923 = 3923;
public static final int SIGLI_THE_HUNTSMAN = 3924; public static final int SIGLI_THE_HUNTSMAN = 3924;
public static final int SWENSEN_THE_NAVIGATOR = 3925; public static final int SWENSEN_THE_NAVIGATOR = 3925;
public static final int BRUNDT_THE_CHIEFTAIN = 3926;
public static final int GUARD_3928 = 3928; public static final int GUARD_3928 = 3928;
public static final int GUARD_3929 = 3929; public static final int GUARD_3929 = 3929;
public static final int TOWN_GUARD_3930 = 3930; public static final int TOWN_GUARD_3930 = 3930;
@@ -6630,9 +6629,7 @@ public final class NpcID
public static final int DOUBLE_AGENT_7312 = 7312; public static final int DOUBLE_AGENT_7312 = 7312;
public static final int LISA = 7316; public static final int LISA = 7316;
public static final int LISA_7317 = 7317; public static final int LISA_7317 = 7317;
public static final int BEAR = 7318;
public static final int NESTY = 7321; public static final int NESTY = 7321;
public static final int WILD_DOG_7322 = 7322;
public static final int FISHING_SPOT_7323 = 7323; public static final int FISHING_SPOT_7323 = 7323;
public static final int HOLGART_7324 = 7324; public static final int HOLGART_7324 = 7324;
public static final int RICK_7327 = 7327; public static final int RICK_7327 = 7327;
@@ -7251,7 +7248,7 @@ public final class NpcID
public static final int SIR_TIFFY_CASHIEN_8045 = 8045; public static final int SIR_TIFFY_CASHIEN_8045 = 8045;
public static final int KING_LATHAS = 8046; public static final int KING_LATHAS = 8046;
public static final int KING_ARTHUR_8047 = 8047; public static final int KING_ARTHUR_8047 = 8047;
public static final int BRUNDT_THE_CHIEFTAIN_8048 = 8048; public static final int BRUNDT_THE_CHIEFTAIN = 8048;
public static final int ONEIROMANCER_8049 = 8049; public static final int ONEIROMANCER_8049 = 8049;
public static final int DENULTH_8050 = 8050; public static final int DENULTH_8050 = 8050;
public static final int DUKE_HORACIO_8051 = 8051; public static final int DUKE_HORACIO_8051 = 8051;
@@ -8281,5 +8278,45 @@ public final class NpcID
public static final int TOY_MOUSE = 9254; public static final int TOY_MOUSE = 9254;
public static final int TOY_MOUSE_9255 = 9255; public static final int TOY_MOUSE_9255 = 9255;
public static final int PENGUIN_SUIT_9257 = 9257; public static final int PENGUIN_SUIT_9257 = 9257;
public static final int BASILISK_SENTINEL = 9258;
public static final int OSPAK_9259 = 9259;
public static final int STYRMIR_9260 = 9260;
public static final int TORBRUND_9261 = 9261;
public static final int FRIDGEIR_9262 = 9262;
public static final int BRUNDT_THE_CHIEFTAIN_9263 = 9263;
public static final int THORA_THE_BARKEEP_9264 = 9264;
public static final int BRUNDT_THE_CHIEFTAIN_9265 = 9265;
public static final int BRUNDT_THE_CHIEFTAIN_9266 = 9266;
public static final int BRUNDT_THE_CHIEFTAIN_9267 = 9267;
public static final int BRUNDT_THE_CHIEFTAIN_9268 = 9268;
public static final int HASKELL = 9270;
public static final int HASKELL_9271 = 9271;
public static final int HASKELL_9272 = 9272;
public static final int AGNAR_9273 = 9273;
public static final int OLAF_THE_BARD_9274 = 9274;
public static final int MANNI_THE_REVELLER_9275 = 9275;
public static final int FREMENNIK_WARRIOR = 9276;
public static final int FREMENNIK_WARRIOR_9277 = 9277;
public static final int BRUNDT_THE_CHIEFTAIN_9278 = 9278;
public static final int BRUNDT_THE_CHIEFTAIN_9279 = 9279;
public static final int THORVALD_THE_WARRIOR_9280 = 9280;
public static final int KOSCHEI_THE_DEATHLESS_9281 = 9281;
public static final int BASILISK_YOUNGLING = 9282;
public static final int BASILISK_9283 = 9283;
public static final int BASILISK_9284 = 9284;
public static final int BASILISK_9285 = 9285;
public static final int BASILISK_9286 = 9286;
public static final int MONSTROUS_BASILISK_9287 = 9287;
public static final int MONSTROUS_BASILISK_9288 = 9288;
public static final int THE_JORMUNGAND = 9289;
public static final int THE_JORMUNGAND_9290 = 9290;
public static final int THE_JORMUNGAND_9291 = 9291;
public static final int THE_JORMUNGAND_9292 = 9292;
public static final int BASILISK_KNIGHT = 9293;
public static final int BAKUNA = 9294;
public static final int TYPHOR = 9295;
public static final int TYPHOR_9296 = 9296;
public static final int VRITRA = 9297;
public static final int MAZ = 9298;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -12774,5 +12774,14 @@ public final class NullItemID
public static final int NULL_24243 = 24243; public static final int NULL_24243 = 24243;
public static final int NULL_24245 = 24245; public static final int NULL_24245 = 24245;
public static final int NULL_24247 = 24247; public static final int NULL_24247 = 24247;
public static final int NULL_24252 = 24252;
public static final int NULL_24264 = 24264;
public static final int NULL_24267 = 24267;
public static final int NULL_24269 = 24269;
public static final int NULL_24270 = 24270;
public static final int NULL_24272 = 24272;
public static final int NULL_24273 = 24273;
public static final int NULL_24274 = 24274;
public static final int NULL_24275 = 24275;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -1270,6 +1270,7 @@ public final class NullObjectID
public static final int NULL_2780 = 2780; public static final int NULL_2780 = 2780;
public static final int NULL_2781 = 2781; public static final int NULL_2781 = 2781;
public static final int NULL_2782 = 2782; public static final int NULL_2782 = 2782;
public static final int NULL_2795 = 2795;
public static final int NULL_2828 = 2828; public static final int NULL_2828 = 2828;
public static final int NULL_2829 = 2829; public static final int NULL_2829 = 2829;
public static final int NULL_2838 = 2838; public static final int NULL_2838 = 2838;
@@ -1972,6 +1973,7 @@ public final class NullObjectID
public static final int NULL_4363 = 4363; public static final int NULL_4363 = 4363;
public static final int NULL_4364 = 4364; public static final int NULL_4364 = 4364;
public static final int NULL_4365 = 4365; public static final int NULL_4365 = 4365;
public static final int NULL_4373 = 4373;
public static final int NULL_4374 = 4374; public static final int NULL_4374 = 4374;
public static final int NULL_4375 = 4375; public static final int NULL_4375 = 4375;
public static final int NULL_4376 = 4376; public static final int NULL_4376 = 4376;
@@ -9084,6 +9086,7 @@ public final class NullObjectID
public static final int NULL_20092 = 20092; public static final int NULL_20092 = 20092;
public static final int NULL_20093 = 20093; public static final int NULL_20093 = 20093;
public static final int NULL_20094 = 20094; public static final int NULL_20094 = 20094;
public static final int NULL_20095 = 20095;
public static final int NULL_20098 = 20098; public static final int NULL_20098 = 20098;
public static final int NULL_20118 = 20118; public static final int NULL_20118 = 20118;
public static final int NULL_20132 = 20132; public static final int NULL_20132 = 20132;
@@ -18017,5 +18020,23 @@ public final class NullObjectID
public static final int NULL_37377 = 37377; public static final int NULL_37377 = 37377;
public static final int NULL_37378 = 37378; public static final int NULL_37378 = 37378;
public static final int NULL_37379 = 37379; public static final int NULL_37379 = 37379;
public static final int NULL_37393 = 37393;
public static final int NULL_37394 = 37394;
public static final int NULL_37412 = 37412;
public static final int NULL_37413 = 37413;
public static final int NULL_37414 = 37414;
public static final int NULL_37415 = 37415;
public static final int NULL_37416 = 37416;
public static final int NULL_37419 = 37419;
public static final int NULL_37420 = 37420;
public static final int NULL_37423 = 37423;
public static final int NULL_37425 = 37425;
public static final int NULL_37426 = 37426;
public static final int NULL_37427 = 37427;
public static final int NULL_37428 = 37428;
public static final int NULL_37429 = 37429;
public static final int NULL_37430 = 37430;
public static final int NULL_37432 = 37432;
public static final int NULL_37433 = 37433;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -1531,7 +1531,6 @@ public final class ObjectID
public static final int COUNTER_2792 = 2792; public static final int COUNTER_2792 = 2792;
public static final int COUNTER_2793 = 2793; public static final int COUNTER_2793 = 2793;
public static final int LEVER_2794 = 2794; public static final int LEVER_2794 = 2794;
public static final int LEVER_2795 = 2795;
public static final int LADDER_2796 = 2796; public static final int LADDER_2796 = 2796;
public static final int LADDER_2797 = 2797; public static final int LADDER_2797 = 2797;
public static final int BUSH_2798 = 2798; public static final int BUSH_2798 = 2798;
@@ -2407,7 +2406,6 @@ public final class ObjectID
public static final int SHELF_4370 = 4370; public static final int SHELF_4370 = 4370;
public static final int SHELF_4371 = 4371; public static final int SHELF_4371 = 4371;
public static final int TABLE_4372 = 4372; public static final int TABLE_4372 = 4372;
public static final int SAND_PIT = 4373;
public static final int STANDARD_STAND = 4377; public static final int STANDARD_STAND = 4377;
public static final int STANDARD_STAND_4378 = 4378; public static final int STANDARD_STAND_4378 = 4378;
public static final int IRON_LADDER = 4380; public static final int IRON_LADDER = 4380;
@@ -8470,7 +8468,7 @@ public final class ObjectID
public static final int POTTERS_WHEEL_14887 = 14887; public static final int POTTERS_WHEEL_14887 = 14887;
public static final int POTTERY_OVEN_14888 = 14888; public static final int POTTERY_OVEN_14888 = 14888;
public static final int SPINNING_WHEEL_14889 = 14889; public static final int SPINNING_WHEEL_14889 = 14889;
public static final int SAND_PIT_14890 = 14890; public static final int SAND_PIT = 14890;
public static final int BED_14891 = 14891; public static final int BED_14891 = 14891;
public static final int TIGHTROPE_14892 = 14892; public static final int TIGHTROPE_14892 = 14892;
public static final int POLEVAULT = 14894; public static final int POLEVAULT = 14894;
@@ -11014,7 +11012,6 @@ public final class ObjectID
public static final int CITY_GATE_20088 = 20088; public static final int CITY_GATE_20088 = 20088;
public static final int CITY_GATE_20089 = 20089; public static final int CITY_GATE_20089 = 20089;
public static final int CITY_GATE_20090 = 20090; public static final int CITY_GATE_20090 = 20090;
public static final int OPEN_CHEST_20095 = 20095;
public static final int BED_20096 = 20096; public static final int BED_20096 = 20096;
public static final int BED_20097 = 20097; public static final int BED_20097 = 20097;
public static final int COMPOST_BIN_20099 = 20099; public static final int COMPOST_BIN_20099 = 20099;
@@ -19361,5 +19358,30 @@ public final class ObjectID
public static final int HOUSE_ADVERTISEMENT_37388 = 37388; public static final int HOUSE_ADVERTISEMENT_37388 = 37388;
public static final int HOUSE_ADVERTISEMENT_37389 = 37389; public static final int HOUSE_ADVERTISEMENT_37389 = 37389;
public static final int HOUSE_ADVERTISEMENT_37390 = 37390; public static final int HOUSE_ADVERTISEMENT_37390 = 37390;
public static final int SAND_PIT_37391 = 37391;
public static final int SAND_PIT_37392 = 37392;
public static final int ROCKSLIDE_37395 = 37395;
public static final int ROCKSLIDE_37396 = 37396;
public static final int BOXES_37397 = 37397;
public static final int BOXES_37398 = 37398;
public static final int BOXES_37399 = 37399;
public static final int SMALL_GEYSER_37400 = 37400;
public static final int SMALL_GEYSER_37401 = 37401;
public static final int LARGE_GEYSER_37402 = 37402;
public static final int LARGE_GEYSER_37403 = 37403;
public static final int FISH_STALL_37404 = 37404;
public static final int FUR_STALL_37405 = 37405;
public static final int FREMENNIK_BOAT_37406 = 37406;
public static final int FREMENNIK_BOAT_37407 = 37407;
public static final int FREMENNIK_BOAT_37408 = 37408;
public static final int CAVE_37409 = 37409;
public static final int CAVE_37410 = 37410;
public static final int STEPS_37411 = 37411;
public static final int STEPS_37417 = 37417;
public static final int STEPS_37418 = 37418;
public static final int DOOR_37421 = 37421;
public static final int DOOR_37422 = 37422;
public static final int THE_JORMUNGAND = 37424;
public static final int ROUGH_WALL_37431 = 37431;
/* This file is automatically generated. Do not edit. */ /* This file is automatically generated. Do not edit. */
} }
@@ -62,6 +62,7 @@ import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.PostItemDefinition; import net.runelite.api.events.PostItemDefinition;
import net.runelite.client.callback.ClientThread; import net.runelite.client.callback.ClientThread;
import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventBus;
import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.http.api.item.ItemClient; import net.runelite.http.api.item.ItemClient;
import net.runelite.http.api.item.ItemPrice; import net.runelite.http.api.item.ItemPrice;
import net.runelite.http.api.item.ItemStats; import net.runelite.http.api.item.ItemStats;
@@ -134,7 +135,6 @@ public class ItemManager
put(AGILITY_CAPE_13340, AGILITY_CAPE). put(AGILITY_CAPE_13340, AGILITY_CAPE).
build(); build();
private final Client client; private final Client client;
private final ScheduledExecutorService scheduledExecutorService;
private final ClientThread clientThread; private final ClientThread clientThread;
private final ItemClient itemClient; private final ItemClient itemClient;
private final ImmutableMap<Integer, ItemStats> itemStatMap; private final ImmutableMap<Integer, ItemStats> itemStatMap;
@@ -154,12 +154,11 @@ public class ItemManager
) )
{ {
this.client = client; this.client = client;
this.scheduledExecutorService = executor;
this.clientThread = clientThread; this.clientThread = clientThread;
this.itemClient = itemClient; this.itemClient = itemClient;
scheduledExecutorService.scheduleWithFixedDelay(this::loadPrices, 0, 30, TimeUnit.MINUTES); executor.scheduleWithFixedDelay(this::loadPrices, 0, 30, TimeUnit.MINUTES);
scheduledExecutorService.submit(this::loadStats); executor.submit(this::loadStats);
itemImages = CacheBuilder.newBuilder() itemImages = CacheBuilder.newBuilder()
.maximumSize(128L) .maximumSize(128L)
@@ -462,7 +461,7 @@ public class ItemManager
return false; return false;
} }
sprite.toBufferedImage(img); sprite.toBufferedImage(img);
img.changed(); img.loaded();
return true; return true;
}); });
return img; return img;
@@ -38,7 +38,7 @@ public enum CannonSpots
ABERRANT_SPECTRES(new WorldPoint(2456, 9791, 0)), ABERRANT_SPECTRES(new WorldPoint(2456, 9791, 0)),
HELLHOUNDS(new WorldPoint(2431, 9776, 0), new WorldPoint(2413, 9786, 0), new WorldPoint(2783, 9686, 0), new WorldPoint(3198, 10071, 0)), HELLHOUNDS(new WorldPoint(2431, 9776, 0), new WorldPoint(2413, 9786, 0), new WorldPoint(2783, 9686, 0), new WorldPoint(3198, 10071, 0)),
BLACK_DEMONS(new WorldPoint(2859, 9778, 0), new WorldPoint(2841, 9791, 0)), BLACK_DEMONS(new WorldPoint(2859, 9778, 0), new WorldPoint(2841, 9791, 0)),
ELVES(new WorldPoint(2044, 4635, 0)), ELVES(new WorldPoint(2044, 4635, 0), new WorldPoint(3278, 6098, 0)),
SUQAHS(new WorldPoint(2114, 3943, 0)), SUQAHS(new WorldPoint(2114, 3943, 0)),
TROLLS(new WorldPoint(2401, 3856, 0)), TROLLS(new WorldPoint(2401, 3856, 0)),
GREATER_DEMONS(new WorldPoint(1435, 10086, 2)), GREATER_DEMONS(new WorldPoint(1435, 10086, 2)),
@@ -124,7 +124,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll
any("Earth Rune x15", xOfItem(ItemID.EARTH_RUNE, 15), xOfItem(ItemID.DUST_RUNE, 15), xOfItem(ItemID.MUD_RUNE, 15), xOfItem(ItemID.LAVA_RUNE, 15), item(ItemID.STAFF_OF_EARTH), item(ItemID.EARTH_BATTLESTAFF), item(ItemID.MYSTIC_EARTH_STAFF), item(ItemID.MUD_BATTLESTAFF), item(ItemID.MYSTIC_MUD_STAFF), item(ItemID.DUST_BATTLESTAFF), item(ItemID.MYSTIC_DUST_STAFF), item(ItemID.LAVA_BATTLESTAFF), item(ItemID.MYSTIC_LAVA_STAFF), item(ItemID.LAVA_BATTLESTAFF_21198), item(ItemID.MYSTIC_LAVA_STAFF_21200)), any("Earth Rune x15", xOfItem(ItemID.EARTH_RUNE, 15), xOfItem(ItemID.DUST_RUNE, 15), xOfItem(ItemID.MUD_RUNE, 15), xOfItem(ItemID.LAVA_RUNE, 15), item(ItemID.STAFF_OF_EARTH), item(ItemID.EARTH_BATTLESTAFF), item(ItemID.MYSTIC_EARTH_STAFF), item(ItemID.MUD_BATTLESTAFF), item(ItemID.MYSTIC_MUD_STAFF), item(ItemID.DUST_BATTLESTAFF), item(ItemID.MYSTIC_DUST_STAFF), item(ItemID.LAVA_BATTLESTAFF), item(ItemID.MYSTIC_LAVA_STAFF), item(ItemID.LAVA_BATTLESTAFF_21198), item(ItemID.MYSTIC_LAVA_STAFF_21200)),
any("Unenchanted Dragonstone Jewellery", item(ItemID.DRAGONSTONE_RING), item(ItemID.DRAGON_NECKLACE), item(ItemID.DRAGON_BRACELET), item(ItemID.DRAGONSTONE_AMULET))), any("Unenchanted Dragonstone Jewellery", item(ItemID.DRAGONSTONE_RING), item(ItemID.DRAGON_NECKLACE), item(ItemID.DRAGON_BRACELET), item(ItemID.DRAGONSTONE_AMULET))),
new SkillChallengeClue("Craft a nature rune.", item(ItemID.PURE_ESSENCE)), new SkillChallengeClue("Craft a nature rune.", item(ItemID.PURE_ESSENCE)),
new SkillChallengeClue("Catch a mottled eel with aerial fishing in Lake Molch.", any("Fish chunks or King worms", item(ItemID.FISH_CHUNKS), item(ItemID.KING_WORM)), emptySlot("No Gloves", EquipmentInventorySlot.GLOVES)), new SkillChallengeClue("Catch a mottled eel with aerial fishing in Lake Molch.", any("Fish chunks or King worms", item(ItemID.FISH_CHUNKS), item(ItemID.KING_WORM)), emptySlot("No Gloves", EquipmentInventorySlot.GLOVES), emptySlot("No Weapon", EquipmentInventorySlot.WEAPON), emptySlot("No Shield", EquipmentInventorySlot.SHIELD)),
new SkillChallengeClue("Score a goal in skullball.", true, any("Ring of Charos", item(ItemID.RING_OF_CHAROS), item(ItemID.RING_OF_CHAROSA))), new SkillChallengeClue("Score a goal in skullball.", true, any("Ring of Charos", item(ItemID.RING_OF_CHAROS), item(ItemID.RING_OF_CHAROSA))),
new SkillChallengeClue("Complete a lap of Ape atoll agility course.", true, any("Ninja Monkey Greegree", item(ItemID.NINJA_MONKEY_GREEGREE), item(ItemID.NINJA_MONKEY_GREEGREE_4025), item(ItemID.KRUK_MONKEY_GREEGREE))), new SkillChallengeClue("Complete a lap of Ape atoll agility course.", true, any("Ninja Monkey Greegree", item(ItemID.NINJA_MONKEY_GREEGREE), item(ItemID.NINJA_MONKEY_GREEGREE_4025), item(ItemID.KRUK_MONKEY_GREEGREE))),
new SkillChallengeClue("Create a super defence potion.", item(ItemID.CADANTINE_POTION_UNF), item(ItemID.WHITE_BERRIES)), new SkillChallengeClue("Create a super defence potion.", item(ItemID.CADANTINE_POTION_UNF), item(ItemID.WHITE_BERRIES)),
@@ -42,10 +42,10 @@ import javax.swing.border.EmptyBorder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ItemDefinition; import net.runelite.api.ItemDefinition;
import net.runelite.api.kit.KitType; import net.runelite.api.kit.KitType;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.PluginPanel;
import net.runelite.client.util.AsyncBufferedImage;
@Slf4j @Slf4j
@Singleton @Singleton
@@ -30,9 +30,9 @@ import javax.swing.JPanel;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import net.runelite.api.ItemDefinition; import net.runelite.api.ItemDefinition;
import net.runelite.api.kit.KitType; import net.runelite.api.kit.KitType;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.util.AsyncBufferedImage;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
class ItemPanel extends JPanel class ItemPanel extends JPanel
@@ -40,7 +40,7 @@ import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.border.CompoundBorder; import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.util.LinkBrowser; import net.runelite.client.util.LinkBrowser;
import net.runelite.client.util.StackFormatter; import net.runelite.client.util.StackFormatter;
@@ -25,7 +25,7 @@
package net.runelite.client.plugins.grandexchange; package net.runelite.client.plugins.grandexchange;
import lombok.Value; import lombok.Value;
import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.util.AsyncBufferedImage;
@Value @Value
class GrandExchangeItems class GrandExchangeItems
@@ -46,7 +46,7 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ItemDefinition; import net.runelite.api.ItemDefinition;
import net.runelite.client.callback.ClientThread; import net.runelite.client.callback.ClientThread;
import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.components.IconTextField; import net.runelite.client.ui.components.IconTextField;
@@ -31,12 +31,12 @@ import java.util.List;
import javax.inject.Singleton; import javax.inject.Singleton;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.game.ItemVariationMapping; import net.runelite.client.game.ItemVariationMapping;
import net.runelite.client.plugins.inventorysetups.InventorySetupItem; import net.runelite.client.plugins.inventorysetups.InventorySetupItem;
import net.runelite.client.plugins.inventorysetups.InventorySetupPlugin; import net.runelite.client.plugins.inventorysetups.InventorySetupPlugin;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.util.AsyncBufferedImage;
@Singleton @Singleton
abstract class InventorySetupContainerPanel extends JPanel abstract class InventorySetupContainerPanel extends JPanel
@@ -31,7 +31,7 @@ import javax.inject.Singleton;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.util.AsyncBufferedImage;
@Singleton @Singleton
class InventorySetupSlot extends JPanel class InventorySetupSlot extends JPanel
@@ -667,6 +667,7 @@ public class ItemChargePlugin extends Plugin
int lastExplorerRingCharge = -1; int lastExplorerRingCharge = -1;
if (lastExplorerRingCharge != explorerRingCharge) if (lastExplorerRingCharge != explorerRingCharge)
{ {
lastExplorerRingCharge = explorerRingCharge;
updateExplorerRingCharges(explorerRingCharge); updateExplorerRingCharges(explorerRingCharge);
} }
} }
@@ -35,6 +35,7 @@ import static net.runelite.api.widgets.WidgetID.LOOTING_BAG_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.SEED_BOX_GROUP_ID; import static net.runelite.api.widgets.WidgetID.SEED_BOX_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.KINGDOM_GROUP_ID; import static net.runelite.api.widgets.WidgetID.KINGDOM_GROUP_ID;
import net.runelite.api.widgets.WidgetItem; import net.runelite.api.widgets.WidgetItem;
import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.WidgetItemOverlay; import net.runelite.client.ui.overlay.WidgetItemOverlay;
import net.runelite.client.ui.overlay.components.TextComponent; import net.runelite.client.ui.overlay.components.TextComponent;
@@ -43,11 +44,14 @@ import net.runelite.client.ui.overlay.components.TextComponent;
class ItemIdentificationOverlay extends WidgetItemOverlay class ItemIdentificationOverlay extends WidgetItemOverlay
{ {
private final ItemIdentificationPlugin plugin; private final ItemIdentificationPlugin plugin;
private final ItemManager itemManager;
@Inject @Inject
ItemIdentificationOverlay(final ItemIdentificationPlugin plugin) ItemIdentificationOverlay(ItemIdentificationPlugin plugin, ItemManager itemManager)
{ {
this.plugin = plugin; this.plugin = plugin;
this.itemManager = itemManager;
showOnInventory(); showOnInventory();
showOnBank(); showOnBank();
showOnInterfaces(KEPT_ON_DEATH_GROUP_ID, GUIDE_PRICE_GROUP_ID, LOOTING_BAG_GROUP_ID, SEED_BOX_GROUP_ID, KINGDOM_GROUP_ID); showOnInterfaces(KEPT_ON_DEATH_GROUP_ID, GUIDE_PRICE_GROUP_ID, LOOTING_BAG_GROUP_ID, SEED_BOX_GROUP_ID, KINGDOM_GROUP_ID);
@@ -56,7 +60,7 @@ class ItemIdentificationOverlay extends WidgetItemOverlay
@Override @Override
public void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem itemWidget) public void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem itemWidget)
{ {
ItemIdentification iden = ItemIdentification.get(itemId); ItemIdentification iden = findItemIdentification(itemId);
if (iden == null) if (iden == null)
{ {
return; return;
@@ -98,7 +102,6 @@ class ItemIdentificationOverlay extends WidgetItemOverlay
graphics.setFont(FontManager.getRunescapeSmallFont()); graphics.setFont(FontManager.getRunescapeSmallFont());
renderText(graphics, itemWidget.getCanvasBounds(), iden); renderText(graphics, itemWidget.getCanvasBounds(), iden);
} }
private void renderText(Graphics2D graphics, Rectangle bounds, ItemIdentification iden) private void renderText(Graphics2D graphics, Rectangle bounds, ItemIdentification iden)
@@ -117,4 +120,10 @@ class ItemIdentificationOverlay extends WidgetItemOverlay
} }
textComponent.render(graphics); textComponent.render(graphics);
} }
private ItemIdentification findItemIdentification(final int itemID)
{
final int realItemId = itemManager.canonicalize(itemID);
return ItemIdentification.get(realItemId);
}
} }
@@ -115,4 +115,4 @@ public class ItemIdentificationPlugin extends Plugin
this.showOres = config.showOres(); this.showOres = config.showOres();
this.showGems = config.showGems(); this.showGems = config.showGems();
} }
} }
@@ -30,7 +30,7 @@ import java.util.Map;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
enum Book enum Book
@@ -50,7 +50,7 @@ import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
@@ -336,7 +336,7 @@ class LootTrackerBox extends JPanel
BufferedImage transparentImage = ImageUtil.alphaOffset(itemImage, .3f); BufferedImage transparentImage = ImageUtil.alphaOffset(itemImage, .3f);
imageLabel.setIcon(new ImageIcon(transparentImage)); imageLabel.setIcon(new ImageIcon(transparentImage));
}; };
itemImage.onChanged(addTransparency); itemImage.onLoaded(addTransparency);
addTransparency.run(); addTransparency.run();
} }
else else
@@ -1,477 +0,0 @@
/*
* Copyright (c) 2018, Ethan <https://github.com/shmeeps>
* 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.prayer;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import net.runelite.api.ItemID;
@AllArgsConstructor
@Getter(AccessLevel.PACKAGE)
enum PrayerItems
{
// Blessings
PEACEFUL_BLESSING(ItemID.PEACEFUL_BLESSING, 1),
HOLY_BLESSING(ItemID.HOLY_BLESSING, 1),
UNHOLY_BLESSING(ItemID.UNHOLY_BLESSING, 1),
ANCIENT_BLESSING(ItemID.ANCIENT_BLESSING, 1),
HONOURABLE_BLESSING(ItemID.HONOURABLE_BLESSING, 1),
WAR_BLESSING(ItemID.WAR_BLESSING, 1),
RADAS_BLESSING_2(ItemID.RADAS_BLESSING_2, 1),
RADAS_BLESSING_3(ItemID.RADAS_BLESSING_3, 1),
RADAS_BLESSING_4(ItemID.RADAS_BLESSING_4, 2),
// Rings
EXPLORERS_RING(ItemID.EXPLORERS_RING, 1),
EXPLORERS_RING_1(ItemID.EXPLORERS_RING_1, 1),
EXPLORERS_RING_2(ItemID.EXPLORERS_RING_2, 1),
EXPLORERS_RING_3(ItemID.EXPLORERS_RING_3, 1),
EXPLORERS_RING_4(ItemID.EXPLORERS_RING_4, 1),
RING_OF_SUFFERING(ItemID.RING_OF_SUFFERING, 2),
RING_OF_SUFFERING_R(ItemID.RING_OF_SUFFERING_R, 2),
RING_OF_SUFFERING_I(ItemID.RING_OF_SUFFERING_I, 4),
RING_OF_SUFFERING_RI(ItemID.RING_OF_SUFFERING_RI, 4),
RING_OF_THE_GODS(ItemID.RING_OF_THE_GODS, 4),
RING_OF_THE_GODS_I(ItemID.RING_OF_THE_GODS_I, 8),
// Necklaces
AMULET_OF_POWER(ItemID.AMULET_OF_POWER, 1),
BEADS_OF_THE_DEAD(ItemID.BEADS_OF_THE_DEAD, 1),
OCCULT_NECKLACE(ItemID.OCCULT_NECKLACE, 2),
OCCULT_NECKLACE_OR(ItemID.OCCULT_NECKLACE_OR, 2),
AMULET_OF_TORTURE(ItemID.AMULET_OF_TORTURE, 2),
AMULET_OF_TORTURE_OR(ItemID.AMULET_OF_TORTURE_OR, 2),
NECKLACE_OF_ANGUISH(ItemID.NECKLACE_OF_ANGUISH, 2),
NECKLACE_OF_ANGUISH_OR(ItemID.NECKLACE_OF_ANGUISH_OR, 2),
AMULET_OF_GLORY(ItemID.AMULET_OF_GLORY, 3),
AMULET_OF_GLORY1(ItemID.AMULET_OF_GLORY1, 3),
AMULET_OF_GLORY2(ItemID.AMULET_OF_GLORY2, 3),
AMULET_OF_GLORY3(ItemID.AMULET_OF_GLORY3, 3),
AMULET_OF_GLORY4(ItemID.AMULET_OF_GLORY4, 3),
AMULET_OF_GLORY5(ItemID.AMULET_OF_GLORY5, 3),
AMULET_OF_GLORY6(ItemID.AMULET_OF_GLORY6, 3),
AMULET_OF_GLORY_T(ItemID.AMULET_OF_GLORY_T, 3),
AMULET_OF_GLORY_T1(ItemID.AMULET_OF_GLORY_T1, 3),
AMULET_OF_GLORY_T2(ItemID.AMULET_OF_GLORY_T2, 3),
AMULET_OF_GLORY_T3(ItemID.AMULET_OF_GLORY_T3, 3),
AMULET_OF_GLORY_T4(ItemID.AMULET_OF_GLORY_T4, 3),
AMULET_OF_GLORY_T5(ItemID.AMULET_OF_GLORY_T5, 3),
AMULET_OF_GLORY_T6(ItemID.AMULET_OF_GLORY_T6, 3),
AMULET_OF_ETERNAL_GLORY(ItemID.AMULET_OF_ETERNAL_GLORY, 3),
AMULET_OF_GLORY_8283(ItemID.AMULET_OF_GLORY_8283, 3),
AMULET_OF_GLORY_20586(ItemID.AMULET_OF_GLORY_20586, 3),
AMULET_OF_GLORY_T_10719(ItemID.AMULET_OF_GLORY_T_10719, 3),
BERSERKER_NECKLACE(ItemID.BERSERKER_NECKLACE, 3),
SALVE_AMULET(ItemID.SALVE_AMULET, 3),
SALVE_AMULET_E(ItemID.SALVE_AMULET_E, 3),
SALVE_AMULETEI(ItemID.SALVE_AMULETEI, 3),
SALVE_AMULETI(ItemID.SALVE_AMULETI, 3),
AMULET_OF_FURY(ItemID.AMULET_OF_FURY, 5),
AMULET_OF_FURY_OR(ItemID.AMULET_OF_FURY_OR, 5),
HOLY_SYMBOL(ItemID.HOLY_SYMBOL, 8),
HOLY_SYMBOL_4682(ItemID.HOLY_SYMBOL_4682, 8),
UNHOLY_SYMBOL(ItemID.UNHOLY_SYMBOL, 8),
UNHOLY_SYMBOL_4683(ItemID.UNHOLY_SYMBOL_4683, 8),
ANCIENT_STOLE(ItemID.ANCIENT_STOLE, 10),
ARMADYL_STOLE(ItemID.ARMADYL_STOLE, 10),
BANDOS_STOLE(ItemID.BANDOS_STOLE, 10),
GUTHIX_STOLE(ItemID.GUTHIX_STOLE, 10),
SARADOMIN_STOLE(ItemID.SARADOMIN_STOLE, 10),
ZAMORAK_STOLE(ItemID.ZAMORAK_STOLE, 10),
DRAGONBONE_NECKLACE(ItemID.DRAGONBONE_NECKLACE, 12),
BONECRUSHER_NECKLACE(ItemID.BONECRUSHER_NECKLACE, 12),
// Helmet
ARMADYL_HELMET(ItemID.ARMADYL_HELMET, 1),
ANCIENT_COIF(ItemID.ANCIENT_COIF, 1),
ARMADYL_COIF(ItemID.ARMADYL_COIF, 1),
BANDOS_COIF(ItemID.BANDOS_COIF, 1),
GUTHIX_COIF(ItemID.GUTHIX_COIF, 1),
SARADOMIN_COIF(ItemID.SARADOMIN_COIF, 1),
ZAMORAK_COIF(ItemID.ZAMORAK_COIF, 1),
WHITE_FULL_HELM(ItemID.WHITE_FULL_HELM, 1),
WHITE_MED_HELM(ItemID.WHITE_MED_HELM, 1),
ANCIENT_FULL_HELM(ItemID.ANCIENT_FULL_HELM, 1),
ARMADYL_FULL_HELM(ItemID.ARMADYL_FULL_HELM, 1),
BANDOS_FULL_HELM(ItemID.BANDOS_FULL_HELM, 1),
GUTHIX_FULL_HELM(ItemID.GUTHIX_FULL_HELM, 1),
SARADOMIN_FULL_HELM(ItemID.SARADOMIN_FULL_HELM, 1),
ZAMORAK_FULL_HELM(ItemID.ZAMORAK_FULL_HELM, 1),
HELM_OF_NEITIZNOT(ItemID.HELM_OF_NEITIZNOT, 3),
INITIATE_SALLET(ItemID.INITIATE_SALLET, 3),
VERACS_HELM(ItemID.VERACS_HELM, 3),
VERACS_HELM_0(ItemID.VERACS_HELM_0, 3),
VERACS_HELM_25(ItemID.VERACS_HELM_25, 3),
VERACS_HELM_50(ItemID.VERACS_HELM_50, 3),
VERACS_HELM_75(ItemID.VERACS_HELM_75, 3),
VERACS_HELM_100(ItemID.VERACS_HELM_100, 3),
GUTHIX_HALO(ItemID.GUTHIX_HALO, 3),
SARADOMIN_HALO(ItemID.SARADOMIN_HALO, 3),
ZAMORAK_HALO(ItemID.ZAMORAK_HALO, 3),
PROSELYTE_SALLET(ItemID.PROSELYTE_SALLET, 4),
PROSELYTE_SALLET_20563(ItemID.PROSELYTE_SALLET_20563, 4),
ANCIENT_MITRE(ItemID.ANCIENT_MITRE, 5),
ARMADYL_MITRE(ItemID.ARMADYL_MITRE, 5),
BANDOS_MITRE(ItemID.BANDOS_MITRE, 5),
GUTHIX_MITRE(ItemID.GUTHIX_MITRE, 5),
SARADOMIN_MITRE(ItemID.SARADOMIN_MITRE, 5),
ZAMORAK_MITRE(ItemID.ZAMORAK_MITRE, 5),
JUSTICIAR_FACEGUARD(ItemID.JUSTICIAR_FACEGUARD, 2),
// Body
ARMADYL_CHESTPLATE(ItemID.ARMADYL_CHESTPLATE, 1),
BANDOS_CHESTPLATE(ItemID.BANDOS_CHESTPLATE, 1),
ANCIENT_DHIDE(ItemID.ANCIENT_DHIDE, 1),
ARMADYL_DHIDE(ItemID.ARMADYL_DHIDE, 1),
BANDOS_DHIDE(ItemID.BANDOS_DHIDE, 1),
GUTHIX_DRAGONHIDE(ItemID.GUTHIX_DHIDE, 1),
GUTHIX_DRAGONHIDE_10794(ItemID.GUTHIX_DRAGONHIDE, 1),
SARADOMIN_DHIDE(ItemID.SARADOMIN_DHIDE, 1),
SARADOMIN_DHIDE_10792(ItemID.SARADOMIN_DHIDE_10792, 1),
ZAMORAK_DHIDE(ItemID.ZAMORAK_DHIDE, 1),
ZAMORAK_DHIDE_10790(ItemID.ZAMORAK_DHIDE_10790, 1),
WHITE_PLATEBODY(ItemID.WHITE_PLATEBODY, 1),
WHITE_PLATEBODY_10618(ItemID.WHITE_PLATEBODY_10618, 1),
WHITE_CHAINBODY(ItemID.WHITE_CHAINBODY, 1),
ANCIENT_PLATEBODY(ItemID.ANCIENT_PLATEBODY, 1),
ARMADYL_PLATEBODY(ItemID.ARMADYL_PLATEBODY, 1),
BANDOS_PLATEBODY(ItemID.BANDOS_PLATEBODY, 1),
GUTHIX_PLATEBODY(ItemID.GUTHIX_PLATEBODY, 1),
GUTHIX_PLATEBODY_10780(ItemID.GUTHIX_PLATEBODY_10780, 1),
SARADOMIN_PLATEBODY(ItemID.SARADOMIN_PLATEBODY, 1),
ZAMORAK_PLATEBODY(ItemID.ZAMORAK_PLATEBODY, 1),
ZAMORAK_PLATEBODY_10776(ItemID.ZAMORAK_PLATEBODY_10776, 1),
ZAMORAK_ROBE_1035(ItemID.ZAMORAK_MONK_TOP, 3),
ELITE_VOID_TOP(ItemID.ELITE_VOID_TOP, 3),
ELITE_VOID_TOP_BROKEN(ItemID.ELITE_VOID_TOP_BROKEN, 3),
PRIEST_GOWN(ItemID.PRIEST_GOWN, 3),
DRUIDS_ROBE_TOP(ItemID.DRUIDS_ROBE_TOP, 4),
VERACS_BRASSARD(ItemID.VERACS_BRASSARD, 5),
VERACS_BRASSARD_0(ItemID.VERACS_BRASSARD_0, 5),
VERACS_BRASSARD_25(ItemID.VERACS_BRASSARD_25, 5),
VERACS_BRASSARD_50(ItemID.VERACS_BRASSARD_50, 5),
VERACS_BRASSARD_75(ItemID.VERACS_BRASSARD_75, 5),
VERACS_BRASSARD_100(ItemID.VERACS_BRASSARD_100, 5),
SHADE_ROBE_TOP(ItemID.SHADE_ROBE_TOP, 5),
MONKS_ROBE_TOP(ItemID.MONKS_ROBE_TOP, 6),
MONKS_ROBE_TOP_G(ItemID.MONKS_ROBE_TOP_G, 6),
INITIATE_HAUBERK(ItemID.INITIATE_HAUBERK, 6),
INITIATE_HAUBERK_10619(ItemID.INITIATE_HAUBERK_10619, 6),
ANCIENT_ROBE_TOP(ItemID.ANCIENT_ROBE_TOP, 6),
ARMADYL_ROBE_TOP(ItemID.ARMADYL_ROBE_TOP, 6),
BANDOS_ROBE_TOP(ItemID.BANDOS_ROBE_TOP, 6),
GUTHIX_ROBE_TOP(ItemID.GUTHIX_ROBE_TOP, 6),
SARADOMIN_ROBE_TOP(ItemID.SARADOMIN_ROBE_TOP, 6),
ZAMORAK_ROBE_TOP(ItemID.ZAMORAK_ROBE_TOP, 6),
PROSELYTE_HAUBERK(ItemID.PROSELYTE_HAUBERK, 8),
PROSELYTE_HAUBERK_10620(ItemID.PROSELYTE_HAUBERK_10620, 8),
PROSELYTE_HAUBERK_20564(ItemID.PROSELYTE_HAUBERK_20564, 8),
JUSTICIAR_CHESTGUARD(ItemID.JUSTICIAR_CHESTGUARD, 4),
// Legs
ARMADYL_CHAINSKIRT(ItemID.ARMADYL_CHAINSKIRT, 1),
BANDOS_TASSETS(ItemID.BANDOS_TASSETS, 1),
ANCIENT_CHAPS(ItemID.ANCIENT_CHAPS, 1),
ARMADYL_CHAPS(ItemID.ARMADYL_CHAPS, 1),
BANDOS_CHAPS(ItemID.BANDOS_CHAPS, 1),
GUTHIX_CHAPS(ItemID.GUTHIX_CHAPS, 1),
SARADOMIN_CHAPS(ItemID.SARADOMIN_CHAPS, 1),
ZAMORAK_CHAPS(ItemID.ZAMORAK_CHAPS, 1),
WHITE_PLATELEGS(ItemID.WHITE_PLATELEGS, 1),
WHITE_PLATESKIRT(ItemID.WHITE_PLATESKIRT, 1),
ANCIENT_PLATELEGS(ItemID.ANCIENT_PLATELEGS, 1),
ANCIENT_PLATESKIRT(ItemID.ANCIENT_PLATESKIRT, 1),
ARMADYL_PLATELEGS(ItemID.ARMADYL_PLATELEGS, 1),
ARMADYL_PLATESKIRT(ItemID.ARMADYL_PLATESKIRT, 1),
BANDOS_PLATELEGS(ItemID.BANDOS_PLATELEGS, 1),
BANDOS_PLATESKIRT(ItemID.BANDOS_PLATESKIRT, 1),
GUTHIX_PLATELEGS(ItemID.GUTHIX_PLATELEGS, 1),
GUTHIX_PLATESKIRT(ItemID.GUTHIX_PLATESKIRT, 1),
SARADOMIN_PLATELEGS(ItemID.SARADOMIN_PLATELEGS, 1),
SARADOMIN_PLATESKIRT(ItemID.SARADOMIN_PLATESKIRT, 1),
ZAMORAK_PLATELEGS(ItemID.ZAMORAK_PLATELEGS, 1),
ZAMORAK_PLATESKIRT(ItemID.ZAMORAK_PLATESKIRT, 1),
ZAMORAK_ROBE(ItemID.ZAMORAK_MONK_BOTTOM, 3),
ELITE_VOID_ROBE(ItemID.ELITE_VOID_ROBE, 3),
ELITE_VOID_ROBE_BROKEN(ItemID.ELITE_VOID_ROBE_BROKEN, 3),
PRIEST_GOWN_428(ItemID.PRIEST_GOWN_428, 3),
DRUIDS_ROBE(ItemID.DRUIDS_ROBE, 4),
SHADE_ROBE(ItemID.SHADE_ROBE, 4),
VERACS_PLATESKIRT(ItemID.VERACS_PLATESKIRT, 4),
VERACS_PLATESKIRT_0(ItemID.VERACS_PLATESKIRT_0, 4),
VERACS_PLATESKIRT_25(ItemID.VERACS_PLATESKIRT_25, 4),
VERACS_PLATESKIRT_50(ItemID.VERACS_PLATESKIRT_50, 4),
VERACS_PLATESKIRT_75(ItemID.VERACS_PLATESKIRT_75, 4),
VERACS_PLATESKIRT_100(ItemID.VERACS_PLATESKIRT_100, 4),
MONKS_ROBE(ItemID.MONKS_ROBE, 5),
MONKS_ROBE_G(ItemID.MONKS_ROBE_G, 5),
INITIATE_CUISSE(ItemID.INITIATE_CUISSE, 5),
ANCIENT_ROBE_LEGS(ItemID.ANCIENT_ROBE_LEGS, 5),
ARMADYL_ROBE_LEGS(ItemID.ARMADYL_ROBE_LEGS, 5),
BANDOS_ROBE_LEGS(ItemID.BANDOS_ROBE_LEGS, 5),
GUTHIX_ROBE_LEGS(ItemID.GUTHIX_ROBE_LEGS, 5),
SARADOMIN_ROBE_LEGS(ItemID.SARADOMIN_ROBE_LEGS, 5),
ZAMORAK_ROBE_LEGS(ItemID.ZAMORAK_ROBE_LEGS, 5),
PROSELYTE_CUISSE(ItemID.PROSELYTE_CUISSE, 6),
PROSELYTE_CUISSE_20565(ItemID.PROSELYTE_CUISSE_20565, 6),
PROSELYTE_TASSET(ItemID.PROSELYTE_TASSET, 6),
JUSTICIAR_LEGGUARDS(ItemID.JUSTICIAR_LEGGUARDS, 4),
// Boots
BANDOS_BOOTS(ItemID.BANDOS_BOOTS, 1),
WHITE_BOOTS(ItemID.WHITE_BOOTS, 1),
ANCIENT_DHIDE_BOOTS(ItemID.ANCIENT_DHIDE_BOOTS, 1),
ARMADYL_DHIDE_BOOTS(ItemID.ARMADYL_DHIDE_BOOTS, 1),
BANDOS_DHIDE_BOOTS(ItemID.BANDOS_DHIDE_BOOTS, 1),
GUTHIX_DHIDE_BOOTS(ItemID.GUTHIX_DHIDE_BOOTS, 1),
SARADOMIN_DHIDE_BOOTS(ItemID.SARADOMIN_DHIDE_BOOTS, 1),
ZAMORAK_DHIDE_BOOTS(ItemID.ZAMORAK_DHIDE_BOOTS, 1),
GUARDIAN_BOOTS(ItemID.GUARDIAN_BOOTS, 2),
HOLY_SANDALS(ItemID.HOLY_SANDALS, 3),
DEVOUT_BOOTS(ItemID.DEVOUT_BOOTS, 5),
// Gloves
ANCIENT_BRACERS(ItemID.ANCIENT_BRACERS, 1),
ARMADYL_BRACERS(ItemID.ARMADYL_BRACERS, 1),
BANDOS_BRACERS(ItemID.BANDOS_BRACERS, 1),
GUTHIX_BRACERS(ItemID.GUTHIX_BRACERS, 1),
SARADOMIN_BRACERS(ItemID.SARADOMIN_BRACERS, 1),
ZAMORAK_BRACERS(ItemID.ZAMORAK_BRACERS, 1),
WHITE_GLOVES(ItemID.WHITE_GLOVES, 1),
TORMENTED_BRACELET(ItemID.TORMENTED_BRACELET, 2),
HOLY_WRAPS(ItemID.HOLY_WRAPS, 3),
// Capes
MYTHICAL_CAPE(ItemID.MYTHICAL_CAPE, 1),
MYTHICAL_CAPE_22114(ItemID.MYTHICAL_CAPE_22114, 1),
FIRE_CAPE(ItemID.FIRE_CAPE, 2),
FIRE_CAPE_10566(ItemID.FIRE_CAPE_10566, 2),
FIRE_CAPE_10637(ItemID.FIRE_CAPE_10637, 2),
FIRE_CAPE_BROKEN(ItemID.FIRE_CAPE_BROKEN, 2),
INFERNAL_CAPE(ItemID.INFERNAL_CAPE, 2),
INFERNAL_CAPE_21297(ItemID.INFERNAL_CAPE_21297, 2),
INFERNAL_CAPE_BROKEN(ItemID.INFERNAL_CAPE_BROKEN, 2),
ARDOUGNE_CLOAK_1(ItemID.ARDOUGNE_CLOAK_1, 2),
ANCIENT_CLOAK(ItemID.ANCIENT_CLOAK, 3),
ARMADYL_CLOAK(ItemID.ARMADYL_CLOAK, 3),
BANDOS_CLOAK(ItemID.BANDOS_CLOAK, 3),
GUTHIX_CLOAK(ItemID.GUTHIX_CLOAK, 3),
SARADOMIN_CLOAK(ItemID.SARADOMIN_CLOAK, 3),
ZAMORAK_CLOAK(ItemID.ZAMORAK_CLOAK, 3),
ATTACK_CAPET(ItemID.ATTACK_CAPET, 4),
STRENGTH_CAPET(ItemID.STRENGTH_CAPET, 4),
DEFENCE_CAPET(ItemID.DEFENCE_CAPET, 4),
RANGING_CAPET(ItemID.RANGING_CAPET, 4),
PRAYER_CAPET(ItemID.PRAYER_CAPET, 4),
MAGIC_CAPET(ItemID.MAGIC_CAPET, 4),
RUNECRAFT_CAPET(ItemID.RUNECRAFT_CAPET, 4),
CONSTRUCT_CAPET(ItemID.CONSTRUCT_CAPET, 4),
HITPOINTS_CAPET(ItemID.HITPOINTS_CAPET, 4),
AGILITY_CAPET(ItemID.AGILITY_CAPET, 4),
HERBLORE_CAPET(ItemID.HERBLORE_CAPET, 4),
THIEVING_CAPET(ItemID.THIEVING_CAPET, 4),
CRAFTING_CAPET(ItemID.CRAFTING_CAPET, 4),
FLETCHING_CAPET(ItemID.FLETCHING_CAPET, 4),
SLAYER_CAPET(ItemID.SLAYER_CAPET, 4),
HUNTER_CAPET(ItemID.HUNTER_CAPET, 4),
MINING_CAPET(ItemID.MINING_CAPET, 4),
SMITHING_CAPET(ItemID.SMITHING_CAPET, 4),
FISHING_CAPET(ItemID.FISHING_CAPET, 4),
COOKING_CAPET(ItemID.COOKING_CAPET, 4),
FIREMAKING_CAPET(ItemID.FIREMAKING_CAPET, 4),
WOODCUT_CAPET(ItemID.WOODCUT_CAPET, 4),
FARMING_CAPET(ItemID.FARMING_CAPET, 4),
QUEST_POINT_CAPE_T(ItemID.QUEST_POINT_CAPE_T, 4),
MUSIC_CAPET(ItemID.MUSIC_CAPET, 4),
ACHIEVEMENT_DIARY_CAPE(ItemID.ACHIEVEMENT_DIARY_CAPE, 4),
ACHIEVEMENT_DIARY_CAPE_T(ItemID.ACHIEVEMENT_DIARY_CAPE_T, 4),
MAX_CAPE(ItemID.MAX_CAPE, 4),
MAX_CAPE_13282(ItemID.MAX_CAPE_13282, 4),
MAX_CAPE_13342(ItemID.MAX_CAPE_13342, 4),
ACCUMULATOR_MAX_CAPE(ItemID.ACCUMULATOR_MAX_CAPE, 4),
ARDOUGNE_MAX_CAPE(ItemID.ARDOUGNE_MAX_CAPE, 4),
ASSEMBLER_MAX_CAPE(ItemID.ASSEMBLER_MAX_CAPE, 4),
ASSEMBLER_MAX_CAPE_BROKEN(ItemID.ASSEMBLER_MAX_CAPE_BROKEN, 4),
INFERNAL_MAX_CAPE(ItemID.INFERNAL_MAX_CAPE, 4),
INFERNAL_MAX_CAPE_21285(ItemID.INFERNAL_MAX_CAPE_21285, 4),
INFERNAL_MAX_CAPE_BROKEN(ItemID.INFERNAL_MAX_CAPE_BROKEN, 4),
FIRE_MAX_CAPE(ItemID.FIRE_MAX_CAPE, 4),
FIRE_MAX_CAPE_21186(ItemID.FIRE_MAX_CAPE_21186, 4),
FIRE_MAX_CAPE_BROKEN(ItemID.FIRE_MAX_CAPE_BROKEN, 4),
GUTHIX_MAX_CAPE(ItemID.GUTHIX_MAX_CAPE, 4),
IMBUED_GUTHIX_MAX_CAPE(ItemID.IMBUED_GUTHIX_MAX_CAPE, 4),
SARADOMIN_MAX_CAPE(ItemID.SARADOMIN_MAX_CAPE, 4),
IMBUED_SARADOMIN_MAX_CAPE(ItemID.IMBUED_SARADOMIN_MAX_CAPE, 4),
ZAMORAK_MAX_CAPE(ItemID.ZAMORAK_MAX_CAPE, 4),
IMBUED_ZAMORAK_MAX_CAPE(ItemID.IMBUED_ZAMORAK_MAX_CAPE, 4),
ARDOUGNE_CLOAK_2(ItemID.ARDOUGNE_CLOAK_2, 4),
ARDOUGNE_CLOAK_3(ItemID.ARDOUGNE_CLOAK_3, 5),
_3RD_AGE_CLOAK(ItemID._3RD_AGE_CLOAK, 5),
ARDOUGNE_CLOAK_4(ItemID.ARDOUGNE_CLOAK_4, 6),
// Weapons
ANCIENT_STAFF(ItemID.ANCIENT_STAFF, -1),
ARMADYL_CROSSBOW(ItemID.ARMADYL_CROSSBOW, 1),
BRONZE_MACE(ItemID.BRONZE_MACE, 1),
IRON_MACE(ItemID.IRON_MACE, 1),
WHITE_DAGGER(ItemID.WHITE_DAGGER, 1),
WHITE_SCIMITAR(ItemID.WHITE_SCIMITAR, 1),
WHITE_CLAWS(ItemID.WHITE_CLAWS, 1),
WHITE_SWORD(ItemID.WHITE_SWORD, 1),
WHITE_LONGSWORD(ItemID.WHITE_LONGSWORD, 1),
WHITE_BATTLEAXE(ItemID.WHITE_BATTLEAXE, 1),
WHITE_WARHAMMER(ItemID.WHITE_WARHAMMER, 1),
WHITE_2H_SWORD(ItemID.WHITE_2H_SWORD, 1),
WHITE_HALBERD(ItemID.WHITE_HALBERD, 1),
WHITE_MAGIC_STAFF(ItemID.WHITE_MAGIC_STAFF, 1),
SARADOMIN_SWORD(ItemID.SARADOMIN_SWORD, 2),
SARADOMINS_BLESSED_SWORD(ItemID.SARADOMINS_BLESSED_SWORD, 2),
STEEL_MACE(ItemID.STEEL_MACE, 2),
BLACK_MACE(ItemID.BLACK_MACE, 2),
ZAMORAKIAN_SPEAR(ItemID.ZAMORAKIAN_SPEAR, 2),
ZAMORAKIAN_HASTA(ItemID.ZAMORAKIAN_HASTA, 2),
ADAMANT_MACE(ItemID.ADAMANT_MACE, 3),
ANCIENT_MACE(ItemID.ANCIENT_MACE, 3),
MITHRIL_MACE(ItemID.MITHRIL_MACE, 3),
WHITE_MACE(ItemID.WHITE_MACE, 3),
LUNAR_STAFF(ItemID.LUNAR_STAFF, 3),
RUNE_MACE(ItemID.RUNE_MACE, 4),
ROLLING_PIN(ItemID.ROLLING_PIN, 4),
TWISTED_BOW(ItemID.TWISTED_BOW, 4),
DRAGON_MACE(ItemID.DRAGON_MACE, 5),
WOLFBANE(ItemID.WOLFBANE, 5),
SILVER_SICKLEB(ItemID.SILVER_SICKLE_B, 5),
TOKTZMEJTAL(ItemID.TOKTZMEJTAL, 5),
IVANDIS_FLAIL(ItemID.IVANDIS_FLAIL, 5),
ANCIENT_CROZIER(ItemID.ANCIENT_CROZIER, 6),
ARMADYL_CROZIER(ItemID.ARMADYL_CROZIER, 6),
BANDOS_CROZIER(ItemID.BANDOS_CROZIER, 6),
GUTHIX_CROZIER(ItemID.GUTHIX_CROZIER, 6),
SARADOMIN_CROZIER(ItemID.SARADOMIN_CROZIER, 6),
ZAMORAK_CROZIER(ItemID.ZAMORAK_CROZIER, 6),
VERACS_FLAIL(ItemID.VERACS_FLAIL, 6),
VERACS_FLAIL_0(ItemID.VERACS_FLAIL_0, 6),
VERACS_FLAIL_25(ItemID.VERACS_FLAIL_25, 6),
VERACS_FLAIL_50(ItemID.VERACS_FLAIL_50, 6),
VERACS_FLAIL_75(ItemID.VERACS_FLAIL_75, 6),
VERACS_FLAIL_100(ItemID.VERACS_FLAIL_100, 6),
VOID_KNIGHT_MACE(ItemID.VOID_KNIGHT_MACE, 6),
VOID_KNIGHT_MACE_BROKEN(ItemID.VOID_KNIGHT_MACE_BROKEN, 6),
BANDOS_GODSWORD(ItemID.BANDOS_GODSWORD, 8),
BANDOS_GODSWORD_OR(ItemID.BANDOS_GODSWORD_OR, 8),
BANDOS_GODSWORD_20782(ItemID.BANDOS_GODSWORD_20782, 8),
BANDOS_GODSWORD_21060(ItemID.BANDOS_GODSWORD_21060, 8),
ARMADYL_GODSWORD(ItemID.ARMADYL_GODSWORD, 8),
ARMADYL_GODSWORD_OR(ItemID.ARMADYL_GODSWORD_OR, 8),
ARMADYL_GODSWORD_20593(ItemID.ARMADYL_GODSWORD_20593, 8),
SARADOMIN_GODSWORD(ItemID.SARADOMIN_GODSWORD, 8),
SARADOMIN_GODSWORD_OR(ItemID.SARADOMIN_GODSWORD_OR, 8),
ZAMORAK_GODSWORD(ItemID.ZAMORAK_GODSWORD, 8),
ZAMORAK_GODSWORD_OR(ItemID.ZAMORAK_GODSWORD_OR, 8),
// Shields
WHITE_KITESHIELD(ItemID.WHITE_KITESHIELD, 1),
WHITE_SQ_SHIELD(ItemID.WHITE_SQ_SHIELD, 1),
SPIRIT_SHIELD(ItemID.SPIRIT_SHIELD, 1),
FALADOR_SHIELD_1(ItemID.FALADOR_SHIELD_1, 1),
KHAREDSTS_MEMOIRS(ItemID.KHAREDSTS_MEMOIRS, 1),
BLESSED_SPIRIT_SHIELD(ItemID.BLESSED_SPIRIT_SHIELD, 3),
ARCANE_SPIRIT_SHIELD(ItemID.ARCANE_SPIRIT_SHIELD, 3),
SPECTRAL_SPIRIT_SHIELD(ItemID.SPECTRAL_SPIRIT_SHIELD, 3),
ELYSIAN_SPIRIT_SHIELD(ItemID.ELYSIAN_SPIRIT_SHIELD, 3),
ELYSIAN_SPIRIT_SHIELD_19559(ItemID.ELYSIAN_SPIRIT_SHIELD_19559, 3),
FALADOR_SHIELD_2(ItemID.FALADOR_SHIELD_2, 3),
FALADOR_SHIELD_3(ItemID.FALADOR_SHIELD_3, 4),
BROODOO_SHIELD(ItemID.BROODOO_SHIELD, 5),
BROODOO_SHIELD_6257(ItemID.BROODOO_SHIELD_6257, 5),
BROODOO_SHIELD_6279(ItemID.BROODOO_SHIELD_6279, 5),
BROODOO_SHIELD_1(ItemID.BROODOO_SHIELD_1, 5),
BROODOO_SHIELD_1_6255(ItemID.BROODOO_SHIELD_1_6255, 5),
BROODOO_SHIELD_1_6277(ItemID.BROODOO_SHIELD_1_6277, 5),
BROODOO_SHIELD_2(ItemID.BROODOO_SHIELD_2, 5),
BROODOO_SHIELD_2_6253(ItemID.BROODOO_SHIELD_2_6253, 5),
BROODOO_SHIELD_2_6275(ItemID.BROODOO_SHIELD_2_6275, 5),
BROODOO_SHIELD_3(ItemID.BROODOO_SHIELD_3, 5),
BROODOO_SHIELD_3_6251(ItemID.BROODOO_SHIELD_3_6251, 5),
BROODOO_SHIELD_3_6273(ItemID.BROODOO_SHIELD_3_6273, 5),
BROODOO_SHIELD_4(ItemID.BROODOO_SHIELD_4, 5),
BROODOO_SHIELD_4_6249(ItemID.BROODOO_SHIELD_4_6249, 5),
BROODOO_SHIELD_4_6271(ItemID.BROODOO_SHIELD_4_6271, 5),
BROODOO_SHIELD_5(ItemID.BROODOO_SHIELD_5, 5),
BROODOO_SHIELD_5_6247(ItemID.BROODOO_SHIELD_5_6247, 5),
BROODOO_SHIELD_5_6269(ItemID.BROODOO_SHIELD_5_6269, 5),
BROODOO_SHIELD_6(ItemID.BROODOO_SHIELD_6, 5),
BROODOO_SHIELD_6_6245(ItemID.BROODOO_SHIELD_6_6245, 5),
BROODOO_SHIELD_6_6267(ItemID.BROODOO_SHIELD_6_6267, 5),
BROODOO_SHIELD_7(ItemID.BROODOO_SHIELD_7, 5),
BROODOO_SHIELD_7_6243(ItemID.BROODOO_SHIELD_7_6243, 5),
BROODOO_SHIELD_7_6265(ItemID.BROODOO_SHIELD_7_6265, 5),
BROODOO_SHIELD_8(ItemID.BROODOO_SHIELD_8, 5),
BROODOO_SHIELD_8_6241(ItemID.BROODOO_SHIELD_8_6241, 5),
BROODOO_SHIELD_8_6263(ItemID.BROODOO_SHIELD_8_6263, 5),
BROODOO_SHIELD_9(ItemID.BROODOO_SHIELD_9, 5),
BROODOO_SHIELD_9_6239(ItemID.BROODOO_SHIELD_9_6239, 5),
BROODOO_SHIELD_9_6261(ItemID.BROODOO_SHIELD_9_6261, 5),
BROODOO_SHIELD_10(ItemID.BROODOO_SHIELD_10, 5),
BROODOO_SHIELD_10_6237(ItemID.BROODOO_SHIELD_10_6237, 5),
BROODOO_SHIELD_10_6259(ItemID.BROODOO_SHIELD_10_6259, 5),
BOOK_OF_DARKNESS(ItemID.BOOK_OF_DARKNESS, 5),
DAMAGED_BOOK_12611(ItemID.DAMAGED_BOOK_12611, 5),
BOOK_OF_BALANCE(ItemID.BOOK_OF_BALANCE, 5),
DAMAGED_BOOK_3843(ItemID.DAMAGED_BOOK_3843, 5),
BOOK_OF_LAW(ItemID.BOOK_OF_LAW, 5),
DAMAGED_BOOK_12609(ItemID.DAMAGED_BOOK_12609, 5),
BOOK_OF_WAR(ItemID.BOOK_OF_WAR, 5),
DAMAGED_BOOK_12607(ItemID.DAMAGED_BOOK_12607, 5),
HOLY_BOOK(ItemID.HOLY_BOOK, 5),
DAMAGED_BOOK(ItemID.DAMAGED_BOOK, 5),
UNHOLY_BOOK(ItemID.UNHOLY_BOOK, 5),
DAMAGED_BOOK_3841(ItemID.DAMAGED_BOOK_3841, 5),
FALADOR_SHIELD_4(ItemID.FALADOR_SHIELD_4, 5);
private static final Map<Integer, Integer> prayerBonuses;
private final int itemId;
private final int prayerBonus;
static
{
ImmutableMap.Builder<Integer, Integer> builder = new ImmutableMap.Builder<>();
for (PrayerItems item : values())
{
builder.put(item.getItemId(), item.getPrayerBonus());
}
prayerBonuses = builder.build();
}
static int getItemPrayerBonus(int itemId)
{
Integer value = prayerBonuses.get(itemId);
return value == null ? 0 : value;
}
}
@@ -43,11 +43,13 @@ import net.runelite.api.events.GameTick;
import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.ItemContainerChanged;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventBus;
import net.runelite.client.game.ItemManager;
import net.runelite.client.game.SpriteManager; import net.runelite.client.game.SpriteManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.http.api.item.ItemStats;
@PluginDescriptor( @PluginDescriptor(
name = "Prayer", name = "Prayer",
@@ -91,6 +93,9 @@ public class PrayerPlugin extends Plugin
@Inject @Inject
private EventBus eventBus; private EventBus eventBus;
@Inject
private ItemManager itemManager;
@Getter(AccessLevel.PACKAGE) @Getter(AccessLevel.PACKAGE)
private PrayerFlickLocation prayerFlickLocation; private PrayerFlickLocation prayerFlickLocation;
@Getter(AccessLevel.PACKAGE) @Getter(AccessLevel.PACKAGE)
@@ -277,8 +282,11 @@ public class PrayerPlugin extends Plugin
} }
} }
int bonus = PrayerItems.getItemPrayerBonus(item.getId()); ItemStats is = itemManager.getItemStats(item.getId(), false);
total += bonus; if (is != null && is.getEquipment() != null)
{
total += is.getEquipment().getPrayer();
}
} }
if (hasSanfew || hasSuperRestore || hasPrayerPotion) if (hasSanfew || hasSuperRestore || hasPrayerPotion)
@@ -49,7 +49,6 @@ import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.config.Keybind; import net.runelite.client.config.Keybind;
import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventBus;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.input.KeyManager; import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
@@ -60,6 +59,7 @@ import static net.runelite.client.plugins.pvptools.PvpToolsPanel.htmlLabel;
import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.NavigationButton;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.util.HotkeyListener; import net.runelite.client.util.HotkeyListener;
import net.runelite.client.util.ImageUtil; import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.PvPUtil; import net.runelite.client.util.PvPUtil;
@@ -47,7 +47,6 @@ import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.Experience; import net.runelite.api.Experience;
import net.runelite.api.Skill; import net.runelite.api.Skill;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.skillcalculator.SkillCalculatorConfig; import net.runelite.client.plugins.skillcalculator.SkillCalculatorConfig;
import net.runelite.client.plugins.skillcalculator.UICalculatorInputArea; import net.runelite.client.plugins.skillcalculator.UICalculatorInputArea;
@@ -61,6 +60,7 @@ import net.runelite.client.plugins.skillcalculator.banked.components.SelectionGr
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.DynamicGridLayout; import net.runelite.client.ui.DynamicGridLayout;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.util.AsyncBufferedImage;
@Slf4j @Slf4j
public class BankedCalculator extends JPanel public class BankedCalculator extends JPanel
@@ -37,11 +37,11 @@ import javax.swing.border.EmptyBorder;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.plugins.skillcalculator.banked.BankedCalculator; import net.runelite.client.plugins.skillcalculator.banked.BankedCalculator;
import net.runelite.client.plugins.skillcalculator.banked.beans.Activity; import net.runelite.client.plugins.skillcalculator.banked.beans.Activity;
import net.runelite.client.plugins.skillcalculator.banked.beans.BankedItem; import net.runelite.client.plugins.skillcalculator.banked.beans.BankedItem;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.util.AsyncBufferedImage;
@Getter(AccessLevel.PUBLIC) @Getter(AccessLevel.PUBLIC)
public class GridItem extends JLabel public class GridItem extends JLabel
@@ -47,7 +47,6 @@ import javax.swing.border.EmptyBorder;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import net.runelite.api.Constants; import net.runelite.api.Constants;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.skillcalculator.banked.BankedCalculator; import net.runelite.client.plugins.skillcalculator.banked.BankedCalculator;
import net.runelite.client.plugins.skillcalculator.banked.beans.Activity; import net.runelite.client.plugins.skillcalculator.banked.beans.Activity;
@@ -58,6 +57,7 @@ import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.components.ComboBoxIconEntry; import net.runelite.client.ui.components.ComboBoxIconEntry;
import net.runelite.client.ui.components.ComboBoxListRenderer; import net.runelite.client.ui.components.ComboBoxListRenderer;
import net.runelite.client.ui.components.shadowlabel.JShadowedLabel; import net.runelite.client.ui.components.shadowlabel.JShadowedLabel;
import net.runelite.client.util.AsyncBufferedImage;
public class ModifyPanel extends JPanel public class ModifyPanel extends JPanel
{ {
@@ -199,7 +199,7 @@ public class ModifyPanel extends JPanel
final boolean stackable = item.getItemInfo().isStackable() || amount > 1; final boolean stackable = item.getItemInfo().isStackable() || amount > 1;
final AsyncBufferedImage icon = itemManager.getImage(item.getItemID(), amount, stackable); final AsyncBufferedImage icon = itemManager.getImage(item.getItemID(), amount, stackable);
final Runnable resize = () -> image.setIcon(new ImageIcon(icon.getScaledInstance(ICON_SIZE.width, ICON_SIZE.height, Image.SCALE_SMOOTH))); final Runnable resize = () -> image.setIcon(new ImageIcon(icon.getScaledInstance(ICON_SIZE.width, ICON_SIZE.height, Image.SCALE_SMOOTH)));
icon.onChanged(resize); icon.onLoaded(resize);
resize.run(); resize.run();
final String itemName = item.getItemInfo().getName(); final String itemName = item.getItemInfo().getName();
@@ -254,7 +254,7 @@ public class ModifyPanel extends JPanel
final double xp = a.getXp() * xpFactor; final double xp = a.getXp() * xpFactor;
final JPanel container = createShadowedLabel(icon, a.getName(), FORMAT_COMMA.format(xp) + "xp"); final JPanel container = createShadowedLabel(icon, a.getName(), FORMAT_COMMA.format(xp) + "xp");
img.onChanged(() -> img.onLoaded(() ->
{ {
icon.setImage(img); icon.setImage(img);
container.repaint(); container.repaint();
@@ -282,7 +282,7 @@ public class ModifyPanel extends JPanel
final ComboBoxIconEntry entry = new ComboBoxIconEntry(icon, name, option); final ComboBoxIconEntry entry = new ComboBoxIconEntry(icon, name, option);
dropdown.addItem(entry); dropdown.addItem(entry);
img.onChanged(() -> img.onLoaded(() ->
{ {
icon.setImage(img); icon.setImage(img);
dropdown.revalidate(); dropdown.revalidate();
@@ -35,10 +35,10 @@ import javax.swing.JPanel;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.skillcalculator.banked.BankedCalculator; import net.runelite.client.plugins.skillcalculator.banked.BankedCalculator;
import net.runelite.client.plugins.skillcalculator.banked.beans.BankedItem; import net.runelite.client.plugins.skillcalculator.banked.beans.BankedItem;
import net.runelite.client.util.AsyncBufferedImage;
/** /**
* A grid that supports mouse events * A grid that supports mouse events
@@ -86,7 +86,6 @@ import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventBus;
import net.runelite.client.events.ChatInput; import net.runelite.client.events.ChatInput;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.game.SpriteManager; import net.runelite.client.game.SpriteManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
@@ -98,6 +97,7 @@ import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.NavigationButton;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.util.ColorUtil; import net.runelite.client.util.ColorUtil;
import net.runelite.client.util.ImageUtil; import net.runelite.client.util.ImageUtil;
import net.runelite.api.util.Text; import net.runelite.api.util.Text;
@@ -46,7 +46,6 @@ import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener; import javax.swing.event.DocumentListener;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.stonedtracker.data.BossTab; import net.runelite.client.plugins.stonedtracker.data.BossTab;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
@@ -54,6 +53,7 @@ import net.runelite.client.ui.PluginPanel;
import net.runelite.client.ui.components.IconTextField; import net.runelite.client.ui.components.IconTextField;
import net.runelite.client.ui.components.materialtabs.MaterialTab; import net.runelite.client.ui.components.materialtabs.MaterialTab;
import net.runelite.client.ui.components.materialtabs.MaterialTabGroup; import net.runelite.client.ui.components.materialtabs.MaterialTabGroup;
import net.runelite.client.util.AsyncBufferedImage;
import org.apache.commons.text.similarity.JaroWinklerDistance; import org.apache.commons.text.similarity.JaroWinklerDistance;
class SelectionPanel extends JPanel class SelectionPanel extends JPanel
@@ -289,7 +289,7 @@ class SelectionPanel extends JPanel
materialTab.setVerticalAlignment(SwingConstants.CENTER); materialTab.setVerticalAlignment(SwingConstants.CENTER);
materialTab.setPreferredSize(new Dimension(35, 35)); materialTab.setPreferredSize(new Dimension(35, 35));
}; };
image.onChanged(resize); image.onLoaded(resize);
resize.run(); resize.run();
thisTabGroup.addTab(materialTab); thisTabGroup.addTab(materialTab);
@@ -38,10 +38,10 @@ import javax.swing.SwingConstants;
import javax.swing.border.Border; import javax.swing.border.Border;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import lombok.Getter; import lombok.Getter;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.stonedtracker.data.UniqueItem; import net.runelite.client.plugins.stonedtracker.data.UniqueItem;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.util.ImageUtil; import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.StackFormatter; import net.runelite.client.util.StackFormatter;
@@ -92,7 +92,7 @@ class UniqueItemPanel extends JPanel
// in case the image is blank we will refresh it upon load // in case the image is blank we will refresh it upon load
// Should only trigger if image hasn't been added // Should only trigger if image hasn't been added
image.onChanged(() -> image.onLoaded(() ->
{ {
icon.setIcon(new ImageIcon(ImageUtil.alphaOffset(image, alpha))); icon.setIcon(new ImageIcon(ImageUtil.alphaOffset(image, alpha)));
icon.revalidate(); icon.revalidate();
@@ -42,10 +42,10 @@ import lombok.Getter;
import net.runelite.api.ItemDefinition; import net.runelite.api.ItemDefinition;
import static net.runelite.api.ItemID.*; import static net.runelite.api.ItemID.*;
import net.runelite.api.util.Text; import net.runelite.api.util.Text;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.util.StackFormatter; import net.runelite.client.util.StackFormatter;
@Singleton @Singleton
@@ -38,7 +38,7 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.timetracking.clocks.ClockManager; import net.runelite.client.plugins.timetracking.clocks.ClockManager;
import net.runelite.client.plugins.timetracking.farming.FarmingTracker; import net.runelite.client.plugins.timetracking.farming.FarmingTracker;
@@ -116,7 +116,7 @@ class TimeTrackingPanel extends PluginPanel
BufferedImage subIcon = icon.getSubimage(0, 0, 32, 32); BufferedImage subIcon = icon.getSubimage(0, 0, 32, 32);
materialTab.setIcon(new ImageIcon(subIcon.getScaledInstance(24, 24, Image.SCALE_SMOOTH))); materialTab.setIcon(new ImageIcon(subIcon.getScaledInstance(24, 24, Image.SCALE_SMOOTH)));
}; };
icon.onChanged(resize); icon.onLoaded(resize);
resize.run(); resize.run();
materialTab.setOnSelectEvent(() -> materialTab.setOnSelectEvent(() ->
@@ -15,7 +15,6 @@ import java.awt.Graphics2D;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayLayer;
@@ -24,6 +23,7 @@ import net.runelite.client.ui.overlay.OverlayPriority;
import net.runelite.client.ui.overlay.components.ImageComponent; import net.runelite.client.ui.overlay.components.ImageComponent;
import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.ui.overlay.components.TitleComponent; import net.runelite.client.ui.overlay.components.TitleComponent;
import net.runelite.client.util.AsyncBufferedImage;
@Singleton @Singleton
public class WhaleWatchersGloryOverlay extends Overlay public class WhaleWatchersGloryOverlay extends Overlay
@@ -224,11 +224,11 @@ public class XpTrackerPlugin extends Plugin
fetchXp = true; fetchXp = true;
lastWorldType = type; lastWorldType = type;
resetState(); resetState();
// Must be set from hitting the LOGGING_IN case below // Must be set from hitting the LOGGING_IN or HOPPING case below
assert initializeTracker; assert initializeTracker;
} }
} }
else if (state == GameState.LOGGING_IN) else if (state == GameState.LOGGING_IN || state == GameState.HOPPING)
{ {
initializeTracker = true; initializeTracker = true;
} }
@@ -39,7 +39,7 @@ import lombok.extern.slf4j.Slf4j;
import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.ConfigChanged;
import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.RuneLiteConfig;
import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventBus;
import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
@Singleton @Singleton
@@ -79,7 +79,7 @@ public class InfoBoxManager
if (image instanceof AsyncBufferedImage) if (image instanceof AsyncBufferedImage)
{ {
AsyncBufferedImage abi = (AsyncBufferedImage) image; AsyncBufferedImage abi = (AsyncBufferedImage) image;
abi.onChanged(() -> updateInfoBoxImage(infoBox)); abi.onLoaded(() -> updateInfoBoxImage(infoBox));
} }
} }
@@ -23,11 +23,11 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package net.runelite.client.game; package net.runelite.client.util;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JComponent; import javax.swing.JComponent;
@@ -35,7 +35,8 @@ import javax.swing.JLabel;
public class AsyncBufferedImage extends BufferedImage public class AsyncBufferedImage extends BufferedImage
{ {
private final List<Runnable> listeners = new CopyOnWriteArrayList<>(); private final List<Runnable> listeners = new ArrayList<>();
private boolean loaded;
public AsyncBufferedImage(int width, int height, int imageType) public AsyncBufferedImage(int width, int height, int imageType)
{ {
@@ -43,21 +44,31 @@ public class AsyncBufferedImage extends BufferedImage
} }
/** /**
* Call when the buffer has been changed * Call when the image has been loaded
*/ */
public void changed() public synchronized void loaded()
{ {
loaded = true;
for (Runnable r : listeners) for (Runnable r : listeners)
{ {
r.run(); r.run();
} }
listeners.clear();
} }
/** /**
* Register a function to be ran when the buffer has changed * Register a function to be ran when the image has been loaded.
* If the image is already loaded, the function will not be ran.
*/ */
public void onChanged(Runnable r) public synchronized void onLoaded(Runnable r)
{ {
if (loaded)
{
// If the image has already been loaded, further listeners will not fire. Do not
// queue them to avoid leaking listeners.
return;
}
listeners.add(r); listeners.add(r);
} }
@@ -79,7 +90,13 @@ public class AsyncBufferedImage extends BufferedImage
private ImageIcon makeIcon(JComponent c) private ImageIcon makeIcon(JComponent c)
{ {
listeners.add(c::repaint); synchronized (this)
{
if (!loaded)
{
listeners.add(c::repaint);
}
}
return new ImageIcon(this); return new ImageIcon(this);
} }
} }
@@ -1337,7 +1337,13 @@
23179, 23179,
23180, 23180,
23181, 23181,
23182 23182,
23770,
23814,
23815,
23816,
23817,
24253
], ],
"radimus notes": [ "radimus notes": [
714, 714,
@@ -2266,6 +2272,10 @@
1755, 1755,
5601 5601
], ],
"molten glass": [
1775,
24260
],
"woad leaf": [ "woad leaf": [
1793, 1793,
5738 5738
@@ -3301,10 +3311,6 @@
3755, 3755,
20573 20573
], ],
"fremennik shield": [
3758,
10826
],
"saradomin page": [ "saradomin page": [
3827, 3827,
3828, 3828,
@@ -9534,5 +9540,17 @@
24211, 24211,
24213, 24213,
24215 24215
],
"unsealed letter": [
24256,
24257
],
"v sigil": [
24258,
24259
],
"vs shield": [
24265,
24266
] ]
} }
@@ -4125,5 +4125,29 @@
"23528": 70, "23528": 70,
"23839": 13000, "23839": 13000,
"23865": 40, "23865": 40,
"23879": 13000 "23879": 13000,
"23685": 2000,
"23688": 2000,
"23691": 2000,
"23694": 2000,
"23697": 2000,
"23700": 2000,
"23703": 2000,
"23706": 2000,
"23709": 2000,
"23712": 2000,
"23715": 2000,
"23718": 2000,
"23721": 2000,
"23724": 2000,
"23727": 2000,
"23730": 2000,
"23733": 2000,
"23736": 2000,
"23739": 2000,
"23742": 2000,
"23745": 2000,
"23748": 2000,
"23751": 2000,
"23754": 2000
} }
@@ -313,6 +313,12 @@
"name": "Jade Amulet (U)", "name": "Jade Amulet (U)",
"xp": 70 "xp": 70
}, },
{
"level": 35,
"icon": 6235,
"name": "Broodoo shield",
"xp": 100
},
{ {
"level": 36, "level": 36,
"icon": 5376, "icon": 5376,
@@ -72,6 +72,18 @@
"name": "Bronze Scimitar", "name": "Bronze Scimitar",
"xp": 25 "xp": 25
}, },
{
"level": 5,
"icon": 11367,
"name": "Bronze Hasta",
"xp": 25
},
{
"level": 5,
"icon": 1237,
"name": "Bronze Spear",
"xp": 25
},
{ {
"level": 6, "level": 6,
"icon": 19570, "icon": 19570,
@@ -240,6 +252,18 @@
"name": "Iron Scimitar", "name": "Iron Scimitar",
"xp": 50 "xp": 50
}, },
{
"level": 20,
"icon": 11369,
"name": "Iron Hasta",
"xp": 50
},
{
"level": 20,
"icon": 1239,
"name": "Iron Spear",
"xp": 50
},
{ {
"level": 21, "level": 21,
"icon": 1293, "icon": 1293,
@@ -408,6 +432,18 @@
"name": "Steel Arrowtips", "name": "Steel Arrowtips",
"xp": 37.5 "xp": 37.5
}, },
{
"level": 35,
"icon": 11371,
"name": "Steel Hasta",
"xp": 75
},
{
"level": 35,
"icon": 1241,
"name": "Steel Spear",
"xp": 75
},
{ {
"level": 36, "level": 36,
"icon": 9425, "icon": 9425,
@@ -588,6 +624,18 @@
"name": "Mithril Scimitar", "name": "Mithril Scimitar",
"xp": 100 "xp": 100
}, },
{
"level": 55,
"icon": 11373,
"name": "Mithril Hasta",
"xp": 100
},
{
"level": 55,
"icon": 1243,
"name": "Mithril Spear",
"xp": 100
},
{ {
"level": 56, "level": 56,
"icon": 1299, "icon": 1299,
@@ -756,6 +804,18 @@
"name": "Adamant Scimitar", "name": "Adamant Scimitar",
"xp": 125 "xp": 125
}, },
{
"level": 75,
"icon": 11375,
"name": "Adamant Hasta",
"xp": 125
},
{
"level": 75,
"icon": 1245,
"name": "Adamant Spear",
"xp": 125
},
{ {
"level": 76, "level": 76,
"icon": 9429, "icon": 9429,
@@ -912,6 +972,18 @@
"name": "Rune Scimitar", "name": "Rune Scimitar",
"xp": 150 "xp": 150
}, },
{
"level": 90,
"icon": 11377,
"name": "Rune Hasta",
"xp": 150
},
{
"level": 90,
"icon": 1247,
"name": "Rune Spear",
"xp": 150
},
{ {
"level": 90, "level": 90,
"icon": 11283, "icon": 11283,
@@ -28,7 +28,7 @@ package net.runelite.client.plugins.grandexchange;
import net.runelite.api.GrandExchangeOffer; import net.runelite.api.GrandExchangeOffer;
import net.runelite.api.GrandExchangeOfferState; import net.runelite.api.GrandExchangeOfferState;
import net.runelite.api.ItemDefinition; import net.runelite.api.ItemDefinition;
import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.util.AsyncBufferedImage;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;