From 02f8abda9aa598521f7dc5b38ad48688c82148af Mon Sep 17 00:00:00 2001 From: Spedwards Date: Wed, 16 Jan 2019 16:44:42 +1100 Subject: [PATCH] Add Rare Tree locations --- .../plugins/worldmap/RareTreeLocation.java | 218 ++++++++++++++++++ .../plugins/worldmap/RareTreePoint.java | 44 ++++ .../plugins/worldmap/WorldMapConfig.java | 22 ++ .../plugins/worldmap/WorldMapPlugin.java | 34 +++ 4 files changed, 318 insertions(+) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreePoint.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java new file mode 100644 index 0000000000..3c1c352324 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2018, Spedwards + * 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.worldmap; + +import lombok.Getter; +import net.runelite.api.coords.WorldPoint; + +@Getter +enum RareTreeLocation +{ + WILLOW("Willow tree", 30, + // Kandarin + new WorldPoint(2710, 3510, 0)), + + TEAK("Teak tree", 35, + // Ape Atoll + new WorldPoint(2774, 2697, 0), + new WorldPoint(2716, 2710, 0), + + // Desert + new WorldPoint(3510, 3073, 0), + + // Mos Le'Harmless + new WorldPoint(3832, 3067, 0), + + // Karamja + new WorldPoint(2837, 2907, 0), + new WorldPoint(2899, 2897, 0), + + // Feldip Hills + new WorldPoint(2333, 3049, 0)), + + SWAYING("Swaying tree", 40, + // The Fremennik Trials + new WorldPoint(2738, 3639, 0)), + + MATURE_JUNIPER("Mature juniper tree", 42, + // Zeah + new WorldPoint(1690, 3524, 0)), + + MAPLE("Maple tree", 45, + // Zeah + new WorldPoint(1231, 3704, 0), + new WorldPoint(1293, 3756, 0), + new WorldPoint(1640, 3496, 0), + new WorldPoint(1613, 3494, 0), + + // Miscellania + new WorldPoint(2550, 3869, 0), + + // Kandarin + new WorldPoint(2712, 3382, 0), + new WorldPoint(2720, 3465, 0), + new WorldPoint(2726, 3501, 0), + new WorldPoint(2728, 3481, 0), + new WorldPoint(2748, 3466, 0), + new WorldPoint(2710, 3570, 0)), + + MAHOGANY("Mahogany tree", 50, + // Zeah + new WorldPoint(1237, 3770, 0), + + // Ape Atoll + new WorldPoint(2725, 2735, 0), + + // Mos Le'Harmless + new WorldPoint(3824, 3053, 0), + + // Karamja + new WorldPoint(2946, 2908, 0)), + + TEAK_MAHOGANY("Teak/Mahogany trees", 50, + // Miscellania + new WorldPoint(2602, 3895, 0), + + // Mos Le'Harmless + new WorldPoint(3810, 3058, 0)), + + YEW("Yew tree", 60, + // Zeah + new WorldPoint(1217, 3688, 0), + new WorldPoint(1353, 3731, 0), + new WorldPoint(1529, 3452, 0), + new WorldPoint(1591, 3421, 0), + new WorldPoint(1647, 3510, 0), + new WorldPoint(1632, 3509, 0), + new WorldPoint(1623, 3512, 0), + new WorldPoint(1593, 3491, 0), + new WorldPoint(1583, 3499, 0), + new WorldPoint(1696, 3554, 0), + new WorldPoint(1625, 3677, 0), + new WorldPoint(1625, 3669, 0), + new WorldPoint(1642, 3683, 0), + new WorldPoint(1642, 3663, 0), + + // Isfadar + new WorldPoint(2217, 3141, 0), + + // Kandarin + new WorldPoint(2315, 3610, 0), + new WorldPoint(2331, 3514, 0), + new WorldPoint(2358, 3510, 0), + new WorldPoint(2360, 3471, 0), + new WorldPoint(2434, 3432, 0), + new WorldPoint(2493, 3396, 0), + new WorldPoint(2494, 3490, 0), + new WorldPoint(2733, 3334, 0), + new WorldPoint(2757, 3431, 0), + new WorldPoint(2714, 3460, 0), + + // Asgarnia + new WorldPoint(2995, 3312, 0), + new WorldPoint(3018, 3316, 0), + new WorldPoint(3041, 3320, 0), + new WorldPoint(3052, 3272, 0), + + // Misthalin + new WorldPoint(3085, 3481, 0), + new WorldPoint(3085, 3469, 0), + new WorldPoint(3146, 3255, 0), + new WorldPoint(3151, 3231, 0), + new WorldPoint(3165, 3220, 0), + new WorldPoint(3184, 3227, 0), + new WorldPoint(3251, 3364, 0), + new WorldPoint(3204, 3504, 0), + new WorldPoint(3208, 3500, 0), + new WorldPoint(3221, 3503, 0), + new WorldPoint(3248, 3473, 0), + new WorldPoint(3266, 3494, 0), + new WorldPoint(3270, 3471, 0), + new WorldPoint(3304, 3470, 0), + + // Morytania + new WorldPoint(3674, 3447, 0), + new WorldPoint(3684, 3385, 0), + + // Zanaris + new WorldPoint(2412, 4464, 0), + new WorldPoint(2465, 4427, 0), + new WorldPoint(2491, 4426, 0)), + + MAPLE_YEW("Maple/Yew trees", 60, + // Feldip Hills + new WorldPoint(2476, 2893, 0)), + + SULLIUSCEP("Sulliuscep", 65, + // Fossil Island + new WorldPoint(3662, 3802, 0), + new WorldPoint(3662, 3781, 0), + new WorldPoint(3677, 3806, 0), + new WorldPoint(3677, 3733, 0), + new WorldPoint(3682, 3775, 0), + new WorldPoint(3682, 3758, 0)), + + MAGIC("Magic tree", 75, + // Zeah + new WorldPoint(1373, 3821, 0), + new WorldPoint(1389, 3821, 0), + new WorldPoint(1610, 3443, 0), + new WorldPoint(1578, 3488, 0), + new WorldPoint(1772, 3530, 0), + new WorldPoint(1685, 3740, 0), + + // Isfadar + new WorldPoint(2284, 3141, 0), + + // Kandarin + new WorldPoint(2371, 3427, 0), + new WorldPoint(2432, 3411, 0), + new WorldPoint(2490, 3414, 0), + new WorldPoint(2704, 3397, 0), + new WorldPoint(2695, 3423, 0), + + // Feldip Hills + new WorldPoint(2443, 2845, 0), + + // Wilderness + new WorldPoint(3175, 3931, 0)), + + REDWOOD("Redwood tree", 90, + // Zeah + new WorldPoint(1569, 3493, 0), + new WorldPoint(1569, 3483, 0)); + + private final String tooltip; + private final WorldPoint[] locations; + private final int levelReq; + + RareTreeLocation(String description, int level, WorldPoint... locations) + { + this.tooltip = description + " - Level " + level; + this.locations = locations; + this.levelReq = level; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreePoint.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreePoint.java new file mode 100644 index 0000000000..0dd42013bd --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreePoint.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2018, Spedwards + * 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.worldmap; + +import net.runelite.api.coords.WorldPoint; +import net.runelite.client.ui.overlay.worldmap.WorldMapPoint; + +import java.awt.image.BufferedImage; + +class RareTreePoint extends WorldMapPoint +{ + RareTreePoint(WorldPoint point, String tooltip, BufferedImage icon, boolean showTooltip) + { + super(point, icon); + + if (showTooltip) + { + setTooltip(tooltip); + } + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java index def0a43c9b..b2747aeb5c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java @@ -185,4 +185,26 @@ public interface WorldMapConfig extends Config { return true; } + + @ConfigItem( + keyName = WorldMapPlugin.CONFIG_KEY_RARE_TREE_TOOLTIPS, + name = "Show rare tree type", + description = "Display the type of rare tree in the icon tooltip", + position = 15 + ) + default boolean rareTreeTooltips() + { + return true; + } + + @ConfigItem( + keyName = WorldMapPlugin.CONFIG_KEY_RARE_TREE_LEVEL_ICON, + name = "Indicate unavailable trees", + description = "Indicate rare trees you do not have the level to cut on the icon", + position = 16 + ) + default boolean rareTreeLevelIcon() + { + return true; + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java index a342a7f582..fea186927b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java @@ -67,6 +67,8 @@ public class WorldMapPlugin extends Plugin static final String CONFIG_KEY_QUEST_START_TOOLTIPS = "questStartTooltips"; static final String CONFIG_KEY_MINIGAME_TOOLTIP = "minigameTooltip"; static final String CONFIG_KEY_FARMING_PATCH_TOOLTIPS = "farmingpatchTooltips"; + static final String CONFIG_KEY_RARE_TREE_TOOLTIPS = "rareTreeTooltips"; + static final String CONFIG_KEY_RARE_TREE_LEVEL_ICON = "rareTreeIcon"; static { @@ -94,6 +96,7 @@ public class WorldMapPlugin extends Plugin private WorldMapPointManager worldMapPointManager; private int agilityLevel = 0; + private int woodcuttingLevel = 0; @Provides WorldMapConfig provideConfig(ConfigManager configManager) @@ -105,6 +108,7 @@ public class WorldMapPlugin extends Plugin protected void startUp() throws Exception { agilityLevel = client.getRealSkillLevel(Skill.AGILITY); + woodcuttingLevel = client.getRealSkillLevel(Skill.WOODCUTTING); updateShownIcons(); } @@ -117,7 +121,9 @@ public class WorldMapPlugin extends Plugin worldMapPointManager.removeIf(TeleportPoint.class::isInstance); worldMapPointManager.removeIf(MinigamePoint.class::isInstance); worldMapPointManager.removeIf(FarmingPatchPoint.class::isInstance); + worldMapPointManager.removeIf(RareTreePoint.class::isInstance); agilityLevel = 0; + woodcuttingLevel = 0; } @Subscribe @@ -143,6 +149,16 @@ public class WorldMapPlugin extends Plugin updateAgilityIcons(); } } + + if (event.getSkill() == Skill.WOODCUTTING) + { + int newWoodcutLevel = Experience.getLevelForXp(client.getSkillExperience(Skill.WOODCUTTING)); + if (newWoodcutLevel != woodcuttingLevel) + { + woodcuttingLevel = newWoodcutLevel; + updateRareTreeIcons(); + } + } } private void updateAgilityIcons() @@ -159,9 +175,27 @@ public class WorldMapPlugin extends Plugin } } + private void updateRareTreeIcons() + { + worldMapPointManager.removeIf(RareTreePoint.class::isInstance); + + if (config.rareTreeLevelIcon() || config.rareTreeTooltips()) + { + Arrays.stream(RareTreeLocation.values()).forEach(rareTree -> + Arrays.stream(rareTree.getLocations()) + .map(point -> new RareTreePoint(point, + rareTree.getTooltip(), + woodcuttingLevel > 0 && config.rareTreeLevelIcon() && + rareTree.getLevelReq() > woodcuttingLevel ? NOPE_ICON : BLANK_ICON, + config.rareTreeTooltips())) + .forEach(worldMapPointManager::add)); + } + } + private void updateShownIcons() { updateAgilityIcons(); + updateRareTreeIcons(); worldMapPointManager.removeIf(FairyRingPoint.class::isInstance); if (config.fairyRingIcon() || config.fairyRingTooltips())