diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index b6b20c68a5..3abc42f6bf 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -78,6 +78,11 @@ 133.2-SNAPSHOT runtime + + net.runelite + http-api + ${project.version} + junit diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 72a084c471..9023c178a1 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -67,7 +67,6 @@ public class RuneLite public void start() throws Exception { gui = new ClientUI(); - gui.setVisible(true); pluginManager = new PluginManager(this); pluginManager.loadAll(); @@ -95,6 +94,11 @@ public class RuneLite return runelite; } + public ClientUI getGui() + { + return gui; + } + public PluginManager getPluginManager() { return pluginManager; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index c3e8cd981b..819c195240 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -31,6 +31,7 @@ import java.util.List; import net.runelite.client.RuneLite; import net.runelite.client.plugins.boosts.Boosts; import net.runelite.client.plugins.fpsinfo.FPS; +import net.runelite.client.plugins.hiscore.Hiscore; import net.runelite.client.plugins.opponentinfo.OpponentInfo; public class PluginManager @@ -48,6 +49,7 @@ public class PluginManager load(new Boosts()); load(new OpponentInfo()); load(new FPS()); + load(new Hiscore()); } private void load(Plugin plugin) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/Hiscore.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/Hiscore.java new file mode 100644 index 0000000000..a789131e78 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/Hiscore.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2017, Adam + * 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.hiscore; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import net.runelite.client.RuneLite; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.ui.ClientUI; +import net.runelite.client.ui.overlay.Overlay; + +public class Hiscore extends Plugin implements ActionListener +{ + private final HiscorePanel hiscorePanel = new HiscorePanel(); + private final ClientUI ui = RuneLite.getRunelite().getGui(); + + public Hiscore() + { + ui.getNavigationPanel().getHiscores().addActionListener(this); + } + + @Override + public Overlay getOverlay() + { + return null; + } + + @Override + public void actionPerformed(ActionEvent e) + { + ui.setPluginPanel(hiscorePanel); + ui.expand(); + } + +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java new file mode 100644 index 0000000000..0119d2d807 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2017, Adam + * 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.hiscore; + +import com.google.common.base.Strings; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URISyntaxException; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import net.runelite.api.Skill; +import net.runelite.client.ui.PluginPanel; +import net.runelite.http.api.hiscore.HiscoreClient; +import net.runelite.http.api.hiscore.HiscoreResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class HiscorePanel extends PluginPanel +{ + private static final Logger logger = LoggerFactory.getLogger(HiscorePanel.class); + + private JTextField input; + private JButton lookupButton; + + private final JLabel attackLabel = new JLabel("--"); + private final JLabel defenceLabel = new JLabel("--"); + private final JLabel strengthLabel = new JLabel("--"); + private final JLabel hitpointsLabel = new JLabel("--"); + private final JLabel rangedLabel = new JLabel("--"); + private final JLabel prayerLabel = new JLabel("--"); + private final JLabel magicLabel = new JLabel("--"); + private final JLabel cookingLabel = new JLabel("--"); + private final JLabel woodcuttingLabel = new JLabel("--"); + private final JLabel fletchingLabel = new JLabel("--"); + private final JLabel fishingLabel = new JLabel("--"); + private final JLabel firemakingLabel = new JLabel("--"); + private final JLabel craftingLabel = new JLabel("--"); + private final JLabel smithingLabel = new JLabel("--"); + private final JLabel miningLabel = new JLabel("--"); + private final JLabel herbloreLabel = new JLabel("--"); + private final JLabel agilityLabel = new JLabel("--"); + private final JLabel thievingLabel = new JLabel("--"); + private final JLabel slayerLabel = new JLabel("--"); + private final JLabel farmingLabel = new JLabel("--"); + private final JLabel runecraftLabel = new JLabel("--"); + private final JLabel hunterLabel = new JLabel("--"); + private final JLabel constructionLabel = new JLabel("--"); + + private GridLayout stats; + + private final HiscoreClient client = new HiscoreClient(); + + public HiscorePanel() + { + setMinimumSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); + setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); + setSize(PANEL_WIDTH, PANEL_HEIGHT); + setVisible(true); + + input = new JTextField(); + input.setColumns(16); + add(input); + + lookupButton = new JButton("Lookup"); + add(lookupButton); + + lookupButton.addActionListener((ActionEvent e) -> + { + lookup(); + }); + + JPanel statsPanel = new JPanel(); + stats = new GridLayout(8, 3); + statsPanel.setLayout(stats); + + try + { + statsPanel.add(makeSkillPanel(Skill.ATTACK, attackLabel)); + statsPanel.add(makeSkillPanel(Skill.DEFENCE, defenceLabel)); + statsPanel.add(makeSkillPanel(Skill.STRENGTH, strengthLabel)); + statsPanel.add(makeSkillPanel(Skill.HITPOINTS, hitpointsLabel)); + statsPanel.add(makeSkillPanel(Skill.RANGED, rangedLabel)); + statsPanel.add(makeSkillPanel(Skill.PRAYER, prayerLabel)); + statsPanel.add(makeSkillPanel(Skill.MAGIC, magicLabel)); + statsPanel.add(makeSkillPanel(Skill.COOKING, cookingLabel)); + statsPanel.add(makeSkillPanel(Skill.WOODCUTTING, woodcuttingLabel)); + statsPanel.add(makeSkillPanel(Skill.FLETCHING, fletchingLabel)); + statsPanel.add(makeSkillPanel(Skill.FISHING, fishingLabel)); + statsPanel.add(makeSkillPanel(Skill.FIREMAKING, firemakingLabel)); + statsPanel.add(makeSkillPanel(Skill.CRAFTING, craftingLabel)); + statsPanel.add(makeSkillPanel(Skill.SMITHING, smithingLabel)); + statsPanel.add(makeSkillPanel(Skill.MINING, miningLabel)); + statsPanel.add(makeSkillPanel(Skill.HERBLORE, herbloreLabel)); + statsPanel.add(makeSkillPanel(Skill.AGILITY, agilityLabel)); + statsPanel.add(makeSkillPanel(Skill.THIEVING, thievingLabel)); + statsPanel.add(makeSkillPanel(Skill.SLAYER, slayerLabel)); + statsPanel.add(makeSkillPanel(Skill.FARMING, farmingLabel)); + statsPanel.add(makeSkillPanel(Skill.RUNECRAFT, runecraftLabel)); + statsPanel.add(makeSkillPanel(Skill.HUNTER, hunterLabel)); + statsPanel.add(makeSkillPanel(Skill.CONSTRUCTION, constructionLabel)); + } + catch (IOException ex) + { + logger.warn(null, ex); + } + + add(statsPanel); + } + + private JPanel makeSkillPanel(Skill skill, JLabel levelLabel) throws IOException + { + JPanel iconLevel = new JPanel(); + + String skillIcon = "/skill_icons/" + skill.getName().toLowerCase() + ".png"; + logger.debug("Loading skill icon from {}", skillIcon); + + JLabel icon = new JLabel(new ImageIcon(ImageIO.read(HiscorePanel.class.getResourceAsStream(skillIcon)))); + iconLevel.add(icon); + + iconLevel.add(levelLabel); + + return iconLevel; + } + + private void lookup() + { + String lookup = input.getText(); + + if (Strings.isNullOrEmpty(lookup)) + { + return; + } + + HiscoreResult result; + try + { + result = client.lookup(lookup); + } + catch (IOException | URISyntaxException ex) + { + logger.warn(null, ex); + return; + } + + setLabel(attackLabel, result.getAttack()); + setLabel(defenceLabel, result.getDefence()); + setLabel(strengthLabel, result.getStrength()); + setLabel(hitpointsLabel, result.getHitpoints()); + setLabel(rangedLabel, result.getRanged()); + setLabel(prayerLabel, result.getPrayer()); + setLabel(magicLabel, result.getMagic()); + setLabel(cookingLabel, result.getCooking()); + setLabel(woodcuttingLabel, result.getWoodcutting()); + setLabel(fletchingLabel, result.getFletching()); + setLabel(fishingLabel, result.getFishing()); + setLabel(firemakingLabel, result.getFiremaking()); + setLabel(craftingLabel, result.getCrafting()); + setLabel(smithingLabel, result.getSmithing()); + setLabel(miningLabel, result.getMining()); + setLabel(herbloreLabel, result.getHerblore()); + setLabel(agilityLabel, result.getAgility()); + setLabel(thievingLabel, result.getThieving()); + setLabel(slayerLabel, result.getSlayer()); + setLabel(farmingLabel, result.getFarming()); + setLabel(runecraftLabel, result.getRunecraft()); + setLabel(hunterLabel, result.getHunter()); + setLabel(constructionLabel, result.getConstruction()); + } + + private void setLabel(JLabel label, net.runelite.http.api.hiscore.Skill skill) + { + label.setText("" + skill.getLevel()); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 60340b2f50..46b5ea69e9 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -22,23 +22,25 @@ * (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.ui; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; +import java.awt.FlowLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JOptionPane; +import javax.swing.JPanel; import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public final class ClientUI extends JFrame { + private JPanel container; private ClientPanel panel; + private NavigationPanel navigationPanel; + private PluginPanel pluginPanel; + private boolean expanded; public ClientUI() throws Exception { @@ -46,10 +48,10 @@ public final class ClientUI extends JFrame pack(); setTitle("RuneLite"); setLocationRelativeTo(getOwner()); - setMinimumSize(getSize()); setResizable(true); + setVisible(true); } - + private void init() throws Exception { setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); @@ -62,7 +64,7 @@ public final class ClientUI extends JFrame checkExit(); } }); - + JPopupMenu.setDefaultLightWeightPopupEnabled(false); try { @@ -72,17 +74,60 @@ public final class ClientUI extends JFrame { } + container = new JPanel(); + container.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); + panel = new ClientPanel(); - add(panel); + container.add(panel); + + navigationPanel = new NavigationPanel(); + container.add(navigationPanel); + + add(container); + } + + public void expand() + { + if (!expanded) + { + container.add(pluginPanel, null, 1); + + container.revalidate(); + + this.setSize(this.getWidth() + PluginPanel.PANEL_WIDTH, this.getHeight()); + expanded = true; + } + else + { + container.remove(1); + container.revalidate(); + this.setSize(this.getWidth() - PluginPanel.PANEL_WIDTH, this.getHeight()); + expanded = false; + } } private void checkExit() { int result = JOptionPane.showConfirmDialog(this, "Are you sure you want to exit?", "Exit", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); - + if (result == JOptionPane.OK_OPTION) { System.exit(0); } } + + public NavigationPanel getNavigationPanel() + { + return navigationPanel; + } + + public PluginPanel getPluginPanel() + { + return pluginPanel; + } + + public void setPluginPanel(PluginPanel pluginPanel) + { + this.pluginPanel = pluginPanel; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/NavigationPanel.java b/runelite-client/src/main/java/net/runelite/client/ui/NavigationPanel.java new file mode 100644 index 0000000000..5d5c4b1537 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/ui/NavigationPanel.java @@ -0,0 +1,42 @@ +package net.runelite.client.ui; + +import java.awt.Dimension; +import java.io.IOException; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JPanel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class NavigationPanel extends JPanel +{ + private static final Logger logger = LoggerFactory.getLogger(NavigationPanel.class); + + private static final int PANEL_WIDTH = 20, PANEL_HEIGHT = 503; + + private final JButton hiscores = new JButton(); + + public NavigationPanel() + { + setSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); + setMinimumSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); + setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); + + try + { + hiscores.setIcon(new ImageIcon(ImageIO.read(getClass().getResourceAsStream("/net/runelite/client/plugins/hiscore/hiscore.gif")))); + } + catch (IOException ex) + { + logger.warn(null, ex); + } + + add(hiscores); + } + + public JButton getHiscores() + { + return hiscores; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/ui/PluginPanel.java b/runelite-client/src/main/java/net/runelite/client/ui/PluginPanel.java new file mode 100644 index 0000000000..1ba57ea8e3 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/ui/PluginPanel.java @@ -0,0 +1,8 @@ +package net.runelite.client.ui; + +import javax.swing.JPanel; + +public class PluginPanel extends JPanel +{ + public static final int PANEL_WIDTH = 225, PANEL_HEIGHT = 503; +} diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index ed6a24284e..906c13ec4c 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -41,6 +41,11 @@ public class OverlayRenderer { Overlay overlay = plugin.getOverlay(); + if (overlay == null) + { + continue; + } + switch (overlay.getPosition()) { case TOP_RIGHT: diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/hiscore.gif b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/hiscore.gif new file mode 100644 index 0000000000..8f9b2eae4f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/hiscore.gif differ diff --git a/runelite-client/src/main/resources/skill_icons/agility.png b/runelite-client/src/main/resources/skill_icons/agility.png new file mode 100644 index 0000000000..af91577866 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/agility.png differ diff --git a/runelite-client/src/main/resources/skill_icons/attack.png b/runelite-client/src/main/resources/skill_icons/attack.png new file mode 100644 index 0000000000..b9bd5c96cf Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/attack.png differ diff --git a/runelite-client/src/main/resources/skill_icons/construction.png b/runelite-client/src/main/resources/skill_icons/construction.png new file mode 100644 index 0000000000..6635404aaf Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/construction.png differ diff --git a/runelite-client/src/main/resources/skill_icons/cooking.png b/runelite-client/src/main/resources/skill_icons/cooking.png new file mode 100644 index 0000000000..368b7a66a9 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/cooking.png differ diff --git a/runelite-client/src/main/resources/skill_icons/crafting.png b/runelite-client/src/main/resources/skill_icons/crafting.png new file mode 100644 index 0000000000..ed75cace63 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/crafting.png differ diff --git a/runelite-client/src/main/resources/skill_icons/defence.png b/runelite-client/src/main/resources/skill_icons/defence.png new file mode 100644 index 0000000000..2a0735f56f Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/defence.png differ diff --git a/runelite-client/src/main/resources/skill_icons/farming.png b/runelite-client/src/main/resources/skill_icons/farming.png new file mode 100644 index 0000000000..219372b9fa Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/farming.png differ diff --git a/runelite-client/src/main/resources/skill_icons/firemaking.png b/runelite-client/src/main/resources/skill_icons/firemaking.png new file mode 100644 index 0000000000..7b2db656a6 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/firemaking.png differ diff --git a/runelite-client/src/main/resources/skill_icons/fishing.png b/runelite-client/src/main/resources/skill_icons/fishing.png new file mode 100644 index 0000000000..bf356507aa Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/fishing.png differ diff --git a/runelite-client/src/main/resources/skill_icons/fletching.png b/runelite-client/src/main/resources/skill_icons/fletching.png new file mode 100644 index 0000000000..034120bcfb Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/fletching.png differ diff --git a/runelite-client/src/main/resources/skill_icons/herblore.png b/runelite-client/src/main/resources/skill_icons/herblore.png new file mode 100644 index 0000000000..41c31dbec7 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/herblore.png differ diff --git a/runelite-client/src/main/resources/skill_icons/hitpoints.png b/runelite-client/src/main/resources/skill_icons/hitpoints.png new file mode 100644 index 0000000000..25c05b0327 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/hitpoints.png differ diff --git a/runelite-client/src/main/resources/skill_icons/hunter.png b/runelite-client/src/main/resources/skill_icons/hunter.png new file mode 100644 index 0000000000..bfe3b256e3 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/hunter.png differ diff --git a/runelite-client/src/main/resources/skill_icons/magic.png b/runelite-client/src/main/resources/skill_icons/magic.png new file mode 100644 index 0000000000..63379d9255 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/magic.png differ diff --git a/runelite-client/src/main/resources/skill_icons/mining.png b/runelite-client/src/main/resources/skill_icons/mining.png new file mode 100644 index 0000000000..5ebe806f50 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/mining.png differ diff --git a/runelite-client/src/main/resources/skill_icons/overall.png b/runelite-client/src/main/resources/skill_icons/overall.png new file mode 100644 index 0000000000..4b2dd265a4 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/overall.png differ diff --git a/runelite-client/src/main/resources/skill_icons/prayer.png b/runelite-client/src/main/resources/skill_icons/prayer.png new file mode 100644 index 0000000000..85c4618100 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/prayer.png differ diff --git a/runelite-client/src/main/resources/skill_icons/ranged.png b/runelite-client/src/main/resources/skill_icons/ranged.png new file mode 100644 index 0000000000..574daf70c0 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/ranged.png differ diff --git a/runelite-client/src/main/resources/skill_icons/runecraft.png b/runelite-client/src/main/resources/skill_icons/runecraft.png new file mode 100644 index 0000000000..b045826c3d Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/runecraft.png differ diff --git a/runelite-client/src/main/resources/skill_icons/slayer.png b/runelite-client/src/main/resources/skill_icons/slayer.png new file mode 100644 index 0000000000..3fa168137b Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/slayer.png differ diff --git a/runelite-client/src/main/resources/skill_icons/smithing.png b/runelite-client/src/main/resources/skill_icons/smithing.png new file mode 100644 index 0000000000..ce71117d24 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/smithing.png differ diff --git a/runelite-client/src/main/resources/skill_icons/strength.png b/runelite-client/src/main/resources/skill_icons/strength.png new file mode 100644 index 0000000000..7ad17d6899 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/strength.png differ diff --git a/runelite-client/src/main/resources/skill_icons/thieving.png b/runelite-client/src/main/resources/skill_icons/thieving.png new file mode 100644 index 0000000000..4de62f08d9 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/thieving.png differ diff --git a/runelite-client/src/main/resources/skill_icons/woodcutting.png b/runelite-client/src/main/resources/skill_icons/woodcutting.png new file mode 100644 index 0000000000..f54eb31e36 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons/woodcutting.png differ