diff --git a/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java b/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java index 5578578015..2e3fb850e2 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java @@ -125,14 +125,13 @@ public class ChatIconManager friendsChatRankImages = new BufferedImage[friendsChatIcons.size()]; clanRankImages = new BufferedImage[clanIcons.size()]; - final IndexedSprite[] modIcons = client.getModIcons(); - for (int i = 0; i < friendsChatIcons.size(); i++) { final int fi = i; spriteManager.getSpriteAsync(friendsChatIcons.getIntValue(friendsChatIcons.getKeys()[i]), 0, sprite -> { + final IndexedSprite[] modIcons = client.getModIcons(); friendsChatRankImages[fi] = friendsChatImageFromSprite(sprite); modIcons[friendsChatOffset + fi] = ImageUtil.getImageIndexedSprite(friendsChatRankImages[fi], client); }); @@ -147,6 +146,7 @@ public class ChatIconManager spriteManager.getSpriteAsync(clanIcons.getIntValue(key), 0, sprite -> { + final IndexedSprite[] modIcons = client.getModIcons(); final BufferedImage img = ImageUtil.resizeCanvas(sprite, IMAGE_DIMENSION.width, IMAGE_DIMENSION.height); clanRankImages[idx] = img; modIcons[clanOffset + idx] = ImageUtil.getImageIndexedSprite(img, client); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index e0017e1d3d..32a552aebe 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -313,9 +313,12 @@ public class ChatCommandsPlugin extends Plugin final Pet[] pets = Pet.values(); final IndexedSprite[] modIcons = client.getModIcons(); assert modIcons != null; + final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + pets.length); modIconIdx = modIcons.length; + client.setModIcons(newModIcons); + for (int i = 0; i < pets.length; i++) { final Pet pet = pets[i]; @@ -326,13 +329,13 @@ public class ChatCommandsPlugin extends Plugin { final BufferedImage image = ImageUtil.resizeImage(abi, 18, 16); final IndexedSprite sprite = ImageUtil.getImageIndexedSprite(image, client); - newModIcons[idx] = sprite; + // modicons array might be replaced in between when we assign it and the callback, + // so fetch modicons again + client.getModIcons()[idx] = sprite; }; abi.onLoaded(r); r.run(); } - - client.setModIcons(newModIcons); } /**