From 886c565a7e0399d48095dc8d186367e8e79cb837 Mon Sep 17 00:00:00 2001 From: debajit gayen Date: Sun, 15 Feb 2026 07:32:59 +0000 Subject: [PATCH 1/3] Create Discord notifier, add click closest to center, misc fixes and additions --- .gitignore | 4 +- CVTemplates.sh | 72 ---------- config/checkstyle/checkstyle-suppressions.xml | 1 + .../chromascape/api/DiscordNotification.java | 78 +++++++++++ .../java/com/chromascape/base/BaseScript.java | 19 +-- .../scripts/DemoAgilityScript.java | 84 ++++++------ .../scripts/DemoFishingScript.java | 5 - .../chromascape/scripts/DemoMiningScript.java | 5 - .../chromascape/scripts/DemoWineScript.java | 14 +- .../chromascape/scripts/Screenshotter.java | 15 ++- .../utils/actions/PointSelector.java | 3 +- .../utils/core/AccountManager.java | 66 ---------- .../core/constants/CacheFolderConstants.java | 44 ------- .../input/keyboard/VirtualKeyboardUtils.java | 38 ++++-- .../core/input/mouse/VirtualMouseUtils.java | 4 +- .../utils/core/input/remoteinput/Kinput.java | 113 ++++++++++------ .../core/screen/topology/ColourContours.java | 44 ++++++- .../screen/topology/TemplateMatching.java | 22 ++-- .../core/screen/window/WindowHandler.java | 16 +-- .../com/chromascape/utils/domain/ocr/Ocr.java | 6 +- .../web/config/StartupConfiguration.java | 124 +----------------- src/main/resources/static/js/colour.js | 23 ++-- .../KInput/KInput/bin/Release/KInput.dll | Bin 1059840 -> 1059840 bytes third_party/KInput/KInput/KInput/makefile | 20 +-- .../KInput/KInput/KInput/obj/Release/KInput.o | Bin 16643 -> 16611 bytes .../KInput/KInput/KInput/obj/Release/main.o | Bin 2348 -> 2316 bytes .../KInputCtrl/bin/Release/KInputCtrl.dll | Bin 1079296 -> 1080832 bytes .../KInputCtrl/obj/Release/RemoteProcFinder.o | Bin 4855 -> 6555 bytes .../KInput/KInputCtrl/obj/Release/main.o | Bin 11967 -> 11967 bytes 29 files changed, 323 insertions(+), 497 deletions(-) delete mode 100644 CVTemplates.sh create mode 100644 src/main/java/com/chromascape/api/DiscordNotification.java delete mode 100644 src/main/java/com/chromascape/utils/core/AccountManager.java delete mode 100644 src/main/java/com/chromascape/utils/core/constants/CacheFolderConstants.java diff --git a/.gitignore b/.gitignore index 87ddbdd..0a46005 100644 --- a/.gitignore +++ b/.gitignore @@ -62,8 +62,8 @@ Thumbs.db output/* !output/.gitkeep -# chromascape runtime cache -.chromascape/ +# chromascape secrets for individual developers +secrets.properties # custom user scripts /src/main/java/com/chromascape/scripts/*/ diff --git a/CVTemplates.sh b/CVTemplates.sh deleted file mode 100644 index 764c4ef..0000000 --- a/CVTemplates.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash - -echo "Cloning SRL-Development repo to extract fonts..." - -# Create fonts directory if it doesn't exist -if [ ! -d "src/main/resources/fonts" ]; then - mkdir -p "src/main/resources/fonts" -fi - -# Create UI images directory if it doesn't exist -if [ ! -d "src/main/resources/images/ui" ]; then - mkdir -p "src/main/resources/images/ui" -fi - -# Clone the repo into a temp folder -git clone --depth 1 https://github.com/Villavu/SRL-Development.git temp_srl_fonts - -# Copy font files -cp -r temp_srl_fonts/fonts/* src/main/resources/fonts/ 2>/dev/null || true - -# Clean up -rm -rf temp_srl_fonts - -echo "Fonts copied to src/main/resources/fonts/" - -# Download UI images from OSBC repo -UI_DIR="src/main/resources/images/ui" - -echo "Downloading UI images..." - -curl -o "$UI_DIR/chat.png" https://raw.githubusercontent.com/kelltom/OS-Bot-COLOR/main/src/images/bot/ui_templates/chat.png -curl -o "$UI_DIR/inv.png" https://raw.githubusercontent.com/kelltom/OS-Bot-COLOR/main/src/images/bot/ui_templates/inv.png -curl -o "$UI_DIR/minimap.png" https://raw.githubusercontent.com/kelltom/OS-Bot-COLOR/main/src/images/bot/ui_templates/minimap.png -curl -o "$UI_DIR/minimap_fixed.png" https://raw.githubusercontent.com/kelltom/OS-Bot-COLOR/main/src/images/bot/ui_templates/minimap_fixed.png - -# Download compass degree images from RuneDark repo -echo "Cloning RuneDark repo to extract compass degrees..." - -# Create compass directory if it doesn't exist -if [ ! -d "src/main/resources/images/ui/compass_degrees" ]; then - mkdir -p "src/main/resources/images/ui/compass_degrees" -fi - -# Clone the repo into a temp folder -git clone --depth 1 https://github.com/cemenenkoff/runedark-public.git temp_runedark - -# Copy compass degree images -cp -r temp_runedark/src/img/bot/ui_templates/compass_degrees/* src/main/resources/images/ui/compass_degrees/ 2>/dev/null || true - -# Clean up -rm -rf temp_runedark - -echo "Compass degree images copied to src/main/resources/images/ui/compass_degrees/" -echo "UI images downloaded to $UI_DIR" - -# Now generate .index files for fonts -FONT_DIR="src/main/resources/fonts" - -echo "Generating index files in $FONT_DIR..." - -# Loop through each directory in fonts -for font_path in "$FONT_DIR"/*; do - if [ -d "$font_path" ]; then - font_name=$(basename "$font_path") - echo "Writing index for \"$font_name\"..." - - # Create index file with list of .bmp files - find "$font_path" -name "*.bmp" -exec basename {} \; > "$font_path/$font_name.index" - fi -done - -echo "Done generating index files." diff --git a/config/checkstyle/checkstyle-suppressions.xml b/config/checkstyle/checkstyle-suppressions.xml index 81bb9c2..54a3a26 100644 --- a/config/checkstyle/checkstyle-suppressions.xml +++ b/config/checkstyle/checkstyle-suppressions.xml @@ -12,4 +12,5 @@ + diff --git a/src/main/java/com/chromascape/api/DiscordNotification.java b/src/main/java/com/chromascape/api/DiscordNotification.java new file mode 100644 index 0000000..49d0d43 --- /dev/null +++ b/src/main/java/com/chromascape/api/DiscordNotification.java @@ -0,0 +1,78 @@ +package com.chromascape.api; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.Properties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Provides functionality to send logs as notifications to yourself via Discord. + * + *
    + *
  • Loads the {@code secrets.properties} file in the root directory. + *
  • Saves the specified WebHook URL. + *
  • Sends a POST req to the endpoint with the user's desired notification. + *
+ * + *

This is extremely useful if you aren't actively babysitting your bot or in the case of + * reaching a specified XP/GP goal. It's my personal advice to the reader for you to inform yourself + * upon catastrophic failure, promptly. + */ +public class DiscordNotification { + + private static final Logger logger = LoggerFactory.getLogger(DiscordNotification.class); + private static String webhookUrl; + + static { + try (InputStream input = new FileInputStream("secrets.properties")) { + Properties prop = new Properties(); + prop.load(input); + webhookUrl = prop.getProperty("discord.webhook.url"); + } catch (IOException ex) { + logger.info("Could not find secrets.properties in the project root."); + } + } + + /** + * Sends a user specified message to a Discord WebHook endpoint. Sets up a post request and + * expects a 204 response code for success. + * + * @param message User specified String to send to the endpoint. + */ + public static void send(String message) { + if (webhookUrl == null || webhookUrl.isEmpty()) { + return; + } + + String sanitizedMessage = message.replace("\"", "\\\"").replace("\n", "\\n"); + String jsonPayload = "{\"content\": \"" + sanitizedMessage + "\"}"; + + try { + URL url = new URL(webhookUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("User-Agent", "Java-Discord-Webhook"); + + try (OutputStream os = conn.getOutputStream()) { + os.write(jsonPayload.getBytes(StandardCharsets.UTF_8)); + } + + // 204 means Success (No Content) + if (conn.getResponseCode() != 204) { + logger.error("Failed to send. Response code: {}", conn.getResponseCode()); + } + + conn.disconnect(); + } catch (Exception e) { + logger.error("Error sending Discord notification: {}", e.getMessage()); + } + } +} diff --git a/src/main/java/com/chromascape/base/BaseScript.java b/src/main/java/com/chromascape/base/BaseScript.java index a3e3dee..7341b11 100644 --- a/src/main/java/com/chromascape/base/BaseScript.java +++ b/src/main/java/com/chromascape/base/BaseScript.java @@ -1,7 +1,6 @@ package com.chromascape.base; import com.chromascape.controller.Controller; -import com.chromascape.utils.core.runtime.HotkeyListener; import com.chromascape.utils.core.runtime.ScriptStoppedException; import com.chromascape.utils.core.state.BotState; import com.chromascape.utils.core.state.StateManager; @@ -13,38 +12,35 @@ /** * Abstract base class representing a generic automation script with lifecycle management. * - *

Provides a timed execution framework where the script runs cycles until a specified duration - * elapses or the script is stopped externally. + *

Provides a timed execution framework where the script runs cycles until the script is stopped + * externally. * - *

Manages the underlying Controller instance and logging. Subclasses should override {@link - * #cycle()} to define the script's main logic. + *

Manages the underlying Controller instance. Subclasses should override {@link #cycle()} to + * define the script's main logic. */ public abstract class BaseScript { private final Controller controller; private static final Logger logger = LogManager.getLogger(BaseScript.class); - private final HotkeyListener hotkeyListener; private volatile boolean running = true; private Thread scriptThread; /** Constructs a BaseScript. */ public BaseScript() { controller = new Controller(); - hotkeyListener = new HotkeyListener(this); } /** * Runs the script lifecycle. * *

Initializes the controller, logs start and stop events, then continuously invokes the {@link - * #cycle()} method until the specified duration elapses or the script is stopped. Checks for - * thread interruption and stops gracefully if detected. + * #cycle()} method until the script is stopped. Checks for thread interruption and stops + * gracefully if detected. * *

This method blocks until completion. */ public final void run() { scriptThread = Thread.currentThread(); controller.init(); - hotkeyListener.start(); StatisticsManager.reset(); try { @@ -61,7 +57,7 @@ public final void run() { break; } catch (Exception e) { StateManager.setState(BotState.ERROR); - logger.error("Exception in cycle: {}", e.getMessage()); + logger.error("Exception in cycle: {}, {}", e.getMessage(), e.getStackTrace()); break; } } @@ -84,7 +80,6 @@ public void stop() { } logger.info("Stop requested"); running = false; - hotkeyListener.stop(); // Interrupt the script thread instead of throwing exception if (scriptThread != null) { diff --git a/src/main/java/com/chromascape/scripts/DemoAgilityScript.java b/src/main/java/com/chromascape/scripts/DemoAgilityScript.java index de86b05..dd468fc 100644 --- a/src/main/java/com/chromascape/scripts/DemoAgilityScript.java +++ b/src/main/java/com/chromascape/scripts/DemoAgilityScript.java @@ -1,20 +1,18 @@ package com.chromascape.scripts; +import com.chromascape.api.DiscordNotification; import com.chromascape.base.BaseScript; +import com.chromascape.utils.actions.Minimap; import com.chromascape.utils.actions.MovingObject; import com.chromascape.utils.actions.PointSelector; -import com.chromascape.utils.core.screen.colour.ColourInstances; import com.chromascape.utils.core.screen.colour.ColourObj; import com.chromascape.utils.core.screen.topology.ColourContours; -import com.chromascape.utils.domain.ocr.Ocr; import java.awt.Point; -import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.IOException; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; -import java.util.Objects; import java.util.Random; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -67,7 +65,7 @@ public class DemoAgilityScript extends BaseScript { private static final Point RESET_TILE = ROOFTOP_RESET_TILES.get("Canifis"); private static final int TIMEOUT_XP_CHANGE = 15; - private static final int TIMEOUT_GREEN_APPEAR = 10; + private static final int TIMEOUT_OBSTACLE_APPEAR = 10; // Colour Definitions // These are instantiated as final fields to prevent unnecessary memory allocation during cycles @@ -76,17 +74,9 @@ public class DemoAgilityScript extends BaseScript { private static final ColourObj MARK_COLOUR = new ColourObj("red", new Scalar(0, 254, 254, 0), new Scalar(1, 255, 255, 0)); - // Cached OCR colour object to reduce lookup overhead in repetitive loops - private static ColourObj TEXT_COLOUR_WHITE = null; - // Random used in randomising break times between obstacles private final Random random = new Random(); - /** Initializes the script and pre-loads necessary colour instances. */ - public DemoAgilityScript() { - TEXT_COLOUR_WHITE = ColourInstances.getByName("White"); - } - /** * The main execution loop of the script. * @@ -101,13 +91,29 @@ public DemoAgilityScript() { */ @Override protected void cycle() { - String previousXp = getXp(); + // Log the current XP before clicking obstacle for comparison later + // The idea is to click the obstacle then wait for XP change then loop + int previousXp = -1; + try { + // Read XP + previousXp = Minimap.getXp(this); + // Make sure it's read properly + if (previousXp == -1) { + stop(); + DiscordNotification.send("Xp could not be read."); + } + } catch (IOException e) { + logger.error(e); + stop(); + DiscordNotification.send( + "Bot couldn't read XP bar because of OCR font library load, stopping and logging :("); + } // Check the state of the course if (!isObstacleVisible()) { if (handleMarkOrLost()) { // If we clicked a mark, wait for the course to reset and the Green highlight to appear - waitForObstacleToAppear(TIMEOUT_GREEN_APPEAR); + waitForObstacleToAppear(); return; } } @@ -119,10 +125,12 @@ protected void cycle() { } catch (Exception e) { logger.error("Mouse movement interrupted while clicking moving object: {}", e.getMessage()); stop(); + DiscordNotification.send( + "Mouse movement interrupted while clicking moving object: " + e.getMessage()); } // Wait for the action to complete via XP update - waitUntilXpChange(previousXp, TIMEOUT_XP_CHANGE); + waitUntilXpChange(previousXp); // Humanizing sleep to mimic natural player behavior // And to prevent overloading moving object logic @@ -151,7 +159,7 @@ private boolean handleMarkOrLost() { waitRandomMillis(600, 800); if (!isObstacleVisible()) { try { - logger.info("Lost detected. Walking to reset tile."); + logger.info("We are lost. Walking to reset tile."); controller().walker().pathTo(RESET_TILE, true); waitRandomMillis(4000, 6000); } catch (Exception e) { @@ -162,21 +170,6 @@ private boolean handleMarkOrLost() { return false; } - /** - * Extracts the current Total XP from beside the minimap UI element using OCR. - * - * @return the XP string - */ - private String getXp() { - Rectangle xpZone = controller().zones().getMinimap().get("totalXP"); - try { - return Ocr.extractText(xpZone, "Plain 12", TEXT_COLOUR_WHITE, true); - } catch (IOException e) { - logger.error("Images could not be read from disk {}", e.getMessage()); - } - return ""; - } - /** * Scans the game view for the Red colour associated with a Mark of Grace and attempts to click * it. @@ -207,25 +200,24 @@ private boolean clickMarkOfGraceIfPresent() { * Blocks execution until the Total XP value changes or the timeout is reached. * * @param previousXp the XP value captured before the action started - * @param timeoutSeconds the maximum duration to wait in seconds */ - private void waitUntilXpChange(String previousXp, int timeoutSeconds) { - LocalDateTime endTime = LocalDateTime.now().plusSeconds(timeoutSeconds); + private void waitUntilXpChange(int previousXp) { + LocalDateTime endTime = LocalDateTime.now().plusSeconds(TIMEOUT_XP_CHANGE); // Ensure we do not hang if the initial OCR read failed and returned an empty string - while (!previousXp.isEmpty() - && Objects.equals(previousXp, getXp()) - && LocalDateTime.now().isBefore(endTime)) { - waitMillis(300); + try { + while (previousXp == Minimap.getXp(this) && LocalDateTime.now().isBefore(endTime)) { + waitMillis(300); + } + } catch (Exception e) { + logger.error(e); + stop(); + DiscordNotification.send("Bot couldn't read XP bar, stopping"); } } - /** - * Blocks execution until the obstacle highlight appears or the timeout is reached. - * - * @param timeoutSeconds the maximum duration to wait in seconds - */ - private void waitForObstacleToAppear(int timeoutSeconds) { - LocalDateTime endTime = LocalDateTime.now().plusSeconds(timeoutSeconds); + /** Blocks execution until the obstacle highlight appears or the timeout is reached. */ + private void waitForObstacleToAppear() { + LocalDateTime endTime = LocalDateTime.now().plusSeconds(TIMEOUT_OBSTACLE_APPEAR); while (!isObstacleVisible() && LocalDateTime.now().isBefore(endTime)) { waitMillis(300); } diff --git a/src/main/java/com/chromascape/scripts/DemoFishingScript.java b/src/main/java/com/chromascape/scripts/DemoFishingScript.java index e99bf46..dd93d6a 100644 --- a/src/main/java/com/chromascape/scripts/DemoFishingScript.java +++ b/src/main/java/com/chromascape/scripts/DemoFishingScript.java @@ -44,11 +44,6 @@ public class DemoFishingScript extends BaseScript { private static String lastMessage; - /** Constructs a BaseScript. */ - public DemoFishingScript() { - super(); - } - /** * Overridden cycle. Repeats all tasks within, until stop() is called from either the Web UI, or * from within the script. diff --git a/src/main/java/com/chromascape/scripts/DemoMiningScript.java b/src/main/java/com/chromascape/scripts/DemoMiningScript.java index 3c8d5b7..69c3fa8 100644 --- a/src/main/java/com/chromascape/scripts/DemoMiningScript.java +++ b/src/main/java/com/chromascape/scripts/DemoMiningScript.java @@ -31,11 +31,6 @@ public class DemoMiningScript extends BaseScript { private static final Logger logger = LogManager.getLogger(DemoMiningScript.class); private static final String ironOre = "/images/user/Iron_ore.png"; - /** Constructs a new mining script. */ - public DemoMiningScript() { - super(); - } - /** * Executes one cycle of the script logic. * diff --git a/src/main/java/com/chromascape/scripts/DemoWineScript.java b/src/main/java/com/chromascape/scripts/DemoWineScript.java index 554bb21..ede364b 100644 --- a/src/main/java/com/chromascape/scripts/DemoWineScript.java +++ b/src/main/java/com/chromascape/scripts/DemoWineScript.java @@ -36,18 +36,10 @@ public class DemoWineScript extends BaseScript { private boolean bankFlag = true; - /** Constructs a BaseScript. */ - public DemoWineScript() { - super(); - } - /** - * The core logic of the script. - * - *

This method is called repeatedly in a loop by {@link #run()} for the specified duration. - * Subclasses must override this method to implement their specific bot behavior. - * - *

Note: This method is called synchronously on the running thread. + * The core logic of the script. This function will loop repeatedly until {@link #stop()} is + * called. You should avoid putting all your script logic directly inside this function, instead + * split it up into other functions as shown below. */ @Override protected void cycle() { diff --git a/src/main/java/com/chromascape/scripts/Screenshotter.java b/src/main/java/com/chromascape/scripts/Screenshotter.java index 6f48a40..3617923 100644 --- a/src/main/java/com/chromascape/scripts/Screenshotter.java +++ b/src/main/java/com/chromascape/scripts/Screenshotter.java @@ -9,10 +9,11 @@ import org.apache.logging.log4j.Logger; /** - * Creates screenshots of the client and stores it in an external folder "screenshots". Screenshots - * are saved as "original.png". Screenshots taken by this class are used by the colour picker in the - * web UI. This is a single cycle program that exits out immediately after completion. Served as a - * "user script" in the web UI. + * Creates screenshots of the client and stores it in an external folder "/output". Screenshots are + * saved as "original.png". Screenshots taken by this class are used by the colour picker in the web + * UI. This is a single cycle program that exits out immediately after completion. Served as a "user + * script" in the web UI, however started via a dedicated button, rather than started as a normal + * script. */ public class Screenshotter extends BaseScript { @@ -30,9 +31,9 @@ public Screenshotter() { } /** - * Takes a screenshot and saves it in the "screenshots" folder outside the project directory. - * Although in the BaseScript - this function is repeated until the specified time duration is met - * - Here because this is a one time task it exits out early by calling "stop()". + * Takes a screenshot and saves it in the "/output" directory on the same level as /src. Although + * in the BaseScript - this function is repeated until the specified time duration is met - Here, + * because this is a one time task it exits out early by calling "stop()". */ @Override protected void cycle() { diff --git a/src/main/java/com/chromascape/utils/actions/PointSelector.java b/src/main/java/com/chromascape/utils/actions/PointSelector.java index a14c7dc..0544459 100644 --- a/src/main/java/com/chromascape/utils/actions/PointSelector.java +++ b/src/main/java/com/chromascape/utils/actions/PointSelector.java @@ -227,7 +227,8 @@ private static Point findPointInColourInternal( return null; } - ChromaObj obj = objs.get(0); + // Use the closest object to screen centre since only one object is desired + ChromaObj obj = ColourContours.getChromaObjClosestToCentre(objs); try { int attempts = 0; // Generate initial point using the function provided (Heuristic or Tightness) diff --git a/src/main/java/com/chromascape/utils/core/AccountManager.java b/src/main/java/com/chromascape/utils/core/AccountManager.java deleted file mode 100644 index 32d5554..0000000 --- a/src/main/java/com/chromascape/utils/core/AccountManager.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.chromascape.utils.core; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Singleton class to manage the selected account across the entire application. This provides a - * centralized way to store and access the currently selected account. - */ -public class AccountManager { - - private static final Logger logger = LoggerFactory.getLogger(AccountManager.class); - - // Static variable that persists across all classes - private static String selectedAccount = null; - - // Private constructor to prevent instantiation - private AccountManager() { - throw new UnsupportedOperationException( - "AccountManager is a utility class and cannot be instantiated"); - } - - /** - * Gets the currently selected account. - * - * @return The selected account name, or null if none is selected - */ - public static String getSelectedAccount() { - return selectedAccount; - } - - /** - * Sets the selected account. - * - * @param account The account name to set - */ - public static void setSelectedAccount(String account) { - selectedAccount = account; - logger.info("Selected account updated to: {}", account); - } - - /** Clears the selected account. */ - public static void clearSelectedAccount() { - selectedAccount = null; - logger.info("Selected account cleared"); - } - - /** - * Checks if an account is currently selected. - * - * @return true if an account is selected, false otherwise - */ - public static boolean hasSelectedAccount() { - return selectedAccount != null && !selectedAccount.trim().isEmpty(); - } - - /** - * Gets the selected account or returns a default value if none is selected. - * - * @param defaultValue The default value to return if no account is selected - * @return The selected account or the default value - */ - public static String getSelectedAccountOrDefault(String defaultValue) { - return hasSelectedAccount() ? selectedAccount : defaultValue; - } -} diff --git a/src/main/java/com/chromascape/utils/core/constants/CacheFolderConstants.java b/src/main/java/com/chromascape/utils/core/constants/CacheFolderConstants.java deleted file mode 100644 index 4b53834..0000000 --- a/src/main/java/com/chromascape/utils/core/constants/CacheFolderConstants.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.chromascape.utils.core.constants; - -/** - * The {@code CacheFolderConstants} class defines directory and file naming conventions for the - * ChromaScape cache structure. - * - *

Purpose: Centralizes folder and file names used for local cache organization, - * configuration, logs, scripts, and data files, ensuring consistency across the ChromaScape - * framework. - * - *

Features: - * - *

    - *
  • Top-level cache folder name - *
  • Subdirectory names for config, logs, scripts, data, and cache - *
  • Array of all cache subdirectory names - *
  • Common accounts file name - *
- * - *

These constants are intended for use wherever cache-related paths are constructed or - * referenced within ChromaScape. - * - *

Example usage: - * - *

- *   String configPath =
- *       Path.of(
- *               CacheFolderConstants.CHROMA_CACHE_FOLDER_NAME,
- *               CacheFolderConstants.CONFIG_FOLDER_NAME)
- *           .toString();
- * 
- */ -public class CacheFolderConstants { - public static final String CHROMA_CACHE_FOLDER_NAME = ".chromascape"; - public static final String CONFIG_FOLDER_NAME = "config"; - public static final String LOGS_FOLDER_NAME = "logs"; - public static final String SCRIPTS_FOLDER_NAME = "scripts"; - public static final String DATA_FOLDER_NAME = "data"; - public static final String CACHE_FOLDER_NAME = "cache"; - public static final String[] CHROMA_CACHE_FOLDER_SUBDIRS = { - CONFIG_FOLDER_NAME, LOGS_FOLDER_NAME, SCRIPTS_FOLDER_NAME, DATA_FOLDER_NAME, CACHE_FOLDER_NAME - }; - public static final String ACCOUNTS_FILE_NAME = "accounts.json"; -} diff --git a/src/main/java/com/chromascape/utils/core/input/keyboard/VirtualKeyboardUtils.java b/src/main/java/com/chromascape/utils/core/input/keyboard/VirtualKeyboardUtils.java index fd80672..ce07630 100644 --- a/src/main/java/com/chromascape/utils/core/input/keyboard/VirtualKeyboardUtils.java +++ b/src/main/java/com/chromascape/utils/core/input/keyboard/VirtualKeyboardUtils.java @@ -34,7 +34,17 @@ public synchronized void sendKeyChar(char keyChar) { BaseScript.checkInterrupted(); StateManager.setState(BotState.ACTING); StatisticsManager.incrementInputs(); - kinput.sendKeyEvent(400, keyChar); + kinput.sendCharEvent(keyChar); + } + + /** + * Updates the necessary states of the bot for the {@link BaseScript}'s stop() function and + * updates the BotState for the UI. + */ + private void prepareInput() { + BaseScript.checkInterrupted(); + StateManager.setState(BotState.ACTING); + StatisticsManager.incrementInputs(); } /** @@ -46,9 +56,7 @@ public synchronized void sendKeyChar(char keyChar) { * @throws IllegalArgumentException if the key name is invalid. */ public synchronized void sendModifierKey(int eventId, String key) { - BaseScript.checkInterrupted(); - StateManager.setState(BotState.ACTING); - StatisticsManager.incrementInputs(); + prepareInput(); int keyId = switch (key.toLowerCase()) { case "shift" -> 16; @@ -59,7 +67,19 @@ public synchronized void sendModifierKey(int eventId, String key) { case "space" -> 32; default -> throw new IllegalArgumentException("Invalid modifier key: " + key); }; - kinput.sendModifierKey(eventId, key, keyId); + kinput.sendVirtualKeyEvent(eventId, keyId, key); + } + + /** + * Sends a function key (F1-F12) using the KeyCode slot. + * + * @param eventId 401 to simulate a key press, or 402 to simulate a key release. + * @param functionKeyNumber The number of the F key (e.g., 6 for F6 or 1 for F1). + */ + public synchronized void sendFunctionKey(int eventId, int functionKeyNumber) { + prepareInput(); + int keyId = 111 + functionKeyNumber; // F1 starts at 112 + kinput.sendVirtualKeyEvent(eventId, keyId, "F" + functionKeyNumber); } /** @@ -70,17 +90,15 @@ public synchronized void sendModifierKey(int eventId, String key) { * @throws IllegalArgumentException if the arrow direction is invalid. */ public synchronized void sendArrowKey(int eventId, String key) { - BaseScript.checkInterrupted(); - StateManager.setState(BotState.ACTING); - StatisticsManager.incrementInputs(); + prepareInput(); int keyId = switch (key.toLowerCase()) { case "left" -> 37; - case "right" -> 39; case "up" -> 38; + case "right" -> 39; case "down" -> 40; default -> throw new IllegalArgumentException("Invalid arrow key: " + key); }; - kinput.sendArrowKey(eventId, key, keyId); + kinput.sendVirtualKeyEvent(eventId, keyId, key); } } diff --git a/src/main/java/com/chromascape/utils/core/input/mouse/VirtualMouseUtils.java b/src/main/java/com/chromascape/utils/core/input/mouse/VirtualMouseUtils.java index 72034eb..b6afe5d 100644 --- a/src/main/java/com/chromascape/utils/core/input/mouse/VirtualMouseUtils.java +++ b/src/main/java/com/chromascape/utils/core/input/mouse/VirtualMouseUtils.java @@ -200,7 +200,7 @@ public void leftClick() { performClick( (p) -> { synchronized (kinputLock) { - kinput.clickLeft(p.x, p.y); + kinput.clickMouse(p.x, p.y, Kinput.MouseButton.LEFT.id); // Redundant move ensures OS registers click at correct coords if jitter occurred kinput.moveMouse(p.x, p.y); } @@ -212,7 +212,7 @@ public void rightClick() { performClick( (p) -> { synchronized (kinputLock) { - kinput.clickRight(p.x, p.y); + kinput.clickMouse(p.x, p.y, Kinput.MouseButton.RIGHT.id); kinput.moveMouse(p.x, p.y); } }); diff --git a/src/main/java/com/chromascape/utils/core/input/remoteinput/Kinput.java b/src/main/java/com/chromascape/utils/core/input/remoteinput/Kinput.java index fceeda1..b0dfe8f 100644 --- a/src/main/java/com/chromascape/utils/core/input/remoteinput/Kinput.java +++ b/src/main/java/com/chromascape/utils/core/input/remoteinput/Kinput.java @@ -175,11 +175,6 @@ private static KinputInterface loadLibrary() { } } - /** Returns the current system time in milliseconds. */ - private long now() { - return System.currentTimeMillis(); - } - /** Sleeps briefly to simulate human-like click timing. */ private void sleepHumanClick() { try { @@ -196,38 +191,48 @@ private synchronized void focus() { } } - /** Sends a left mouse click at the specified screen coordinate. */ - public synchronized void clickLeft(int x, int y) { - focus(); - if (!kinput.KInput_MouseEvent( - pid, MouseEventType.MOUSE_PRESS.id, now(), 1, x, y, 1, false, MouseButton.LEFT.id)) { - throw new RuntimeException("Left mouse press failed"); - } - sleepHumanClick(); - if (!kinput.KInput_MouseEvent( - pid, MouseEventType.MOUSE_RELEASE.id, now(), 1, x, y, 1, false, MouseButton.LEFT.id)) { - throw new RuntimeException("Left mouse release failed"); - } - } - - /** Sends a right mouse click at the specified screen coordinate. */ - public synchronized void clickRight(int x, int y) { + /** + * Sends a mouse press and release to a specified screen co-ordinate. This operates in client + * relative co-ordinates, not screen relative co-ordinates. + * + * @param x the x co-ordinate of the action. + * @param y the y co-ordinate of the action. + * @param button which {@link MouseButton} to use. + */ + public synchronized void clickMouse(int x, int y, int button) { focus(); if (!kinput.KInput_MouseEvent( - pid, MouseEventType.MOUSE_PRESS.id, now(), 0, x, y, 1, false, MouseButton.RIGHT.id)) { - throw new RuntimeException("Right mouse press failed"); + pid, + MouseEventType.MOUSE_PRESS.id, + System.currentTimeMillis(), + 1, + x, + y, + 1, + false, + button)) { + throw new RuntimeException(button + " press failed"); } sleepHumanClick(); if (!kinput.KInput_MouseEvent( - pid, MouseEventType.MOUSE_RELEASE.id, now(), 0, x, y, 1, false, MouseButton.RIGHT.id)) { - throw new RuntimeException("Right mouse release failed"); + pid, + MouseEventType.MOUSE_RELEASE.id, + System.currentTimeMillis(), + 1, + x, + y, + 1, + false, + button)) { + throw new RuntimeException(button + " release failed"); } } /** Sends a middle mouse button input. */ public synchronized void middleInput(int x, int y, int eventID) { focus(); - if (!kinput.KInput_MouseEvent(pid, eventID, now(), 1, x, y, 1, false, MouseButton.MIDDLE.id)) { + if (!kinput.KInput_MouseEvent( + pid, eventID, System.currentTimeMillis(), 1, x, y, 1, false, MouseButton.MIDDLE.id)) { throw new RuntimeException("Middle mouse event failed"); } } @@ -236,11 +241,27 @@ public synchronized void middleInput(int x, int y, int eventID) { public synchronized void moveMouse(int x, int y) { focus(); if (!kinput.KInput_MouseEvent( - pid, MouseEventType.MOUSE_ENTER.id, now(), 0, x, y, 0, false, MouseButton.NONE.id)) { + pid, + MouseEventType.MOUSE_ENTER.id, + System.currentTimeMillis(), + 0, + x, + y, + 0, + false, + MouseButton.NONE.id)) { throw new RuntimeException("Mouse enter failed"); } if (!kinput.KInput_MouseEvent( - pid, MouseEventType.MOUSE_MOVE.id, now(), 0, x, y, 0, false, MouseButton.NONE.id)) { + pid, + MouseEventType.MOUSE_MOVE.id, + System.currentTimeMillis(), + 0, + x, + y, + 0, + false, + MouseButton.NONE.id)) { throw new RuntimeException("Mouse move failed"); } } @@ -253,34 +274,48 @@ pid, MouseEventType.MOUSE_MOVE.id, now(), 0, x, y, 0, false, MouseButton.NONE.id */ public synchronized void sendKeyEvent(int eventID, char keyChar) { focus(); - if (!kinput.KInput_KeyEvent(pid, eventID, now(), 0, 0, (short) keyChar, 0)) { + if (!kinput.KInput_KeyEvent( + pid, eventID, System.currentTimeMillis(), 0, 0, (short) keyChar, 0)) { throw new RuntimeException("Key event failed for char: " + keyChar); } } - /** Sends a key event for a modifier (e.g. Shift, Ctrl, Alt). */ - public synchronized void sendModifierKey(int eventID, String key, int keyID) { + /** + * Types a character to the client window. + * + * @param keyChar The character to send. + */ + public synchronized void sendCharEvent(char keyChar) { focus(); - if (!kinput.KInput_KeyEvent(pid, eventID, now(), 0, keyID, (short) 0, 0)) { - throw new RuntimeException("Modifier key event failed for key: " + key); + // Passes keyChar into the 'short' parameter (arg5) + if (!kinput.KInput_KeyEvent(pid, 400, System.currentTimeMillis(), 0, 0, (short) keyChar, 0)) { + throw new RuntimeException("Character event failed for char: '" + keyChar + "'"); } } - /** Sends a directional arrow key event. */ - public synchronized void sendArrowKey(int eventID, String key, int keyID) { + /** + * Sends a virtual key event (Arrow, Modifier, F-Key) to the client window's SunAwtCanvas. + * + * @param eventID 401 for press, 402 for release. + * @param keyCode The virtual key code. + * @param keyName A descriptive name used purely for error logging. + */ + public synchronized void sendVirtualKeyEvent(int eventID, int keyCode, String keyName) { focus(); - if (!kinput.KInput_KeyEvent(pid, eventID, now(), 0, keyID, (short) 0, 0)) { - throw new RuntimeException("Arrow key event failed for key: " + key); + // Passes keyCode into the integer parameter (arg4) + if (!kinput.KInput_KeyEvent( + pid, eventID, System.currentTimeMillis(), 0, keyCode, (short) 0, 0)) { + throw new RuntimeException("Virtual key event failed for: " + keyName); } } /** - * Destroys the active Kinput instance. Should be called on shutdown to free memory and close + * Destroys the active KInput instance. Should be called on shutdown to free memory and close * resources. */ public synchronized void destroy() { if (!kinput.KInput_Delete(pid)) { - throw new RuntimeException("Failed to delete Kinput instance"); + throw new RuntimeException("Failed to delete KInput instance"); } } } diff --git a/src/main/java/com/chromascape/utils/core/screen/topology/ColourContours.java b/src/main/java/com/chromascape/utils/core/screen/topology/ColourContours.java index 9eb373f..1f2281d 100644 --- a/src/main/java/com/chromascape/utils/core/screen/topology/ColourContours.java +++ b/src/main/java/com/chromascape/utils/core/screen/topology/ColourContours.java @@ -24,8 +24,8 @@ */ public class ColourContours { - private static final Mat DILATE_KERNEL = getStructuringElement(MORPH_ELLIPSE, new Size(25, 25)); - private static final Mat ERODE_KERNEL = getStructuringElement(MORPH_ELLIPSE, new Size(25, 25)); + private static final Mat DILATE_KERNEL = getStructuringElement(MORPH_ELLIPSE, new Size(20, 20)); + private static final Mat ERODE_KERNEL = getStructuringElement(MORPH_ELLIPSE, new Size(20, 20)); private static final Scalar COLOUR_WHITE = new Scalar(255); private static final Mat EMPTY_HIERARCHY = new Mat(); private static final org.bytedeco.opencv.opencv_core.Point OFFSET_ZERO = @@ -42,11 +42,50 @@ public class ColourContours { public static List getChromaObjsInColour(BufferedImage image, ColourObj colourObj) { Mat mask = extractColours(image, colourObj); morphClose(mask); + ViewportManager.getInstance().updateState(mask); MatVector contours = extractContours(mask); mask.release(); return createChromaObjects(contours); } + /** + * Iterates over a list of ChromaObjs to calculate and return whichever is closest to the + * player/screen centre. Useful in a wide range of activities and preferred over arbitrary choice + * by detection. + * + * @param chromaObjs {@code List} of which to iterate over. + * @return a single {@link ChromaObj} which is closest to the player. + */ + public static ChromaObj getChromaObjClosestToCentre(List chromaObjs) { + if (chromaObjs == null || chromaObjs.isEmpty()) { + return null; + } + + Point screenCentre = + new Point( + (int) ScreenManager.getWindowBounds().getCenterX(), + (int) ScreenManager.getWindowBounds().getCenterY()); + + double minDistance = Double.MAX_VALUE; + ChromaObj closestChromaObj = null; + + for (ChromaObj chromaObj : chromaObjs) { + Point objCentre = + new Point( + (int) chromaObj.boundingBox().getCenterX(), + (int) chromaObj.boundingBox().getCenterY()); + + double currentDistance = objCentre.distance(screenCentre); + + if (currentDistance < minDistance) { + minDistance = currentDistance; + closestChromaObj = chromaObj; + } + } + + return closestChromaObj; + } + /** * Converts the input image to HSV colour space and extracts a binary mask where pixels within the * HSV range specified by the colourObj are white (255), and others are black (0). @@ -80,7 +119,6 @@ public static Mat extractColours(Mat inputMat, ColourObj colourObj) { hsvImage.release(); hsvMin.release(); hsvMax.release(); - ViewportManager.getInstance().updateState(result); return result; } diff --git a/src/main/java/com/chromascape/utils/core/screen/topology/TemplateMatching.java b/src/main/java/com/chromascape/utils/core/screen/topology/TemplateMatching.java index 0cae3d3..f171090 100644 --- a/src/main/java/com/chromascape/utils/core/screen/topology/TemplateMatching.java +++ b/src/main/java/com/chromascape/utils/core/screen/topology/TemplateMatching.java @@ -30,13 +30,10 @@ * *

This class provides a single static method, {@link #match}, which uses the TM_SQDIFF_NORMED * algorithm to locate a template image within a larger base image. It uses an alpha mask to ignore - * transparent pixels in the template, allowing for accurate matching even with irregular shapes. + * transparent pixels in the template. * - *

This is commonly used in ChromaScape to locate UI elements or patterns in the client window, - * based on screen captures and template assets. - * - *

All memory allocated in native OpenCV (Mats and pointers) is explicitly released before - * return. + *

This is commonly to locate UI elements or sprites in the client window, based on screen + * captures and template assets. */ public class TemplateMatching { @@ -56,19 +53,16 @@ public class TemplateMatching { *

The method returns the bounding rectangle of the best match if its matching score is below * the given threshold. If no match satisfies the threshold, the method returns {@code null}. * - *

Note: The method releases the native OpenCV memory of the input and intermediate matrices, - * so the caller should not use the input Mats after this call. - * - * @param templateImg The template image (smaller), expected as a BufferedImage in BGRA format or - * convertible to it. - * @param baseImg The base image (larger) where the template is searched, expected as a - * BufferedImage in BGRA format or convertible to it. + * @param templateImg The template image (smaller), expected as a {@link BufferedImage} in BGRA + * format or convertible to it. + * @param baseImg The base image (larger) where the template is searched, expected as a {@link + * BufferedImage} in BGRA format or convertible to it. * @param threshold The maximum allowed normalized squared difference score for a valid match. * Lower values mean better matches. * @param debugMsg Set this to true if you want detailed messages useful when debugging. * @return A {@link Rectangle} representing the position and size of the matching area in the base * image, or {@code null} if no match meets the threshold criteria. - * @throws IllegalArgumentException If either input Mat is empty (not loaded). + * @throws IllegalArgumentException If either input image is empty (not loaded). * @throws Exception If the template is larger than the base image. */ public static Rectangle match( diff --git a/src/main/java/com/chromascape/utils/core/screen/window/WindowHandler.java b/src/main/java/com/chromascape/utils/core/screen/window/WindowHandler.java index 60f2465..8c4f3f8 100644 --- a/src/main/java/com/chromascape/utils/core/screen/window/WindowHandler.java +++ b/src/main/java/com/chromascape/utils/core/screen/window/WindowHandler.java @@ -1,6 +1,5 @@ package com.chromascape.utils.core.screen.window; -import com.chromascape.utils.core.AccountManager; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.WinDef.HWND; @@ -17,7 +16,7 @@ */ public class WindowHandler { private static final Logger logger = LoggerFactory.getLogger(WindowHandler.class); - private static final String _windowName = "RuneLite"; + private static final String WINDOW_NAME = "RuneLite"; /** * JNA interface for accessing low-level Win32 User32 functions that are not provided by the @@ -79,7 +78,7 @@ public interface User32 extends StdCallLibrary { } /** - * Attempts to locate the window whose title matches the {@code windowName}. + * Attempts to locate the window whose title matches the {@code WINDOW_NAME}. * * @return The {@link HWND} handle of the target window, or {@code null} if not found. */ @@ -87,22 +86,13 @@ public static HWND getTargetWindow() { AtomicReference targetHwnd = new AtomicReference<>(); User32 user32 = User32.INSTANCE; - // Get the selected account from AccountManager (loaded during startup) - String selectedAccount = AccountManager.getSelectedAccount(); - - // Build the resolved window name - make it effectively final - final String resolvedWindowName = - (selectedAccount != null && !selectedAccount.trim().isEmpty()) - ? _windowName + " - " + selectedAccount - : _windowName; - user32.EnumWindows( (hwnd, arg) -> { byte[] buffer = new byte[512]; user32.GetWindowTextA(hwnd, buffer, 512); String title = Native.toString(buffer); - if (title.trim().equals(resolvedWindowName)) { + if (title.trim().equals(WINDOW_NAME)) { targetHwnd.set(hwnd); return false; // stop enumeration } diff --git a/src/main/java/com/chromascape/utils/domain/ocr/Ocr.java b/src/main/java/com/chromascape/utils/domain/ocr/Ocr.java index 3b2aabb..0c4186b 100644 --- a/src/main/java/com/chromascape/utils/domain/ocr/Ocr.java +++ b/src/main/java/com/chromascape/utils/domain/ocr/Ocr.java @@ -29,8 +29,6 @@ import java.util.Map; import java.util.Objects; import javax.imageio.ImageIO; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.bytedeco.javacpp.DoublePointer; import org.bytedeco.javacv.Java2DFrameUtils; import org.bytedeco.opencv.opencv_core.Mat; @@ -47,7 +45,7 @@ public class Ocr { /** Stores successful character matches during Ocr extraction. */ private static final List matches = new ArrayList<>(); - /** Cached zero scalar to prevent CPU allocation fatigue */ + /** Cached zero scalar to prevent CPU allocation fatigue. */ private static final Scalar ZERO_SCALAR = new Scalar(0); /** Cache for loaded fonts to prevent disk I/O on every OCR call. */ @@ -58,7 +56,7 @@ public class Ocr { * characters found. */ private static final String ALLOWED_CHARS = - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789()[],&-:/*'_\"?"; + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789()[],&-:/*'_\"?<>"; /** * Loads a font glyph set from disk, converts each glyph to grayscale, and stores in a map. Uses diff --git a/src/main/java/com/chromascape/web/config/StartupConfiguration.java b/src/main/java/com/chromascape/web/config/StartupConfiguration.java index 78e1667..4d7b740 100644 --- a/src/main/java/com/chromascape/web/config/StartupConfiguration.java +++ b/src/main/java/com/chromascape/web/config/StartupConfiguration.java @@ -1,12 +1,7 @@ package com.chromascape.web.config; -import com.chromascape.utils.core.AccountManager; -import com.chromascape.utils.core.constants.CacheFolderConstants; import com.chromascape.utils.core.runtime.profile.ProfileManager; -import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.PostConstruct; -import java.io.File; -import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Configuration; @@ -38,18 +33,12 @@ public void initializeInfrastructure() { try { // Examples: - // - Initialize native libraries (KInput, MinHook) + // - Initialize native libraries (KInput) // - Validate system requirements // - Set up application-wide resources // - Load configuration files // - Perform health checks - // Initialize .chromascape directory - initializeChromascapeDirectory(); - - // Load account configuration - loadAccountConfiguration(); - // Load bot profile config file into RuneLite ProfileManager profileManager = new ProfileManager(); profileManager.loadBotProfile(); @@ -62,115 +51,4 @@ public void initializeInfrastructure() { // if critical infrastructure fails to initialize } } - - /** - * Initializes the .chromascape directory in the project root directory. Creates the directory if - * it doesn't exist and sets up any required subdirectories. - */ - private void initializeChromascapeDirectory() { - try { - // Get project root directory (where build.gradle.kts is located) - String projectRoot = System.getProperty("user.dir"); - File chromascapeDir = new File(projectRoot, CacheFolderConstants.CHROMA_CACHE_FOLDER_NAME); - - // Create .chromascape directory if it doesn't exist - if (!chromascapeDir.exists()) { - boolean created = chromascapeDir.mkdirs(); - if (created) { - logger.info("Created .chromascape directory at: {}", chromascapeDir.getAbsolutePath()); - createSubdirectories(chromascapeDir); - } else { - String message = - String.format( - "Could not create %s directory", CacheFolderConstants.CHROMA_CACHE_FOLDER_NAME); - logger.error(message); - throw new RuntimeException(message); - } - } else { - String message = - String.format( - "Found existing %s directory at: %s", - CacheFolderConstants.CHROMA_CACHE_FOLDER_NAME, chromascapeDir.getAbsolutePath()); - logger.info(message); - } - - // Verify directory is writable - if (!chromascapeDir.canWrite()) { - String message = - String.format( - "Warning: %s directory is not writable", - CacheFolderConstants.CHROMA_CACHE_FOLDER_NAME); - logger.warn(message); - throw new RuntimeException(message); - } - - } catch (Exception e) { - String message = - String.format( - "Error initializing %s directory: %s", - CacheFolderConstants.CACHE_FOLDER_NAME, e.getMessage()); - logger.error(message); - throw new RuntimeException(message, e); - } - } - - /** - * Creates necessary subdirectories within the .chromascape directory. - * - * @param chromascapeDir the main .chromascape directory - */ - private void createSubdirectories(File chromascapeDir) { - for (String subdir : CacheFolderConstants.CHROMA_CACHE_FOLDER_SUBDIRS) { - File subdirFile = new File(chromascapeDir, subdir); - if (!subdirFile.exists()) { - boolean created = subdirFile.mkdir(); - if (created) { - logger.info("Created subdirectory: {}", subdir); - } else { - logger.warn("Warning: Failed to create subdirectory: {}", subdir); - } - } - } - } - - /** - * Loads account configuration from the accounts.json file and populates the AccountManager. This - * method reads the first account from the JSON file and sets it as the selected account. - */ - private void loadAccountConfiguration() { - try { - String projectRoot = System.getProperty("user.dir"); - File accountsFile = - new File( - projectRoot, - CacheFolderConstants.CHROMA_CACHE_FOLDER_NAME - + "/" - + CacheFolderConstants.CONFIG_FOLDER_NAME - + "/" - + CacheFolderConstants.ACCOUNTS_FILE_NAME); - - if (accountsFile.exists()) { - logger.info("Loading account configuration from: {}", accountsFile.getAbsolutePath()); - - // Read the JSON file and parse it as a String array - ObjectMapper objectMapper = new ObjectMapper(); - String[] accounts = objectMapper.readValue(accountsFile, String[].class); - - // Select the first account if any exist - if (accounts.length > 0) { - String firstAccount = accounts[0]; - AccountManager.setSelectedAccount(firstAccount); - logger.info("Account loaded successfully: {}", firstAccount); - } else { - logger.warn("No accounts found in accounts.json file"); - } - } else { - logger.info("No accounts.json file found, no account will be loaded"); - } - } catch (IOException e) { - logger.error("Error reading accounts file: {}", e.getMessage()); - } catch (Exception e) { - logger.error("Unexpected error during account loading: {}", e.getMessage()); - } - } } diff --git a/src/main/resources/static/js/colour.js b/src/main/resources/static/js/colour.js index e13560f..5ac656b 100644 --- a/src/main/resources/static/js/colour.js +++ b/src/main/resources/static/js/colour.js @@ -19,6 +19,7 @@ document.addEventListener("DOMContentLoaded", () => { initSliders(); initSubmitButton(); fetchSliderState(); // Restore state from server + initNameInput(); updateImages().catch(console.error); }); @@ -184,13 +185,7 @@ const pendingUpdates = new Map(); /** * Sends a slider value update to the server using a conflating queue loop. - * - *

This implementation solves the "backend overload" problem by ensuring that only one request - * is ever in flight per slider. If the user moves the slider repeatedly while a request is processing, - * intermediate values are locally overwritten (conflated). As soon as the active request finishes, - * the loop immediately picks up the current latest value and sends it. - * - *

This guarantees the server always receives the final state eventually without lag accumulation. + * To ensure that the slider state doesn't overload the backend. * * @param {string} sliderName - The ID/name of the slider being updated. * @param {string|number} value - The new value of the slider. @@ -283,4 +278,16 @@ function toCamelCase(str) { return str.replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => { return index === 0 ? word.toLowerCase() : word.toUpperCase(); }).replace(/\s+/g, ''); -} \ No newline at end of file +} +/** + * Initializes the colour name input listener to update the code snippet in real-time. + */ +function initNameInput() { + const nameInput = document.getElementById("colourNameInput"); + if (nameInput) { + // 'input' fires on every keystroke, 'change' only when focus is lost + nameInput.addEventListener("input", () => { + updateCodeSnippet(); + }); + } +} diff --git a/third_party/KInput/KInput/KInput/bin/Release/KInput.dll b/third_party/KInput/KInput/KInput/bin/Release/KInput.dll index 71b2c8db6e596072a9a44c7755fcac98130c3f8a..9baca1dbed75045eeb9e17c96b534f1efcc904e1 100644 GIT binary patch delta 1286 zcmZ8hZ)j6j6n`(tOJ4rGyr$YMI&c-=N;+Z7TPe7@52HFIPBwpSFb%lAYk$uzIUNa>l%#(f`3^g5ZS zu|IsKm;OXbJpwDs@erX)gx)mh!rKt5$?X!ohN%1U{pw@WYBADA-LDuPZvMDXhTccc z9CE_KIkzj%IaA7@L6g}gr&=~49b|pf#;G=FcDjAZ*oK%l_xwRXPDCqONKjYJ$oBEKK!4R~_^b+dX zOC}ypUMK|Z3x!bWfOJVD6L;+HTIf!%NbHD9@s*^p+}$;C`dzoO$4*Qr#TVXKJ_ZLM zedG7T|NO1-aG#H2V7 yw#5O}J;(peZ250>>a|_<>T1=gKB_*g3YKiOSW&Cpidk`M%qm(_mOU>iL*l>G1jPve delta 1431 zcmb7EZ)h837{5!J%WniZwf-XMqnKWAbV&DnS z^S;05_j{h_p1aBQ=;V6z+;qb)=da1<&q|gX`77VqY1+7Ym&P_G_kcr6MhM{v$EdAP zLdpvM*`eBVT@+Hj#(5^}IZ94%A?3EDEaMWxo2WA0WS$Afl;4rEEvY?W!ymLzm+7r1 zq$0cC#X|D7RJ3h^XWV|+LLtJ@6UGVWeh=a56(Xp3T!`STv#H9bIR~7DQcNMh=!~mr zFI2@NRT3h`e2t-uyIk$oKJg|_yJl?4eWcRZ;THQrD)ux>!38P?7Qx%{!%^qX(HeN- z%}U^Gw~sP)k@BtK__I>k+6OrA-#9aQ1AP3JTjZ2ml2RsxCP_jPFS`%gp^F&I;5YX` zqE=}lb4JYzs}x1`ar!-^9z#eO5kkH27bV3fdzC>U3^WK}C4iBxNc)l+4;s-xbu?vs z!E?H_Gq~k%sR33-cNy9Rr z7(i7UPC-aPh!JBB>+Qy)+4O-IX;|l!TO2 z91#){nXGYbjy4}8ob@)O$ZZrq>+f$QYxZfz9A7mV&-)*7{R36_Xb08c@IQHI|M6&KW-G9IcSc8o#gS|#^%R~z%rMAA5zGe0d?K*dTR?F z#Lat}U^f7hIbq(z>u{i*ybjl4(Zb*vAF+T|j|I(ZSoeDRN@o8K=bVWGfn_Uw^}RhG ze8bFTfTq|nlZzWuaf1f4fLXyBz-(Z4Fb5a|=G5bctKn@=O!*usYf|&CNcnO0#jN`| zPvIVn2&s0YG#s3|ly&QuvYy;w8!BvEruB}JXQP{**8LXNk+Uty-*3^gFI(9IdbGe! zKGfzT2he)`_r<^B-S<9u_WrxopSZNKa1} zANrqsf&V1bKRo2U@Tk5T_iocubiY@p`#I}^`FYiuKe*}E$ATKKg|x61(V`mC5?WGA UX|k5qmb8*~L({L=*yriL0KcT`e*gdg diff --git a/third_party/KInput/KInput/KInput/makefile b/third_party/KInput/KInput/KInput/makefile index edb2054..5465995 100644 --- a/third_party/KInput/KInput/KInput/makefile +++ b/third_party/KInput/KInput/KInput/makefile @@ -11,14 +11,14 @@ AR = ar.exe LD = g++.exe WINDRES = windres.exe -INC = -I"..\..\..\minhook\include" -CFLAGS = -RESINC = -LIBDIR = -L"..\..\..\minhook\build\MinGW" -LIB = -l"MinHook" +INC = +CFLAGS = +RESINC = +LIBDIR = +LIB = LDFLAGS = -INC_RELEASE = $(INC) -I"C:\Program Files\Microsoft\jdk-17.0.16.8-hotspot\include" -I"C:\Program Files\Microsoft\jdk-17.0.16.8-hotspot\include\win32" +INC_RELEASE = -I"C:\Program Files\Microsoft\jdk-17.0.16.8-hotspot\include" -I"C:\Program Files\Microsoft\jdk-17.0.16.8-hotspot\include\win32" CFLAGS_RELEASE = $(CFLAGS) -Os -Wall -std=c++1z -DBUILD_DLL RESINC_RELEASE = $(RESINC) RCFLAGS_RELEASE = $(RCFLAGS) @@ -35,16 +35,16 @@ all: release clean: clean_release -before_release: +before_release: cmd /c if not exist bin\\Release md bin\\Release cmd /c if not exist $(OBJDIR_RELEASE) md $(OBJDIR_RELEASE) -after_release: +after_release: release: before_release out_release after_release out_release: before_release $(OBJ_RELEASE) $(DEP_RELEASE) - $(LD) -shared $(LIBDIR_RELEASE) $(OBJ_RELEASE) -o $(OUT_RELEASE) $(LDFLAGS_RELEASE) $(LIB_RELEASE) + $(LD) -shared $(OBJ_RELEASE) -o $(OUT_RELEASE) $(LDFLAGS_RELEASE) $(OBJDIR_RELEASE)\\KInput.o: KInput.cpp $(CXX) $(CFLAGS_RELEASE) $(INC_RELEASE) -c KInput.cpp -o $(OBJDIR_RELEASE)\\KInput.o @@ -52,7 +52,7 @@ $(OBJDIR_RELEASE)\\KInput.o: KInput.cpp $(OBJDIR_RELEASE)\\main.o: main.cpp $(CXX) $(CFLAGS_RELEASE) $(INC_RELEASE) -c main.cpp -o $(OBJDIR_RELEASE)\\main.o -clean_release: +clean_release: cmd /c del /f $(OBJ_RELEASE) $(OUT_RELEASE) cmd /c rd bin\\Release cmd /c rd $(OBJDIR_RELEASE) diff --git a/third_party/KInput/KInput/KInput/obj/Release/KInput.o b/third_party/KInput/KInput/KInput/obj/Release/KInput.o index 0c0d86ac46680c1ecbec0865951075eda1b68fc2..780db6c3a4d4dc0b4b5fb1fa229934e90778a3d9 100644 GIT binary patch delta 1173 zcmY+De`r%z6vy99^OBb)@ujiFHn#eL&zLT4mpBT={gW+?+^$bkTE&Y0)GkUKWt)^rPP8rm_If}P@z%_R_q`3k7eh)wl>Qj=f0Es zedqhR=bf8B&Yu0qTax#hRd5-oieE-ExW@f%Ec47KL#+B0mU7 z($BCUZ&E~75A*!LDrk-)vbfC)V{qDGI>etmzfFR$GwR`Dii`V(nAm}PX{RQOaZ(BA z$5F#fL_5SH7xObjeu>R)Hi}+9J{m>25to%6E)r3C>8&&9DeltSxM-&^1wkdWT+dKa zE|G|Lh%plWp@gcrY3Oapr&-1MlI;`aql(yM5~^LNWRr361}?Z_4awLfI-VrQVoeE` z*{apQV9~WZ^QaWSBW+cCt6vlmNnRE(jbU8MCW9gx@!v$M9Gf1CR&^30GY2FvrR`@QE& zcj|kQ=v(qshfOSpRbMap_9oTKtG-?2n;~>mJT3Djjt7{NJ#NP_C2%4_8ebVrw#6_l zjE7v@oH_HZRKl8Y#j}qPhX@e^BHo6emk_NF-|bCxip19|h-a}hI{2`q*qRI?KIh^) zYE4?V5Qnf#1{De_uwB%dK1?M_kq};aKU^L>ZO!Kn8b_Q9v1Y~<8{AH zHCUQ#zqOASpv51!FUZGH_cYvvUW?iyDYWKOq?BI{)r~lQ+l^VoiyMNYt1Abqe`1D zsS18186GYXviFBS+(6X*8iPV%8wDX$(jv34Ihe|D6y~5~o2WQ&BF6Ww&wcOh4_Wae=E$51Nc1dJ9lI^c_UitVY^r*0FFRFT$ukZ^EYIGAuW>EGpe4_~ zfD5?RU{6P$-GZ~Y{sZ0Cyv4T*KCvEQQTW-KWIBZ8z3e!=A}85tI4AF9DX7Z>@?Snl znuCY(Zl(CI%0*5Kg5NeJmup-s!>2aGRy-teaUFv8ugT`WPy?l)0&5cX%n z!{QMazw1UkyhhIF*u6b^#qGtCjw^CMR^|;Sj(8aUwD-A)E1^Ys<){{gJ|)oP)0L#7 zTpJbyjKNn*U<=yvb3@mnZHhYFQVw(sMZSeCj?=REgBuLaJ0iWP^)YJU1+R2Bu)5dP zK7vP%9h=)*6Z1NgBzU4TqKYfJsFR^I8A`+P&H)>`9mZZi>rAFvj#9Z9qoiFW4fWCk zZoJI7IH3g-xWvd~Iw3Mz7-=}dY6v6q)TVBXY~ASpkn^p!W|lOwaM`)8dDoeIzoj{* zmJDP-g*G-Xbwxyd!*lJssZ2U;ugcie+j5pnQHn_>{*Nudh<>DtU7T3=F z-Dn^uTyni?T3n`B3S_YWeeR~kI=tjgj=xFMoh? zu%PyI>Xn3bj8}9m2CM23FAdl?IWy1}D(3NRL}fhR1$kveiF`j4LGV#6xPbCf<0>z{ zt4M0eg*y@nVjPg}(i}zXLc(eEL%FMeCkZU6r7!Un3La65?Ihz{VWlh3YhrTa<~{xh zWefcXi#U2`umX?w@g71f=lcH7Ky*tTY(DM{*=1h7ImcjT+qi33tZ;Ed?|;a}UAVpN zc~|)X_Q(wz7uEq7^v&)oL=V1p@aa%~V)DRKq3L7U(A2S$;eGz+W+qPL{NuC!!xNJ) zjD~2NnTADQpqf%(%{R$bVRZYQ?wc5H0o$=kch;+4;l-X_=VR8^&93>`o>2=^=CAE& MxLADt+JLwFKeXzS+5i9m diff --git a/third_party/KInput/KInput/KInput/obj/Release/main.o b/third_party/KInput/KInput/KInput/obj/Release/main.o index 6b3666957754527128f8e180f411803583abd54b..7bf5a9f288268fc01ab337a4419b8f14f8688a76 100644 GIT binary patch delta 93 zcmZ1@)FZ^1(#FmJ0x}ahl^IV=)GcSMnYdJ)v2Eg6c}9bYZ?zdiHcK)JGN}ZmmRaa1 vIF)ARlqe)sD)qu^AUnNy;WRH@*bndcs^3*x2}Pqt$gV`5;~?8ltL%;>y% IH(MYR0L9B6&;S4c diff --git a/third_party/KInput/KInput/KInputCtrl/bin/Release/KInputCtrl.dll b/third_party/KInput/KInput/KInputCtrl/bin/Release/KInputCtrl.dll index 9fee134cdf9dfb4c473eb087eda077c82413e8ea..eddf38e0c2700e75f90892fd9c2dfa3654229c8e 100644 GIT binary patch delta 177383 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 delta 175776 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⪻yC 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∋nFFs*wcA5tk!`?4G>HGMkBRK7E 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

ho=%@#wEkMyTVEws(^+2bB)?W&+ok!~{ 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 S?V-d$*d`_Oi4z2EcR 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 diff --git a/third_party/KInput/KInput/KInputCtrl/obj/Release/main.o b/third_party/KInput/KInput/KInputCtrl/obj/Release/main.o index b5553f604f36cce499f4fe970c13359f9712ba27..fbf1c98d9164dd94af6a4214c770a2f21a00263e 100644 GIT binary patch delta 2724 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 From 7bd55804d52bb4a3960fdb70cf89881dda8132f9 Mon Sep 17 00:00:00 2001 From: debajit gayen Date: Sun, 15 Feb 2026 08:06:59 +0000 Subject: [PATCH 2/3] remove deleted files --- .../web/config/StartupConfigurationTest.java | 170 ------------------ 1 file changed, 170 deletions(-) delete mode 100644 src/test/java/com/chromascape/web/config/StartupConfigurationTest.java diff --git a/src/test/java/com/chromascape/web/config/StartupConfigurationTest.java b/src/test/java/com/chromascape/web/config/StartupConfigurationTest.java deleted file mode 100644 index 9db92ea..0000000 --- a/src/test/java/com/chromascape/web/config/StartupConfigurationTest.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.chromascape.web.config; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -import java.io.File; -import java.lang.reflect.Method; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.slf4j.Logger; -import org.springframework.test.util.ReflectionTestUtils; - -/** Test class for {@link StartupConfiguration}. */ -class StartupConfigurationTest { - - @TempDir File tempDir; - - private StartupConfiguration startupConfiguration; - private static Logger mockLogger; - - @BeforeEach - void setUp() { - startupConfiguration = new StartupConfiguration(); - mockLogger = mock(Logger.class); // This will now create an SLF4J mock - ReflectionTestUtils.setField(startupConfiguration, "logger", mockLogger); - } - - @Test - void testStartupConfigurationCanBeInstantiated() { - assertNotNull(startupConfiguration, "StartupConfiguration should be instantiable"); - } - - @Test - void testInitializeInfrastructureCreatesChromascapeDirectory() throws Exception { - final String originalUserDir = System.getProperty("user.dir"); - System.setProperty("user.dir", tempDir.getAbsolutePath()); - - startupConfiguration.initializeInfrastructure(); - - File expectedDir = new File(tempDir, ".chromascape"); - assertTrue(expectedDir.exists(), ".chromascape directory should be created"); - assertTrue(expectedDir.isDirectory(), ".chromascape should be a directory"); - assertTrue(expectedDir.canWrite(), ".chromascape directory should be writable"); - - verify(mockLogger, atLeastOnce()).info(anyString()); - - System.setProperty("user.dir", originalUserDir); - } - - @Test - void testInitializeInfrastructureCreatesSubdirectories() throws Exception { - final String originalUserDir = System.getProperty("user.dir"); - System.setProperty("user.dir", tempDir.getAbsolutePath()); - - startupConfiguration.initializeInfrastructure(); - - File chromascapeDir = new File(tempDir, ".chromascape"); - String[] expectedSubdirs = {"config", "logs", "scripts", "data", "cache"}; - for (String subdir : expectedSubdirs) { - File subdirFile = new File(chromascapeDir, subdir); - assertTrue(subdirFile.exists(), "Subdirectory " + subdir + " should exist"); - assertTrue(subdirFile.isDirectory(), "Subdirectory " + subdir + " should be a directory"); - } - - System.setProperty("user.dir", originalUserDir); - } - - @Test - void testInitializeInfrastructureHandlesExistingDirectory() throws Exception { - final String originalUserDir = System.getProperty("user.dir"); - System.setProperty("user.dir", tempDir.getAbsolutePath()); - - File existingDir = new File(tempDir, ".chromascape"); - existingDir.mkdirs(); - - startupConfiguration.initializeInfrastructure(); - - assertTrue(existingDir.exists(), "Existing directory should still exist"); - verify(mockLogger, atLeastOnce()).info(anyString()); - - System.setProperty("user.dir", originalUserDir); - } - - @Test - void testInitializeInfrastructureLogsAppropriateMessages() throws Exception { - final String originalUserDir = System.getProperty("user.dir"); - System.setProperty("user.dir", tempDir.getAbsolutePath()); - - startupConfiguration.initializeInfrastructure(); - - verify(mockLogger, atLeastOnce()).info(anyString()); - - System.setProperty("user.dir", originalUserDir); - } - - @Test - void testInitializeInfrastructureHandlesDirectoryCreationFailure() throws Exception { - final String originalUserDir = System.getProperty("user.dir"); - System.setProperty("user.dir", "/root/restricted"); - - try { - startupConfiguration.initializeInfrastructure(); - } catch (RuntimeException e) { - assertTrue(e.getMessage().contains("Failed to initialize .chromascape directory")); - } - - System.setProperty("user.dir", originalUserDir); - } - - @Test - void testCreateSubdirectoriesCreatesAllRequiredSubdirectories() throws Exception { - Method createSubdirectoriesMethod = - StartupConfiguration.class.getDeclaredMethod("createSubdirectories", File.class); - createSubdirectoriesMethod.setAccessible(true); - - File testDir = new File(tempDir, "test-chromascape"); - testDir.mkdirs(); - - createSubdirectoriesMethod.invoke(startupConfiguration, testDir); - - String[] expectedSubdirs = {"config", "logs", "scripts", "data", "cache"}; - for (String subdir : expectedSubdirs) { - File subdirFile = new File(testDir, subdir); - assertTrue(subdirFile.exists(), "Subdirectory " + subdir + " should be created"); - } - } - - @Test - void testCreateSubdirectoriesHandlesExistingSubdirectories() throws Exception { - Method createSubdirectoriesMethod = - StartupConfiguration.class.getDeclaredMethod("createSubdirectories", File.class); - createSubdirectoriesMethod.setAccessible(true); - - File testDir = new File(tempDir, "test-chromascape"); - testDir.mkdirs(); - - File existingSubdir = new File(testDir, "config"); - existingSubdir.mkdirs(); - - createSubdirectoriesMethod.invoke(startupConfiguration, testDir); - - String[] expectedSubdirs = {"config", "logs", "scripts", "data", "cache"}; - for (String subdir : expectedSubdirs) { - File subdirFile = new File(testDir, subdir); - assertTrue(subdirFile.exists(), "Subdirectory " + subdir + " should exist"); - } - } - - @Test - void testInitializeChromascapeDirectoryPrivateMethod() throws Exception { - Method initializeChromascapeDirectoryMethod = - StartupConfiguration.class.getDeclaredMethod("initializeChromascapeDirectory"); - initializeChromascapeDirectoryMethod.setAccessible(true); - - final String originalUserDir = System.getProperty("user.dir"); - System.setProperty("user.dir", tempDir.getAbsolutePath()); - - initializeChromascapeDirectoryMethod.invoke(startupConfiguration); - - File expectedDir = new File(tempDir, ".chromascape"); - assertTrue(expectedDir.exists(), ".chromascape directory should be created"); - - System.setProperty("user.dir", originalUserDir); - } -} From 6c396b00067b79dae17ccf320b0d5f7bc82387ad Mon Sep 17 00:00:00 2001 From: debajit gayen Date: Sun, 15 Feb 2026 08:08:36 +0000 Subject: [PATCH 3/3] correct checkstyle suppressions --- config/checkstyle/checkstyle-suppressions.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/checkstyle/checkstyle-suppressions.xml b/config/checkstyle/checkstyle-suppressions.xml index 54a3a26..781e836 100644 --- a/config/checkstyle/checkstyle-suppressions.xml +++ b/config/checkstyle/checkstyle-suppressions.xml @@ -12,5 +12,5 @@ - +