Merge pull request #497 from Sethtroll/addpohplugin

Add Poh plugin
This commit is contained in:
Adam
2018-02-05 16:18:28 -05:00
committed by GitHub
24 changed files with 782 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
/*
* Copyright (c) 2018, Seth <Sethtroll3@gmail.com>
* 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.poh;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.GameObject;
import net.runelite.api.Perspective;
import net.runelite.api.Point;
import static net.runelite.client.plugins.poh.PohPlugin.BURNER_LIT;
import static net.runelite.client.plugins.poh.PohPlugin.BURNER_UNLIT;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.TextComponent;
public class BurnerOverlay extends Overlay
{
private final Client client;
private final PohConfig config;
private final PohPlugin plugin;
private final TextComponent textComponent = new TextComponent();
@Inject
public BurnerOverlay(Client client, PohConfig config, PohPlugin plugin)
{
setPosition(OverlayPosition.DYNAMIC);
setLayer(OverlayLayer.ABOVE_SCENE);
this.client = client;
this.config = config;
this.plugin = plugin;
}
@Override
public Dimension render(Graphics2D graphics, java.awt.Point parent)
{
if (!config.enabled() || !config.showBurner())
{
return null;
}
for (GameObject object : plugin.getPohObjects())
{
if (BURNER_UNLIT.contains(object.getId()))
{
drawBurner(graphics, "Unlit", object, Color.RED, parent);
}
else if (BURNER_LIT.contains(object.getId()))
{
drawBurner(graphics, "Lit", object, Color.GREEN, parent);
}
}
return null;
}
private void drawBurner(Graphics2D graphics, String text, GameObject gameObject, Color color, java.awt.Point parent)
{
Point canvasText = Perspective.getCanvasTextLocation(client, graphics, gameObject.getLocalLocation(), text, 200);
if (canvasText == null)
{
return;
}
textComponent.setText(text);
textComponent.setPosition(new java.awt.Point(canvasText.getX(), canvasText.getY()));
textComponent.setColor(color);
textComponent.render(graphics, parent);
//render tile
OverlayUtil.renderPolygon(graphics, gameObject.getCanvasTilePoly(), color);
}
}

View File

@@ -0,0 +1,247 @@
/*
* Copyright (c) 2018, Seth <Sethtroll3@gmail.com>
* 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.poh;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
@ConfigGroup(
keyName = "poh",
name = "Poh",
description = "Configuration for the POH plugin"
)
public interface PohConfig extends Config
{
@ConfigItem(
keyName = "enabled",
name = "Enabled",
description = "Configures whether or not the POH plugin is displayed"
)
default boolean enabled()
{
return true;
}
@ConfigItem(
keyName = "showVarrock",
name = "Show Varrock portal",
description = "Configures whether or not the Varrock portal is displayed"
)
default boolean showVarrock()
{
return true;
}
@ConfigItem(
keyName = "showFalador",
name = "Show Falador portal",
description = "Configures whether or not the Camelot portal is displayed"
)
default boolean showFalador()
{
return true;
}
@ConfigItem(
keyName = "showLumbridge",
name = "Show Lumbridge portal",
description = "Configures whether or not the Lumbridge portal is displayed"
)
default boolean showLumbridge()
{
return true;
}
@ConfigItem(
keyName = "showCamelot",
name = "Show Camelot portal",
description = "Configures whether or not the Camelot portal is displayed"
)
default boolean showCamelot()
{
return true;
}
@ConfigItem(
keyName = "showArdougne",
name = "Show Ardougne portal",
description = "Configures whether or not the Ardougne portal is displayed"
)
default boolean showArdougne()
{
return true;
}
@ConfigItem(
keyName = "showYanille",
name = "Show Yanille portal",
description = "Configures whether or not the Yanille portal is displayed"
)
default boolean showYanille()
{
return true;
}
@ConfigItem(
keyName = "showLunarIsle",
name = "Show Lunar isle portal",
description = "Configures whether or not the Lunar isle portal is displayed"
)
default boolean showLunarIsle()
{
return true;
}
@ConfigItem(
keyName = "showWaterBirth",
name = "Show Waterbirth portal",
description = "Configures whether or not the Waterbirth portal is displayed"
)
default boolean showWaterBirth()
{
return true;
}
@ConfigItem(
keyName = "showFishingGuild",
name = "Show Fishing guild portal",
description = "Configures whether or not the Fishing guild portal is displayed"
)
default boolean showFishingGuild()
{
return true;
}
@ConfigItem(
keyName = "showSenntisten",
name = "Show Senntisten portal",
description = "Configures whether or not the Senntisten portal is displayed"
)
default boolean showSenntisten()
{
return true;
}
@ConfigItem(
keyName = "showKharyll",
name = "Show Kharyll portal",
description = "Configures whether or not the Kharyll portal is displayed"
)
default boolean showKharyll()
{
return true;
}
@ConfigItem(
keyName = "showAnnakarl",
name = "Show Annakarl portal",
description = "Configures whether or not the Annakarl portal is displayed"
)
default boolean showAnnakarl()
{
return true;
}
@ConfigItem(
keyName = "showKourend",
name = "Show Kourend portal",
description = "Configures whether or not the Kourend portal is displayed"
)
default boolean showKourend()
{
return true;
}
@ConfigItem(
keyName = "showMarim",
name = "Show Marim portal",
description = "Configures whether or not the Marim portal is displayed"
)
default boolean showMarim()
{
return true;
}
@ConfigItem(
keyName = "showAltar",
name = "Show Altar",
description = "Configures whether or not the altar is displayed"
)
default boolean showAltar()
{
return true;
}
@ConfigItem(
keyName = "showGlory",
name = "Show Glory mount",
description = "Configures whether or not the mounted glory is displayed"
)
default boolean showGlory()
{
return true;
}
@ConfigItem(
keyName = "showPools",
name = "Show Pools",
description = "Configures whether or not the pools are displayed"
)
default boolean showPools()
{
return true;
}
@ConfigItem(
keyName = "showRepairStand",
name = "Show Repair stand",
description = "Configures whether or not the repair stand is displayed"
)
default boolean showRepairStand()
{
return true;
}
@ConfigItem(
keyName = "showExitPortal",
name = "Show Exit portal",
description = "Configures whether or not the exit portal is displayed"
)
default boolean showExitPortal()
{
return true;
}
@ConfigItem(
keyName = "showBurner",
name = "Show Unlit/Lit burner",
description = "Configures whether or not unlit/lit burners are displayed"
)
default boolean showBurner()
{
return true;
}
}

View File

@@ -0,0 +1,116 @@
/*
* Copyright (c) 2018, Seth <Sethtroll3@gmail.com>
* 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.poh;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import static net.runelite.api.ObjectID.*;
@Slf4j
public enum PohIcons
{
EXITPORTAL("exitportal", PORTAL_4525),
VARROCK("varrock", VARROCK_PORTAL, VARROCK_PORTAL_13622, VARROCK_PORTAL_13629),
FALADOR("falador", FALADOR_PORTAL, FALADOR_PORTAL_13624, FALADOR_PORTAL_13631),
LUMBRIDGE("lumbridge", LUMBRIDGE_PORTAL, LUMBRIDGE_PORTAL_13623, LUMBRIDGE_PORTAL_13630),
ARDOUGNE("ardougne", ARDOUGNE_PORTAL, ARDOUGNE_PORTAL_13626, ARDOUGNE_PORTAL_13633),
YANILLE("yanille", YANILLE_PORTAL, YANILLE_PORTAL_13627, YANILLE_PORTAL_13634),
CAMELOT("camelot", CAMELOT_PORTAL, CAMELOT_PORTAL_13625, CAMELOT_PORTAL_13632),
LUNARISLE("lunarisle", LUNAR_ISLE_PORTAL, LUNAR_ISLE_PORTAL_29347, LUNAR_ISLE_PORTAL_29355),
WATERBIRTH("waterbirth", WATERBIRTH_ISLAND_PORTAL, WATERBIRTH_ISLAND_PORTAL_29350, WATERBIRTH_ISLAND_PORTAL_29358),
FISHINGGUILD("fishingguild", FISHING_GUILD_PORTAL, FISHING_GUILD_PORTAL_29351, FISHING_GUILD_PORTAL_29359),
SENNTISTEN("senntisten", SENNTISTEN_PORTAL, SENNTISTEN_PORTAL_29348, SENNTISTEN_PORTAL_29356),
KHARYLL("kharyll", KHARYRLL_PORTAL, KHARYRLL_PORTAL_29346, KHARYRLL_PORTAL_29354),
ANNAKARL("annakarl", ANNAKARL_PORTAL, ANNAKARL_PORTAL_29349, ANNAKARL_PORTAL_29357),
KOUREND("kourend", KOUREND_PORTAL, KOUREND_PORTAL_29353, KOUREND_PORTAL_29361),
MARIM("marim", MARIM_PORTAL, MARIM_PORTAL_29352, MARIM_PORTAL_29360),
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
),
POOLS("pool", POOL_OF_RESTORATION, POOL_OF_REVITALISATION, POOL_OF_REJUVENATION, FANCY_REJUVENATION_POOL, ORNATE_REJUVENATION_POOL),
GLORY("glory", AMULET_OF_GLORY),
REPAIR("repair", ARMOUR_REPAIR_STAND);
private static final Map<Integer, PohIcons> minimapIcons = new HashMap<>();
@Getter
private final String imageResource;
@Getter
private final int[] Ids;
private BufferedImage image;
static
{
PohIcons[] icons = values();
for (PohIcons icon : icons)
{
for (Integer spotId : icon.getIds())
{
minimapIcons.put(spotId, icon);
}
}
}
PohIcons(String imageResource, int... ids)
{
this.imageResource = imageResource;
this.Ids = ids;
}
public static PohIcons getIcon(int id)
{
return minimapIcons.get(id);
}
public BufferedImage getImage()
{
if (image != null)
{
return image;
}
InputStream in = PohIcons.class.getResourceAsStream(getImageResource() + ".png");
try
{
image = ImageIO.read(in);
}
catch (IOException ex)
{
log.warn("unable to load image", ex);
}
return image;
}
}

View File

@@ -0,0 +1,193 @@
/*
* Copyright (c) 2018, Seth <Sethtroll3@gmail.com>
* 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.poh;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import lombok.Getter;
import net.runelite.api.Client;
import net.runelite.api.GameObject;
import net.runelite.api.Perspective;
import net.runelite.api.Point;
import static net.runelite.client.plugins.poh.PohIcons.ALTAR;
import static net.runelite.client.plugins.poh.PohIcons.ANNAKARL;
import static net.runelite.client.plugins.poh.PohIcons.ARDOUGNE;
import static net.runelite.client.plugins.poh.PohIcons.CAMELOT;
import static net.runelite.client.plugins.poh.PohIcons.EXITPORTAL;
import static net.runelite.client.plugins.poh.PohIcons.FALADOR;
import static net.runelite.client.plugins.poh.PohIcons.FISHINGGUILD;
import static net.runelite.client.plugins.poh.PohIcons.GLORY;
import static net.runelite.client.plugins.poh.PohIcons.KHARYLL;
import static net.runelite.client.plugins.poh.PohIcons.KOUREND;
import static net.runelite.client.plugins.poh.PohIcons.LUMBRIDGE;
import static net.runelite.client.plugins.poh.PohIcons.LUNARISLE;
import static net.runelite.client.plugins.poh.PohIcons.MARIM;
import static net.runelite.client.plugins.poh.PohIcons.POOLS;
import static net.runelite.client.plugins.poh.PohIcons.REPAIR;
import static net.runelite.client.plugins.poh.PohIcons.SENNTISTEN;
import static net.runelite.client.plugins.poh.PohIcons.VARROCK;
import static net.runelite.client.plugins.poh.PohIcons.WATERBIRTH;
import static net.runelite.client.plugins.poh.PohIcons.YANILLE;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition;
public class PohOverlay extends Overlay
{
private static final int MAX_DISTANCE = 2350;
@Getter
private final List<PohIcons> iconList = new ArrayList<>();
private final Client client;
private final PohConfig config;
private final PohPlugin plugin;
@Inject
public PohOverlay(Client client, PohConfig config, PohPlugin plugin)
{
setPosition(OverlayPosition.DYNAMIC);
setLayer(OverlayLayer.ABOVE_WIDGETS);
this.client = client;
this.config = config;
this.plugin = plugin;
}
@Override
public Dimension render(Graphics2D graphics, java.awt.Point parent)
{
if (!config.enabled())
{
return null;
}
Point localLocation = client.getLocalPlayer().getLocalLocation();
for (GameObject object : plugin.getPohObjects())
{
Point location = object.getLocalLocation();
if (localLocation.distanceTo(location) <= MAX_DISTANCE)
{
PohIcons icon = PohIcons.getIcon(object.getId());
if (icon != null && iconList.contains(icon))
{
net.runelite.api.Point minimapLoc = Perspective.getMiniMapImageLocation(client, object.getLocalLocation(), icon.getImage());
if (minimapLoc != null)
{
graphics.drawImage(icon.getImage(), minimapLoc.getX(), minimapLoc.getY(), null);
}
}
}
}
return null;
}
public void updateConfig()
{
iconList.clear();
if (config.showLumbridge())
{
iconList.add(LUMBRIDGE);
}
if (config.showFalador())
{
iconList.add(FALADOR);
}
if (config.showVarrock())
{
iconList.add(VARROCK);
}
if (config.showCamelot())
{
iconList.add(CAMELOT);
}
if (config.showArdougne())
{
iconList.add(ARDOUGNE);
}
if (config.showYanille())
{
iconList.add(YANILLE);
}
if (config.showLunarIsle())
{
iconList.add(LUNARISLE);
}
if (config.showWaterBirth())
{
iconList.add(WATERBIRTH);
}
if (config.showFishingGuild())
{
iconList.add(FISHINGGUILD);
}
if (config.showSenntisten())
{
iconList.add(SENNTISTEN);
}
if (config.showKharyll())
{
iconList.add(KHARYLL);
}
if (config.showAnnakarl())
{
iconList.add(ANNAKARL);
}
if (config.showKourend())
{
iconList.add(KOUREND);
}
if (config.showMarim())
{
iconList.add(MARIM);
}
if (config.showAltar())
{
iconList.add(ALTAR);
}
if (config.showGlory())
{
iconList.add(GLORY);
}
if (config.showRepairStand())
{
iconList.add(REPAIR);
}
if (config.showPools())
{
iconList.add(POOLS);
}
if (config.showExitPortal())
{
iconList.add(EXITPORTAL);
}
}
}

View File

@@ -0,0 +1,127 @@
/*
* Copyright (c) 2018, Seth <Sethtroll3@gmail.com>
* 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.poh;
import com.google.common.collect.Sets;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Binder;
import com.google.inject.Provides;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import lombok.AccessLevel;
import lombok.Getter;
import net.runelite.api.GameObject;
import net.runelite.api.GameState;
import static net.runelite.api.ObjectID.INCENSE_BURNER;
import static net.runelite.api.ObjectID.INCENSE_BURNER_13209;
import static net.runelite.api.ObjectID.INCENSE_BURNER_13210;
import static net.runelite.api.ObjectID.INCENSE_BURNER_13211;
import static net.runelite.api.ObjectID.INCENSE_BURNER_13212;
import static net.runelite.api.ObjectID.INCENSE_BURNER_13213;
import net.runelite.api.events.ConfigChanged;
import net.runelite.api.events.GameObjectDespawned;
import net.runelite.api.events.GameObjectSpawned;
import net.runelite.api.events.GameStateChanged;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.Overlay;
@PluginDescriptor(
name = "Poh plugin"
)
public class PohPlugin extends Plugin
{
static final Set<Integer> BURNER_UNLIT = Sets.newHashSet(INCENSE_BURNER, INCENSE_BURNER_13210, INCENSE_BURNER_13212);
static final Set<Integer> BURNER_LIT = Sets.newHashSet(INCENSE_BURNER_13209, INCENSE_BURNER_13211, INCENSE_BURNER_13213);
@Getter(AccessLevel.PACKAGE)
private final Set<GameObject> pohObjects = new HashSet<>();
@Inject
private PohOverlay overlay;
@Inject
private BurnerOverlay burnerOverlay;
@Override
public void configure(Binder binder)
{
binder.bind(PohOverlay.class);
}
@Provides
PohConfig getConfig(ConfigManager configManager)
{
return configManager.getConfig(PohConfig.class);
}
@Override
public Collection<Overlay> getOverlays()
{
return Arrays.asList(overlay, burnerOverlay);
}
@Override
protected void startUp() throws Exception
{
overlay.updateConfig();
}
@Subscribe
public void updateConfig(ConfigChanged event)
{
overlay.updateConfig();
}
@Subscribe
public void onGameObjectSpawned(GameObjectSpawned event)
{
GameObject gameObject = event.getGameObject();
if (BURNER_LIT.contains(gameObject.getId()) || BURNER_UNLIT.contains(gameObject.getId()) || PohIcons.getIcon(gameObject.getId()) != null)
{
pohObjects.add(gameObject);
}
}
@Subscribe
public void onGameObjectDespawned(GameObjectDespawned event)
{
GameObject gameObject = event.getGameObject();
pohObjects.remove(gameObject);
}
@Subscribe
public void onGameStateChanged(GameStateChanged event)
{
if (event.getGameState() == GameState.LOADING)
{
pohObjects.clear();
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB