From 6c5c579fd105108e2002a6ec575af5affbe67d83 Mon Sep 17 00:00:00 2001 From: Justin Hiltz Date: Wed, 18 Mar 2020 17:18:13 -0300 Subject: [PATCH] custom cursor: add option to use equipped weapon --- .../plugins/customcursor/CustomCursor.java | 3 +- .../customcursor/CustomCursorPlugin.java | 67 ++++++++++++++++++- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursor.java b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursor.java index 5012f3d564..37208ddd23 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursor.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursor.java @@ -38,6 +38,7 @@ public enum CustomCursor DRAGON_DAGGER_POISON("Dragon Dagger (p)", "cursor-dragon-dagger-p.png"), TROUT("Trout", "cursor-trout.png"), DRAGON_SCIMITAR("Dragon Scimitar", "cursor-dragon-scimitar.png"), + EQUIPPED_WEAPON("Equipped Weapon"), CUSTOM_IMAGE("Custom Image"); private final String name; @@ -55,4 +56,4 @@ public enum CustomCursor this.name = name; this.cursorImage = ImageUtil.getResourceStreamFromClass(CustomCursorPlugin.class, icon); } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java index 2c5d87361f..e1472ca26d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java @@ -30,10 +30,18 @@ import java.io.File; import javax.imageio.ImageIO; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; +import net.runelite.api.Client; +import net.runelite.api.InventoryID; +import net.runelite.api.Item; +import net.runelite.api.ItemContainer; +import net.runelite.api.EquipmentInventorySlot; +import net.runelite.api.events.ItemContainerChanged; import net.runelite.client.RuneLite; +import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; +import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.ClientUI; @@ -48,12 +56,21 @@ public class CustomCursorPlugin extends Plugin { private static final File CUSTOM_IMAGE_FILE = new File(RuneLite.RUNELITE_DIR, "cursor.png"); + @Inject + private Client client; + + @Inject + private ClientThread clientThread; + @Inject private ClientUI clientUI; @Inject private CustomCursorConfig config; + @Inject + private ItemManager itemManager; + @Provides CustomCursorConfig provideConfig(ConfigManager configManager) { @@ -81,6 +98,15 @@ public class CustomCursorPlugin extends Plugin } } + @Subscribe + public void onItemContainerChanged(ItemContainerChanged event) + { + if (config.selectedCursor() == CustomCursor.EQUIPPED_WEAPON && event.getContainerId() == InventoryID.EQUIPMENT.getId()) + { + updateCursor(); + } + } + private void updateCursor() { CustomCursor selectedCursor = config.selectedCursor(); @@ -108,10 +134,45 @@ public class CustomCursorPlugin extends Plugin { clientUI.resetCursor(); } - return; } + else if (selectedCursor == CustomCursor.EQUIPPED_WEAPON) + { + clientThread.invokeLater(() -> + { + final ItemContainer equipment = client.getItemContainer(InventoryID.EQUIPMENT); - assert selectedCursor.getCursorImage() != null; - clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.getName()); + if (equipment == null) + { + clientUI.resetCursor(); + return; + } + + final Item[] items = equipment.getItems(); + final int weaponIdx = EquipmentInventorySlot.WEAPON.getSlotIdx(); + + if (items == null || weaponIdx >= items.length) + { + clientUI.resetCursor(); + return; + } + + final Item weapon = items[EquipmentInventorySlot.WEAPON.getSlotIdx()]; + final BufferedImage image = itemManager.getImage(weapon.getId()); + + if (weapon.getQuantity() > 0) + { + clientUI.setCursor(image, selectedCursor.getName()); + } + else + { + clientUI.resetCursor(); + } + }); + } + else + { + assert selectedCursor.getCursorImage() != null; + clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.getName()); + } } } \ No newline at end of file