getPlayersInCombatLevelRange(boolean raw) {
- return getPlayersMatchingCombatCriteria()
- .map(Rs2PlayerModel::getPlayer)
- .collect(Collectors.toList());
- }
-
/**
* Helper method that applies the combat level filtering and returns a Stream of Rs2PlayerModel.
*
@@ -1123,19 +964,6 @@ public static Rs2WorldPoint getRs2WorldPoint() {
return new Rs2WorldPoint(getWorldLocation());
}
- /**
- * Checks if the player is within a specified distance of a given {@link WorldPoint}.
- *
- * @param worldPoint The {@link WorldPoint} to check proximity to.
- * @param radius The radius (in tiles) around the {@code worldPoint} to check.
- * @return {@code true} if the player is within the specified distance, {@code false} otherwise.
- * @deprecated Since 1.9.6, use {@link #isInArea(WorldPoint, int)} for better naming consistency.
- */
- @Deprecated(since = "1.9.6", forRemoval = true)
- public static boolean isNearArea(WorldPoint worldPoint, int radius) {
- return isInArea(worldPoint, radius);
- }
-
/**
* Checks if the player is within a specified distance of a given {@link WorldPoint}.
*
@@ -1817,20 +1645,6 @@ public static boolean attack(Rs2PlayerModel rs2Player) {
return invokeMenu(rs2Player, "attack");
}
- /**
- * Invokes the "attack" action on the specified player.
- *
- * This method converts a {@link Player} object into an {@link Rs2PlayerModel} before invoking the attack action.
- *
- * @param player The {@link Player} to attack.
- * @return {@code true} if the action was invoked successfully, {@code false} otherwise.
- * @deprecated Since 1.7.2, use {@link #attack(Rs2PlayerModel)} for consistency and improved type handling.
- */
- @Deprecated(since = "1.7.2", forRemoval = true)
- public static boolean attack(Player player) {
- return attack(new Rs2PlayerModel(player));
- }
-
/**
* Invokes the "walk here" action to move to the same location as the specified player.
*
@@ -1843,20 +1657,6 @@ public static boolean walkUnder(Rs2PlayerModel rs2Player) {
return invokeMenu(rs2Player, "walk here");
}
- /**
- * Invokes the "walk here" action to move to the same location as the specified player.
- *
- * This method converts a {@link Player} object into an {@link Rs2PlayerModel} before invoking the movement action.
- *
- * @param player The {@link Player} under whose position to walk.
- * @return {@code true} if the action was invoked successfully, {@code false} otherwise.
- * @deprecated Since 1.7.2, use {@link #walkUnder(Rs2PlayerModel)} for consistency and improved type handling.
- */
- @Deprecated(since = "1.7.2", forRemoval = true)
- public static boolean walkUnder(Player player) {
- return walkUnder(new Rs2PlayerModel(player));
- }
-
/**
* Invokes the "trade with" action on the specified player.
*
@@ -1869,20 +1669,6 @@ public static boolean trade(Rs2PlayerModel rs2Player) {
return invokeMenu(rs2Player, "trade with");
}
- /**
- * Invokes the "trade with" action on the specified player.
- *
- * This method converts a {@link Player} object into an {@link Rs2PlayerModel} before invoking the trade action.
- *
- * @param player The {@link Player} to trade with.
- * @return {@code true} if the action was invoked successfully, {@code false} otherwise.
- * @deprecated Since 1.7.2, use {@link #trade(Rs2PlayerModel)} for consistency and improved type handling.
- */
- @Deprecated(since = "1.7.2", forRemoval = true)
- public static boolean trade(Player player) {
- return trade(new Rs2PlayerModel(player));
- }
-
/**
* Invokes the "follow" action on the specified player.
*
@@ -1895,20 +1681,6 @@ public static boolean follow(Rs2PlayerModel rs2Player) {
return invokeMenu(rs2Player, "follow");
}
- /**
- * Invokes the "follow" action on the specified player.
- *
- * This method converts a {@link Player} object into an {@link Rs2PlayerModel} before invoking the follow action.
- *
- * @param player The {@link Player} to follow.
- * @return {@code true} if the action was invoked successfully, {@code false} otherwise.
- * @deprecated Since 1.7.2, use {@link #follow(Rs2PlayerModel)} for consistency and improved type handling.
- */
- @Deprecated(since = "1.7.2", forRemoval = true)
- public static boolean follow(Player player) {
- return follow(new Rs2PlayerModel(player));
- }
-
/**
* Invokes the "cast" action on the specified player.
*
@@ -1921,20 +1693,6 @@ public static boolean cast(Rs2PlayerModel rs2Player) {
return invokeMenu(rs2Player, "cast");
}
- /**
- * Invokes the "cast" action on the specified player.
- *
- * This method converts a {@link Player} object into an {@link Rs2PlayerModel} before invoking the cast action.
- *
- * @param player The {@link Player} to cast on.
- * @return {@code true} if the action was invoked successfully, {@code false} otherwise.
- * @deprecated Since 1.7.2, use {@link #cast(Rs2PlayerModel)} for consistency and improved type handling.
- */
- @Deprecated(since = "1.7.2", forRemoval = true)
- public static boolean cast(Player player) {
- return cast(new Rs2PlayerModel(player));
- }
-
/**
* Selects the "USE" option on a player for an item that is already selected via {@code Rs2Inventory.use(item)}.
*
@@ -1946,20 +1704,6 @@ public static boolean cast(Player player) {
public static boolean use(Rs2PlayerModel rs2Player) {
return invokeMenu(rs2Player, "use");
}
-
- /**
- * Selects the "USE" option on a player for an item that is already selected via {@code Rs2Inventory.use(item)}.
- *
- * This method converts a {@link Player} object into an {@link Rs2PlayerModel} before invoking the use action.
- *
- * @param player The {@link Player} to use the item on.
- * @return {@code true} if the action was invoked successfully, {@code false} otherwise.
- * @deprecated Since 1.7.2, use {@link #use(Rs2PlayerModel)} for consistency and improved type handling.
- */
- @Deprecated(since = "1.7.2", forRemoval = true)
- public static boolean use(Player player) {
- return use(new Rs2PlayerModel(player));
- }
/**
* Selects the "CHALLENGE" option on a player for Soul Wars.
@@ -1973,20 +1717,6 @@ public static boolean challenge(Rs2PlayerModel rs2Player) {
return invokeMenu(rs2Player, "challenge");
}
- /**
- * Selects the "CHALLENGE" option on a player for Soul Wars.
- *
- * This method converts a {@link Player} object into an {@link Rs2PlayerModel} before invoking the challenge action.
- *
- * @param player The {@link Player} to challenge.
- * @return {@code true} if the action was invoked successfully, {@code false} otherwise.
- * @deprecated Since 1.7.2, use {@link #challenge(Rs2PlayerModel)} for consistency and improved type handling.
- */
- @Deprecated(since = "1.7.2", forRemoval = true)
- public static boolean challenge(Player player) {
- return challenge(new Rs2PlayerModel(player));
- }
-
/**
* Executes a specific menu action on a given player.
*
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/Rs2Reflection.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/Rs2Reflection.java
index 1fb448d910d..96cf07c1dfd 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/Rs2Reflection.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/Rs2Reflection.java
@@ -1,11 +1,12 @@
package net.runelite.client.plugins.microbot.util.reflection;
import lombok.SneakyThrows;
-import net.runelite.api.*;
+import net.runelite.api.ItemComposition;
+import net.runelite.api.MenuAction;
+import net.runelite.api.MenuEntry;
import net.runelite.client.plugins.microbot.Microbot;
import net.runelite.client.plugins.microbot.util.keyboard.Rs2Keyboard;
import net.runelite.client.plugins.microbot.util.math.Rs2Random;
-import net.runelite.client.plugins.microbot.util.npc.Rs2NpcModel;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.*;
@@ -103,50 +104,6 @@ else if (insnNode.getOpcode() == Opcodes.SIPUSH)
System.out.println("[INVOKE] => param0: " + param0 + " param1: " + param1 + " opcode: " + opcode + " id: " + identifier + " itemid: " + itemId);
}
- /**
- * Gets the animation of an NPC by using reflection.
- * @param npc
- * @return
- */
- @SneakyThrows
- @Deprecated(since="1.9.8.7 - Runelite exposes all animations", forRemoval=true)
- public static int getAnimation(NPC npc) {
- if (npc == null) {
- return -1;
- }
- return npc.getAnimation();
- }
-
- /**
- * Gets the head icons of an NPC by using reflection.
- * @param npc
- * @return
- */
- @SneakyThrows
- @Deprecated(since="1.9.8.7 - Runelite exposes overheads on npcs", forRemoval = true)
- public static HeadIcon getHeadIcon(Rs2NpcModel npc) {
- if (npc == null) {
- return null;
- }
-
- if (npc.getOverheadSpriteIds() == null) {
- Microbot.log("Failed to find the correct overhead prayer.");
- return null;
- }
-
- for (int i = 0; i < npc.getOverheadSpriteIds().length; i++) {
- int overheadSpriteId = npc.getOverheadSpriteIds()[i];
-
- if (overheadSpriteId == -1) continue;
-
- return HeadIcon.values()[overheadSpriteId];
- }
-
- Microbot.log("Found overheadSpriteIds: " + Arrays.toString(npc.getOverheadSpriteIds()) + " but failed to find valid overhead prayer.");
-
- return null;
- }
-
@SneakyThrows
public static String[] getGroundItemActions(ItemComposition item) {
List fields = Arrays.stream(item.getClass().getFields()).filter(x -> x.getType().isArray()).collect(Collectors.toList());
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/tabs/Rs2Tab.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/tabs/Rs2Tab.java
index c6310339058..44a53147f47 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/tabs/Rs2Tab.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/tabs/Rs2Tab.java
@@ -64,7 +64,13 @@ public static boolean switchTo(InterfaceTab tab) {
if (tab == InterfaceTab.NOTHING_SELECTED && Microbot.getVarbitValue(VarbitID.RESIZABLE_STONE_ARRANGEMENT) == 0)
return false;
- Rs2Keyboard.keyPress(tab.getHotkey());
+ int hotkey = tab.getHotkey();
+ if (hotkey == -1) {
+ log.warn("Tab {} does not have a hotkey assigned, cannot switch to it.", tab.getName());
+ return false;
+ } else {
+ Rs2Keyboard.keyPress(hotkey);
+ }
return sleepUntil(() -> isCurrentTab(tab));
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/world/Rs2WorldUtil.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/world/Rs2WorldUtil.java
index 5d8d80099d5..631e5150035 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/world/Rs2WorldUtil.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/world/Rs2WorldUtil.java
@@ -18,7 +18,6 @@
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
-import io.reactivex.rxjava3.annotations.Nullable;
import static net.runelite.client.plugins.microbot.util.Global.sleepGaussian;
import static net.runelite.client.plugins.microbot.util.Global.sleepUntil;
@@ -50,7 +49,6 @@ public class Rs2WorldUtil {
* @param worldId The world ID to check accessibility for
* @return true if the player can access the world, false otherwise
*/
- @Nullable
public static boolean canAccessWorld(int worldId) {
try {
if (worldId == -1){
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverConfig.java
index 86ae02c4027..2c1591a9d68 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverConfig.java
@@ -25,9 +25,11 @@
*/
package net.runelite.client.plugins.puzzlesolver;
+import java.awt.Color;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
+import net.runelite.client.config.Range;
@ConfigGroup("puzzlesolver")
public interface PuzzleSolverConfig extends Config
@@ -35,7 +37,8 @@ public interface PuzzleSolverConfig extends Config
@ConfigItem(
keyName = "displaySolution",
name = "Display solution",
- description = "Display a solution to the puzzle."
+ description = "Display a solution to the puzzle.",
+ position = 0
)
default boolean displaySolution()
{
@@ -45,7 +48,8 @@ default boolean displaySolution()
@ConfigItem(
keyName = "displayRemainingMoves",
name = "Display remaining moves",
- description = "Add a text line above puzzle boxes displaying the amount of remaining moves."
+ description = "Add a text line above puzzle boxes displaying the amount of remaining moves.",
+ position = 1
)
default boolean displayRemainingMoves()
{
@@ -55,10 +59,48 @@ default boolean displayRemainingMoves()
@ConfigItem(
keyName = "drawDots",
name = "Draw dots instead of arrows",
- description = "Draw dots increasing in size instead of arrows for the solution."
+ description = "Draw dots increasing in size instead of arrows for the solution.",
+ position = 2
)
default boolean drawDots()
{
- return false;
+ return true;
+ }
+
+ @ConfigItem(
+ keyName = "movesToShow",
+ name = "Number of dots",
+ description = "The number of moves as dots to show for the puzzle.",
+ position = 3
+ )
+ @Range(
+ min = 4,
+ max = 8
+ )
+ default int movesToShow()
+ {
+ return 4;
+ }
+
+ @ConfigItem(
+ keyName = "dotColor",
+ name = "Dot start color",
+ description = "Dot color for the first solution dot.",
+ position = 4
+ )
+ default Color dotColor()
+ {
+ return Color.YELLOW;
+ }
+
+ @ConfigItem(
+ keyName = "dotEndColor",
+ name = "Dot end color",
+ description = "Dot color of the last solution dot that dots blend towards.",
+ position = 5
+ )
+ default Color dotEndColor()
+ {
+ return Color.RED;
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverOverlay.java
index 4dc20c698aa..c92ac5461b5 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverOverlay.java
@@ -59,6 +59,7 @@
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.BackgroundComponent;
import net.runelite.client.ui.overlay.components.TextComponent;
+import net.runelite.client.util.ColorUtil;
import net.runelite.client.util.ImageUtil;
public class PuzzleSolverOverlay extends Overlay
@@ -69,7 +70,8 @@ public class PuzzleSolverOverlay extends Overlay
private static final int INFO_BOX_BOTTOM_BORDER = 2;
private static final int PUZZLE_TILE_SIZE = 39;
- private static final int DOT_MARKER_SIZE = 16;
+ private static final int DOT_MARKER_MAX_SIZE = 24;
+ private static final int DOT_MARKER_MIN_SIZE = 4;
private final Client client;
private final PuzzleSolverConfig config;
@@ -216,10 +218,9 @@ else if (config.displayRemainingMoves())
{
if (config.drawDots())
{
- graphics.setColor(Color.YELLOW);
-
- // Display the next 4 steps
- for (int i = 1; i < 5; i++)
+ int movesToShow = config.movesToShow();
+ // Display the next movesToShow steps
+ for (int i = 1; i <= movesToShow; i++)
{
int j = solver.getPosition() + i;
@@ -238,7 +239,9 @@ else if (config.displayRemainingMoves())
int blankX = futureMove.getEmptyPiece() % DIMENSION;
int blankY = futureMove.getEmptyPiece() / DIMENSION;
- int markerSize = DOT_MARKER_SIZE - i * 3;
+ int numerator = (i - 1) * (DOT_MARKER_MAX_SIZE - DOT_MARKER_MIN_SIZE);
+ double denominator = movesToShow - 1;
+ int markerSize = (int) Math.round(DOT_MARKER_MAX_SIZE - numerator / denominator);
int x = puzzleBoxLocation.getX() + blankX * PUZZLE_TILE_SIZE
+ PUZZLE_TILE_SIZE / 2 - markerSize / 2;
@@ -246,7 +249,13 @@ else if (config.displayRemainingMoves())
int y = puzzleBoxLocation.getY() + blankY * PUZZLE_TILE_SIZE
+ PUZZLE_TILE_SIZE / 2 - markerSize / 2;
+ Color color = ColorUtil.colorLerp(config.dotColor(), config.dotEndColor(),
+ (double) (i - 1) / (movesToShow - 1));
+ graphics.setColor(color);
graphics.fillOval(x, y, markerSize, markerSize);
+
+ graphics.setColor(Color.BLACK);
+ graphics.drawOval(x - 1, y - 1, markerSize + 1, markerSize + 1);
}
}
else
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotOverlay.java
deleted file mode 100644
index 284a7103c71..00000000000
--- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotOverlay.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2018, Lotto
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package net.runelite.client.plugins.screenshot;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.FontMetrics;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.image.BufferedImage;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Queue;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.function.Consumer;
-import javax.inject.Inject;
-import net.runelite.api.Client;
-import net.runelite.api.MainBufferProvider;
-import net.runelite.client.ui.DrawManager;
-import net.runelite.client.ui.FontManager;
-import net.runelite.client.ui.overlay.Overlay;
-import net.runelite.client.ui.overlay.OverlayLayer;
-import net.runelite.client.ui.overlay.OverlayPosition;
-
-class ScreenshotOverlay extends Overlay
-{
- private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MMM. dd, yyyy");
- private static final int REPORT_BUTTON_X_OFFSET = 437;
-
- private final Client client;
- private final DrawManager drawManager;
- private final ScreenshotPlugin plugin;
-
- private final Queue> consumers = new ConcurrentLinkedQueue<>();
-
- @Inject
- private ScreenshotOverlay(Client client, DrawManager drawManager, ScreenshotPlugin plugin)
- {
- setPosition(OverlayPosition.DYNAMIC);
- setPriority(PRIORITY_HIGH);
- setLayer(OverlayLayer.ABOVE_WIDGETS);
- this.client = client;
- this.drawManager = drawManager;
- this.plugin = plugin;
- }
-
- @Override
- public Dimension render(Graphics2D graphics)
- {
- if (consumers.isEmpty())
- {
- return null;
- }
-
- final MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
- final int imageHeight = ((BufferedImage) bufferProvider.getImage()).getHeight();
- final int y = imageHeight - plugin.getReportButton().getHeight() - 1;
-
- graphics.drawImage(plugin.getReportButton(), REPORT_BUTTON_X_OFFSET, y, null);
-
- graphics.setFont(FontManager.getRunescapeSmallFont());
- FontMetrics fontMetrics = graphics.getFontMetrics();
-
- String date = DATE_FORMAT.format(new Date());
- final int dateWidth = fontMetrics.stringWidth(date);
- final int dateHeight = fontMetrics.getHeight();
-
- final int textX = REPORT_BUTTON_X_OFFSET + plugin.getReportButton().getWidth() / 2 - dateWidth / 2;
- final int textY = y + plugin.getReportButton().getHeight() / 2 + dateHeight / 2;
-
- graphics.setColor(Color.BLACK);
- graphics.drawString(date, textX + 1, textY + 1);
-
- graphics.setColor(Color.WHITE);
- graphics.drawString(date, textX, textY);
-
- // Request the queued screenshots to be taken,
- // now that the timestamp is visible.
- Consumer consumer;
- while ((consumer = consumers.poll()) != null)
- {
- drawManager.requestNextFrameListener(consumer);
- }
-
- return null;
- }
-
- void queueForTimestamp(Consumer screenshotConsumer)
- {
- if (plugin.getReportButton() == null)
- {
- return;
- }
-
- consumers.add(screenshotConsumer);
- }
-}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java
index a139a16d144..16cf5c887c1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java
@@ -29,45 +29,19 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Provides;
-import java.awt.Image;
-import java.awt.image.BufferedImage;
-import java.time.LocalDate;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.function.Consumer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import javax.inject.Inject;
-import lombok.AccessLevel;
-import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
-import net.runelite.api.Actor;
-import net.runelite.api.ChatMessageType;
-import net.runelite.api.Client;
-import net.runelite.api.GameState;
-import net.runelite.api.Player;
-import net.runelite.api.ScriptID;
+import net.runelite.api.*;
import net.runelite.api.annotations.Component;
-import net.runelite.api.events.ActorDeath;
-import net.runelite.api.events.AnimationChanged;
-import net.runelite.api.events.ChatMessage;
-import net.runelite.api.events.GameTick;
-import net.runelite.api.events.ScriptCallbackEvent;
-import net.runelite.api.events.ScriptPreFired;
-import net.runelite.api.events.WidgetLoaded;
+import net.runelite.api.events.*;
import net.runelite.api.gameval.AnimationID;
import net.runelite.api.gameval.InterfaceID;
-import net.runelite.api.gameval.SpriteID;
import net.runelite.api.gameval.VarClientID;
import net.runelite.api.gameval.VarbitID;
import net.runelite.api.widgets.Widget;
-import static net.runelite.client.RuneLite.SCREENSHOT_DIR;
+import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.PlayerLootReceived;
-import net.runelite.client.game.SpriteManager;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
@@ -77,13 +51,28 @@
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
-import net.runelite.client.util.HotkeyListener;
-import net.runelite.client.util.ImageCapture;
-import net.runelite.client.util.ImageUtil;
-import net.runelite.client.util.LinkBrowser;
-import net.runelite.client.util.Text;
+import net.runelite.client.util.*;
import org.apache.commons.lang3.StringUtils;
+import javax.inject.Inject;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.function.Consumer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import static net.runelite.client.RuneLite.SCREENSHOT_DIR;
+
@PluginDescriptor(
name = "Screenshot",
description = "Enable the manual and automatic taking of screenshots",
@@ -92,6 +81,7 @@
@Slf4j
public class ScreenshotPlugin extends Plugin
{
+ private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MMM. dd, yyyy");
private static final String COLLECTION_LOG_TEXT = "New item added to your collection log: ";
private static final String CHEST_LOOTED_MESSAGE = "You find some treasure in the chest!";
private static final Map CHEST_LOOT_EVENTS = ImmutableMap.of(12127, "The Gauntlet");
@@ -161,15 +151,10 @@ enum KillType
@Inject
private ScreenshotConfig config;
- @Inject
- private OverlayManager overlayManager;
-
- @Inject
- private ScreenshotOverlay screenshotOverlay;
-
@Inject
private Client client;
-
+ @Inject
+ private OverlayManager overlayManager;
@Inject
private ClientUI clientUi;
@@ -185,19 +170,19 @@ enum KillType
@Inject
private KeyManager keyManager;
- @Inject
- private SpriteManager spriteManager;
-
@Inject
private ImageCapture imageCapture;
- @Getter(AccessLevel.PACKAGE)
- private BufferedImage reportButton;
+ @Inject
+ private ClientThread clientThread;
private NavigationButton titleBarButton;
private String kickPlayerName;
+ final Queue> consumers = new ConcurrentLinkedQueue<>();
+ private String reportButtonText;
+
private final HotkeyListener hotkeyListener = new HotkeyListener(() -> config.hotkey())
{
@Override
@@ -216,7 +201,6 @@ ScreenshotConfig getConfig(ConfigManager configManager)
@Override
protected void startUp() throws Exception
{
- overlayManager.add(screenshotOverlay);
SCREENSHOT_DIR.mkdirs();
keyManager.registerKeyListener(hotkeyListener);
@@ -236,14 +220,11 @@ protected void startUp() throws Exception
.build();
clientToolbar.addNavigation(titleBarButton);
-
- spriteManager.getSpriteAsync(SpriteID.ReportButton.BUTTON, 0, s -> reportButton = s);
}
@Override
protected void shutDown() throws Exception
{
- overlayManager.remove(screenshotOverlay);
clientToolbar.removeNavigation(titleBarButton);
keyManager.unregisterKeyListener(hotkeyListener);
kickPlayerName = null;
@@ -809,6 +790,30 @@ public void onScriptPreFired(ScriptPreFired scriptPreFired)
}
}
+ @Subscribe
+ private void onPostClientTick(PostClientTick e)
+ {
+ if (!consumers.isEmpty())
+ {
+ final Widget reportButtonTextWidget = client.getWidget(InterfaceID.Chatbox.REPORTABUSE_TEXT1);
+ if (reportButtonTextWidget != null)
+ {
+ if (reportButtonText == null)
+ {
+ reportButtonText = reportButtonTextWidget.getText();
+ }
+
+ reportButtonTextWidget.setText(DATE_FORMAT.format(new Date()));
+ }
+
+ Consumer consumer;
+ while ((consumer = consumers.poll()) != null)
+ {
+ drawManager.requestNextFrameListener(consumer);
+ }
+ }
+ }
+
private void manualScreenshot()
{
takeScreenshot("", null);
@@ -939,12 +944,29 @@ void takeScreenshot(String fileName, String subDir)
Consumer imageCallback = (img) ->
{
// This callback is on the game thread, move to executor thread
- executor.submit(() -> saveScreenshot(fileName, subDir, img));
+ executor.submit(() ->
+ {
+ saveScreenshot(fileName, subDir, img);
+
+ if (reportButtonText != null)
+ {
+ clientThread.invokeLater(() ->
+ {
+ final Widget reportButtonTextWidget = client.getWidget(InterfaceID.Chatbox.REPORTABUSE_TEXT1);
+ if (reportButtonTextWidget != null)
+ {
+ reportButtonTextWidget.setText(reportButtonText);
+ }
+
+ reportButtonText = null;
+ });
+ }
+ });
};
if (config.displayDate() && REPORT_BUTTON_TLIS.contains(client.getTopLevelInterfaceId()))
{
- screenshotOverlay.queueForTimestamp(imageCallback);
+ queueForTimestamp(imageCallback);
}
else
{
@@ -952,6 +974,11 @@ void takeScreenshot(String fileName, String subDir)
}
}
+ void queueForTimestamp(Consumer screenshotConsumer)
+ {
+ consumers.add(screenshotConsumer);
+ }
+
private void saveScreenshot(String fileName, String subDir, Image image)
{
final BufferedImage screenshot;
diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
index 620ad7232bf..3d55ddfec25 100644
--- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
+++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
@@ -55,6 +55,8 @@
import net.runelite.client.input.MouseListener;
import net.runelite.client.input.MouseManager;
import net.runelite.client.plugins.microbot.Microbot;
+import net.runelite.client.plugins.microbot.questhelper.QuestHelperConfig;
+import net.runelite.client.plugins.microbot.util.walker.Rs2Walker;
import net.runelite.client.ui.laf.RuneLiteLAF;
import net.runelite.client.ui.laf.RuneLiteRootPaneUI;
import net.runelite.client.util.*;
@@ -124,6 +126,9 @@ public class ClientUI
private Dimension lastClientSize;
private Cursor defaultCursor;
+ private JButton questHelperNavBtn;
+ private BufferedImage questIconOn;
+ private BufferedImage questIconOff;
private String lastNormalBounds;
private final Timer normalBoundsTimer;
@@ -560,6 +565,23 @@ else if (OSType.getOSType() == OSType.MacOS && SystemInfo.isMacFullWindowContent
toolbarPanel.createSidebarPanel());
}
+ questIconOn = net.runelite.client.plugins.microbot.questhelper.tools.Icon.QUEST_ICON_ON.getImage();
+ questIconOff = net.runelite.client.plugins.microbot.questhelper.tools.Icon.QUEST_ICON_OFF.getImage();
+ questHelperNavBtn = toolbarPanel.add(
+ NavigationButton.builder()
+ .icon(configManager.getConfiguration(QuestHelperConfig.QUEST_HELPER_GROUP, "TurnOn", Boolean.class) ? questIconOff : questIconOn)
+ .tooltip(configManager.getConfiguration(QuestHelperConfig.QUEST_HELPER_GROUP, "TurnOn", Boolean.class) ? "Disable 'Semi-Auto' Questing" : "Enable 'Semi-Auto' Questing")
+ .onClick(() ->
+ {
+ boolean isEnabled = configManager.getConfiguration(QuestHelperConfig.QUEST_HELPER_GROUP, "TurnOn", Boolean.class);
+ configManager.setConfiguration(QuestHelperConfig.QUEST_HELPER_GROUP, "TurnOn", !isEnabled);
+ questHelperNavBtn.setIcon(new ImageIcon(!isEnabled ? questIconOff : questIconOn ));
+ questHelperNavBtn.setToolTipText(!isEnabled ? "Disable 'Semi-Auto' Questing" : "Enable 'Semi-Auto' Questing");
+ if (isEnabled) Rs2Walker.setTarget(null);
+ })
+ .build(), false
+ );
+
// Update config
updateFrameConfig(false);
diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json
index ac9f15261f1..26b3886c6e8 100644
--- a/runelite-client/src/main/resources/item_variations.json
+++ b/runelite-client/src/main/resources/item_variations.json
@@ -9777,16 +9777,23 @@
],
"sanguinesti staff": [
22323,
- 22481
+ 22481,
+ 25731,
+ 25733
],
"ghrazi rapier": [
22324,
- 23628
+ 23628,
+ 25734
],
"scythe of vitur": [
22325,
22486,
- 22664
+ 22664,
+ 25736,
+ 25738,
+ 25739,
+ 25741
],
"starter sword": [
22331,
@@ -10876,18 +10883,6 @@
25728,
25729
],
- "holy sanguinesti staff": [
- 25731,
- 25733
- ],
- "holy scythe of vitur": [
- 25736,
- 25738
- ],
- "sanguine scythe of vitur": [
- 25739,
- 25741
- ],
"antipoison potion": [
25758,
25759,
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/questhelper/quest_icon_off.png b/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/questhelper/quest_icon_off.png
new file mode 100644
index 00000000000..b629f9f9edb
Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/questhelper/quest_icon_off.png differ
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/questhelper/quest_icon_on.png b/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/questhelper/quest_icon_on.png
new file mode 100644
index 00000000000..33fe205b1a3
Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/microbot/questhelper/quest_icon_on.png differ
diff --git a/runelite-client/src/main/scripts/LayoutResizableStones.hash b/runelite-client/src/main/scripts/LayoutResizableStones.hash
index 7e9026f733f..55154a18ba5 100644
--- a/runelite-client/src/main/scripts/LayoutResizableStones.hash
+++ b/runelite-client/src/main/scripts/LayoutResizableStones.hash
@@ -1 +1 @@
-27CB6A6C2D44270EB5134AD9DDF5A423DB08A62275DB231CCF45A241BA6E4E32
\ No newline at end of file
+F447EDB4DB9B01E29C62C0F9242746DD97FD99315DFDB0D0C608B2482794FC82
\ No newline at end of file
diff --git a/runelite-client/src/main/scripts/LayoutResizableStones.rs2asm b/runelite-client/src/main/scripts/LayoutResizableStones.rs2asm
index 03264ea9922..511e46d16ac 100644
--- a/runelite-client/src/main/scripts/LayoutResizableStones.rs2asm
+++ b/runelite-client/src/main/scripts/LayoutResizableStones.rs2asm
@@ -13,10 +13,10 @@
iload 1
switch
1131: LABEL9
- 1130: LABEL107
- 1129: LABEL149
- 1745: LABEL169
- jump LABEL178
+ 1130: LABEL103
+ 1129: LABEL141
+ 1745: LABEL161
+ jump LABEL170
LABEL9:
iconst 10747998
if_getwidth
@@ -120,23 +120,17 @@ LABEL89:
LABEL96:
clientclock
set_varc_int 384
- invoke 1445
- iconst 1
- if_icmpeq LABEL102
- jump LABEL106
-LABEL102:
get_varbit 12986
invoke 633
iconst 10747926
if_sethide
-LABEL106:
- jump LABEL178
-LABEL107:
+ jump LABEL170
+LABEL103:
get_varbit 4084
iconst 1
- if_icmpeq LABEL111
- jump LABEL119
-LABEL111:
+ if_icmpeq LABEL107
+ jump LABEL115
+LABEL107:
iconst 1178
iconst 73
iconst 73
@@ -144,13 +138,13 @@ LABEL111:
iconst 10551326
enum
2122
- jump LABEL138
-LABEL119:
+ jump LABEL134
+LABEL115:
get_varbit 13037
iconst 1
- if_icmpeq LABEL123
- jump LABEL131
-LABEL123:
+ if_icmpeq LABEL119
+ jump LABEL127
+LABEL119:
iconst 3513
iconst 73
iconst 73
@@ -158,8 +152,8 @@ LABEL123:
iconst 10551326
enum
2122
- jump LABEL138
-LABEL131:
+ jump LABEL134
+LABEL127:
iconst 2154
iconst 73
iconst 73
@@ -167,26 +161,20 @@ LABEL131:
iconst 10551326
enum
2122
-LABEL138:
+LABEL134:
clientclock
set_varc_int 384
- invoke 1445
- iconst 1
- if_icmpeq LABEL144
- jump LABEL148
-LABEL144:
get_varbit 12986
invoke 633
iconst 10551318
if_sethide
-LABEL148:
- jump LABEL178
-LABEL149:
+ jump LABEL170
+LABEL141:
invoke 3297
iconst 1
- if_icmpeq LABEL153
- jump LABEL161
-LABEL153:
+ if_icmpeq LABEL145
+ jump LABEL153
+LABEL145:
iconst 2422
iconst 73
iconst 73
@@ -194,8 +182,8 @@ LABEL153:
iconst 10551326
enum
2122
- jump LABEL168
-LABEL161:
+ jump LABEL160
+LABEL153:
iconst 1200
iconst 73
iconst 73
@@ -203,9 +191,9 @@ LABEL161:
iconst 10551326
enum
2122
-LABEL168:
- jump LABEL178
-LABEL169:
+LABEL160:
+ jump LABEL170
+LABEL161:
invoke 2581
get_varbit 6254
invoke 633
@@ -215,5 +203,5 @@ LABEL169:
pop_int
clientclock
set_varc_int 384
-LABEL178:
+LABEL170:
return
diff --git a/runelite-client/src/main/scripts/fairyrings_sort_update.hash b/runelite-client/src/main/scripts/fairyrings_sort_update.hash
new file mode 100644
index 00000000000..68dda177ddc
--- /dev/null
+++ b/runelite-client/src/main/scripts/fairyrings_sort_update.hash
@@ -0,0 +1 @@
+7245804424EB949F248D65FB11DDA8AB75D26B7390D2F7C4BD8FABB15F2FCF62
\ No newline at end of file
diff --git a/runelite-client/src/main/scripts/fairyrings_sort_update.rs2asm b/runelite-client/src/main/scripts/fairyrings_sort_update.rs2asm
new file mode 100644
index 00000000000..be44b65293e
--- /dev/null
+++ b/runelite-client/src/main/scripts/fairyrings_sort_update.rs2asm
@@ -0,0 +1,763 @@
+.id 8080
+.int_arg_count 6
+.obj_arg_count 0
+ iload 2
+ iconst 1
+ if_icmpeq LABEL4
+ jump LABEL32
+LABEL4:
+ get_varc_int 54
+ iconst 1
+ if_icmpeq LABEL11
+ get_varc_int 54
+ iconst 0
+ if_icmpeq LABEL11
+ jump LABEL14
+LABEL11:
+ get_varc_int 54
+ set_varc_int 54
+ jump LABEL16
+LABEL14:
+ iconst 0
+ set_varc_int 54
+LABEL16:
+ get_varc_int
+ iconst 0
+ if_icmplt LABEL20
+ jump LABEL22
+LABEL20:
+ iconst 0
+ set_varc_int
+LABEL22:
+ iload 1
+ iload 0
+ iconst 792
+ iconst 789
+ iconst 790
+ iconst 791
+ iconst 773
+ iconst 788
+ invoke 31
+ jump LABEL45
+LABEL32:
+ iconst 2266
+ iconst 1
+ iconst 0
+ sound_synth
+ get_varc_int 54
+ iconst 1
+ if_icmpeq LABEL40
+ jump LABEL43
+LABEL40:
+ iconst 0
+ set_varc_int 54
+ jump LABEL45
+LABEL43:
+ iconst 1
+ set_varc_int 54
+LABEL45:
+ iconst -1
+ istore 6
+ iconst -1
+ istore 7
+ iconst -1
+ istore 8
+ iload 0
+ if_getwidth
+ iconst 20
+ sub
+ istore 9
+ iload 9
+ iconst 0
+ if_icmple LABEL60
+ jump LABEL62
+LABEL60:
+ iconst 143
+ istore 9
+LABEL62:
+ iload 0
+ cc_deleteall
+ iload 4
+ cc_deleteall
+ iconst 17
+ istore 10
+ iconst 0
+ istore 11
+ iconst 0
+ istore 12
+ iconst 1
+ istore 13
+ iconst 1
+ istore 14
+ invoke 8081
+ ostore 0
+LABEL78:
+ iload 12
+ iconst 10
+ if_icmplt LABEL82
+ jump LABEL241
+LABEL82:
+ iconst 105
+ iconst 73
+ iconst 1297
+ iload 12
+ enum
+ istore 6
+ iconst 105
+ iconst 73
+ iconst 1298
+ iload 12
+ enum
+ istore 8
+ iconst 105
+ iconst 73
+ iconst 1299
+ iload 12
+ enum
+ istore 7
+ iload 5
+ iconst 1
+ if_icmpeq LABEL104
+ jump LABEL126
+LABEL104:
+ oload 0
+ string_length
+ iconst 0
+ if_icmpgt LABEL109
+ jump LABEL125
+LABEL109:
+ iload 6
+ if_gettext
+ lowercase
+ sconst ":"
+ invoke 7125
+ oload 0
+ iconst 0
+ string_indexof_string
+ iconst -1
+ if_icmpne LABEL120
+ jump LABEL123
+LABEL120:
+ iconst 1
+ istore 14
+ jump LABEL125
+LABEL123:
+ iconst 0
+ istore 14
+LABEL125:
+ iload 8 ;
+ iload 14 ;
+ sconst "fairyringFilterFavorite" ;
+ runelite_callback ;
+ istore 14 ;
+ pop_int ;
+ jump LABEL128
+LABEL126:
+ iconst 1
+ istore 14
+LABEL128:
+ iload 6
+ iconst -1
+ if_icmpne LABEL132
+ jump LABEL236
+LABEL132:
+ iload 7
+ iconst -1
+ if_icmpne LABEL136
+ jump LABEL236
+LABEL136:
+ iload 8
+ iconst -1
+ if_icmpne LABEL140
+ jump LABEL236
+LABEL140:
+ iload 6
+ if_gettext
+ string_length
+ iconst 0
+ if_icmpgt LABEL146
+ jump LABEL227
+LABEL146:
+ iload 14
+ iconst 1
+ if_icmpeq LABEL150
+ jump LABEL227
+LABEL150:
+ iload 6
+ if_gettext
+ iload 9
+ iconst 495
+ paraheight
+ iconst 12
+ multiply
+ iconst 5
+ add
+ istore 10
+ iconst 0
+ iload 6
+ if_sethide
+ iconst 0
+ iload 8
+ if_sethide
+ iconst 0
+ iload 7
+ if_sethide
+ iload 9
+ iload 10
+ iconst 0
+ iconst 0
+ iload 6
+ if_setsize
+ iload 9
+ iload 10
+ iconst 0
+ iconst 0
+ iload 8
+ if_setsize
+ iconst 20
+ iload 11
+ iconst 0
+ iconst 0
+ iload 6
+ if_setposition
+ iconst 2
+ iload 11
+ iconst 0
+ iconst 0
+ iload 7
+ if_setposition
+ iconst 20
+ iload 11
+ iconst 0
+ iconst 0
+ iload 8
+ if_setposition
+ sconst ""
+ iload 8
+ if_gettext
+ sconst ""
+ join_string 3
+ iload 6
+ if_setopbase
+ iconst 45
+ iload 8
+ iconst 16744319
+ sconst "ii"
+ iload 6
+ if_setonmouseover
+ iconst 45
+ iload 8
+ iconst 16727871
+ sconst "ii"
+ iload 6
+ if_setonmouseleave
+ iconst 0
+ istore 13
+ iload 11
+ iload 10
+ add
+ iconst 3
+ add
+ istore 11
+ jump LABEL236
+LABEL227:
+ iconst 1
+ iload 6
+ if_sethide
+ iconst 1
+ iload 7
+ if_sethide
+ iconst 1
+ iload 8
+ if_sethide
+LABEL236:
+ iload 12
+ iconst 1
+ add
+ istore 12
+ jump LABEL78
+LABEL241:
+ iload 13
+ iconst 0
+ if_icmpeq LABEL245
+ jump LABEL249
+LABEL245:
+ iload 11
+ iconst 3
+ add
+ istore 11
+LABEL249:
+ iload 13
+ iload 3
+ if_sethide
+ iconst 0
+ iload 11
+ iconst 1
+ iconst 0
+ iload 4
+ if_setsize
+ iconst -1
+ istore 15
+ iconst 64
+ define_array 65609
+ iconst 0
+ istore 16
+ sconst ""
+ ostore 2
+ iconst 89
+ db_findall_with_count
+ pop_int
+ db_findnext
+ istore 17
+ iconst 0
+ istore 18
+LABEL273:
+ iload 17
+ iconst -1
+ if_icmpne LABEL277
+ jump LABEL360
+LABEL277:
+ iload 17
+ iconst 364608
+ iconst 0
+ db_getfield
+ istore 15
+ iload 15
+ iconst -1
+ if_icmpne LABEL286
+ jump LABEL357
+LABEL286:
+ iload 5
+ iconst 1
+ if_icmpeq LABEL290
+ jump LABEL312
+LABEL290:
+ oload 0
+ string_length
+ iconst 0
+ if_icmpgt LABEL295
+ jump LABEL311
+LABEL295:
+ iload 15
+ if_gettext
+ lowercase
+ sconst ":"
+ invoke 7125
+ oload 0
+ iconst 0
+ string_indexof_string
+ iconst -1
+ if_icmpne LABEL306
+ jump LABEL309
+LABEL306:
+ iconst 1
+ istore 14
+ jump LABEL311
+LABEL309:
+ iconst 0
+ istore 14
+LABEL311:
+ iload 17 ;
+ iload 14 ;
+ sconst "fairyringFilterDbrow" ;
+ runelite_callback ;
+ istore 14 ;
+ pop_int ;
+ jump LABEL314
+LABEL312:
+ iconst 1
+ istore 14
+LABEL314:
+ iload 17
+ iconst 364624
+ iconst 0
+ db_getfield
+ istore 7
+ iload 15
+ if_gettext
+ string_length
+ iconst 0
+ if_icmpgt LABEL325
+ jump LABEL347
+LABEL325:
+ iload 14
+ iconst 1
+ if_icmpeq LABEL329
+ jump LABEL347
+LABEL329:
+ iconst 0
+ iload 15
+ if_sethide
+ iload 7
+ iconst -1
+ if_icmpne LABEL336
+ jump LABEL339
+LABEL336:
+ iconst 0
+ iload 7
+ if_sethide
+LABEL339:
+ iload 16
+ iload 15
+ set_array_int 1
+ iload 16
+ iconst 1
+ add
+ istore 16
+ jump LABEL357
+LABEL347:
+ iconst 1
+ iload 15
+ if_sethide
+ iload 7
+ iconst -1
+ if_icmpne LABEL354
+ jump LABEL357
+LABEL354:
+ iconst 1
+ iload 7
+ if_sethide
+LABEL357:
+ db_findnext
+ istore 17
+ jump LABEL273
+LABEL360:
+ iload 16
+ iconst 0
+ if_icmpgt LABEL364
+ jump LABEL382
+LABEL364:
+ get_varc_int 54
+ iconst 1
+ if_icmpeq LABEL368
+ jump LABEL375
+LABEL368:
+ oload 1
+ iconst 0
+ iload 16
+ iconst 1
+ sub
+ invoke 1341
+ jump LABEL382
+LABEL375:
+ oload 1
+ iconst 0
+ iload 16
+ iconst 1
+ sub
+ iconst 823
+ invoke 1342
+LABEL382:
+ iload 0
+ cc_deleteall
+LABEL384:
+ iload 18
+ iload 16
+ if_icmplt LABEL388
+ jump LABEL508
+LABEL388:
+ iconst 364608
+ iload 18
+ get_array_int 1
+ iconst 0
+ db_find_with_count
+ pop_int
+ db_findnext
+ istore 17
+ iload 17
+ iconst -1
+ if_icmpne LABEL400
+ jump LABEL410
+LABEL400:
+ iload 17
+ iconst 364624
+ iconst 0
+ db_getfield
+ istore 7
+ iload 17
+ iconst 364592
+ iconst 0
+ db_getfield
+ ostore 2
+LABEL410:
+ iload 18
+ get_array_int 1
+ if_gettext
+ iload 9
+ iconst 495
+ paraheight
+ iconst 12
+ multiply
+ iconst 5
+ add
+ istore 10
+ iload 7
+ iconst -1
+ if_icmpne LABEL425
+ jump LABEL431
+LABEL425:
+ iconst 2
+ iload 11
+ iconst 0
+ iconst 0
+ iload 7
+ if_setposition
+LABEL431:
+ iload 9
+ iload 10
+ iconst 0
+ iconst 0
+ iload 18
+ get_array_int 1
+ if_setsize
+ iconst 20
+ iload 11
+ iconst 0
+ iconst 0
+ iload 18
+ get_array_int 1
+ if_setposition
+ iload 0
+ iconst 4
+ iload 18
+ iconst 0
+ cc_create
+ iload 9
+ iload 10
+ iconst 0
+ iconst 0
+ cc_setsize
+ iconst 20
+ iload 18
+ get_array_int 1
+ if_gety
+ iconst 0
+ iconst 0
+ cc_setposition
+ iconst 495
+ cc_settextfont
+ iconst 16727871
+ cc_setcolour
+ iconst 1
+ cc_settextshadow
+ iconst 0
+ iconst 0
+ iconst 0
+ cc_settextalign
+ oload 2
+ cc_settext
+ sconst ""
+ oload 2
+ sconst ""
+ join_string 3
+ iload 18
+ get_array_int 1
+ if_setopbase
+ iconst 85
+ iload 0
+ cc_getid
+ iconst 16744319
+ sconst "iii"
+ iload 18
+ get_array_int 1
+ if_setonmouseover
+ iconst 85
+ iload 0
+ cc_getid
+ iconst 16727871
+ sconst "iii"
+ iload 18
+ get_array_int 1
+ if_setonmouseleave
+ iload 11
+ iload 10
+ add
+ iconst 3
+ add
+ istore 11
+ iload 18
+ iconst 1
+ add
+ istore 18
+ jump LABEL384
+LABEL508:
+ iconst 24969356
+ if_gettext
+ ostore 2
+ iload 5
+ iconst 1
+ if_icmpeq LABEL515
+ jump LABEL536
+LABEL515:
+ oload 0
+ string_length
+ iconst 0
+ if_icmpgt LABEL520
+ jump LABEL536
+LABEL520:
+ iconst 24969356
+ if_gettext
+ lowercase
+ sconst ":"
+ invoke 7125
+ oload 0
+ iconst 0
+ string_indexof_string
+ iconst -1
+ if_icmpne LABEL531
+ jump LABEL534
+LABEL531:
+ iconst 1
+ istore 14
+ jump LABEL536
+LABEL534:
+ iconst 0
+ istore 14
+LABEL536:
+ oload 2
+ string_length
+ iconst 0
+ if_icmpgt LABEL541
+ jump LABEL591
+LABEL541:
+ iload 14
+ iconst 1
+ if_icmpeq LABEL545
+ jump LABEL591
+LABEL545:
+ iconst 0
+ iconst 24969356
+ if_sethide
+ oload 2
+ iload 9
+ iconst 495
+ paraheight
+ iconst 12
+ multiply
+ iconst 5
+ add
+ istore 10
+ iload 9
+ iload 10
+ iconst 0
+ iconst 0
+ iconst 24969356
+ if_setsize
+ iconst 20
+ iload 11
+ iconst 0
+ iconst 0
+ iconst 24969356
+ if_setposition
+ iconst 16727871
+ iconst 24969356
+ if_setcolour
+ iconst 45
+ iconst -2147483645
+ iconst 16744319
+ sconst "ii"
+ iconst 24969356
+ if_setonmouseover
+ iconst 45
+ iconst -2147483645
+ iconst 16727871
+ sconst "ii"
+ iconst 24969356
+ if_setonmouseleave
+ iload 11
+ iload 10
+ add
+ iconst 3
+ add
+ istore 11
+ jump LABEL594
+LABEL591:
+ iconst 1
+ iconst 24969356
+ if_sethide
+LABEL594:
+ iload 11
+ iconst 0
+ if_icmpgt LABEL598
+ jump LABEL602
+LABEL598:
+ iload 11
+ iconst 3
+ sub
+ istore 11
+LABEL602:
+ iload 0
+ if_getheight
+ istore 10
+ iload 11
+ iconst 0
+ if_icmple LABEL609
+ jump LABEL640
+LABEL609:
+ iload 0
+ iconst 4
+ iload 18
+ iconst 0
+ cc_create
+ iconst 0
+ iconst 0
+ iconst 0
+ iconst 0
+ cc_setposition
+ iconst 0
+ iconst 0
+ iconst 1
+ iconst 1
+ cc_setsize
+ iconst 495
+ cc_settextfont
+ iconst 16750623
+ cc_setcolour
+ iconst 1
+ cc_settextshadow
+ iconst 1
+ iconst 1
+ iconst 0
+ cc_settextalign
+ sconst "There are no fairy rings which go to that destination which you have access to."
+ cc_settext
+ iload 18
+ iconst 1
+ add
+ istore 18
+LABEL640:
+ iload 11
+ iload 10
+ if_icmpgt LABEL644
+ jump LABEL659
+LABEL644:
+ iconst 0
+ iload 11
+ iload 0
+ if_setscrollsize
+ iload 11
+ iload 10
+ sub
+ istore 10
+ get_varc_int
+ iload 10
+ if_icmpgt LABEL656
+ jump LABEL658
+LABEL656:
+ iload 10
+ set_varc_int
+LABEL658:
+ jump LABEL665
+LABEL659:
+ iconst 0
+ iconst 0
+ iload 0
+ if_setscrollsize
+ iconst 0
+ set_varc_int
+LABEL665:
+ iload 1
+ iload 0
+ get_varc_int
+ invoke 72
+ return
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/fairyring/FairyRingTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/fairyring/FairyRingTest.java
index 2a3fee94464..893ab5e3290 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/fairyring/FairyRingTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/fairyring/FairyRingTest.java
@@ -35,6 +35,6 @@ public class FairyRingTest
@Test
public void testFairyRingsAlphabetized()
{
- assertTrue(isSorted(Stream.of(FairyRings.values()).map(FairyRings::name).toArray(String[]::new)));
+ assertTrue(isSorted(Stream.of(FairyRing.values()).map(FairyRing::name).toArray(String[]::new)));
}
}
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java
index 1c98f7ec33b..e8904b6c2a2 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java
@@ -44,12 +44,9 @@
import net.runelite.api.gameval.VarClientID;
import net.runelite.api.gameval.VarbitID;
import net.runelite.api.widgets.Widget;
-import net.runelite.client.Notifier;
import net.runelite.client.config.RuneLiteConfig;
import net.runelite.client.ui.ClientUI;
import net.runelite.client.ui.DrawManager;
-import net.runelite.client.ui.overlay.OverlayManager;
-import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.ImageCapture;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
@@ -94,10 +91,6 @@ public class ScreenshotPluginTest
@Bind
private ScreenshotConfig screenshotConfig;
- @Mock
- @Bind
- Notifier notifier;
-
@Mock
@Bind
ClientUI clientUi;
@@ -114,14 +107,6 @@ public class ScreenshotPluginTest
@Bind
ScheduledExecutorService service;
- @Mock
- @Bind
- private OverlayManager overlayManager;
-
- @Mock
- @Bind
- private InfoBoxManager infoBoxManager;
-
@Mock
@Bind
private ImageCapture imageCapture;
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/worldmap/FairyRingLocationTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/worldmap/FairyRingLocationTest.java
index 55905036f73..005d3c74ca7 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/worldmap/FairyRingLocationTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/worldmap/FairyRingLocationTest.java
@@ -28,7 +28,7 @@
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import net.runelite.client.plugins.fairyring.FairyRings;
+import net.runelite.client.plugins.fairyring.FairyRing;
import static org.apache.commons.lang3.ArrayUtils.isSorted;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
@@ -44,7 +44,7 @@ public void testFairyRingsAlphabetized()
@Test
public void testFairyRingsInFairyRingPlugin()
{
- Set fairyRings = Stream.of(FairyRings.values()).map(FairyRings::name).collect(Collectors.toSet());
+ Set fairyRings = Stream.of(FairyRing.values()).map(FairyRing::name).collect(Collectors.toSet());
for (FairyRingLocation r : FairyRingLocation.values())
{
diff --git a/runelite-jshell/pom.xml b/runelite-jshell/pom.xml
index 84616d69b23..0bc5ac60d45 100644
--- a/runelite-jshell/pom.xml
+++ b/runelite-jshell/pom.xml
@@ -30,7 +30,7 @@
net.runelite
runelite-parent
- 1.11.18-SNAPSHOT
+ 1.11.19-SNAPSHOT
jshell
diff --git a/runelite-maven-plugin/pom.xml b/runelite-maven-plugin/pom.xml
index 15f8dc79dcc..96ec21fae17 100644
--- a/runelite-maven-plugin/pom.xml
+++ b/runelite-maven-plugin/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.11.18-SNAPSHOT
+ 1.11.19-SNAPSHOT
runelite-maven-plugin