Add tooltip and custom icon to World Map fairy ring destinations
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Morgan Lewis <https://github.com/MESLewis>
|
||||
* 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 java.awt.image.BufferedImage;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.coords.WorldPoint;
|
||||
|
||||
@Getter
|
||||
enum FairyRingLocation
|
||||
{
|
||||
AIR("AIR", new WorldPoint(2699, 3249, 0)),
|
||||
AIQ("AIQ", new WorldPoint(2995, 3112, 0)),
|
||||
AJR("AJR", new WorldPoint(2779, 3615, 0)),
|
||||
AJS("AJS", new WorldPoint(2499, 3898, 0)),
|
||||
AKQ("AKQ", new WorldPoint(2318, 3617, 0)),
|
||||
AKS("AKS", new WorldPoint(2570, 2958, 0)),
|
||||
ALP("ALP", new WorldPoint(2502, 3638, 0)),
|
||||
ALQ("ALQ", new WorldPoint(3598, 3496, 0)),
|
||||
ALS("ALS", new WorldPoint(2643, 3497, 0)),
|
||||
BIP("BIP", new WorldPoint(3409, 3326, 0)),
|
||||
BIQ("BIQ", new WorldPoint(3248, 3095, 0)),
|
||||
BIS("BIS", new WorldPoint(2635, 3268, 0)),
|
||||
BJQ("BJQ", new WorldPoint(1737, 5342, 0)),
|
||||
BJS("BJS", new WorldPoint(2147, 3069, 0)),
|
||||
BKP("BKP", new WorldPoint(2384, 3037, 0)),
|
||||
BKR("BKR", new WorldPoint(3468, 3433, 0)),
|
||||
BLP("BLP", new WorldPoint(2432, 5127, 0)),
|
||||
BLR("BLR", new WorldPoint(2739, 3353, 0)),
|
||||
CIP("CIP", new WorldPoint(2512, 3886, 0)),
|
||||
CIQ("CIQ", new WorldPoint(2527, 3129, 0)),
|
||||
CJR("CJR", new WorldPoint(2704, 3578, 0)),
|
||||
CKR("CKR", new WorldPoint(2800, 3005, 0)),
|
||||
CKS("CKS", new WorldPoint(3446, 3472, 0)),
|
||||
CLP("CLP", new WorldPoint(3081, 3208, 0)),
|
||||
CLS("CLS", new WorldPoint(2681, 3083, 0)),
|
||||
DIP("DIP", new WorldPoint(3039, 4757, 0)),
|
||||
DIS("DIS", new WorldPoint(3109, 3149, 0)),
|
||||
DJP("DJP", new WorldPoint(2657, 3232, 0)),
|
||||
DJR("DJR", new WorldPoint(1452, 3659, 0)),
|
||||
DKP("DKP", new WorldPoint(2899, 3113, 0)),
|
||||
DKR("DKR", new WorldPoint(3126, 3496, 0)),
|
||||
DKS("DKS", new WorldPoint(2743, 3721, 0)),
|
||||
DLQ("DLQ", new WorldPoint(3422, 3018, 0)),
|
||||
DLR("DLR", new WorldPoint(2212, 3101, 0)),
|
||||
CIS("CIS", new WorldPoint(1638, 3868, 0)),
|
||||
CLR("CLR", new WorldPoint(2737, 2739, 0)),
|
||||
ZANARIS("Zanaris", new WorldPoint(2411, 4436, 0));
|
||||
|
||||
private final String code;
|
||||
private final WorldPoint location;
|
||||
private final FairyRingPoint fairyRingPoint;
|
||||
|
||||
FairyRingLocation(String code, WorldPoint location)
|
||||
{
|
||||
this.code = code;
|
||||
this.location = location;
|
||||
this.fairyRingPoint = new FairyRingPoint(code, location);
|
||||
}
|
||||
|
||||
static void setIcon(BufferedImage image)
|
||||
{
|
||||
for (FairyRingLocation fairyRingLocation : values())
|
||||
{
|
||||
fairyRingLocation.fairyRingPoint.setImage(image);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Morgan Lewis <https://github.com/MESLewis>
|
||||
* 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 static net.runelite.client.plugins.worldmap.WorldMapPlugin.BLANK_ICON;
|
||||
import net.runelite.client.ui.overlay.worldmap.WorldMapPoint;
|
||||
|
||||
class FairyRingPoint extends WorldMapPoint
|
||||
{
|
||||
FairyRingPoint(String tooltip, WorldPoint worldPoint)
|
||||
{
|
||||
super(worldPoint, BLANK_ICON);
|
||||
setTooltip("Fairy Ring - " + tooltip);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Morgan Lewis <https://github.com/MESLewis>
|
||||
* 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.client.config.Config;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
import net.runelite.client.config.ConfigItem;
|
||||
|
||||
@ConfigGroup(
|
||||
keyName = WorldMapPlugin.CONFIG_KEY,
|
||||
name = "World Map",
|
||||
description = "Various World Map enhancements"
|
||||
)
|
||||
public interface WorldMapConfig extends Config
|
||||
{
|
||||
@ConfigItem(
|
||||
keyName = WorldMapPlugin.CONFIG_KEY_FAIRY_RING_TOOLTIPS,
|
||||
name = "Show fairy ring codes in tooltip",
|
||||
description = "Display the code for fairy rings in the icon tooltip",
|
||||
position = 1
|
||||
)
|
||||
default boolean fairyRingTooltips()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = WorldMapPlugin.CONFIG_KEY_FAIRY_RING_ICON,
|
||||
name = "Show fairy ring travel icon",
|
||||
description = "Override the travel icon for fairy rings",
|
||||
position = 2
|
||||
)
|
||||
default boolean fairyRingIcon()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Morgan Lewis <https://github.com/MESLewis>
|
||||
* 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 com.google.common.eventbus.Subscribe;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provides;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import javax.imageio.ImageIO;
|
||||
import net.runelite.api.events.ConfigChanged;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "World Map"
|
||||
)
|
||||
public class WorldMapPlugin extends Plugin
|
||||
{
|
||||
static final BufferedImage BLANK_ICON;
|
||||
static final BufferedImage FAIRY_TRAVEL_ICON;
|
||||
|
||||
static final String CONFIG_KEY = "worldmap";
|
||||
static final String CONFIG_KEY_FAIRY_RING_TOOLTIPS = "fairyRingTooltips";
|
||||
static final String CONFIG_KEY_FAIRY_RING_ICON = "fairyRingIcon";
|
||||
|
||||
static
|
||||
{
|
||||
//A size of 17 gives us a buffer when triggering tooltips
|
||||
final int iconBufferSize = 17;
|
||||
|
||||
BLANK_ICON = new BufferedImage(iconBufferSize, iconBufferSize, BufferedImage.TYPE_INT_ARGB);
|
||||
|
||||
try
|
||||
{
|
||||
synchronized (ImageIO.class)
|
||||
{
|
||||
FAIRY_TRAVEL_ICON = new BufferedImage(iconBufferSize, iconBufferSize, BufferedImage.TYPE_INT_ARGB);
|
||||
final BufferedImage icon = ImageIO.read(WorldMapPlugin.class.getResourceAsStream("fairy_ring_travel.png"));
|
||||
FAIRY_TRAVEL_ICON.getGraphics().drawImage(icon, 1, 1, null);
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
private WorldMapConfig config;
|
||||
|
||||
@Inject
|
||||
private WorldMapPointManager worldMapPointManager;
|
||||
|
||||
@Provides
|
||||
WorldMapConfig provideConfig(ConfigManager configManager)
|
||||
{
|
||||
return configManager.getConfig(WorldMapConfig.class);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onConfigChanged(ConfigChanged event)
|
||||
{
|
||||
if (event.getGroup().equals(CONFIG_KEY))
|
||||
{
|
||||
switch (event.getKey())
|
||||
{
|
||||
case CONFIG_KEY_FAIRY_RING_TOOLTIPS:
|
||||
if (config.fairyRingTooltips())
|
||||
{
|
||||
Arrays.stream(FairyRingLocation.values())
|
||||
.map(FairyRingLocation::getFairyRingPoint)
|
||||
.forEach(worldMapPointManager::add);
|
||||
}
|
||||
else
|
||||
{
|
||||
worldMapPointManager.removeIf(FairyRingPoint.class::isInstance);
|
||||
}
|
||||
break;
|
||||
case CONFIG_KEY_FAIRY_RING_ICON:
|
||||
FairyRingLocation.setIcon(config.fairyRingIcon() ? FAIRY_TRAVEL_ICON : BLANK_ICON);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void startUp() throws Exception
|
||||
{
|
||||
FairyRingLocation.setIcon(config.fairyRingIcon() ? FAIRY_TRAVEL_ICON : BLANK_ICON);
|
||||
|
||||
if (config.fairyRingTooltips())
|
||||
{
|
||||
Arrays.stream(FairyRingLocation.values())
|
||||
.map(FairyRingLocation::getFairyRingPoint)
|
||||
.forEach(worldMapPointManager::add);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void shutDown() throws Exception
|
||||
{
|
||||
worldMapPointManager.removeIf(FairyRingPoint.class::isInstance);
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
Reference in New Issue
Block a user