From 48aff0c7bbbe83c4f3b74786bba60998e1898fdf Mon Sep 17 00:00:00 2001 From: raqes Date: Sun, 3 Jun 2018 21:20:43 +0200 Subject: [PATCH 1/2] Rename Prayer Flicking plugin to Prayer --- .../plugins/{prayflick => prayer}/PrayerFlickOverlay.java | 2 +- .../PrayerFlickPlugin.java => prayer/PrayerPlugin.java} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename runelite-client/src/main/java/net/runelite/client/plugins/{prayflick => prayer}/PrayerFlickOverlay.java (98%) rename runelite-client/src/main/java/net/runelite/client/plugins/{prayflick/PrayerFlickPlugin.java => prayer/PrayerPlugin.java} (95%) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayflick/PrayerFlickOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerFlickOverlay.java similarity index 98% rename from runelite-client/src/main/java/net/runelite/client/plugins/prayflick/PrayerFlickOverlay.java rename to runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerFlickOverlay.java index 0039daa786..b434f596ec 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayflick/PrayerFlickOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerFlickOverlay.java @@ -22,7 +22,7 @@ * (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.prayflick; +package net.runelite.client.plugins.prayer; import java.awt.Color; import java.awt.Dimension; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayflick/PrayerFlickPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java similarity index 95% rename from runelite-client/src/main/java/net/runelite/client/plugins/prayflick/PrayerFlickPlugin.java rename to runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java index abbdc2d965..6300ffe5ab 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayflick/PrayerFlickPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java @@ -22,7 +22,7 @@ * (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.prayflick; +package net.runelite.client.plugins.prayer; import com.google.common.eventbus.Subscribe; import javax.inject.Inject; @@ -34,7 +34,7 @@ import net.runelite.client.ui.overlay.Overlay; @PluginDescriptor( name = "Prayer Flicking" ) -public class PrayerFlickPlugin extends Plugin +public class PrayerPlugin extends Plugin { @Inject private PrayerFlickOverlay overlay; From b1f5d18d65a233cec76d8eb5acabd11446da282a Mon Sep 17 00:00:00 2001 From: raqes Date: Sun, 3 Jun 2018 22:06:45 +0200 Subject: [PATCH 2/2] Add prayer indicators to prayer plugin --- .../client/plugins/prayer/PrayerConfig.java | 70 ++++++++++++ .../client/plugins/prayer/PrayerCounter.java | 64 +++++++++++ .../client/plugins/prayer/PrayerPlugin.java | 102 +++++++++++++++++- .../client/plugins/prayer/PrayerType.java | 71 ++++++++++++ 4 files changed, 304 insertions(+), 3 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerConfig.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerCounter.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerType.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerConfig.java new file mode 100644 index 0000000000..553c5060ed --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerConfig.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2018, Raqes + * 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.prayer; + +import net.runelite.client.config.Config; +import net.runelite.client.config.ConfigGroup; +import net.runelite.client.config.ConfigItem; + +@ConfigGroup( + keyName = "prayer", + name = "Prayer", + description = "Various tools related to prayer" +) +public interface PrayerConfig extends Config +{ + @ConfigItem( + position = 0, + keyName = "prayerflick", + name = "Prayer flick helper", + description = "Enable the prayer flick helper" + ) + default boolean prayerFlickHelper() + { + return true; + } + + @ConfigItem( + position = 1, + keyName = "prayerIndicator", + name = "Boost Indicator", + description = "Enable infoboxes for prayers" + ) + default boolean prayerIndicator() + { + return false; + } + + @ConfigItem( + position = 2, + keyName = "prayerIndicatorOverheads", + name = "Overhead Indicator", + description = "Also enable infoboxes for overheads" + ) + default boolean prayerIndicatorOverheads() + { + return false; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerCounter.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerCounter.java new file mode 100644 index 0000000000..07a2bdea97 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerCounter.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2018, Raqes + * 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.prayer; + +import java.awt.image.BufferedImage; +import lombok.Getter; +import lombok.Setter; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.ui.overlay.infobox.Counter; + +public class PrayerCounter extends Counter +{ + @Getter + private final PrayerType prayerType; + + @Setter + private BufferedImage image; + + PrayerCounter(Plugin plugin, PrayerType prayerType) + { + super(null, plugin, ""); + this.prayerType = prayerType; + } + + @Override + public String toString() + { + return "Counter{" + "prayer=" + prayerType.getName() + '}'; + } + + @Override + public String getTooltip() + { + return prayerType.getDescription(); + } + + @Override + public BufferedImage getImage() + { + return image; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java index 6300ffe5ab..dbc90fe7ef 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2017, Adam + * Copyright (c) 2018, Raqes * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -25,20 +26,53 @@ package net.runelite.client.plugins.prayer; import com.google.common.eventbus.Subscribe; +import com.google.inject.Provides; import javax.inject.Inject; +import net.runelite.api.Client; +import net.runelite.api.Prayer; +import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.GameTick; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( - name = "Prayer Flicking" + name = "Prayer" ) public class PrayerPlugin extends Plugin { + private final PrayerCounter[] prayerCounter = new PrayerCounter[PrayerType.values().length]; + + @Inject + private Client client; + + @Inject + private InfoBoxManager infoBoxManager; + + @Inject + private SpriteManager spriteManager; + @Inject private PrayerFlickOverlay overlay; + @Inject + private PrayerConfig config; + + @Provides + PrayerConfig provideConfig(ConfigManager configManager) + { + return configManager.getConfig(PrayerConfig.class); + } + + @Override + protected void shutDown() + { + removeIndicators(); + } + @Override public Overlay getOverlay() { @@ -46,8 +80,70 @@ public class PrayerPlugin extends Plugin } @Subscribe - public void onTick(GameTick tick) + private void onConfigChanged(ConfigChanged event) { - overlay.onTick(); + if (event.getGroup().equals("prayer")) + { + if (!config.prayerIndicator()) + { + removeIndicators(); + } + else if (!config.prayerIndicatorOverheads()) + { + removeOverheadsIndicators(); + } + } + } + + @Subscribe + public void onGameTick(GameTick tick) + { + if (config.prayerFlickHelper()) + { + overlay.onTick(); + } + + if (!config.prayerIndicator()) + { + return; + } + + for (PrayerType prayerType : PrayerType.values()) + { + Prayer prayer = prayerType.getPrayer(); + int ord = prayerType.ordinal(); + + if (client.isPrayerActive(prayer)) + { + if (prayerType.isOverhead() && !config.prayerIndicatorOverheads()) + { + continue; + } + + if (prayerCounter[ord] == null) + { + PrayerCounter counter = prayerCounter[ord] = new PrayerCounter(this, prayerType); + spriteManager.getSpriteAsync(prayerType.getSpriteID(), 0, + counter::setImage); + infoBoxManager.addInfoBox(counter); + } + } + else if (prayerCounter[ord] != null) + { + infoBoxManager.removeInfoBox(prayerCounter[ord]); + prayerCounter[ord] = null; + } + } + } + + private void removeIndicators() + { + infoBoxManager.removeIf(entry -> entry instanceof PrayerCounter); + } + + private void removeOverheadsIndicators() + { + infoBoxManager.removeIf(entry -> entry instanceof PrayerCounter + && ((PrayerCounter) entry).getPrayerType().isOverhead()); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerType.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerType.java new file mode 100644 index 0000000000..6ef41a7676 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerType.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2018, Raqes + * 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.prayer; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.runelite.api.Prayer; +import net.runelite.api.SpriteID; + +@AllArgsConstructor +@Getter +enum PrayerType +{ + THICK_SKIN("Thick Skin", Prayer.THICK_SKIN, "+5% Defence", SpriteID.PRAYER_THICK_SKIN, false), + BURST_OF_STRENGTH("Burst of Strength", Prayer.BURST_OF_STRENGTH, "+5% Strenth", SpriteID.PRAYER_BURST_OF_STRENGTH, false), + CLARITY_OF_THOUGHT("Clarity of Thought", Prayer.CLARITY_OF_THOUGHT, "+5% Attack", SpriteID.PRAYER_CLARITY_OF_THOUGHT, false), + SHARP_EYE("Sharp Eye", Prayer.SHARP_EYE, "+5% Ranged", SpriteID.PRAYER_SHARP_EYE, false), + MYSTIC_WILL("Mystic Will", Prayer.MYSTIC_WILL, "+5% Magical attack and defence", SpriteID.PRAYER_MYSTIC_WILL, false), + ROCK_SKIN("Rock Skin", Prayer.ROCK_SKIN, "+10% Defence", SpriteID.PRAYER_ROCK_SKIN, false), + SUPERHUMAN_STRENGTH("Superhuman Strength", Prayer.SUPERHUMAN_STRENGTH, "+10% Strength", SpriteID.PRAYER_SUPERHUMAN_STRENGTH, false), + IMPROVED_REFLEXES("Improved Reflexes", Prayer.IMPROVED_REFLEXES, "+10% Attack", SpriteID.PRAYER_IMPROVED_REFLEXES, false), + RAPID_RESTORE("Rapid Restore", Prayer.RAPID_RESTORE, "2 x Restore rate for all skills except Hitpoints and Prayer", SpriteID.PRAYER_RAPID_RESTORE, false), + RAPID_HEAL("Rapid Heal", Prayer.RAPID_HEAL, "2 x Restore rate for Hitpoints", SpriteID.PRAYER_RAPID_HEAL, false), + PROTECT_ITEM("Protect Item", Prayer.PROTECT_ITEM, "Player keeps 1 extra item when they die", SpriteID.PRAYER_PROTECT_ITEM, false), + HAWK_EYE("Hawk Eye", Prayer.HAWK_EYE, "+10% Ranged", SpriteID.PRAYER_HAWK_EYE, false), + MYSTIC_LORE("Mystic Lore", Prayer.MYSTIC_LORE, "+10% Magical attack and defence", SpriteID.PRAYER_MYSTIC_LORE, false), + STEEL_SKIN("Steel Skin", Prayer.STEEL_SKIN, "+15% Defence", SpriteID.PRAYER_STEEL_SKIN, false), + ULTIMATE_STRENGTH("Ultimate Strength", Prayer.ULTIMATE_STRENGTH, "+15% Strength", SpriteID.PRAYER_ULTIMATE_STRENGTH, false), + INCREDIBLE_REFLEXES("Incredible reflexes", Prayer.INCREDIBLE_REFLEXES, "+15% Attack", SpriteID.PRAYER_INCREDIBLE_REFLEXES, false), + PROTECT_FROM_MAGIC("protect from magic", Prayer.PROTECT_FROM_MAGIC, "Protects against magic attacks", SpriteID.PRAYER_PROTECT_FROM_MAGIC, true), + PROTECT_FROM_MISSILES("Protect from missiles", Prayer.PROTECT_FROM_MISSILES, "Protects against ranged attacks", SpriteID.PRAYER_PROTECT_FROM_MISSILES, true), + PROTECT_FROM_MELEE("Protect from melee", Prayer.PROTECT_FROM_MELEE, "Protects against melee attacks", SpriteID.PRAYER_PROTECT_FROM_MELEE, true), + EAGLE_EYE("Eagle Eye", Prayer.EAGLE_EYE, "+15% Ranged", SpriteID.PRAYER_EAGLE_EYE, false), + MYSTIC_MIGHT("Mystic Might", Prayer.MYSTIC_MIGHT, "+15% Magical attack and defence", SpriteID.PRAYER_MYSTIC_MIGHT, false), + RETRIBUTION("Retribution", Prayer.RETRIBUTION, "Deals damage up to 25% of your Prayer level to nearby targets upon the user's death", SpriteID.PRAYER_RETRIBUTION, true), + REDEMPTION("Redemption", Prayer.REDEMPTION, "Heals the player if they fall below 10% health", SpriteID.PRAYER_REDEMPTION, true), + SMITE("Smite", Prayer.SMITE, "Removes 1 Prayer point from an enemy for every 4 damage inflicted on the enemy", SpriteID.PRAYER_SMITE, true), + PRESERVE("Preserve", Prayer.PRESERVE, "Boosted stats last 50% longer", SpriteID.PRAYER_PRESERVE, false), + CHIVALRY("Chivalry", Prayer.CHIVALRY, "+15% Attack, +18% Strength, +20% Defence", SpriteID.PRAYER_CHIVALRY, false), + PIETY("Piety", Prayer.PIETY, "+20% Attack, +23% Strength, +25% Defence", SpriteID.PRAYER_PIETY, false), + RIGOUR("Rigour", Prayer.RIGOUR, "+20% Ranged attack, +23% Ranged strength, +25% Defence", SpriteID.PRAYER_RIGOUR, false), + AUGURY("Augury", Prayer.AUGURY, "+25% Magical attack and defence, +25% Defence", SpriteID.PRAYER_AUGURY, false); + + private final String name; + private final Prayer prayer; + private final String description; + private final int spriteID; + private final boolean overhead; +}