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 2e371632b4..5012f3d564 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 @@ -25,9 +25,11 @@ package net.runelite.client.plugins.customcursor; import java.awt.image.BufferedImage; +import javax.annotation.Nullable; import lombok.Getter; import net.runelite.client.util.ImageUtil; +@Getter public enum CustomCursor { RS3_GOLD("RS3 Gold", "cursor-rs3-gold.png"), @@ -35,21 +37,22 @@ public enum CustomCursor DRAGON_DAGGER("Dragon Dagger", "cursor-dragon-dagger.png"), DRAGON_DAGGER_POISON("Dragon Dagger (p)", "cursor-dragon-dagger-p.png"), TROUT("Trout", "cursor-trout.png"), - DRAGON_SCIMITAR("Dragon Scimitar", "cursor-dragon-scimitar.png"); + DRAGON_SCIMITAR("Dragon Scimitar", "cursor-dragon-scimitar.png"), + CUSTOM_IMAGE("Custom Image"); private final String name; - @Getter + @Nullable private final BufferedImage cursorImage; + CustomCursor(String name) + { + this.name = name; + this.cursorImage = null; + } + CustomCursor(String name, String icon) { this.name = name; this.cursorImage = ImageUtil.getResourceStreamFromClass(CustomCursorPlugin.class, icon); } - - @Override - public String toString() - { - return name; - } } \ 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 1c511c6753..2c5d87361f 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 @@ -25,10 +25,15 @@ package net.runelite.client.plugins.customcursor; import com.google.inject.Provides; +import java.awt.image.BufferedImage; +import java.io.File; +import javax.imageio.ImageIO; import javax.inject.Inject; -import net.runelite.client.events.ConfigChanged; +import lombok.extern.slf4j.Slf4j; +import net.runelite.client.RuneLite; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.ClientUI; @@ -38,8 +43,11 @@ import net.runelite.client.ui.ClientUI; description = "Replaces your mouse cursor image", enabledByDefault = false ) +@Slf4j public class CustomCursorPlugin extends Plugin { + private static final File CUSTOM_IMAGE_FILE = new File(RuneLite.RUNELITE_DIR, "cursor.png"); + @Inject private ClientUI clientUI; @@ -76,6 +84,34 @@ public class CustomCursorPlugin extends Plugin private void updateCursor() { CustomCursor selectedCursor = config.selectedCursor(); - clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.toString()); + + if (selectedCursor == CustomCursor.CUSTOM_IMAGE) + { + if (CUSTOM_IMAGE_FILE.exists()) + { + try + { + BufferedImage image; + synchronized (ImageIO.class) + { + image = ImageIO.read(CUSTOM_IMAGE_FILE); + } + clientUI.setCursor(image, selectedCursor.getName()); + } + catch (Exception e) + { + log.error("error setting custom cursor", e); + clientUI.resetCursor(); + } + } + else + { + clientUI.resetCursor(); + } + return; + } + + assert selectedCursor.getCursorImage() != null; + clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.getName()); } } \ No newline at end of file