chat commands: fix loading pets modicons

The asyncbufferedimage may not be loaded at the time the modicons is setup, so a listener must be added to assign the final image
This commit is contained in:
Adam
2022-05-06 21:27:14 -04:00
parent 2fa6eb1dc3
commit 026395fad5

View File

@@ -90,6 +90,7 @@ import net.runelite.client.hiscore.Skill;
import net.runelite.client.input.KeyManager; import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.AsyncBufferedImage;
import net.runelite.client.util.ImageUtil; import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.QuantityFormatter; import net.runelite.client.util.QuantityFormatter;
import net.runelite.client.util.Text; import net.runelite.client.util.Text;
@@ -220,7 +221,15 @@ public class ChatCommandsPlugin extends Plugin
chatCommandManager.registerCommandAsync(SOUL_WARS_ZEAL_COMMAND, this::soulWarsZealLookup); chatCommandManager.registerCommandAsync(SOUL_WARS_ZEAL_COMMAND, this::soulWarsZealLookup);
chatCommandManager.registerCommandAsync(PET_LIST_COMMAND, this::petListLookup, this::petListSubmit); chatCommandManager.registerCommandAsync(PET_LIST_COMMAND, this::petListLookup, this::petListSubmit);
clientThread.invoke(this::loadPetIcons); clientThread.invoke(() ->
{
if (client.getModIcons() == null)
{
return false;
}
loadPetIcons();
return true;
});
} }
@Override @Override
@@ -295,13 +304,14 @@ public class ChatCommandsPlugin extends Plugin
private void loadPetIcons() private void loadPetIcons()
{ {
final IndexedSprite[] modIcons = client.getModIcons(); if (modIconIdx != -1)
if (modIconIdx != -1 || modIcons == null)
{ {
return; return;
} }
final Pet[] pets = Pet.values(); final Pet[] pets = Pet.values();
final IndexedSprite[] modIcons = client.getModIcons();
assert modIcons != null;
final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + pets.length); final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + pets.length);
modIconIdx = modIcons.length; modIconIdx = modIcons.length;
@@ -309,9 +319,16 @@ public class ChatCommandsPlugin extends Plugin
{ {
final Pet pet = pets[i]; final Pet pet = pets[i];
final BufferedImage image = ImageUtil.resizeImage(itemManager.getImage(pet.getIconID()), 18, 16); final AsyncBufferedImage abi = itemManager.getImage(pet.getIconID());
final IndexedSprite sprite = ImageUtil.getImageIndexedSprite(image, client); final int idx = modIconIdx + i;
newModIcons[modIconIdx + i] = sprite; Runnable r = () ->
{
final BufferedImage image = ImageUtil.resizeImage(abi, 18, 16);
final IndexedSprite sprite = ImageUtil.getImageIndexedSprite(image, client);
newModIcons[idx] = sprite;
};
abi.onLoaded(r);
r.run();
} }
client.setModIcons(newModIcons); client.setModIcons(newModIcons);
@@ -784,9 +801,6 @@ public class ChatCommandsPlugin extends Plugin
case HOPPING: case HOPPING:
pohOwner = null; pohOwner = null;
break; break;
case LOGGED_IN:
loadPetIcons();
break;
} }
} }