diff --git a/cache/src/main/java/net/runelite/cache/MapImageDumper.java b/cache/src/main/java/net/runelite/cache/MapImageDumper.java index 5235d97fb6..af857e796e 100644 --- a/cache/src/main/java/net/runelite/cache/MapImageDumper.java +++ b/cache/src/main/java/net/runelite/cache/MapImageDumper.java @@ -532,7 +532,7 @@ public class MapImageDumper { // this is a wall int hash = (localY << 7) + localX + (location.getId() << 14) + 0x4000_0000; - if (object.getAnInt2088() == 0) + if (object.getWallOrDoor() == 0) { hash -= Integer.MIN_VALUE; } @@ -645,7 +645,7 @@ public class MapImageDumper } int hash = (localY << 7) + localX + (location.getId() << 14) + 0x4000_0000; - if (object.getAnInt2088() == 0) + if (object.getWallOrDoor() == 0) { hash -= Integer.MIN_VALUE; } diff --git a/cache/src/main/java/net/runelite/cache/definitions/ObjectDefinition.java b/cache/src/main/java/net/runelite/cache/definitions/ObjectDefinition.java index 007c9e2ebf..473a9d6c6b 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/ObjectDefinition.java +++ b/cache/src/main/java/net/runelite/cache/definitions/ObjectDefinition.java @@ -33,8 +33,8 @@ public class ObjectDefinition { private int id; private short[] retextureToFind; - private int anInt2069 = 16; - private boolean isSolid = false; + private int decorDisplacement = 16; + private boolean isHollow = false; private String name = "null"; private int[] objectModels; private int[] objectTypes; @@ -46,8 +46,8 @@ public class ObjectDefinition private int anInt2083 = 0; private int[] anIntArray2084; private int offsetX = 0; - private boolean nonFlatShading = false; - private int anInt2088 = -1; + private boolean mergeNormals = false; + private int wallOrDoor = -1; private int animationID = -1; private int varbitID = -1; private int ambient = 0; @@ -56,20 +56,20 @@ public class ObjectDefinition private int interactType = 2; private int mapSceneID = -1; private short[] recolorToReplace; - private boolean aBool2097 = true; + private boolean shadow = true; private int modelSizeX = 128; private int modelSizeHeight = 128; private int modelSizeY = 128; private int objectID; private int offsetHeight = 0; private int offsetY = 0; - private boolean aBool2104 = false; - private int anInt2105 = -1; - private int anInt2106 = -1; + private boolean obstructsGround = false; + private int contouredGround = -1; + private int supportsItems = -1; private int[] configChangeDest; private boolean isRotated = false; private int varpID = -1; - private int anInt2110 = -1; + private int ambientSoundId = -1; private boolean aBool2111 = false; private int anInt2112 = 0; private int anInt2113 = 0; diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/ObjectLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/ObjectLoader.java index 13a3eab754..edd50668f4 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/ObjectLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/ObjectLoader.java @@ -117,15 +117,15 @@ public class ObjectLoader } else if (opcode == 19) { - def.setAnInt2088(is.readUnsignedByte()); + def.setWallOrDoor(is.readUnsignedByte()); } else if (opcode == 21) { - def.setAnInt2105(0); + def.setContouredGround(0); } else if (opcode == 22) { - def.setNonFlatShading(false); + def.setMergeNormals(true); } else if (opcode == 23) { @@ -145,7 +145,7 @@ public class ObjectLoader } else if (opcode == 28) { - def.setAnInt2069(is.readUnsignedByte()); + def.setDecorDisplacement(is.readUnsignedByte()); } else if (opcode == 29) { @@ -153,7 +153,7 @@ public class ObjectLoader } else if (opcode == 39) { - def.setContrast(is.readByte()); + def.setContrast(is.readByte() * 25); } else if (opcode >= 30 && opcode < 35) { @@ -200,7 +200,7 @@ public class ObjectLoader } else if (opcode == 64) { - def.setABool2097(false); + def.setShadow(false); } else if (opcode == 65) { @@ -236,15 +236,15 @@ public class ObjectLoader } else if (opcode == 73) { - def.setABool2104(true); + def.setObstructsGround(true); } else if (opcode == 74) { - def.setSolid(true); + def.setHollow(true); } else if (opcode == 75) { - def.setAnInt2106(is.readUnsignedByte()); + def.setSupportsItems(is.readUnsignedByte()); } else if (opcode == 77) { @@ -280,7 +280,7 @@ public class ObjectLoader } else if (opcode == 78) { - def.setAnInt2110(is.readUnsignedShort()); + def.setAmbientSoundId(is.readUnsignedShort()); def.setAnInt2083(is.readUnsignedByte()); } else if (opcode == 79) @@ -300,7 +300,7 @@ public class ObjectLoader } else if (opcode == 81) { - def.setAnInt2105(is.readUnsignedByte() * 256); + def.setContouredGround(is.readUnsignedByte() * 256); } else if (opcode == 82) { @@ -380,26 +380,26 @@ public class ObjectLoader 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)) { - def.setAnInt2088(1); + def.setWallOrDoor(1); } for (int var1 = 0; var1 < 5; ++var1) { 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); } } } diff --git a/cache/src/main/java/net/runelite/cache/definitions/savers/ObjectSaver.java b/cache/src/main/java/net/runelite/cache/definitions/savers/ObjectSaver.java index e1bb77896d..8412240817 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/savers/ObjectSaver.java +++ b/cache/src/main/java/net/runelite/cache/definitions/savers/ObjectSaver.java @@ -69,16 +69,16 @@ public class ObjectSaver { out.writeByte(18); } - if (obj.getAnInt2088() != -1) + if (obj.getWallOrDoor() != -1) { out.writeByte(19); - out.writeByte(obj.getAnInt2088()); + out.writeByte(obj.getWallOrDoor()); } - if (obj.getAnInt2105() == 0) + if (obj.getContouredGround() == 0) { out.writeByte(21); } - if (!obj.isNonFlatShading()) + if (!obj.isMergeNormals()) { out.writeByte(22); } @@ -96,11 +96,11 @@ public class ObjectSaver out.writeByte(27); } out.writeByte(28); - out.writeByte(obj.getAnInt2069()); + out.writeByte(obj.getDecorDisplacement()); out.writeByte(29); out.writeByte(obj.getAmbient()); out.writeByte(39); - out.writeByte(obj.getContrast()); + out.writeByte(obj.getContrast() / 25); for (int i = 0; i < 5; ++i) { out.writeByte(30 + i); @@ -131,7 +131,7 @@ public class ObjectSaver { out.writeByte(62); } - if (!obj.isABool2097()) + if (!obj.isShadow()) { out.writeByte(64); } @@ -152,23 +152,23 @@ public class ObjectSaver out.writeShort(obj.getOffsetHeight()); out.writeByte(72); out.writeShort(obj.getOffsetY()); - if (obj.isABool2104()) + if (obj.isObstructsGround()) { out.writeByte(73); } - if (obj.isSolid()) + if (obj.isHollow()) { out.writeByte(74); } - if (obj.getAnInt2106() != -1) + if (obj.getSupportsItems() != -1) { out.writeByte(75); - out.writeByte(obj.getAnInt2106()); + out.writeByte(obj.getSupportsItems()); } - if (obj.getAnInt2110() != -1) + if (obj.getAmbientSoundId() != -1) { out.writeByte(78); - out.writeShort(obj.getAnInt2110()); + out.writeShort(obj.getAmbientSoundId()); out.writeByte(obj.getAnInt2083()); } if (obj.getAnIntArray2084() != null) @@ -183,10 +183,10 @@ public class ObjectSaver out.writeShort(i); } } - if (obj.getAnInt2105() != -1) + if (obj.getContouredGround() != -1) { out.writeByte(81); - out.writeByte(obj.getAnInt2105() / 256); + out.writeByte(obj.getContouredGround() / 256); } if (obj.getMapAreaId() != -1) { diff --git a/runelite-api/src/main/java/net/runelite/api/ItemID.java b/runelite-api/src/main/java/net/runelite/api/ItemID.java index 5ba0051628..f6b356b099 100644 --- a/runelite-api/src/main/java/net/runelite/api/ItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/ItemID.java @@ -6820,7 +6820,7 @@ public final class ItemID public static final int CURED_YAKHIDE = 10820; public static final int YAKHIDE_ARMOUR = 10822; 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 DOCUMENTS = 10829; 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_GUTHIX_CAPE_L = 24249; 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. */ } 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 180725881d..e9ee7b41e9 100644 --- a/runelite-api/src/main/java/net/runelite/api/NpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/NpcID.java @@ -3690,7 +3690,6 @@ public final class NpcID public static final int BUTTERFLY_3923 = 3923; public static final int SIGLI_THE_HUNTSMAN = 3924; 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_3929 = 3929; 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 LISA = 7316; public static final int LISA_7317 = 7317; - public static final int BEAR = 7318; 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 HOLGART_7324 = 7324; 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 KING_LATHAS = 8046; 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 DENULTH_8050 = 8050; 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_9255 = 9255; 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. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/NullItemID.java b/runelite-api/src/main/java/net/runelite/api/NullItemID.java index 37fd8789e1..6216678f1b 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullItemID.java @@ -12774,5 +12774,14 @@ public final class NullItemID public static final int NULL_24243 = 24243; public static final int NULL_24245 = 24245; 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. */ } 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 1c294cf2a8..8d06a4ab7f 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java @@ -1270,6 +1270,7 @@ public final class NullObjectID public static final int NULL_2780 = 2780; public static final int NULL_2781 = 2781; 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_2829 = 2829; 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_4364 = 4364; 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_4375 = 4375; 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_20093 = 20093; 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_20118 = 20118; 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_37378 = 37378; 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. */ } 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 983425b442..6f56b79523 100644 --- a/runelite-api/src/main/java/net/runelite/api/ObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/ObjectID.java @@ -1531,7 +1531,6 @@ public final class ObjectID public static final int COUNTER_2792 = 2792; public static final int COUNTER_2793 = 2793; 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_2797 = 2797; 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_4371 = 4371; 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_4378 = 4378; 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 POTTERY_OVEN_14888 = 14888; 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 TIGHTROPE_14892 = 14892; 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_20089 = 20089; 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_20097 = 20097; 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_37389 = 37389; 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. */ } diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java index ae4885842d..b2280291ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java @@ -62,6 +62,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.PostItemDefinition; import net.runelite.client.callback.ClientThread; 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.ItemPrice; import net.runelite.http.api.item.ItemStats; @@ -134,7 +135,6 @@ public class ItemManager put(AGILITY_CAPE_13340, AGILITY_CAPE). build(); private final Client client; - private final ScheduledExecutorService scheduledExecutorService; private final ClientThread clientThread; private final ItemClient itemClient; private final ImmutableMap itemStatMap; @@ -154,12 +154,11 @@ public class ItemManager ) { this.client = client; - this.scheduledExecutorService = executor; this.clientThread = clientThread; this.itemClient = itemClient; - scheduledExecutorService.scheduleWithFixedDelay(this::loadPrices, 0, 30, TimeUnit.MINUTES); - scheduledExecutorService.submit(this::loadStats); + executor.scheduleWithFixedDelay(this::loadPrices, 0, 30, TimeUnit.MINUTES); + executor.submit(this::loadStats); itemImages = CacheBuilder.newBuilder() .maximumSize(128L) @@ -462,7 +461,7 @@ public class ItemManager return false; } sprite.toBufferedImage(img); - img.changed(); + img.loaded(); return true; }); return img; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java index ea145942ac..2cd9a03ae4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java @@ -38,7 +38,7 @@ public enum CannonSpots 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)), 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)), TROLLS(new WorldPoint(2401, 3856, 0)), GREATER_DEMONS(new WorldPoint(1435, 10086, 2)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java index 11efc632d4..d563c0c0de 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java @@ -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("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("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("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)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPanel.java index d0b244a903..c729aaae0f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPanel.java @@ -42,10 +42,10 @@ import javax.swing.border.EmptyBorder; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ItemDefinition; import net.runelite.api.kit.KitType; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.PluginPanel; +import net.runelite.client.util.AsyncBufferedImage; @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/ItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/ItemPanel.java index 40890eba2f..1ba38ee751 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/ItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/ItemPanel.java @@ -30,9 +30,9 @@ import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import net.runelite.api.ItemDefinition; import net.runelite.api.kit.KitType; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.FontManager; +import net.runelite.client.util.AsyncBufferedImage; import org.apache.commons.lang3.StringUtils; class ItemPanel extends JPanel diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java index c17e788a4e..21c42aafc5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java @@ -40,7 +40,7 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.CompoundBorder; 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.util.LinkBrowser; import net.runelite.client.util.StackFormatter; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItems.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItems.java index 04ec06249f..0bc10499e7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItems.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItems.java @@ -25,7 +25,7 @@ package net.runelite.client.plugins.grandexchange; import lombok.Value; -import net.runelite.client.game.AsyncBufferedImage; +import net.runelite.client.util.AsyncBufferedImage; @Value class GrandExchangeItems diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java index d8d88e3933..0c5355a1e7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java @@ -46,7 +46,7 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ItemDefinition; 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.ui.ColorScheme; import net.runelite.client.ui.components.IconTextField; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupContainerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupContainerPanel.java index 5fd8132e06..e2bcdc3001 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupContainerPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupContainerPanel.java @@ -31,12 +31,12 @@ import java.util.List; import javax.inject.Singleton; import javax.swing.JLabel; import javax.swing.JPanel; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemVariationMapping; import net.runelite.client.plugins.inventorysetups.InventorySetupItem; import net.runelite.client.plugins.inventorysetups.InventorySetupPlugin; import net.runelite.client.ui.ColorScheme; +import net.runelite.client.util.AsyncBufferedImage; @Singleton abstract class InventorySetupContainerPanel extends JPanel diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupSlot.java index 3a1476c8ed..8c47339a4e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupSlot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupSlot.java @@ -31,7 +31,7 @@ import javax.inject.Singleton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; -import net.runelite.client.game.AsyncBufferedImage; +import net.runelite.client.util.AsyncBufferedImage; @Singleton class InventorySetupSlot extends JPanel 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 601728dd0e..fb1c26dda6 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 @@ -667,6 +667,7 @@ public class ItemChargePlugin extends Plugin int lastExplorerRingCharge = -1; if (lastExplorerRingCharge != explorerRingCharge) { + lastExplorerRingCharge = explorerRingCharge; updateExplorerRingCharges(explorerRingCharge); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java index edfc850851..8a96c772bf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java @@ -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.KINGDOM_GROUP_ID; import net.runelite.api.widgets.WidgetItem; +import net.runelite.client.game.ItemManager; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.WidgetItemOverlay; import net.runelite.client.ui.overlay.components.TextComponent; @@ -43,11 +44,14 @@ import net.runelite.client.ui.overlay.components.TextComponent; class ItemIdentificationOverlay extends WidgetItemOverlay { private final ItemIdentificationPlugin plugin; + private final ItemManager itemManager; @Inject - ItemIdentificationOverlay(final ItemIdentificationPlugin plugin) + ItemIdentificationOverlay(ItemIdentificationPlugin plugin, ItemManager itemManager) { this.plugin = plugin; + this.itemManager = itemManager; + showOnInventory(); showOnBank(); 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 public void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem itemWidget) { - ItemIdentification iden = ItemIdentification.get(itemId); + ItemIdentification iden = findItemIdentification(itemId); if (iden == null) { return; @@ -98,7 +102,6 @@ class ItemIdentificationOverlay extends WidgetItemOverlay graphics.setFont(FontManager.getRunescapeSmallFont()); renderText(graphics, itemWidget.getCanvasBounds(), iden); - } private void renderText(Graphics2D graphics, Rectangle bounds, ItemIdentification iden) @@ -117,4 +120,10 @@ class ItemIdentificationOverlay extends WidgetItemOverlay } textComponent.render(graphics); } + + private ItemIdentification findItemIdentification(final int itemID) + { + final int realItemId = itemManager.canonicalize(itemID); + return ItemIdentification.get(realItemId); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java index 73538e1ad5..995c6eb2f5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java @@ -115,4 +115,4 @@ public class ItemIdentificationPlugin extends Plugin this.showOres = config.showOres(); this.showGems = config.showGems(); } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Book.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Book.java index 43b31e52aa..8c64ac708e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Book.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Book.java @@ -30,7 +30,7 @@ import java.util.Map; import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; -import net.runelite.client.game.AsyncBufferedImage; +import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.game.ItemManager; enum Book diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java index cecfd4525b..deb16a2083 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java @@ -50,7 +50,7 @@ import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import lombok.AccessLevel; 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.ui.ColorScheme; import net.runelite.client.ui.FontManager; @@ -336,7 +336,7 @@ class LootTrackerBox extends JPanel BufferedImage transparentImage = ImageUtil.alphaOffset(itemImage, .3f); imageLabel.setIcon(new ImageIcon(transparentImage)); }; - itemImage.onChanged(addTransparency); + itemImage.onLoaded(addTransparency); addTransparency.run(); } else diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerItems.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerItems.java deleted file mode 100644 index 023dd8383f..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerItems.java +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Copyright (c) 2018, Ethan - * 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 prayerBonuses; - - private final int itemId; - private final int prayerBonus; - - static - { - ImmutableMap.Builder 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; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java index e51e988f52..cf166b85b5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java @@ -43,11 +43,13 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; +import net.runelite.http.api.item.ItemStats; @PluginDescriptor( name = "Prayer", @@ -91,6 +93,9 @@ public class PrayerPlugin extends Plugin @Inject private EventBus eventBus; + @Inject + private ItemManager itemManager; + @Getter(AccessLevel.PACKAGE) private PrayerFlickLocation prayerFlickLocation; @Getter(AccessLevel.PACKAGE) @@ -277,8 +282,11 @@ public class PrayerPlugin extends Plugin } } - int bonus = PrayerItems.getItemPrayerBonus(item.getId()); - total += bonus; + ItemStats is = itemManager.getItemStats(item.getId(), false); + if (is != null && is.getEquipment() != null) + { + total += is.getEquipment().getPrayer(); + } } if (hasSanfew || hasSuperRestore || hasPrayerPotion) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java index 2d5d4c0fa7..cf7a3fceba 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java @@ -49,7 +49,6 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.Keybind; import net.runelite.client.eventbus.EventBus; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.input.KeyManager; 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.NavigationButton; import net.runelite.client.ui.overlay.OverlayManager; +import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.util.HotkeyListener; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.PvPUtil; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculator.java index 821fd23fc4..5ba8b0573a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculator.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculator.java @@ -47,7 +47,6 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.Experience; import net.runelite.api.Skill; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.skillcalculator.SkillCalculatorConfig; 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.DynamicGridLayout; import net.runelite.client.ui.FontManager; +import net.runelite.client.util.AsyncBufferedImage; @Slf4j public class BankedCalculator extends JPanel diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/GridItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/GridItem.java index 9cb03ff36b..8f63993a61 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/GridItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/GridItem.java @@ -37,11 +37,11 @@ import javax.swing.border.EmptyBorder; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; -import net.runelite.client.game.AsyncBufferedImage; 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.BankedItem; import net.runelite.client.ui.ColorScheme; +import net.runelite.client.util.AsyncBufferedImage; @Getter(AccessLevel.PUBLIC) public class GridItem extends JLabel diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/ModifyPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/ModifyPanel.java index f0f594def6..7677ed047b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/ModifyPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/ModifyPanel.java @@ -47,7 +47,6 @@ import javax.swing.border.EmptyBorder; import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Constants; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.skillcalculator.banked.BankedCalculator; 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.ComboBoxListRenderer; import net.runelite.client.ui.components.shadowlabel.JShadowedLabel; +import net.runelite.client.util.AsyncBufferedImage; public class ModifyPanel extends JPanel { @@ -199,7 +199,7 @@ public class ModifyPanel extends JPanel final boolean stackable = item.getItemInfo().isStackable() || amount > 1; 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))); - icon.onChanged(resize); + icon.onLoaded(resize); resize.run(); final String itemName = item.getItemInfo().getName(); @@ -254,7 +254,7 @@ public class ModifyPanel extends JPanel final double xp = a.getXp() * xpFactor; final JPanel container = createShadowedLabel(icon, a.getName(), FORMAT_COMMA.format(xp) + "xp"); - img.onChanged(() -> + img.onLoaded(() -> { icon.setImage(img); container.repaint(); @@ -282,7 +282,7 @@ public class ModifyPanel extends JPanel final ComboBoxIconEntry entry = new ComboBoxIconEntry(icon, name, option); dropdown.addItem(entry); - img.onChanged(() -> + img.onLoaded(() -> { icon.setImage(img); dropdown.revalidate(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/SelectionGrid.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/SelectionGrid.java index 2449857920..26d71a1176 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/SelectionGrid.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/components/SelectionGrid.java @@ -35,10 +35,10 @@ import javax.swing.JPanel; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.skillcalculator.banked.BankedCalculator; import net.runelite.client.plugins.skillcalculator.banked.beans.BankedItem; +import net.runelite.client.util.AsyncBufferedImage; /** * A grid that supports mouse events diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index 41f3423515..c3255d7e67 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -86,7 +86,6 @@ import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; import net.runelite.client.events.ChatInput; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; 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.overlay.OverlayManager; 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.ImageUtil; import net.runelite.api.util.Text; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/SelectionPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/SelectionPanel.java index c382504da4..2b69c00b19 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/SelectionPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/SelectionPanel.java @@ -46,7 +46,6 @@ import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.stonedtracker.data.BossTab; 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.materialtabs.MaterialTab; import net.runelite.client.ui.components.materialtabs.MaterialTabGroup; +import net.runelite.client.util.AsyncBufferedImage; import org.apache.commons.text.similarity.JaroWinklerDistance; class SelectionPanel extends JPanel @@ -289,7 +289,7 @@ class SelectionPanel extends JPanel materialTab.setVerticalAlignment(SwingConstants.CENTER); materialTab.setPreferredSize(new Dimension(35, 35)); }; - image.onChanged(resize); + image.onLoaded(resize); resize.run(); thisTabGroup.addTab(materialTab); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java index 940ec53c67..faeea3ab13 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java @@ -38,10 +38,10 @@ import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import lombok.Getter; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.stonedtracker.data.UniqueItem; import net.runelite.client.ui.ColorScheme; +import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.util.ImageUtil; 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 // Should only trigger if image hasn't been added - image.onChanged(() -> + image.onLoaded(() -> { icon.setIcon(new ImageIcon(ImageUtil.alphaOffset(image, alpha))); icon.revalidate(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesBox.java index 6ce66d71f5..010fbba8c9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesBox.java @@ -42,10 +42,10 @@ import lombok.Getter; import net.runelite.api.ItemDefinition; import static net.runelite.api.ItemID.*; import net.runelite.api.util.Text; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.FontManager; +import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.util.StackFormatter; @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPanel.java index 87a7ac3bbb..5c33e6d51a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPanel.java @@ -38,7 +38,7 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; 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.plugins.timetracking.clocks.ClockManager; import net.runelite.client.plugins.timetracking.farming.FarmingTracker; @@ -116,7 +116,7 @@ class TimeTrackingPanel extends PluginPanel BufferedImage subIcon = icon.getSubimage(0, 0, 32, 32); materialTab.setIcon(new ImageIcon(subIcon.getScaledInstance(24, 24, Image.SCALE_SMOOTH))); }; - icon.onChanged(resize); + icon.onLoaded(resize); resize.run(); materialTab.setOnSelectEvent(() -> diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersGloryOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersGloryOverlay.java index 3423fa083d..94241f0c8c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersGloryOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersGloryOverlay.java @@ -15,7 +15,6 @@ import java.awt.Graphics2D; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.ItemID; -import net.runelite.client.game.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.overlay.Overlay; 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.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; +import net.runelite.client.util.AsyncBufferedImage; @Singleton public class WhaleWatchersGloryOverlay extends Overlay diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index 62ea5fa4c7..6a43768bff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -224,11 +224,11 @@ public class XpTrackerPlugin extends Plugin fetchXp = true; lastWorldType = type; 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; } } - else if (state == GameState.LOGGING_IN) + else if (state == GameState.LOGGING_IN || state == GameState.HOPPING) { initializeTracker = true; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java index f2e4b2f1ea..05df4f81d4 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java @@ -39,7 +39,7 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.events.ConfigChanged; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.eventbus.EventBus; -import net.runelite.client.game.AsyncBufferedImage; +import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.plugins.PluginDescriptor; @Singleton @@ -79,7 +79,7 @@ public class InfoBoxManager if (image instanceof AsyncBufferedImage) { AsyncBufferedImage abi = (AsyncBufferedImage) image; - abi.onChanged(() -> updateInfoBoxImage(infoBox)); + abi.onLoaded(() -> updateInfoBoxImage(infoBox)); } } diff --git a/runelite-client/src/main/java/net/runelite/client/game/AsyncBufferedImage.java b/runelite-client/src/main/java/net/runelite/client/util/AsyncBufferedImage.java similarity index 75% rename from runelite-client/src/main/java/net/runelite/client/game/AsyncBufferedImage.java rename to runelite-client/src/main/java/net/runelite/client/util/AsyncBufferedImage.java index 0a747667e6..8be05f496c 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/AsyncBufferedImage.java +++ b/runelite-client/src/main/java/net/runelite/client/util/AsyncBufferedImage.java @@ -23,11 +23,11 @@ * 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.util.ArrayList; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; @@ -35,7 +35,8 @@ import javax.swing.JLabel; public class AsyncBufferedImage extends BufferedImage { - private final List listeners = new CopyOnWriteArrayList<>(); + private final List listeners = new ArrayList<>(); + private boolean loaded; 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) { 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); } @@ -79,7 +90,13 @@ public class AsyncBufferedImage extends BufferedImage private ImageIcon makeIcon(JComponent c) { - listeners.add(c::repaint); + synchronized (this) + { + if (!loaded) + { + listeners.add(c::repaint); + } + } return new ImageIcon(this); } } diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json index 3ee5247b51..fcd1775fb5 100644 --- a/runelite-client/src/main/resources/item_variations.json +++ b/runelite-client/src/main/resources/item_variations.json @@ -1337,7 +1337,13 @@ 23179, 23180, 23181, - 23182 + 23182, + 23770, + 23814, + 23815, + 23816, + 23817, + 24253 ], "radimus notes": [ 714, @@ -2266,6 +2272,10 @@ 1755, 5601 ], + "molten glass": [ + 1775, + 24260 + ], "woad leaf": [ 1793, 5738 @@ -3301,10 +3311,6 @@ 3755, 20573 ], - "fremennik shield": [ - 3758, - 10826 - ], "saradomin page": [ 3827, 3828, @@ -9534,5 +9540,17 @@ 24211, 24213, 24215 + ], + "unsealed letter": [ + 24256, + 24257 + ], + "v sigil": [ + 24258, + 24259 + ], + "vs shield": [ + 24265, + 24266 ] } diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_limits.json b/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_limits.json index 09d460f7fb..4c386031c8 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_limits.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_limits.json @@ -4125,5 +4125,29 @@ "23528": 70, "23839": 13000, "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 } diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json index db9262a7d1..963c56f382 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json @@ -313,6 +313,12 @@ "name": "Jade Amulet (U)", "xp": 70 }, + { + "level": 35, + "icon": 6235, + "name": "Broodoo shield", + "xp": 100 + }, { "level": 36, "icon": 5376, diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json index f5eef0a04b..adce0a7faf 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json @@ -72,6 +72,18 @@ "name": "Bronze Scimitar", "xp": 25 }, + { + "level": 5, + "icon": 11367, + "name": "Bronze Hasta", + "xp": 25 + }, + { + "level": 5, + "icon": 1237, + "name": "Bronze Spear", + "xp": 25 + }, { "level": 6, "icon": 19570, @@ -240,6 +252,18 @@ "name": "Iron Scimitar", "xp": 50 }, + { + "level": 20, + "icon": 11369, + "name": "Iron Hasta", + "xp": 50 + }, + { + "level": 20, + "icon": 1239, + "name": "Iron Spear", + "xp": 50 + }, { "level": 21, "icon": 1293, @@ -408,6 +432,18 @@ "name": "Steel Arrowtips", "xp": 37.5 }, + { + "level": 35, + "icon": 11371, + "name": "Steel Hasta", + "xp": 75 + }, + { + "level": 35, + "icon": 1241, + "name": "Steel Spear", + "xp": 75 + }, { "level": 36, "icon": 9425, @@ -588,6 +624,18 @@ "name": "Mithril Scimitar", "xp": 100 }, + { + "level": 55, + "icon": 11373, + "name": "Mithril Hasta", + "xp": 100 + }, + { + "level": 55, + "icon": 1243, + "name": "Mithril Spear", + "xp": 100 + }, { "level": 56, "icon": 1299, @@ -756,6 +804,18 @@ "name": "Adamant Scimitar", "xp": 125 }, + { + "level": 75, + "icon": 11375, + "name": "Adamant Hasta", + "xp": 125 + }, + { + "level": 75, + "icon": 1245, + "name": "Adamant Spear", + "xp": 125 + }, { "level": 76, "icon": 9429, @@ -912,6 +972,18 @@ "name": "Rune Scimitar", "xp": 150 }, + { + "level": 90, + "icon": 11377, + "name": "Rune Hasta", + "xp": 150 + }, + { + "level": 90, + "icon": 1247, + "name": "Rune Spear", + "xp": 150 + }, { "level": 90, "icon": 11283, diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlotTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlotTest.java index 14f2bf3bcf..4ffd59f830 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlotTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlotTest.java @@ -28,7 +28,7 @@ package net.runelite.client.plugins.grandexchange; import net.runelite.api.GrandExchangeOffer; import net.runelite.api.GrandExchangeOfferState; import net.runelite.api.ItemDefinition; -import net.runelite.client.game.AsyncBufferedImage; +import net.runelite.client.util.AsyncBufferedImage; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock;