diff --git a/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java b/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java index 1de7d524f1..2ab1d0c8ed 100644 --- a/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java +++ b/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java @@ -216,4 +216,46 @@ public class ChatClient return Integer.parseInt(response.body().string()); } } + + public boolean submitGc(String username, int gc) throws IOException + { + HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() + .addPathSegment("chat") + .addPathSegment("gc") + .addQueryParameter("name", username) + .addQueryParameter("gc", Integer.toString(gc)) + .build(); + + Request request = new Request.Builder() + .post(RequestBody.create(null, new byte[0])) + .url(url) + .build(); + + try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + { + return response.isSuccessful(); + } + } + + public int getGc(String username) throws IOException + { + HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() + .addPathSegment("chat") + .addPathSegment("gc") + .addQueryParameter("name", username) + .build(); + + Request request = new Request.Builder() + .url(url) + .build(); + + try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + { + if (!response.isSuccessful()) + { + throw new IOException("Unable to look up gamble count!"); + } + return Integer.parseInt(response.body().string()); + } + } } diff --git a/http-service/src/main/java/net/runelite/http/service/chat/ChatController.java b/http-service/src/main/java/net/runelite/http/service/chat/ChatController.java index 2f7a6b8740..92e443dda0 100644 --- a/http-service/src/main/java/net/runelite/http/service/chat/ChatController.java +++ b/http-service/src/main/java/net/runelite/http/service/chat/ChatController.java @@ -107,6 +107,28 @@ public class ChatController return kc; } + @PostMapping("/gc") + public void submitGc(@RequestParam String name, @RequestParam int gc) + { + if (gc < 0) + { + return; + } + + chatService.setGc(name, gc); + } + + @GetMapping("/gc") + public int getKc(@RequestParam String name) + { + Integer kc = chatService.getGc(name); + if (kc == null) + { + throw new NotFoundException(); + } + return kc; + } + @PostMapping("/task") public void submitTask(@RequestParam String name, @RequestParam("task") String taskName, @RequestParam int amount, @RequestParam int initialAmount, @RequestParam String location) diff --git a/http-service/src/main/java/net/runelite/http/service/chat/ChatService.java b/http-service/src/main/java/net/runelite/http/service/chat/ChatService.java index 07f68b95cf..f94eae673c 100644 --- a/http-service/src/main/java/net/runelite/http/service/chat/ChatService.java +++ b/http-service/src/main/java/net/runelite/http/service/chat/ChatService.java @@ -82,6 +82,24 @@ public class ChatService } } + public Integer getGc(String name) + { + String value; + try (Jedis jedis = jedisPool.getResource()) + { + value = jedis.get("gc." + name); + } + return value == null ? null : Integer.parseInt(value); + } + + public void setGc(String name, int gc) + { + try (Jedis jedis = jedisPool.getResource()) + { + jedis.setex("gc." + name, (int) EXPIRE.getSeconds(), Integer.toString(gc)); + } + } + public Task getTask(String name) { Map map; diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index 609af8a704..24340aab4e 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -135,6 +135,24 @@ public final class ScriptID */ public static final int DIARY_QUEST_UPDATE_LINECOUNT = 2523; + /** + * Initializes the chatbox input to use RuneLite callbacks + * + */ + public static final int RUNELITE_CHATBOX_INPUT_INIT = 10001; + + /** + * Handles zoom input + * + */ + public static final int CAMERA_DO_ZOOM = 42; + /** * Does nothing * @@ -157,4 +175,4 @@ public final class ScriptID * */ public static final int XPDROP_DISABLED = 2091; -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java b/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java index c471a1a814..9629bd99ac 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java @@ -25,12 +25,12 @@ package net.runelite.client.game; +import com.google.common.collect.ImmutableMap; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Collection; -import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -39,7 +39,7 @@ import java.util.Map; */ public class ItemVariationMapping { - private static final Map MAPPINGS = new HashMap<>(); + private static final Map MAPPINGS; static { @@ -51,6 +51,7 @@ public class ItemVariationMapping final InputStream geLimitData = ItemVariationMapping.class.getResourceAsStream("/item_variations.json"); final Map> itemVariations = gson.fromJson(new InputStreamReader(geLimitData), typeToken.getType()); + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); for (Collection value : itemVariations.values()) { final Iterator iterator = value.iterator(); @@ -58,9 +59,10 @@ public class ItemVariationMapping while (iterator.hasNext()) { - MAPPINGS.put(iterator.next(), base); + builder.put(iterator.next(), base); } } + MAPPINGS = builder.build(); } /** diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/Courses.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/Courses.java index bbd6b181cb..cc732561c0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/Courses.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/Courses.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.agility; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.Getter; import net.runelite.api.coords.WorldPoint; @@ -48,7 +48,7 @@ enum Courses RELLEKA(780.0, 475, 10553), ARDOUGNE(793.0, 529, 10547); - private final static Map coursesByRegion = new HashMap<>(); + private final static Map coursesByRegion; @Getter private final double totalXp; @@ -64,10 +64,14 @@ enum Courses static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (Courses course : values()) { - coursesByRegion.put(course.regionId, course); + builder.put(course.regionId, course); } + + coursesByRegion = builder.build(); } Courses(double totalXp, int lastObstacleXp, int regionId, WorldPoint... courseEndWorldPoints) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraOverlay.java index 9f09b5a3da..50d683c78d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraOverlay.java @@ -39,6 +39,7 @@ import net.runelite.api.SpriteID; import net.runelite.client.game.SpriteManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.InfoBoxComponent; import net.runelite.client.ui.overlay.components.PanelComponent; @@ -60,7 +61,7 @@ class HydraOverlay extends Overlay this.client = client; this.spriteManager = spriteManager; setPosition(OverlayPosition.BOTTOM_RIGHT); - panelComponent.setOrientation(PanelComponent.Orientation.VERTICAL); + panelComponent.setOrientation(ComponentOrientation.VERTICAL); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/WeaponType.java b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/WeaponType.java index d74742fca8..e1d3fa9442 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/WeaponType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/WeaponType.java @@ -24,9 +24,17 @@ */ package net.runelite.client.plugins.attackstyles; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; -import static net.runelite.client.plugins.attackstyles.AttackStyle.*; +import static net.runelite.client.plugins.attackstyles.AttackStyle.ACCURATE; +import static net.runelite.client.plugins.attackstyles.AttackStyle.AGGRESSIVE; +import static net.runelite.client.plugins.attackstyles.AttackStyle.CASTING; +import static net.runelite.client.plugins.attackstyles.AttackStyle.CONTROLLED; +import static net.runelite.client.plugins.attackstyles.AttackStyle.DEFENSIVE; +import static net.runelite.client.plugins.attackstyles.AttackStyle.DEFENSIVE_CASTING; +import static net.runelite.client.plugins.attackstyles.AttackStyle.LONGRANGE; +import static net.runelite.client.plugins.attackstyles.AttackStyle.OTHER; +import static net.runelite.client.plugins.attackstyles.AttackStyle.RANGING; public enum WeaponType { @@ -59,16 +67,20 @@ public enum WeaponType TYPE_26(AGGRESSIVE, AGGRESSIVE, null, AGGRESSIVE), TYPE_27(ACCURATE, null, null, OTHER); - private static final Map weaponTypes = new HashMap<>(); - private final AttackStyle[] attackStyles; + private static final Map weaponTypes; + static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (WeaponType weaponType : values()) { - weaponTypes.put(weaponType.ordinal(), weaponType); + builder.put(weaponType.ordinal(), weaponType); } + + weaponTypes = builder.build(); } WeaponType(AttackStyle... attackStyles) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Game.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Game.java index 8ee06f4339..8475a6cfce 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Game.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Game.java @@ -31,16 +31,14 @@ import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.eventbus.Subscribe; +import java.awt.*; import java.util.ArrayList; +@Getter public class Game { - @Getter private Client client; - - @Getter private String currentWave; - @Getter private ArrayList waves = new ArrayList<>(); private String[] totalDescriptions = { "A: ", @@ -120,9 +118,11 @@ public class Game message.append("("); if (totalPoints[i] < 0) { - message.append(ChatColorType.HIGHLIGHT); - message.append(String.valueOf(totalPoints[i])); - message.append(ChatColorType.NORMAL); + message.append(Color.RED, String.valueOf(totalPoints[i])); + } + else if (totalPoints[i] > 0) + { + message.append(Color.BLUE, String.valueOf(totalPoints[i])); } else { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Wave.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Wave.java index e8e290354d..e99e4c9704 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Wave.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Wave.java @@ -35,10 +35,9 @@ import net.runelite.client.chat.ChatMessageManager; import javax.inject.Inject; import java.awt.*; - +@Getter class Wave { - @Getter private Client client; private final ImmutableList WIDGETS = ImmutableList.of( WidgetInfo.BA_FAILED_ATTACKER_ATTACKS, @@ -65,17 +64,17 @@ class Wave WidgetInfo.BA_HITPOINTS_REPLENISHED_POINTS, WidgetInfo.BA_WRONG_POISON_PACKS_POINTS ); - private int[] amountsList = new int[6]; + private int[] waveAmounts = new int[6]; private int[] allPointsList = new int[10]; - private int[] importantPointsList = new int[6]; + private int[] wavePoints = new int[6]; private int[] otherRolesPointsList = new int[4]; private String[] descriptions = { " A: ", - " D: ", - " C: ", - " Vial: ", - " H packs: ", - " Total: "}; + "; D: ", + "; C: ", + "; Vial: ", + "; H packs: ", + "; Total: "}; private String[] otherPointsDescriptions = { " A: ", @@ -87,23 +86,11 @@ class Wave { this.client = client; } - int[] getOtherRolesPointsList() - { - return otherRolesPointsList; - } - int[] getWaveAmounts() - { - return amountsList; - } - int[] getWavePoints() - { - return importantPointsList; - } void setWaveAmounts(int[] amounts) { for (int i = 0; i < amounts.length; i++) { - amountsList[i] = amounts[i]; + waveAmounts[i] = amounts[i]; } } @@ -111,7 +98,7 @@ class Wave { for (int i = 0; i < points.length; i++) { - importantPointsList[i] = points[i]; + wavePoints[i] = points[i]; } for (int i = 0; i < otherRolesPoints.length; i++) { @@ -125,7 +112,7 @@ class Wave Widget w = client.getWidget(WIDGETS.get(i)); if (w != null) { - amountsList[i] = Integer.parseInt(w.getText()); + waveAmounts[i] = Integer.parseInt(w.getText()); } } } @@ -138,26 +125,26 @@ class Wave switch (i) { case 1: - importantPointsList[0] += allPointsList[i]; + wavePoints[0] += allPointsList[i]; break; case 4: - importantPointsList[1] += allPointsList[i]; + wavePoints[1] += allPointsList[i]; break; case 6: - importantPointsList[2] += allPointsList[i]; + wavePoints[2] += allPointsList[i]; break; case 8: case 9: - importantPointsList[3] += allPointsList[i]; + wavePoints[3] += allPointsList[i]; break; default: break; } } - importantPointsList[5] = 0; - for (int i = 0; i < importantPointsList.length-1; i++) + wavePoints[5] = 0; + for (int i = 0; i < wavePoints.length-1; i++) { - importantPointsList[5] += importantPointsList[i]; + wavePoints[5] += wavePoints[i]; } for (int i = 0; i < POINTSWIDGETS.size(); i++) { @@ -201,15 +188,19 @@ class Wave if (i != 4) { message.append(descriptions[i]); - message.append(String.valueOf(amountsList[i])); + message.append(String.valueOf(waveAmounts[i])); message.append("("); - if (importantPointsList[i] < 0) + if (wavePoints[i] < 0) { - message.append(Color.RED, String.valueOf(importantPointsList[i])); + message.append(Color.RED, String.valueOf(wavePoints[i])); + } + else if (wavePoints[i] > 0) + { + message.append(Color.BLUE, String.valueOf(wavePoints[i])); } else { - message.append(String.valueOf(importantPointsList[i])); + message.append(String.valueOf(wavePoints[i])); } message.append(")"); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java index 1f9bc2c244..52a295afd3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.blastfurnace; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.Getter; import net.runelite.api.ItemID; @@ -50,14 +50,18 @@ public enum BarsOres SILVER_BAR(Varbits.BLAST_FURNACE_SILVER_BAR, ItemID.SILVER_BAR), GOLD_BAR(Varbits.BLAST_FURNACE_GOLD_BAR, ItemID.GOLD_BAR); - private static final Map VARBIT = new HashMap<>(); + private static final Map VARBIT; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (BarsOres s : values()) { - VARBIT.put(s.getVarbit(), s); + builder.put(s.getVarbit(), s); } + + VARBIT = builder.build(); } @Getter diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceOverlay.java index d57fd53fc9..48253cdfe3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceOverlay.java @@ -35,6 +35,7 @@ import net.runelite.client.ui.overlay.Overlay; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.ImageComponent; import net.runelite.client.ui.overlay.components.PanelComponent; @@ -54,7 +55,7 @@ class BlastFurnaceOverlay extends Overlay this.plugin = plugin; this.client = client; setPosition(OverlayPosition.TOP_LEFT); - imagePanelComponent.setOrientation(PanelComponent.Orientation.HORIZONTAL); + imagePanelComponent.setOrientation(ComponentOrientation.HORIZONTAL); getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Blast furnace overlay")); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineOreCountOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineOreCountOverlay.java index 53818a250e..e7fdc8848f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineOreCountOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineOreCountOverlay.java @@ -39,6 +39,8 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; +import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.ImageComponent; import net.runelite.client.ui.overlay.components.PanelComponent; @@ -57,7 +59,7 @@ class BlastMineOreCountOverlay extends Overlay this.client = client; this.config = config; this.itemManager = itemManager; - panelComponent.setOrientation(PanelComponent.Orientation.HORIZONTAL); + panelComponent.setOrientation(ComponentOrientation.HORIZONTAL); getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Blast mine overlay")); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineRockType.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineRockType.java index 7c7bda870a..20e1d37f58 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineRockType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineRockType.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.blastmine; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.Getter; import net.runelite.api.ObjectID; @@ -37,17 +37,21 @@ public enum BlastMineRockType LIT(ObjectID.POT_OF_DYNAMITE_28585, ObjectID.POT_OF_DYNAMITE_28586), EXPLODED(ObjectID.SHATTERED_ROCKFACE, ObjectID.SHATTERED_ROCKFACE_28588); - private static final Map rockTypes = new HashMap<>(); + private static final Map rockTypes; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (BlastMineRockType type : values()) { for (int spotId : type.getObjectIds()) { - rockTypes.put(spotId, type); + builder.put(spotId, type); } } + + rockTypes = builder.build(); } @Getter diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java index 95839b9e96..47752f415b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/Boss.java @@ -25,9 +25,9 @@ */ package net.runelite.client.plugins.bosstimer; +import com.google.common.collect.ImmutableMap; import java.time.Duration; import java.time.temporal.ChronoUnit; -import java.util.HashMap; import java.util.Map; import net.runelite.api.ItemID; import net.runelite.api.NpcID; @@ -59,7 +59,7 @@ enum Boss DUSK(NpcID.DUSK_7889, 2, ChronoUnit.MINUTES, ItemID.NOON), ALCHEMICAL_HYDRA(NpcID.ALCHEMICAL_HYDRA_8622, 25200, ChronoUnit.MILLIS, ItemID.IKKLE_HYDRA); - private static final Map bosses = new HashMap<>(); + private static final Map bosses; private final int id; private final Duration spawnTime; @@ -67,10 +67,14 @@ enum Boss static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (Boss boss : values()) { - bosses.put(boss.getId(), boss); + builder.put(boss.getId(), boss); } + + bosses = builder.build(); } private Boss(int id, long period, ChronoUnit unit, int itemSpriteId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusGhost.java b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusGhost.java index 7bdf9d6788..744085c9a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusGhost.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusGhost.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.cerberus; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import java.util.Optional; import lombok.Getter; @@ -41,18 +41,21 @@ public enum CerberusGhost MAGE(NpcID.SUMMONED_SOUL_5868, Skill.MAGIC), MELEE(NpcID.SUMMONED_SOUL_5869, Skill.ATTACK); - private static final Map MAP = new HashMap<>(); private final int npcId; private final Skill type; + private static final Map MAP; + static { - final CerberusGhost[] values = CerberusGhost.values(); + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); - for (final CerberusGhost ghost : values) + for (final CerberusGhost ghost : values()) { - MAP.put(ghost.getNpcId(), ghost); + builder.put(ghost.getNpcId(), ghost); } + + MAP = builder.build(); } /** diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusOverlay.java index 43c16aee10..68018b6c3b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusOverlay.java @@ -31,6 +31,7 @@ import javax.inject.Singleton; import net.runelite.client.game.SkillIconManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.ImageComponent; import net.runelite.client.ui.overlay.components.PanelComponent; @@ -47,7 +48,7 @@ public class CerberusOverlay extends Overlay this.plugin = plugin; this.iconManager = iconManager; setPosition(OverlayPosition.BOTTOM_RIGHT); - panelComponent.setOrientation(PanelComponent.Orientation.HORIZONTAL); + panelComponent.setOrientation(ComponentOrientation.HORIZONTAL); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java index 16c40d54b7..92987467d0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java @@ -99,6 +99,17 @@ public interface ChatCommandsConfig extends Config @ConfigItem( position = 6, + keyName = "gc", + name = "GC Command", + description = "Configures whether the Barbarian Assault High gamble count command is enabled
!gc" + ) + default boolean gc() + { + return true; + } + + @ConfigItem( + position = 7, keyName = "clearShortcuts", name = "Clear shortcuts", description = "Enable shortcuts (ctrl+w and backspace) for clearing the chatbox" diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index 44ff821be8..bd7c941ee1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -41,6 +41,7 @@ import net.runelite.api.IconID; import net.runelite.api.ItemComposition; import net.runelite.api.MessageNode; import net.runelite.api.VarPlayer; +import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.VarbitChanged; @@ -96,6 +97,7 @@ public class ChatCommandsPlugin extends Plugin private static final String KILLCOUNT_COMMAND_STRING = "!kc"; private static final String CMB_COMMAND_STRING = "!cmb"; private static final String QP_COMMAND_STRING = "!qp"; + private static final String GC_COMMAND_STRING = "!gc"; private static final String PB_COMMAND = "!pb"; private final HiscoreClient hiscoreClient = new HiscoreClient(); @@ -145,6 +147,7 @@ public class ChatCommandsPlugin extends Plugin chatCommandManager.registerCommandAsync(CLUES_COMMAND_STRING, this::clueLookup); chatCommandManager.registerCommandAsync(KILLCOUNT_COMMAND_STRING, this::killCountLookup, this::killCountSubmit); chatCommandManager.registerCommandAsync(QP_COMMAND_STRING, this::questPointsLookup, this::questPointsSubmit); + chatCommandManager.registerCommandAsync(GC_COMMAND_STRING, this::gambleCountLookup, this::gambleCountSubmit); chatCommandManager.registerCommandAsync(PB_COMMAND, this::personalBestLookup, this::personalBestSubmit); } @@ -163,6 +166,7 @@ public class ChatCommandsPlugin extends Plugin chatCommandManager.unregisterCommand(KILLCOUNT_COMMAND_STRING); chatCommandManager.unregisterCommand(QP_COMMAND_STRING); chatCommandManager.unregisterCommand(PB_COMMAND); + chatCommandManager.unregisterCommand(GC_COMMAND_STRING); } @Provides @@ -484,6 +488,77 @@ public class ChatCommandsPlugin extends Plugin return true; } + private void gambleCountLookup(ChatMessage chatMessage, String message) + { + if (!config.gc()) + { + return; + } + + ChatMessageType type = chatMessage.getType(); + + final String player; + if (type.equals(ChatMessageType.PRIVATECHAT)) + { + player = client.getLocalPlayer().getName(); + } + else + { + player = sanitize(chatMessage.getName()); + } + + int gc; + try + { + gc = chatClient.getGc(player); + log.info("gc lookup"); + } + catch (IOException ex) + { + log.debug("unable to lookup gamble count", ex); + log.info("gc lookup error"); + return; + } + + String response = new ChatMessageBuilder() + .append(ChatColorType.NORMAL) + .append("Barbarian Assault High-level gambles: ") + .append(ChatColorType.HIGHLIGHT) + .append(Integer.toString(gc)) + .build(); + + log.debug("Setting response {}", response); + final MessageNode messageNode = chatMessage.getMessageNode(); + messageNode.setRuneLiteFormatMessage(response); + chatMessageManager.update(messageNode); + client.refreshChat(); + } + + private boolean gambleCountSubmit(ChatInput chatInput, String value) + { + final int gc = client.getVar(Varbits.BA_GC); + final String playerName = client.getLocalPlayer().getName(); + + executor.execute(() -> + { + try + { + chatClient.submitGc(playerName, gc); + } + catch (Exception ex) + { + log.warn("unable to submit gamble count", ex); + } + finally + { + chatInput.resume(); + } + }); + + return true; + } + + private void personalBestLookup(ChatMessage chatMessage, String message) { if (!config.pb()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/SkillAbbreviations.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/SkillAbbreviations.java index da89769172..754c2f869e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/SkillAbbreviations.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/SkillAbbreviations.java @@ -24,56 +24,58 @@ */ package net.runelite.client.plugins.chatcommands; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import net.runelite.api.Skill; class SkillAbbreviations { - private static final Map MAP = new HashMap<>(); + private static final Map MAP; static { - MAP.put("ATK", Skill.ATTACK.getName()); - MAP.put("ATT", Skill.ATTACK.getName()); - MAP.put("DEF", Skill.DEFENCE.getName()); - MAP.put("STR", Skill.STRENGTH.getName()); - MAP.put("HEALTH", Skill.HITPOINTS.getName()); - MAP.put("HIT", Skill.HITPOINTS.getName()); - MAP.put("HITPOINT", Skill.HITPOINTS.getName()); - MAP.put("HP", Skill.HITPOINTS.getName()); - MAP.put("RANGE", Skill.RANGED.getName()); - MAP.put("RANGING", Skill.RANGED.getName()); - MAP.put("RNG", Skill.RANGED.getName()); - MAP.put("PRAY", Skill.PRAYER.getName()); - MAP.put("MAG", Skill.MAGIC.getName()); - MAP.put("MAGE", Skill.MAGIC.getName()); - MAP.put("COOK", Skill.COOKING.getName()); - MAP.put("WC", Skill.WOODCUTTING.getName()); - MAP.put("WOOD", Skill.WOODCUTTING.getName()); - MAP.put("WOODCUT", Skill.WOODCUTTING.getName()); - MAP.put("FLETCH", Skill.FLETCHING.getName()); - MAP.put("FISH", Skill.FISHING.getName()); - MAP.put("FM", Skill.FIREMAKING.getName()); - MAP.put("FIRE", Skill.FIREMAKING.getName()); - MAP.put("CRAFT", Skill.CRAFTING.getName()); - MAP.put("SMITH", Skill.SMITHING.getName()); - MAP.put("MINE", Skill.MINING.getName()); - MAP.put("HL", Skill.HERBLORE.getName()); - MAP.put("HERB", Skill.HERBLORE.getName()); - MAP.put("AGI", Skill.AGILITY.getName()); - MAP.put("AGIL", Skill.AGILITY.getName()); - MAP.put("THIEF", Skill.THIEVING.getName()); - MAP.put("SLAY", Skill.SLAYER.getName()); - MAP.put("FARM", Skill.FARMING.getName()); - MAP.put("RC", Skill.RUNECRAFT.getName()); - MAP.put("RUNE", Skill.RUNECRAFT.getName()); - MAP.put("RUNECRAFTING", Skill.RUNECRAFT.getName()); - MAP.put("HUNT", Skill.HUNTER.getName()); - MAP.put("CON", Skill.CONSTRUCTION.getName()); - MAP.put("CONSTRUCT", Skill.CONSTRUCTION.getName()); - MAP.put("ALL", Skill.OVERALL.getName()); - MAP.put("TOTAL", Skill.OVERALL.getName()); + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + builder.put("ATK", Skill.ATTACK.getName()); + builder.put("ATT", Skill.ATTACK.getName()); + builder.put("DEF", Skill.DEFENCE.getName()); + builder.put("STR", Skill.STRENGTH.getName()); + builder.put("HEALTH", Skill.HITPOINTS.getName()); + builder.put("HIT", Skill.HITPOINTS.getName()); + builder.put("HITPOINT", Skill.HITPOINTS.getName()); + builder.put("HP", Skill.HITPOINTS.getName()); + builder.put("RANGE", Skill.RANGED.getName()); + builder.put("RANGING", Skill.RANGED.getName()); + builder.put("RNG", Skill.RANGED.getName()); + builder.put("PRAY", Skill.PRAYER.getName()); + builder.put("MAG", Skill.MAGIC.getName()); + builder.put("MAGE", Skill.MAGIC.getName()); + builder.put("COOK", Skill.COOKING.getName()); + builder.put("WC", Skill.WOODCUTTING.getName()); + builder.put("WOOD", Skill.WOODCUTTING.getName()); + builder.put("WOODCUT", Skill.WOODCUTTING.getName()); + builder.put("FLETCH", Skill.FLETCHING.getName()); + builder.put("FISH", Skill.FISHING.getName()); + builder.put("FM", Skill.FIREMAKING.getName()); + builder.put("FIRE", Skill.FIREMAKING.getName()); + builder.put("CRAFT", Skill.CRAFTING.getName()); + builder.put("SMITH", Skill.SMITHING.getName()); + builder.put("MINE", Skill.MINING.getName()); + builder.put("HL", Skill.HERBLORE.getName()); + builder.put("HERB", Skill.HERBLORE.getName()); + builder.put("AGI", Skill.AGILITY.getName()); + builder.put("AGIL", Skill.AGILITY.getName()); + builder.put("THIEF", Skill.THIEVING.getName()); + builder.put("SLAY", Skill.SLAYER.getName()); + builder.put("FARM", Skill.FARMING.getName()); + builder.put("RC", Skill.RUNECRAFT.getName()); + builder.put("RUNE", Skill.RUNECRAFT.getName()); + builder.put("RUNECRAFTING", Skill.RUNECRAFT.getName()); + builder.put("HUNT", Skill.HUNTER.getName()); + builder.put("CON", Skill.CONSTRUCTION.getName()); + builder.put("CONSTRUCT", Skill.CONSTRUCTION.getName()); + builder.put("ALL", Skill.OVERALL.getName()); + builder.put("TOTAL", Skill.OVERALL.getName()); + MAP = builder.build(); } /** diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java index 7258c6c7bb..cd05521228 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java @@ -25,8 +25,8 @@ */ package net.runelite.client.plugins.discord; -import java.util.ArrayList; -import java.util.HashMap; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import java.util.List; import java.util.Map; import lombok.AllArgsConstructor; @@ -250,16 +250,18 @@ enum DiscordGameEventType RAIDS_CHAMBERS_OF_XERIC("Chambers of Xeric", DiscordAreaType.RAIDS, Varbits.IN_RAID), RAIDS_THEATRE_OF_BLOOD("Theatre of Blood", DiscordAreaType.RAIDS, Varbits.THEATRE_OF_BLOOD); - private static final Map FROM_REGION = new HashMap<>(); - private static final List FROM_VARBITS = new ArrayList<>(); + private static final Map FROM_REGION; + private static final List FROM_VARBITS; static { + ImmutableMap.Builder regionMapBuilder = new ImmutableMap.Builder<>(); + ImmutableList.Builder fromVarbitsBuilder = ImmutableList.builder(); for (DiscordGameEventType discordGameEventType : DiscordGameEventType.values()) { if (discordGameEventType.getVarbits() != null) { - FROM_VARBITS.add(discordGameEventType); + fromVarbitsBuilder.add(discordGameEventType); continue; } @@ -270,10 +272,11 @@ enum DiscordGameEventType for (int region : discordGameEventType.getRegionIds()) { - assert !FROM_REGION.containsKey(region); - FROM_REGION.put(region, discordGameEventType); + regionMapBuilder.put(region, discordGameEventType); } } + FROM_REGION = regionMapBuilder.build(); + FROM_VARBITS = fromVarbitsBuilder.build(); } private String imageKey; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java index 0221e7c32c..94f774ccc0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.fishing; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.Getter; import net.runelite.api.ItemID; @@ -160,7 +160,7 @@ enum FishingSpot FISHING_SPOT_8523); @Getter - private static final Map SPOTS = new HashMap<>(); + private static final Map SPOTS; private final String name; private final int fishSpriteId; @@ -168,15 +168,17 @@ enum FishingSpot static { - FishingSpot[] spots = values(); + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); - for (FishingSpot spot : spots) + for (FishingSpot spot : values()) { for (int spotId : spot.getIds()) { - SPOTS.put(spotId, spot); + builder.put(spotId, spot); } } + + SPOTS = builder.build(); } FishingSpot(String spot, int fishSpriteId, int... ids) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/implings/Impling.java b/runelite-client/src/main/java/net/runelite/client/plugins/implings/Impling.java index 0273b5da04..473fad2c23 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/implings/Impling.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/implings/Impling.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.implings; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.AllArgsConstructor; import lombok.Getter; @@ -70,14 +70,18 @@ enum Impling private ImplingType implingType; private final int npcId; - private static final Map IMPLINGS = new HashMap<>(); + private static final Map IMPLINGS; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (Impling impling : values()) { - IMPLINGS.put(impling.npcId, impling); + builder.put(impling.npcId, impling); } + + IMPLINGS = builder.build(); } static Impling findImpling(int npcId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerOverlay.java index 6f322fd6b6..7a2941158a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerOverlay.java @@ -43,6 +43,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.components.ComponentConstants; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.ImageComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; @@ -69,7 +70,7 @@ class InventoryViewerOverlay extends Overlay inventoryComponent.setWrapping(4); inventoryComponent.setGap(new Point(6, 4)); - inventoryComponent.setOrientation(PanelComponent.Orientation.HORIZONTAL); + inventoryComponent.setOrientation(ComponentOrientation.HORIZONTAL); inventoryComponent.setBackgroundColor(null); inventoryComponent.setBorder(new Rectangle( 0, @@ -77,7 +78,7 @@ class InventoryViewerOverlay extends Overlay 0, ComponentConstants.STANDARD_BORDER)); - wrapperComponent.setOrientation(PanelComponent.Orientation.VERTICAL); + wrapperComponent.setOrientation(ComponentOrientation.HORIZONTAL); wrapperComponent.setWrapping(2); wrapperComponent.setBorder(new Rectangle( ComponentConstants.STANDARD_BORDER * 2, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java index bc57642f0a..f696097817 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.itemcharges; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import javax.annotation.Nullable; import lombok.AllArgsConstructor; @@ -174,14 +174,18 @@ enum ItemWithCharge private final int id; private final int charges; - private static final Map ID_MAP = new HashMap<>(); + private static final Map ID_MAP; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (ItemWithCharge itemCharge : values()) { - ID_MAP.put(itemCharge.getId(), itemCharge); + builder.put(itemCharge.getId(), itemCharge); } + + ID_MAP = builder.build(); } @Nullable diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java index 8ef3efcf8b..622ab1c04e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.itemidentification; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import net.runelite.api.ItemID; @@ -100,17 +100,21 @@ enum ItemIdentification this.itemIDs = ids; } - private static final Map itemIdentifications = new HashMap<>(); + private static final Map itemIdentifications; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (ItemIdentification i : values()) { for (int id : i.itemIDs) { - itemIdentifications.put(id, i); + builder.put(id, i); } } + + itemIdentifications = builder.build(); } static ItemIdentification get(int id) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerOverlay.java index 85a07780de..f583d5b768 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerOverlay.java @@ -32,6 +32,7 @@ import net.runelite.api.ItemContainer; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.ImageComponent; import net.runelite.client.ui.overlay.components.PanelComponent; @@ -60,7 +61,7 @@ class LootingBagViewerOverlay extends Overlay setPosition(OverlayPosition.BOTTOM_RIGHT); panelComponent.setWrapping(4); panelComponent.setGap(new Point(6, 4)); - panelComponent.setOrientation(PanelComponent.Orientation.HORIZONTAL); + panelComponent.setOrientation(ComponentOrientation.HORIZONTAL); this.itemManager = itemManager; this.client = client; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java index 1cde69a8ea..656cf85716 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java @@ -24,12 +24,22 @@ */ package net.runelite.client.plugins.poh; +import com.google.common.collect.ImmutableMap; import java.awt.image.BufferedImage; -import java.util.HashMap; import java.util.Map; import lombok.Getter; +import static net.runelite.api.NullObjectID.NULL_13615; +import static net.runelite.api.NullObjectID.NULL_13618; +import static net.runelite.api.NullObjectID.NULL_13620; +import static net.runelite.api.NullObjectID.NULL_13622; +import static net.runelite.api.NullObjectID.NULL_13625; +import static net.runelite.api.NullObjectID.NULL_13627; +import static net.runelite.api.NullObjectID.NULL_13629; +import static net.runelite.api.NullObjectID.NULL_13632; +import static net.runelite.api.NullObjectID.NULL_13634; +import static net.runelite.api.NullObjectID.NULL_29228; +import static net.runelite.api.NullObjectID.NULL_29229; import static net.runelite.api.ObjectID.*; -import static net.runelite.api.NullObjectID.*; import net.runelite.client.util.ImageUtil; public enum PohIcons @@ -56,7 +66,7 @@ public enum PohIcons ALTAR("altar", ALTAR_13179, ALTAR_13180, ALTAR_13181, ALTAR_13182, ALTAR_13183, ALTAR_13184, ALTAR_13185, ALTAR_13186, ALTAR_13187, ALTAR_13188, ALTAR_13189, ALTAR_13190, ALTAR_13191, ALTAR_13192, ALTAR_13193, ALTAR_13194, - ALTAR_13194, ALTAR_13196, ALTAR_13197, ALTAR_13198, ALTAR_13199 + ALTAR_13196, ALTAR_13197, ALTAR_13198, ALTAR_13199 ), POOLS("pool", POOL_OF_RESTORATION, POOL_OF_REVITALISATION, POOL_OF_REJUVENATION, FANCY_REJUVENATION_POOL, ORNATE_REJUVENATION_POOL), GLORY("glory", AMULET_OF_GLORY), @@ -83,7 +93,7 @@ public enum PohIcons DIGSITE_PENDANT, DIGSITE_PENDANT_33417, DIGSITE_PENDANT_33418, DIGSITE_PENDANT_33420 ); - private static final Map minimapIcons = new HashMap<>(); + private static final Map minimapIcons; @Getter private final String imageResource; @@ -94,15 +104,17 @@ public enum PohIcons static { - PohIcons[] icons = values(); + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); - for (PohIcons icon : icons) + for (PohIcons icon : values()) { for (Integer spotId : icon.getIds()) { - minimapIcons.put(spotId, icon); + builder.put(spotId, icon); } } + + minimapIcons = builder.build(); } PohIcons(String imageResource, int... ids) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerItems.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerItems.java index 24ffbc5a56..d07ff8cf6c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerItems.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerItems.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.prayer; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.AllArgsConstructor; import lombok.Getter; @@ -453,17 +453,19 @@ enum PrayerItems DAMAGED_BOOK_3841(ItemID.DAMAGED_BOOK_3841, 5), FALADOR_SHIELD_4(ItemID.FALADOR_SHIELD_4, 5); - private static final Map prayerBonuses = new HashMap<>(); + private static final Map prayerBonuses; private final int itemId; private final int prayerBonus; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); for (PrayerItems item : values()) { - prayerBonuses.put(item.getItemId(), item.getPrayerBonus()); + builder.put(item.getItemId(), item.getPrayerBonus()); } + prayerBonuses = builder.build(); } static int getItemPrayerBonus(int itemId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerRestoreType.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerRestoreType.java index 2ef3c1a46f..d30b790a9e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerRestoreType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerRestoreType.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.prayer; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import net.runelite.api.ItemID; @@ -36,7 +36,7 @@ enum PrayerRestoreType HOLYWRENCH(ItemID.PRAYER_CAPE, ItemID.PRAYER_CAPET, ItemID.PRAYER_CAPE_10643, ItemID.MAX_CAPE, ItemID.MAX_CAPE_13282, ItemID.MAX_CAPE_13342, ItemID.HOLY_WRENCH, ItemID.RING_OF_THE_GODS_I); - private static final Map prayerRestores = new HashMap<>(); + private static final Map prayerRestores; private final int[] items; @@ -47,13 +47,15 @@ enum PrayerRestoreType static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); for (PrayerRestoreType prayerRestoreType : values()) { for (int itemId : prayerRestoreType.items) { - prayerRestores.put(itemId, prayerRestoreType); + builder.put(itemId, prayerRestoreType); } } + prayerRestores = builder.build(); } static PrayerRestoreType getType(final int itemId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/VarrockMuseumAnswer.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/VarrockMuseumAnswer.java index e574dd1023..0e4307d550 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/VarrockMuseumAnswer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/VarrockMuseumAnswer.java @@ -25,7 +25,7 @@ */ package net.runelite.client.plugins.puzzlesolver; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -135,14 +135,18 @@ enum VarrockMuseumAnswer LEECH_5("What is special about Morytanian leeches?", "They attack by jumping."), LEECH_6("How does a leech change when it feeds?", "It doubles in size."); - private static final Map MATCHES = new HashMap<>(); + private static final Map MATCHES; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (VarrockMuseumAnswer varrockMuseumAnswer : VarrockMuseumAnswer.values()) { - MATCHES.put(varrockMuseumAnswer.question, varrockMuseumAnswer.answer); + builder.put(varrockMuseumAnswer.question, varrockMuseumAnswer.answer); } + + MATCHES = builder.build(); } private final String question; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java index fc149415b1..98fc24efa9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java @@ -48,10 +48,7 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; -import net.runelite.client.ui.overlay.components.ImageComponent; -import net.runelite.client.ui.overlay.components.LineComponent; -import net.runelite.client.ui.overlay.components.PanelComponent; -import net.runelite.client.ui.overlay.components.TitleComponent; +import net.runelite.client.ui.overlay.components.*; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.Text; @@ -383,7 +380,7 @@ public class RaidsOverlay extends Overlay smallImages = true; } - panelImages.setOrientation(PanelComponent.Orientation.HORIZONTAL); + panelImages.setOrientation(ComponentOrientation.HORIZONTAL); for (Integer e : idArray) { final BufferedImage image = getImage(e, smallImages); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssRifts.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssRifts.java index 60f02d5080..1ecedafe00 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssRifts.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssRifts.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.runecraft; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.Getter; import static net.runelite.api.ItemID.AIR_RUNE; @@ -64,14 +64,18 @@ public enum AbyssRifts @Getter private final int itemId; - private static final Map rifts = new HashMap<>(); + private static final Map rifts; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (AbyssRifts s : values()) { - rifts.put(s.getObjectId(), s); + builder.put(s.getObjectId(), s); } + + rifts = builder.build(); } AbyssRifts(int objectId, int itemId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/Runes.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/Runes.java index 26dd1148a9..b5aebe9bf6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/Runes.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/Runes.java @@ -25,8 +25,8 @@ package net.runelite.client.plugins.runepouch; +import com.google.common.collect.ImmutableMap; import java.awt.image.BufferedImage; -import java.util.HashMap; import java.util.Map; import lombok.Getter; import lombok.Setter; @@ -85,14 +85,16 @@ public enum Runes @Setter private BufferedImage image; - private static final Map runes = new HashMap<>(); + private static final Map runes; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); for (Runes rune : values()) { - runes.put(rune.getId(), rune); + builder.put(rune.getId(), rune); } + runes = builder.build(); } Runes(int id, int itemId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java index 1c6d5029d0..38984e14a2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java @@ -29,8 +29,8 @@ import com.google.common.base.Preconditions; import java.util.ArrayList; import static java.util.Arrays.asList; import java.util.Collections; -import java.util.HashMap; import java.util.List; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.Getter; import net.runelite.api.ItemID; @@ -239,7 +239,7 @@ enum Task ZUK("TzKal-Zuk", ItemID.TZREKZUK); // - private static final Map tasks = new HashMap<>(); + private static final Map tasks; private final String name; private final int itemSpriteId; @@ -252,10 +252,14 @@ enum Task static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (Task task : values()) { - tasks.put(task.getName().toLowerCase(), task); + builder.put(task.getName().toLowerCase(), task); } + + tasks = builder.build(); } Task(String name, int itemSpriteId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingConfig.java index 611960ffe5..9671f29e1a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingConfig.java @@ -32,14 +32,13 @@ import net.runelite.client.config.ConfigItem; public interface SmeltingConfig extends Config { @ConfigItem( - position = 1, - keyName = "statTimeout", - name = "Reset stats (minutes)", - description = "The time it takes for the current smelting session to be reset" + position = 1, + keyName = "statTimeout", + name = "Reset stats (minutes)", + description = "The time it takes for the current smelting session to be reset" ) default int statTimeout() { return 5; } - } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingOverlay.java index b1c93b09bb..7a49c00144 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingOverlay.java @@ -27,11 +27,11 @@ package net.runelite.client.plugins.smelting; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; -import java.time.Instant; import java.time.Duration; +import java.time.Instant; import javax.inject.Inject; -import static net.runelite.api.AnimationID.SMITHING_SMELTING; import static net.runelite.api.AnimationID.SMITHING_CANNONBALL; +import static net.runelite.api.AnimationID.SMITHING_SMELTING; import net.runelite.api.Client; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; import net.runelite.api.Skill; @@ -50,20 +50,18 @@ class SmeltingOverlay extends Overlay private final Client client; private final SmeltingPlugin plugin; - private final SmeltingConfig config; private final XpTrackerService xpTrackerService; private final PanelComponent panelComponent = new PanelComponent(); @Inject - public SmeltingOverlay(Client client, SmeltingPlugin plugin, SmeltingConfig config, XpTrackerService xpTrackerService) + SmeltingOverlay(Client client, SmeltingPlugin plugin, XpTrackerService xpTrackerService) { super(plugin); - setPosition(OverlayPosition.TOP_LEFT); this.client = client; this.plugin = plugin; - this.config = config; this.xpTrackerService = xpTrackerService; + setPosition(OverlayPosition.TOP_LEFT); getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Smelting overlay")); } @@ -71,16 +69,13 @@ class SmeltingOverlay extends Overlay public Dimension render(Graphics2D graphics) { SmeltingSession session = plugin.getSession(); - - if (session!=null) - if (session.getLastItemSmelted() == null) + if (session == null) { return null; } panelComponent.getChildren().clear(); - if (session!=null) if (isSmelting() || Duration.between(session.getLastItemSmelted(), Instant.now()).getSeconds() < SMELT_TIMEOUT) { panelComponent.getChildren().add(TitleComponent.builder() @@ -125,6 +120,7 @@ class SmeltingOverlay extends Overlay return panelComponent.render(graphics); } + private boolean isSmelting() { switch (client.getLocalPlayer().getAnimation()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java index cf9ee4a144..21a3b5440b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java @@ -38,20 +38,17 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Smelting", - description = "Show Smelting stats", - tags = {"overlay", "skilling"}, - type = PluginType.UTILITY + name = "Smelting", + description = "Show Smelting stats", + tags = {"overlay", "skilling"} ) @PluginDependency(XpTrackerPlugin.class) public class SmeltingPlugin extends Plugin { - @Inject private SmeltingConfig config; @@ -71,14 +68,14 @@ public class SmeltingPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { session = null; overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { overlayManager.remove(overlay); session = null; @@ -92,40 +89,37 @@ public class SmeltingPlugin extends Plugin return; } - if (event.getMessage().contains("You retrieve a bar of")) + if (event.getMessage().startsWith("You retrieve a bar of")) { if (session == null) { session = new SmeltingSession(); } - session.setLastItemSmelted(Instant.now()); session.increaseBarsSmelted(); } - else if (event.getMessage().contains("You remove the cannonballs from the mould")) + else if (event.getMessage().startsWith("You remove the cannonballs from the mould")) { if (session == null) { session = new SmeltingSession(); } - session.setLastItemSmelted(Instant.now()); session.increaseCannonBallsSmelted(); - } } @Subscribe public void onGameTick(GameTick event) { - if (session!=null) - if (session.getLastItemSmelted() != null) + if (session != null) { final Duration statTimeout = Duration.ofMinutes(config.statTimeout()); final Duration sinceCaught = Duration.between(session.getLastItemSmelted(), Instant.now()); if (sinceCaught.compareTo(statTimeout) >= 0) { - session.setLastItemSmelted(null); + session = null; } } } } + diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingSession.java b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingSession.java index c6b04acabc..b49cfff6c0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingSession.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingSession.java @@ -25,30 +25,29 @@ package net.runelite.client.plugins.smelting; import java.time.Instant; - import lombok.AccessLevel; import lombok.Getter; -import lombok.Setter; class SmeltingSession { - @Getter(AccessLevel.PACKAGE) - @Setter - private Instant lastItemSmelted; - @Getter(AccessLevel.PACKAGE) private int barsSmelted; @Getter(AccessLevel.PACKAGE) private int cannonBallsSmelted; + @Getter(AccessLevel.PACKAGE) + private Instant lastItemSmelted; + void increaseBarsSmelted() { barsSmelted++; + lastItemSmelted = Instant.now(); } void increaseCannonBallsSmelted() { cannonBallsSmelted += 4; + lastItemSmelted = Instant.now(); } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesOverlay.java index b5cc7858bf..9dbd2dc861 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesOverlay.java @@ -36,6 +36,7 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.ImageComponent; import net.runelite.client.ui.overlay.components.PanelComponent; @@ -55,7 +56,7 @@ public class TeamCapesOverlay extends Overlay this.plugin = plugin; this.config = config; this.manager = manager; - panelComponent.setOrientation(PanelComponent.Orientation.HORIZONTAL); + panelComponent.setOrientation(ComponentOrientation.HORIZONTAL); panelComponent.setWrapping(4); getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Teamcapes overlay")); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlantType.java b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlantType.java index 413838c144..04a48e6eb3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlantType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlantType.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.tithefarm; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.Getter; import net.runelite.api.ObjectID; @@ -60,19 +60,21 @@ public enum TitheFarmPlantType @Getter private final int[] objectIds; - private static final Map plantTypes = new HashMap<>(); + private static final Map plantTypes; static { - TitheFarmPlantType[] types = values(); + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); - for (TitheFarmPlantType type : types) + for (TitheFarmPlantType type : values()) { for (int spotId : type.getObjectIds()) { - plantTypes.put(spotId, type); + builder.put(spotId, type); } } + + plantTypes = builder.build(); } TitheFarmPlantType(String name, int baseId, int... objectIds) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersOverlay.java index e951c4fe19..af2be6cb8a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersOverlay.java @@ -19,6 +19,7 @@ import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; @@ -58,7 +59,7 @@ public class WhaleWatchersOverlay extends Overlay if (plugin.inCombat && config.showDamageCounter()) { - panelComponent.setOrientation(PanelComponent.Orientation.HORIZONTAL); + panelComponent.setOrientation(ComponentOrientation.HORIZONTAL); panelComponent.setWrapping(5); String opp = client.getLocalPlayer().getInteracting() != null ? client.getLocalPlayer().getInteracting().getName() : lastOpponent; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java index 80b4dc7b92..7b8a5c5f4e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.woodcutting; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.AllArgsConstructor; import lombok.Getter; @@ -67,14 +67,18 @@ enum Axe private final Integer animId; private final Integer itemId; - private static final Map AXE_ANIM_IDS = new HashMap<>(); + private static final Map AXE_ANIM_IDS; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (Axe axe : values()) { - AXE_ANIM_IDS.put(axe.animId, axe); + builder.put(axe.animId, axe); } + + AXE_ANIM_IDS = builder.build(); } static Axe findAxeByAnimId(int animId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java index 021ce9da9f..befc78df8c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java @@ -24,7 +24,7 @@ */ package net.runelite.client.plugins.woodcutting; -import java.util.HashMap; +import com.google.common.collect.ImmutableMap; import java.util.Map; import lombok.Getter; import static net.runelite.api.ObjectID.REDWOOD; @@ -42,17 +42,21 @@ enum Tree this.treeIds = treeIds; } - private static final Map TREES = new HashMap<>(); + private static final Map TREES; static { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + for (Tree tree : values()) { for (int treeId : tree.treeIds) { - TREES.put(treeId, tree); + builder.put(treeId, tree); } } + + TREES = builder.build(); } static Tree findTree(int objectId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java index 92c8a548c7..d6fff3c47b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java @@ -57,8 +57,6 @@ import net.runelite.client.util.StackFormatter; class XpInfoBox extends JPanel { - private static final String REMOVE_STATE = "Remove from canvas"; - private static final String ADD_STATE = "Add to canvas"; private static final DecimalFormat TWO_DECIMAL_FORMAT = new DecimalFormat("0.00"); // Templates @@ -69,6 +67,9 @@ class XpInfoBox extends JPanel private static final String HTML_LABEL_TEMPLATE = "%s%s"; + private static final String REMOVE_STATE = "Remove from canvas"; + private static final String ADD_STATE = "Add to canvas"; + // Instance members private final JPanel panel; @@ -91,9 +92,9 @@ class XpInfoBox extends JPanel private final JLabel expLeft = new JLabel(); private final JLabel actionsLeft = new JLabel(); private final JMenuItem pauseSkill = new JMenuItem("Pause"); + private final JMenuItem canvasItem = new JMenuItem(ADD_STATE); private final XpTrackerConfig xpTrackerConfig; - private final JMenuItem canvasItem = new JMenuItem(ADD_STATE); private boolean paused = false; @@ -244,7 +245,6 @@ class XpInfoBox extends JPanel } progressBar.setPositions(positions); - progressBar.setPositionWidth(xpTrackerConfig.levelMarkerWidth()); } else { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java index 0e16fd118b..32b9a44bfe 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.xptracker; +import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Point; @@ -31,9 +32,12 @@ import java.awt.Rectangle; import java.awt.image.BufferedImage; import lombok.AccessLevel; import lombok.Getter; +import net.runelite.api.Experience; import net.runelite.api.Skill; import net.runelite.client.ui.FontManager; +import net.runelite.client.ui.SkillColor; import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.ImageComponent; import net.runelite.client.ui.overlay.components.LineComponent; @@ -41,69 +45,128 @@ import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.ProgressBarComponent; import net.runelite.client.ui.overlay.components.SplitComponent; import net.runelite.client.util.StackFormatter; +import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; +import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; class XpInfoBoxOverlay extends Overlay { - private static final int PANEL_PREFERRED_WIDTH = 155; - private static final int BORDER_SIZE = 7; - private static final int GAP_SIZE = 5; + private static final int PANEL_PREFERRED_WIDTH = 150; + private static final int BORDER_SIZE = 2; + private static final int XP_AND_PROGRESS_BAR_GAP = 2; + private static final int XP_AND_ICON_GAP = 4; + private static final Rectangle XP_AND_ICON_COMPONENT_BORDER = new Rectangle(2, 1, 4, 0); private final PanelComponent panel = new PanelComponent(); + private final PanelComponent iconXpSplitPanel = new PanelComponent(); private final XpTrackerPlugin plugin; + private final XpTrackerConfig config; @Getter(AccessLevel.PACKAGE) private final Skill skill; private final BufferedImage icon; - XpInfoBoxOverlay(XpTrackerPlugin plugin, Skill skill, BufferedImage icon) + XpInfoBoxOverlay( + XpTrackerPlugin plugin, + XpTrackerConfig config, + Skill skill, + BufferedImage icon) { + super(plugin); this.plugin = plugin; + this.config = config; this.skill = skill; this.icon = icon; panel.setBorder(new Rectangle(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, BORDER_SIZE)); - panel.setGap(new Point(0, GAP_SIZE)); + panel.setGap(new Point(0, XP_AND_PROGRESS_BAR_GAP)); panel.setPreferredSize(new Dimension(PANEL_PREFERRED_WIDTH, 0)); + iconXpSplitPanel.setBorder(XP_AND_ICON_COMPONENT_BORDER); + iconXpSplitPanel.setBackgroundColor(null); + iconXpSplitPanel.setPreferredSize(new Dimension(PANEL_PREFERRED_WIDTH, 0)); + getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "XP Tracker overlay")); } @Override public Dimension render(Graphics2D graphics) { + panel.getChildren().clear(); + iconXpSplitPanel.getChildren().clear(); + //Setting the font to rs small font so that the overlay isn't huge graphics.setFont(FontManager.getRunescapeSmallFont()); final XpSnapshotSingle snapshot = plugin.getSkillSnapshot(skill); - panel.getChildren().clear(); - final LineComponent xpLeft = LineComponent.builder() - .left("Xp Gained:") - .right(StackFormatter.quantityToRSDecimalStack(snapshot.getXpGainedInSession())) + final String leftStr; + final int rightNum; + + switch (config.onScreenDisplayMode()) + { + case ACTIONS_DONE: + leftStr = snapshot.getActionType().getLabel() + " Done"; + rightNum = snapshot.getActionsInSession(); + break; + case ACTIONS_LEFT: + leftStr = snapshot.getActionType().getLabel() + " Left"; + rightNum = snapshot.getActionsRemainingToGoal(); + break; + case XP_LEFT: + leftStr = config.onScreenDisplayMode().toString(); + rightNum = snapshot.getXpRemainingToGoal(); + break; + case XP_GAINED: + default: + leftStr = config.onScreenDisplayMode().toString(); + rightNum = snapshot.getXpGainedInSession(); + break; + } + + final LineComponent xpLine = LineComponent.builder() + .left(leftStr + ":") + .right(StackFormatter.quantityToRSDecimalStack(rightNum, true)) .build(); final LineComponent xpHour = LineComponent.builder() - .left("Xp/Hour:") - .right(StackFormatter.quantityToRSDecimalStack(snapshot.getXpPerHour())) - .build(); + .left("XP/Hour:") + .right(StackFormatter.quantityToRSDecimalStack(snapshot.getXpPerHour(), true)) + .build(); final SplitComponent xpSplit = SplitComponent.builder() - .first(xpLeft) - .second(xpHour) - .orientation(ComponentOrientation.VERTICAL) - .build(); + .first(xpLine) + .second(xpHour) + .orientation(ComponentOrientation.VERTICAL) + .build(); final ImageComponent imageComponent = new ImageComponent(icon); - final SplitComponent iconSplit = SplitComponent.builder() - .first(imageComponent) - .second(xpSplit) - .orientation(ComponentOrientation.HORIZONTAL) - .gap(new Point(GAP_SIZE, 0)) - .build(); + final SplitComponent iconXpSplit = SplitComponent.builder() + .first(imageComponent) + .second(xpSplit) + .orientation(ComponentOrientation.HORIZONTAL) + .gap(new Point(XP_AND_ICON_GAP, 0)) + .build(); + + iconXpSplitPanel.getChildren().add(iconXpSplit); final ProgressBarComponent progressBarComponent = new ProgressBarComponent(); + + progressBarComponent.setBackgroundColor(new Color(61, 56, 49)); + progressBarComponent.setForegroundColor(SkillColor.find(skill).getColor()); + + progressBarComponent.setLeftLabel(String.valueOf(snapshot.getStartLevel())); + progressBarComponent.setRightLabel(snapshot.getEndGoalXp() == Experience.MAX_SKILL_XP + ? "200M" + : String.valueOf(snapshot.getEndLevel())); + progressBarComponent.setValue(snapshot.getSkillProgressToGoal()); - panel.getChildren().add(iconSplit); + panel.getChildren().add(iconXpSplitPanel); panel.getChildren().add(progressBarComponent); return panel.render(graphics); } + + @Override + public String getName() + { + return super.getName() + skill.getName(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java index c85b892e11..6bac32802a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java @@ -24,14 +24,31 @@ */ package net.runelite.client.plugins.xptracker; +import lombok.AllArgsConstructor; 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("xpTracker") public interface XpTrackerConfig extends Config { + @AllArgsConstructor + enum OnScreenDisplayMode + { + XP_GAINED("XP Gained"), + XP_LEFT("XP Left"), + ACTIONS_DONE("Actions Done"), + ACTIONS_LEFT("Actions Left"); + + private final String name; + + @Override + public String toString() + { + return name; + } + } + @ConfigItem( position = 0, keyName = "hideMaxed", @@ -65,23 +82,8 @@ public interface XpTrackerConfig extends Config return false; } - @Range( - min = 1, - max = 5 - ) @ConfigItem( position = 3, - keyName = "levelMarkerWidth", - name = "Level marker width", - description = "Alters the width of the intermediate level markers" - ) - default int levelMarkerWidth() - { - return 1; - } - - @ConfigItem( - position = 4, keyName = "pauseSkillAfter", name = "Auto pause after", description = "Configures how many minutes passes before pausing a skill while in game and there's no XP, 0 means disabled" @@ -90,4 +92,15 @@ public interface XpTrackerConfig extends Config { return 0; } + + @ConfigItem( + position = 4, + keyName = "onScreenDisplayMode", + name = "On-screen tracker display mode", + description = "Configures the information displayed in the first line of on-screen XP overlays" + ) + default OnScreenDisplayMode onScreenDisplayMode() + { + return OnScreenDisplayMode.XP_GAINED; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index e4c369b01e..7d3006ddc9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -59,11 +59,8 @@ import static net.runelite.client.plugins.xptracker.XpWorldType.NORMAL; import net.runelite.client.task.Schedule; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; -import net.runelite.client.util.ImageUtil; import net.runelite.client.ui.overlay.OverlayManager; -import net.runelite.http.api.worlds.World; -import net.runelite.http.api.worlds.WorldClient; -import net.runelite.http.api.worlds.WorldResult; +import net.runelite.client.util.ImageUtil; import net.runelite.http.api.xp.XpClient; @PluginDescriptor( @@ -87,9 +84,6 @@ public class XpTrackerPlugin extends Plugin Skill.HITPOINTS, Skill.MAGIC); - private final XpState xpState = new XpState(); - private final XpClient xpClient = new XpClient(); - @Inject private ClientToolbar clientToolbar; @@ -110,13 +104,14 @@ public class XpTrackerPlugin extends Plugin private NavigationButton navButton; private XpPanel xpPanel; - private WorldResult worlds; private XpWorldType lastWorldType; private String lastUsername; private long lastTickMillis = 0; private boolean fetchXp; private long lastXp = 0; + private final XpClient xpClient = new XpClient(); + private final XpState xpState = new XpState(); private final XpPauseState xpPauseState = new XpPauseState(); @Provides @@ -151,6 +146,7 @@ public class XpTrackerPlugin extends Plugin @Override protected void shutDown() throws Exception { + overlayManager.removeIf(e -> e instanceof XpInfoBoxOverlay); xpState.reset(); clientToolbar.removeNavigation(navButton); } @@ -225,7 +221,7 @@ public class XpTrackerPlugin extends Plugin void addOverlay(Skill skill) { removeOverlay(skill); - overlayManager.add(new XpInfoBoxOverlay(this, skill, skillIconManager.getSkillImage(skill))); + overlayManager.add(new XpInfoBoxOverlay(this, xpTrackerConfig, skill, skillIconManager.getSkillImage(skill))); } /** @@ -286,7 +282,6 @@ public class XpTrackerPlugin extends Plugin int currentXp = client.getSkillExperience(skill); xpState.resetSkill(skill, currentXp); xpPanel.resetSkill(skill); - xpPanel.updateTotal(xpState.getTotalSnapshot()); removeOverlay(skill); } @@ -302,12 +297,10 @@ public class XpTrackerPlugin extends Plugin if (skill != s && s != Skill.OVERALL) { resetSkillState(s); - removeOverlay(s); } } } - @Subscribe public void onExperienceChanged(ExperienceChanged event) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmPrayAgainstOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmPrayAgainstOverlay.java index 497bf03d78..7e8d6cf5eb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmPrayAgainstOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zcox/OlmPrayAgainstOverlay.java @@ -37,6 +37,7 @@ import net.runelite.api.SpriteID; import net.runelite.client.game.SpriteManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.InfoBoxComponent; import net.runelite.client.ui.overlay.components.PanelComponent; @@ -55,7 +56,7 @@ class OlmPrayAgainstOverlay extends Overlay this.client = client; this.spriteManager = spriteManager; setPosition(OverlayPosition.BOTTOM_RIGHT); - panelComponent.setOrientation(PanelComponent.Orientation.VERTICAL); + panelComponent.setOrientation(ComponentOrientation.VERTICAL); } public Dimension render(Graphics2D graphics2D) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ControlFunction.java b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ControlFunction.java new file mode 100644 index 0000000000..9b526eb543 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ControlFunction.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2018, Jacob M + * 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.zoom; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ControlFunction +{ + NONE("None"), + CONTROL_TO_ZOOM("Hold to zoom"), + CONTROL_TO_RESET("Reset zoom"); + + private String name; + + @Override + public String toString() + { + return getName(); + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java index 577ddf03ab..825378cd57 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java @@ -1,27 +1,3 @@ -/* - * Copyright (c) 2018 Abex - * 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 OWNER 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.zoom; import net.runelite.client.config.Config; @@ -72,14 +48,38 @@ public interface ZoomConfig extends Config return false; } + @ConfigItem( - keyName = "requireControlDown", - name = "Require control down", - description = "Configures if holding control is required for zooming", - position = 4 + keyName = "controlFunction", + name = "Control Function", + description = "Configures the zoom function when control is pressed", + position = 5 ) - default boolean requireControlDown() + default ControlFunction controlFunction() { - return false; + return ControlFunction.NONE; } -} + + @ConfigItem( + keyName = "ctrlZoomValue", + name = "Reset zoom position", + description = "Position of zoom when it is reset", + position = 6 + ) + default int ctrlZoomValue() + { + return 600; + } + + @ConfigItem( + keyName = "zoomIncrement", + name = "Zoom Speed", + description = "Speed of zoom", + position = 7 + ) + default int zoomIncrement() + { + return 25; + } + +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java index 6a46934de3..e799837e67 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java @@ -30,9 +30,11 @@ import com.google.inject.Inject; import com.google.inject.Provides; import java.awt.event.KeyEvent; import net.runelite.api.Client; +import net.runelite.api.ScriptID; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.ScriptCallbackEvent; +import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.input.KeyListener; @@ -56,10 +58,13 @@ public class ZoomPlugin extends Plugin implements KeyListener private static final int INNER_ZOOM_LIMIT = 1004; private boolean controlDown; - + @Inject private Client client; + @Inject + private ClientThread clientThread; + @Inject private ZoomConfig zoomConfig; @@ -85,7 +90,7 @@ public class ZoomPlugin extends Plugin implements KeyListener int[] intStack = client.getIntStack(); int intStackSize = client.getIntStackSize(); - if ("scrollWheelZoom".equals(event.getEventName()) && zoomConfig.requireControlDown() && !controlDown) + if ("scrollWheelZoom".equals(event.getEventName()) && zoomConfig.controlFunction() == ControlFunction.CONTROL_TO_ZOOM && !controlDown) { intStack[intStackSize - 1] = 1; } @@ -104,6 +109,11 @@ public class ZoomPlugin extends Plugin implements KeyListener return; } + if ("scrollWheelZoomIncrement".equals(event.getEventName()) && zoomConfig.zoomIncrement() != 25) + { + intStack[intStackSize - 1] = zoomConfig.zoomIncrement(); + } + if (zoomConfig.innerLimit()) { // This lets the options panel's slider have an exponential rate @@ -138,7 +148,7 @@ public class ZoomPlugin extends Plugin implements KeyListener controlDown = false; } } - + @Override protected void startUp() { @@ -180,6 +190,11 @@ public class ZoomPlugin extends Plugin implements KeyListener if (e.getKeyCode() == KeyEvent.VK_CONTROL) { controlDown = false; + if (zoomConfig.controlFunction() == ControlFunction.CONTROL_TO_RESET) + { + final int zoomValue = Ints.constrainToRange(zoomConfig.ctrlZoomValue(), zoomConfig.OUTER_LIMIT_MIN, INNER_ZOOM_LIMIT); + clientThread.invokeLater(() -> client.runScript(ScriptID.CAMERA_DO_ZOOM, zoomValue, zoomValue)); + } } } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ComponentOrientation.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ComponentOrientation.java index 6e60700781..e06875e970 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ComponentOrientation.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ComponentOrientation.java @@ -28,4 +28,4 @@ public enum ComponentOrientation { HORIZONTAL, VERTICAL -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/PanelComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/PanelComponent.java index 8fc7ce0faf..a792dbda14 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/PanelComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/PanelComponent.java @@ -37,12 +37,6 @@ import lombok.Setter; public class PanelComponent implements LayoutableRenderableEntity { - public enum Orientation - { - HORIZONTAL, - VERTICAL; - } - @Getter private final Rectangle bounds = new Rectangle(); @@ -60,7 +54,7 @@ public class PanelComponent implements LayoutableRenderableEntity private final List children = new ArrayList<>(); @Setter - private Orientation orientation = Orientation.VERTICAL; + private ComponentOrientation orientation = ComponentOrientation.VERTICAL; @Setter private int wrapping = -1; diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java index ae77f294e6..04e78fb0e4 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java @@ -47,10 +47,14 @@ public class ProgressBarComponent implements LayoutableRenderableEntity private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("0.0"); private static final DecimalFormat DECIMAL_FORMAT_ABS = new DecimalFormat("#0"); + private static final int SIDE_LABEL_OFFSET = 4; + private long minimum; private long maximum = 100; private double value; private LabelDisplayMode labelDisplayMode = LabelDisplayMode.PERCENTAGE; + private String leftLabel; + private String rightLabel; private Color foregroundColor = new Color(82, 161, 82); private Color backgroundColor = new Color(255, 255, 255, 127); private Color fontColor = Color.WHITE; @@ -104,6 +108,24 @@ public class ProgressBarComponent implements LayoutableRenderableEntity textComponent.setText(textToWrite); textComponent.render(graphics); + if (leftLabel != null) + { + final TextComponent leftTextComponent = new TextComponent(); + leftTextComponent.setPosition(new Point(barX + SIDE_LABEL_OFFSET, progressTextY)); + leftTextComponent.setColor(fontColor); + leftTextComponent.setText(leftLabel); + leftTextComponent.render(graphics); + } + + if (rightLabel != null) + { + final TextComponent leftTextComponent = new TextComponent(); + leftTextComponent.setPosition(new Point(barX + width - metrics.stringWidth(rightLabel) - SIDE_LABEL_OFFSET, progressTextY)); + leftTextComponent.setColor(fontColor); + leftTextComponent.setText(rightLabel); + leftTextComponent.render(graphics); + } + final Dimension dimension = new Dimension(width, height); bounds.setLocation(preferredLocation); bounds.setSize(dimension); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/SplitComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/SplitComponent.java index 9ad95cf46a..75ab98f137 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/SplitComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/SplitComponent.java @@ -24,47 +24,56 @@ */ package net.runelite.client.ui.overlay.components; -import java.awt.*; - +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Rectangle; import lombok.Builder; +import lombok.Getter; import lombok.Setter; -@Builder @Setter +@Builder public class SplitComponent implements LayoutableRenderableEntity { + private LayoutableRenderableEntity first; + private LayoutableRenderableEntity second; + @Builder.Default private Point preferredLocation = new Point(); + @Builder.Default private Dimension preferredSize = new Dimension(ComponentConstants.STANDARD_WIDTH, 0); + @Builder.Default private ComponentOrientation orientation = ComponentOrientation.VERTICAL; + @Builder.Default private Point gap = new Point(0, 0); - private LayoutableRenderableEntity first; - private LayoutableRenderableEntity second; + @Builder.Default + @Getter + private final Rectangle bounds = new Rectangle(); @Override public Dimension render(Graphics2D graphics) { - graphics.translate(preferredLocation.x, preferredLocation.y); + first.setPreferredLocation(preferredLocation); first.setPreferredSize(preferredSize); - first.setPreferredLocation(new Point(0, 0)); - final Dimension firstDimenson = first.render(graphics); + final Dimension firstDimension = first.render(graphics); int x = 0, y = 0; if (orientation == ComponentOrientation.VERTICAL) { - y = firstDimenson.height + gap.y; + y = firstDimension.height + gap.y; } else { - x = firstDimenson.width + gap.x; + x = firstDimension.width + gap.x; } - second.setPreferredLocation(new Point(x, y)); + second.setPreferredLocation(new Point(x + preferredLocation.x, y + preferredLocation.y)); // Make the second component fit to whatever size is left after the first component is rendered second.setPreferredSize(new Dimension(preferredSize.width - x, preferredSize.height - y)); @@ -76,21 +85,18 @@ public class SplitComponent implements LayoutableRenderableEntity if (orientation == ComponentOrientation.VERTICAL) { - totalWidth = Math.max(firstDimenson.width, secondDimension.width); + totalWidth = Math.max(firstDimension.width, secondDimension.width); totalHeight = y + secondDimension.height; } else { - totalHeight = Math.max(firstDimenson.height, secondDimension.height); + totalHeight = Math.max(firstDimension.height, secondDimension.height); totalWidth = x + secondDimension.width; } - graphics.translate(-preferredLocation.x, -preferredLocation.y); - return new Dimension(totalWidth, totalHeight); + final Dimension dimension = new Dimension(totalWidth, totalHeight); + bounds.setLocation(preferredLocation); + bounds.setSize(dimension); + return dimension; } - - @Override - public Rectangle getBounds() { - return null; - } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java index 58f20aae63..08412783f1 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java @@ -38,6 +38,7 @@ import net.runelite.api.Client; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.InfoBoxComponent; import net.runelite.client.ui.overlay.components.LayoutableRenderableEntity; import net.runelite.client.ui.overlay.components.PanelComponent; @@ -84,8 +85,8 @@ public class InfoBoxOverlay extends Overlay panelComponent.getChildren().clear(); panelComponent.setWrapping(config.infoBoxWrap()); panelComponent.setOrientation(config.infoBoxVertical() - ? PanelComponent.Orientation.VERTICAL - : PanelComponent.Orientation.HORIZONTAL); + ? ComponentOrientation.VERTICAL + : ComponentOrientation.HORIZONTAL); panelComponent.setPreferredSize(new Dimension(config.infoBoxSize(), config.infoBoxSize())); for (InfoBox box : infoBoxes) diff --git a/runelite-client/src/main/scripts/ScrollWheelZoomHandler.rs2asm b/runelite-client/src/main/scripts/ScrollWheelZoomHandler.rs2asm index 665eb44242..c9a0d99f8d 100644 --- a/runelite-client/src/main/scripts/ScrollWheelZoomHandler.rs2asm +++ b/runelite-client/src/main/scripts/ScrollWheelZoomHandler.rs2asm @@ -6,13 +6,15 @@ iconst 1 iconst 0 sconst "scrollWheelZoom" - runelite_callback + runelite_callback if_icmpeq LABEL18 iconst 0 iload 0 iconst 25 - multiply - sub + sconst "scrollWheelZoomIncrement" + runelite_callback + multiply + sub istore 1 iconst 512 istore 2 @@ -28,21 +30,21 @@ LABEL14: if_icmpne LABEL18 jump LABEL19 LABEL18: - return + return LABEL19: - viewport_getfov + viewport_getfov istore 2 istore 3 iload 3 iload 1 - add + add istore 3 iload 2 iload 1 - add + add istore 2 iload 3 iload 2 invoke 42 LABEL33: - return + return