From 9074d1a5e4ddd3fc4f93a9f80aa447e89e42c68a Mon Sep 17 00:00:00 2001 From: Ganom Date: Fri, 3 May 2019 23:19:24 -0400 Subject: [PATCH 1/2] Bringing Zulrah back up to date. --- .../client/plugins/zulrah/ZulrahConfig.java | 34 +- .../client/plugins/zulrah/ZulrahOverlay.java | 40 +- .../client/plugins/zulrah/ZulrahPlugin.java | 749 +++++++++++------- .../plugins/zulrah/ZulrahTileOverlay.java | 86 +- 4 files changed, 570 insertions(+), 339 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahConfig.java index bfdaa15026..05f0b201b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahConfig.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2018, https://runelitepl.us + * Copyright (c) 2018, https://github.com/runeliteplusplus * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,6 +23,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.zulrah; import net.runelite.client.config.Config; @@ -29,20 +31,38 @@ import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; @ConfigGroup("zulrah") -public interface ZulrahConfig extends Config { +public interface ZulrahConfig extends Config +{ @ConfigItem( position = 0, keyName = "zulrahenable", name = "Enable Zulrah Helper", description = "Configures whether or not to enable Zulrah Helper." ) - default boolean EnableZulrah() { return true; } + default boolean EnableZulrah() + { + return true; + } @ConfigItem( - position = 1, - keyName = "zulrahprayenable", - name = "Show Prayer Helper", - description = "Configures whether or not to show when to pray at Zulrah." + position = 1, + keyName = "zulrahprayenable", + name = "Show Prayer Helper", + description = "Configures whether or not to show when to pray at Zulrah." ) - default boolean EnableZulrahPrayerHelper() { return true; } + default boolean EnableZulrahPrayerHelper() + { + return true; + } + + @ConfigItem( + position = 2, + keyName = "jadphasehelper", + name = "Jad Phase Helper", + description = "Tells you what to pray against Zulrah jad phase" + ) + default boolean ZulrahJadHelper() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahOverlay.java index 77be1c8a39..47f2bd8875 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahOverlay.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2018, https://runelitepl.us + * Copyright (c) 2018, https://github.com/runeliteplusplus * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,12 +23,17 @@ * (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.zulrah; -import java.awt.*; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; import javax.inject.Inject; - -import net.runelite.api.*; +import net.runelite.api.Client; +import net.runelite.api.HeadIcon; +import net.runelite.api.NPC; +import net.runelite.api.Player; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; @@ -35,7 +41,8 @@ import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -public class ZulrahOverlay extends Overlay { +public class ZulrahOverlay extends Overlay +{ private final ZulrahConfig config; private final ZulrahPlugin plugin; private final PanelComponent panelComponent = new PanelComponent(); @@ -45,7 +52,8 @@ public class ZulrahOverlay extends Overlay { private Client client; @Inject - private ZulrahOverlay(ZulrahConfig config, ZulrahPlugin plugin) { + private ZulrahOverlay(ZulrahConfig config, ZulrahPlugin plugin) + { this.config = config; this.plugin = plugin; setLayer(OverlayLayer.ABOVE_SCENE); @@ -55,16 +63,21 @@ public class ZulrahOverlay extends Overlay { } @Override - public Dimension render(Graphics2D graphics) { - if (!config.EnableZulrahPrayerHelper()) { + public Dimension render(Graphics2D graphics) + { + if (!config.EnableZulrahPrayerHelper()) + { return null; } NPC Zulrah = plugin.Zulrah; - if (Zulrah != null) { - if (plugin.prayerconserve && plugin.nextprayerendticks == 0) { + if (Zulrah != null) + { + if (plugin.prayerconserve && plugin.nextprayerendticks == 0) + { Player player = client.getLocalPlayer(); HeadIcon icon = player.getOverheadIcon(); - if (icon != null) { + if (icon != null) + { final String text = "Disable Overhead Prayer"; final int textWidth = graphics.getFontMetrics().stringWidth(text); final int textHeight = graphics.getFontMetrics().getAscent() - graphics.getFontMetrics().getDescent(); @@ -75,10 +88,13 @@ public class ZulrahOverlay extends Overlay { panelComponent.setPreferredLocation(jpoint); panelComponent.render(graphics); } - } else if (plugin.nextprayerendticks != 0) { + } + else if (plugin.nextprayerendticks != 0) + { Player player = client.getLocalPlayer(); HeadIcon icon = player.getOverheadIcon(); - if (icon == null) { + if (icon == null) + { final String text = "Protect from MAGIC: " + (plugin.nextprayerendticks - plugin.ticks); final int textWidth = graphics.getFontMetrics().stringWidth(text); final int textHeight = graphics.getFontMetrics().getAscent() - graphics.getFontMetrics().getDescent(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java index b2a7dda0e5..7e5ce9600c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2018, https://runelitepl.us + * Copyright (c) 2018, https://github.com/runeliteplusplus * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,22 +23,33 @@ * (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.zulrah; -import net.runelite.client.eventbus.Subscribe; import com.google.inject.Provides; -import javax.inject.Inject; -import java.awt.*; -import java.awt.image.*; -import java.util.*; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; +import java.awt.image.DataBufferByte; +import java.awt.image.IndexColorModel; +import java.awt.image.WritableRaster; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; - -import net.runelite.api.*; - +import javax.inject.Inject; +import net.runelite.api.Actor; +import net.runelite.api.Client; +import net.runelite.api.GameState; +import net.runelite.api.IndexedSprite; +import net.runelite.api.NPC; +import net.runelite.api.SpriteID; import net.runelite.api.coords.LocalPoint; +import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.client.config.ConfigManager; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -46,73 +58,28 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ImageUtil; @PluginDescriptor( - name = "Zulrah Helper", + name = "Zulrah", description = "Zulrah Helper", tags = {"Zulrah", "Helper"}, type = PluginType.PVM ) + public class ZulrahPlugin extends Plugin { - @Inject - private OverlayManager overlayManager; - - @Inject - private ZulrahConfig config; - - @Inject - private ZulrahOverlay ZulrahOverlay; - - @Inject - private ZulrahTileOverlay ZulrahTileOverlay; - - @Inject - private Client client; - - @Inject - private SpriteManager spriteManager; - - @Provides - ZulrahConfig provideConfig(ConfigManager configManager) { - return configManager.getConfig(ZulrahConfig.class); - } - private static final int[] PROTECTION_ICONS = { SpriteID.PRAYER_PROTECT_FROM_MISSILES, SpriteID.PRAYER_PROTECT_FROM_MELEE, SpriteID.PRAYER_PROTECT_FROM_MAGIC }; - private static final Dimension PROTECTION_ICON_DIMENSION = new Dimension(33, 33); private static final Color PROTECTION_ICON_OUTLINE_COLOR = new Color(33, 33, 33); public final BufferedImage[] ProtectionIcons = new BufferedImage[PROTECTION_ICONS.length]; int zulrahstart = 0; NPC Zulrah; - - @Subscribe - public void onGameStateChanged(GameStateChanged gameStateChanged) - { - if (gameStateChanged.getGameState() == GameState.LOGGED_IN) { - loadProtectionIcons(); - } - } - - @Override - protected void startUp() throws Exception { - overlayManager.add(ZulrahOverlay); - overlayManager.add(ZulrahTileOverlay); - } - - @Override - protected void shutDown() throws Exception { - overlayManager.remove(ZulrahOverlay); - overlayManager.remove(ZulrahTileOverlay); - } - LocalPoint ZulrahPosCenter = new LocalPoint(6720, 7616); LocalPoint ZulrahPosWest = new LocalPoint(8000, 7360); LocalPoint ZulrahPosEast = new LocalPoint(5440, 7360); LocalPoint ZulrahPosNorth = new LocalPoint(6720, 6208); - LocalPoint SWCornerTile = new LocalPoint(7488, 7872); LocalPoint SWCornerTileMelee = new LocalPoint(7232, 8000); LocalPoint WPillar = new LocalPoint(7232, 7232); @@ -122,7 +89,6 @@ public class ZulrahPlugin extends Plugin LocalPoint SECornerTile = new LocalPoint(6208, 8000); LocalPoint SECornerTileMelee = new LocalPoint(5952, 7744); LocalPoint Middle = new LocalPoint(6720, 6848); - int ticks; int phaseticks; int not; @@ -135,6 +101,8 @@ public class ZulrahPlugin extends Plugin boolean phase4 = true; boolean restart = false; boolean prayerconserve = false; + int jadphase; + boolean jadflip = false; Color nztcolor; LocalPoint nextzulrahtile; LocalPoint nexttile; @@ -143,33 +111,152 @@ public class ZulrahPlugin extends Plugin LocalPoint MeleeTile; List phases = new ArrayList<>(); List locations = new ArrayList<>(); - ArrayList Phase1types = new ArrayList<>(Arrays.asList(2042, 2043, 2044, 2042, 2044, 2043, 2042, 2044, 2042, 2043)); ArrayList Phase1pos = new ArrayList<>(Arrays.asList(ZulrahPosCenter, ZulrahPosCenter, ZulrahPosCenter, ZulrahPosEast, ZulrahPosNorth, ZulrahPosCenter, ZulrahPosWest, ZulrahPosNorth, ZulrahPosEast, ZulrahPosCenter)); ArrayList Phase1tiles = new ArrayList<>(Arrays.asList(SWCornerTile, SWCornerTile, SWCornerTile, EPillar, EPillarN, EPillar, Middle, EPillar, EPillar, SWCornerTile)); ArrayList Phase1ticks = new ArrayList<>(Arrays.asList(28, 20, 18, 28, 39, 22, 20, 36, 48, 20)); - ArrayList Phase2types = new ArrayList<>(Arrays.asList(2042, 2043, 2044, 2042, 2043, 2044, 2042, 2044, 2042, 2043)); ArrayList Phase2pos = new ArrayList<>(Arrays.asList(ZulrahPosCenter, ZulrahPosCenter, ZulrahPosCenter, ZulrahPosNorth, ZulrahPosCenter, ZulrahPosEast, ZulrahPosNorth, ZulrahPosNorth, ZulrahPosEast, ZulrahPosCenter)); ArrayList Phase2tiles = new ArrayList<>(Arrays.asList(SWCornerTile, SWCornerTile, SWCornerTile, EPillar, EPillar, EPillar, WPillar, WPillarN, EPillar, SWCornerTile)); ArrayList Phase2ticks = new ArrayList<>(Arrays.asList(28, 20, 17, 39, 22, 20, 28, 36, 48, 21)); - ArrayList Phase3types = new ArrayList<>(Arrays.asList(2042, 2042, 2043, 2044, 2042, 2044, 2042, 2042, 2044, 2042, 2044)); ArrayList Phase3pos = new ArrayList<>(Arrays.asList(ZulrahPosCenter, ZulrahPosWest, ZulrahPosCenter, ZulrahPosEast, ZulrahPosNorth, ZulrahPosWest, ZulrahPosCenter, ZulrahPosEast, ZulrahPosCenter, ZulrahPosWest, ZulrahPosCenter)); ArrayList Phase3tiles = new ArrayList<>(Arrays.asList(SWCornerTile, SWCornerTile, SECornerTile, EPillar, WPillar, WPillar, EPillar, EPillar, WPillar, WPillar, SWCornerTile)); ArrayList Phase3ticks = new ArrayList<>(Arrays.asList(28, 30, 40, 20, 20, 20, 25, 20, 36, 35, 18)); - ArrayList Phase4types = new ArrayList<>(Arrays.asList(2042, 2044, 2042, 2044, 2043, 2042, 2042, 2044, 2042, 2044, 2042, 2044)); ArrayList Phase4pos = new ArrayList<>(Arrays.asList(ZulrahPosCenter, ZulrahPosWest, ZulrahPosNorth, ZulrahPosEast, ZulrahPosCenter, ZulrahPosWest, ZulrahPosNorth, ZulrahPosEast, ZulrahPosCenter, ZulrahPosCenter, ZulrahPosWest, ZulrahPosCenter)); ArrayList Phase4tiles = new ArrayList<>(Arrays.asList(SWCornerTile, SWCornerTile, EPillar, EPillar, WPillar, WPillar, WPillar, EPillar, WPillar, WPillar, WPillar, SWCornerTile)); ArrayList Phase4ticks = new ArrayList<>(Arrays.asList(28, 36, 24, 30, 28, 17, 34, 33, 20, 27, 29, 18)); + @Inject + private OverlayManager overlayManager; + @Inject + private ZulrahConfig config; + @Inject + private ZulrahOverlay ZulrahOverlay; + @Inject + private ZulrahTileOverlay ZulrahTileOverlay; + @Inject + private ZulrahJadOverlay ZulrahJadOverlay; + @Inject + private Client client; + @Inject + private SpriteManager spriteManager; + + private static IndexedSprite createIndexedSprite(final Client client, final BufferedImage bufferedImage) + { + final IndexColorModel indexedCM = (IndexColorModel) bufferedImage.getColorModel(); + + final int width = bufferedImage.getWidth(); + final int height = bufferedImage.getHeight(); + final byte[] pixels = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData(); + final int[] palette = new int[indexedCM.getMapSize()]; + indexedCM.getRGBs(palette); + + final IndexedSprite newIndexedSprite = client.createIndexedSprite(); + newIndexedSprite.setPixels(pixels); + newIndexedSprite.setPalette(palette); + newIndexedSprite.setWidth(width); + newIndexedSprite.setHeight(height); + newIndexedSprite.setOriginalWidth(width); + newIndexedSprite.setOriginalHeight(height); + newIndexedSprite.setOffsetX(0); + newIndexedSprite.setOffsetY(0); + return newIndexedSprite; + } + + private static BufferedImage rgbaToIndexedBufferedImage(final BufferedImage sourceBufferedImage) + { + final BufferedImage indexedImage = new BufferedImage( + sourceBufferedImage.getWidth(), + sourceBufferedImage.getHeight(), + BufferedImage.TYPE_BYTE_INDEXED); + + final ColorModel cm = indexedImage.getColorModel(); + final IndexColorModel icm = (IndexColorModel) cm; + + final int size = icm.getMapSize(); + final byte[] reds = new byte[size]; + final byte[] greens = new byte[size]; + final byte[] blues = new byte[size]; + icm.getReds(reds); + icm.getGreens(greens); + icm.getBlues(blues); + + final WritableRaster raster = indexedImage.getRaster(); + final int pixel = raster.getSample(0, 0, 0); + final IndexColorModel resultIcm = new IndexColorModel(8, size, reds, greens, blues, pixel); + final BufferedImage resultIndexedImage = new BufferedImage(resultIcm, raster, sourceBufferedImage.isAlphaPremultiplied(), null); + resultIndexedImage.getGraphics().drawImage(sourceBufferedImage, 0, 0, null); + return resultIndexedImage; + } + + private static BufferedImage ProtectionIconFromSprite(final BufferedImage freezeSprite) + { + final BufferedImage freezeCanvas = ImageUtil.resizeCanvas(freezeSprite, PROTECTION_ICON_DIMENSION.width, PROTECTION_ICON_DIMENSION.height); + return ImageUtil.outlineImage(freezeCanvas, PROTECTION_ICON_OUTLINE_COLOR); + } + + @Provides + ZulrahConfig provideConfig(ConfigManager configManager) + { + return configManager.getConfig(ZulrahConfig.class); + } @Subscribe - public void onGameTick(GameTick event) { - if (!config.EnableZulrah()) { + public void onGameStateChanged(GameStateChanged gameStateChanged) + { + if (gameStateChanged.getGameState() == GameState.LOGGED_IN) + { + loadProtectionIcons(); + } + } + + @Override + protected void startUp() throws Exception + { + overlayManager.add(ZulrahOverlay); + overlayManager.add(ZulrahTileOverlay); + overlayManager.add(ZulrahJadOverlay); + } + + @Override + protected void shutDown() throws Exception + { + overlayManager.remove(ZulrahOverlay); + overlayManager.remove(ZulrahTileOverlay); + overlayManager.remove(ZulrahJadOverlay); + } + + @Subscribe + public void onGameTick(GameTick event) + { + if (!config.EnableZulrah()) + { return; } + if (phase4 && phases.size() == 11) + { + jadphase = 1; + } + else if (phase3 && phases.size() == 10) + { + jadphase = 1; + } + else if (phase2 && phases.size() == 9) + { + jadphase = 2; + } + else if (phase1 && phases.size() == 9) + { + jadphase = 2; + } + else + { + jadphase = 0; + jadflip = false; + } + boolean foundzulrah = false; for (NPC monster : client.getNpcs()) { @@ -177,18 +264,22 @@ public class ZulrahPlugin extends Plugin { continue; } - if (monster.getName().equalsIgnoreCase("zulrah")) { + if (monster.getName().equalsIgnoreCase("zulrah")) + { foundzulrah = true; Zulrah = monster; break; } } - if (!foundzulrah) { + if (!foundzulrah) + { Zulrah = null; } - if (Zulrah != null) { - if (zulrahstart == 0) { + if (Zulrah != null) + { + if (zulrahstart == 0) + { currenttile = SWCornerTile; lastloc = Zulrah.getLocalLocation(); lastphase = Zulrah.getId(); @@ -196,9 +287,13 @@ public class ZulrahPlugin extends Plugin phases.add(lastphase); locations.add(lastloc); phaseticks = 28; - } else { - if (!Zulrah.getLocalLocation().equals(lastloc) || Zulrah.getId() != lastphase) { - if (restart) { + } + else + { + if (!Zulrah.getLocalLocation().equals(lastloc) || Zulrah.getId() != lastphase) + { + if (restart) + { phases.clear(); locations.clear(); zulrahstart = client.getTickCount(); @@ -225,43 +320,57 @@ public class ZulrahPlugin extends Plugin ticks = 0; phases.add(lastphase); locations.add(lastloc); - if (phase == 0) { - for (int i = 0; i < phases.size(); i++) { - if (phase1) { - if (!phases.get(i).equals(Phase1types.get(i)) || !locations.get(i).equals(Phase1pos.get(i))) { + if (phase == 0) + { + for (int i = 0; i < phases.size(); i++) + { + if (phase1) + { + if (!phases.get(i).equals(Phase1types.get(i)) || !locations.get(i).equals(Phase1pos.get(i))) + { phase1 = false; not++; } } - if (phase2) { - if (!phases.get(i).equals(Phase2types.get(i)) || !locations.get(i).equals(Phase2pos.get(i))) { + if (phase2) + { + if (!phases.get(i).equals(Phase2types.get(i)) || !locations.get(i).equals(Phase2pos.get(i))) + { phase2 = false; not++; } } - if (phase3) { - if (!phases.get(i).equals(Phase3types.get(i)) || !locations.get(i).equals(Phase3pos.get(i))) { + if (phase3) + { + if (!phases.get(i).equals(Phase3types.get(i)) || !locations.get(i).equals(Phase3pos.get(i))) + { phase3 = false; not++; } } - if (phase4) { - if (!phases.get(i).equals(Phase4types.get(i)) || !locations.get(i).equals(Phase4pos.get(i))) { + if (phase4) + { + if (!phases.get(i).equals(Phase4types.get(i)) || !locations.get(i).equals(Phase4pos.get(i))) + { phase4 = false; not++; } } } - if (not == 2) { - if (lastphase == 2043) { + if (not == 2) + { + if (lastphase == 2043) + { nztcolor = Color.BLUE; nextzulrahtile = ZulrahPosCenter; currenttile = SWCornerTile; nexttile = SWCornerTile; phaseticks = Phase2ticks.get(phases.size() - 1); prayerconserve = true; - } else if (lastphase == 2044) { + } + else if (lastphase == 2044) + { nztcolor = Color.GREEN; nextzulrahtile = ZulrahPosNorth; currenttile = SWCornerTile; @@ -269,8 +378,11 @@ public class ZulrahPlugin extends Plugin phaseticks = Phase2ticks.get(phases.size() - 1); prayerconserve = false; } - } else if (not == 3) { - if (phase1) { + } + else if (not == 3) + { + if (phase1) + { nztcolor = zulrahtype(Phase1types.get(phases.size())); nextzulrahtile = Phase1pos.get(phases.size()); currenttile = Phase1tiles.get(phases.size() - 1); @@ -278,7 +390,9 @@ public class ZulrahPlugin extends Plugin phaseticks = Phase1ticks.get(phases.size() - 1); prayerconserve = true; phase = 1; - } else if (phase2) { + } + else if (phase2) + { nztcolor = zulrahtype(Phase2types.get(phases.size())); nextzulrahtile = Phase2pos.get(phases.size()); currenttile = Phase2tiles.get(phases.size() - 1); @@ -286,7 +400,9 @@ public class ZulrahPlugin extends Plugin phaseticks = Phase2ticks.get(phases.size() - 1); prayerconserve = false; phase = 2; - } else if (phase3) { + } + else if (phase3) + { nztcolor = zulrahtype(Phase3types.get(phases.size())); nextzulrahtile = Phase3pos.get(phases.size()); currenttile = Phase3tiles.get(phases.size() - 1); @@ -294,7 +410,9 @@ public class ZulrahPlugin extends Plugin phaseticks = Phase3ticks.get(phases.size() - 1); prayerconserve = false; phase = 3; - } else if (phase4) { + } + else if (phase4) + { nztcolor = zulrahtype(Phase4types.get(phases.size())); nextzulrahtile = Phase4pos.get(phases.size()); currenttile = Phase4tiles.get(phases.size() - 1); @@ -302,246 +420,299 @@ public class ZulrahPlugin extends Plugin phaseticks = Phase4ticks.get(phases.size() - 1); prayerconserve = true; phase = 4; - } else { + } + else + { System.out.println("ERROR: COULD NOT IDENTIFY ZULRAH PHASE!"); } not = 0; } - } else { - if (phase == 1) { - if (Phase1types.size() == phases.size()) { + } + else + { + if (phase == 1) + { + if (Phase1types.size() == phases.size()) + { nztcolor = null; nextzulrahtile = null; nexttile = null; restart = true; - } else { + } + else + { nextzulrahtile = Phase1pos.get(phases.size()); nexttile = Phase1tiles.get(phases.size()); - if (phases.size() == 8) { + if (phases.size() == 8) + { nztcolor = Color.YELLOW; - } else { + } + else + { nztcolor = zulrahtype(Phase1types.get(phases.size())); } } currenttile = Phase1tiles.get(phases.size() - 1); phaseticks = Phase1ticks.get(phases.size() - 1); - } else if (phase == 2) { - if (Phase2types.size() == phases.size()) { + } + else if (phase == 2) + { + if (Phase2types.size() == phases.size()) + { nztcolor = null; nextzulrahtile = null; nexttile = null; restart = true; - } else { + } + else + { nextzulrahtile = Phase2pos.get(phases.size()); nexttile = Phase2tiles.get(phases.size()); - if (phases.size() == 8) { + if (phases.size() == 8) + { nztcolor = Color.YELLOW; - } else { + } + else + { nztcolor = zulrahtype(Phase2types.get(phases.size())); } } currenttile = Phase2tiles.get(phases.size() - 1); phaseticks = Phase2ticks.get(phases.size() - 1); - } else if (phase == 3) { - if (Phase3types.size() == phases.size()) { + } + else if (phase == 3) + { + if (Phase3types.size() == phases.size()) + { nztcolor = null; nextzulrahtile = null; nexttile = null; restart = true; - } else { + } + else + { nextzulrahtile = Phase3pos.get(phases.size()); nexttile = Phase3tiles.get(phases.size()); - if (phases.size() == 9) { + if (phases.size() == 9) + { nztcolor = Color.YELLOW; - } else { + } + else + { nztcolor = zulrahtype(Phase3types.get(phases.size())); } } currenttile = Phase3tiles.get(phases.size() - 1); phaseticks = Phase3ticks.get(phases.size() - 1); - } else if (phase == 4) { - if (Phase4types.size() == phases.size()) { + } + else if (phase == 4) + { + if (Phase4types.size() == phases.size()) + { nztcolor = null; nextzulrahtile = null; nexttile = null; restart = true; - } else { + } + else + { nextzulrahtile = Phase4pos.get(phases.size()); nexttile = Phase4tiles.get(phases.size()); - if (phases.size() == 10) { + if (phases.size() == 10) + { nztcolor = Color.YELLOW; - } else { + } + else + { nztcolor = zulrahtype(Phase4types.get(phases.size())); } } currenttile = Phase4tiles.get(phases.size() - 1); phaseticks = Phase4ticks.get(phases.size() - 1); - } else { + } + else + { System.out.println("ERROR: COULD NOT IDENTIFY ZULRAH PHASE!"); } } - } else { + } + else + { ticks++; - if (phases.size() == 1 && phaseticks == 34) { - if (ticks >= 18) { - prayerconserve = true; - } else { - prayerconserve = false; + if (phases.size() == 1 && phaseticks == 34) + { + prayerconserve = ticks >= 18; + } + if (not == 2) + { + if (lastphase == 2043) + { + if (ticks >= 12 && ticks <= 13) + { + MeleeTile = SWCornerTileMelee; + } + else + { + MeleeTile = null; + } } } - if (not == 2) { - if (lastphase == 2043) { - if (ticks >= 12 && ticks <= 13) { + else if (phase == 1) + { + if (phases.size() == 5) + { + prayerconserve = ticks >= 19; + } + else if (phases.size() == 8) + { + prayerconserve = ticks >= 19; + } + else if (phases.size() == 9) + { + prayerconserve = ticks >= 34; + } + else if (phases.size() == 10) + { + if (ticks >= 12 && ticks <= 13) + { MeleeTile = SWCornerTileMelee; - } else { + } + else + { MeleeTile = null; } } - } else if (phase == 1) { - if (phases.size() == 5) { - if (ticks >= 19) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 8) { - if (ticks >= 19) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 9) { - if (ticks >= 34) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 10) { - if (ticks >= 12 && ticks <= 13) { - MeleeTile = SWCornerTileMelee; - } else { - MeleeTile = null; - } - } else if (phases.size() == 4 || phases.size() == 6 || phases.size() == 10) { - prayerconserve = true; - } else { - prayerconserve = false; + else prayerconserve = phases.size() == 4 || phases.size() == 6 || phases.size() == 10; + } + else if (phase == 2) + { + if (phases.size() == 4) + { + prayerconserve = ticks >= 20; } - } else if (phase == 2) { - if (phases.size() == 4) { - if (ticks >= 20) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 8) { - if (ticks >= 18) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 9) { - if (ticks >= 34) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 5 || phases.size() == 7 || phases.size() == 10) { - if (phases.size() == 10) { - if (ticks >= 12 && ticks <= 13) { + else if (phases.size() == 8) + { + prayerconserve = ticks >= 18; + } + else if (phases.size() == 9) + { + prayerconserve = ticks >= 34; + } + else if (phases.size() == 5 || phases.size() == 7 || phases.size() == 10) + { + if (phases.size() == 10) + { + if (ticks >= 12 && ticks <= 13) + { MeleeTile = SWCornerTileMelee; - } else { + } + else + { MeleeTile = null; } } prayerconserve = true; - } else { + } + else + { prayerconserve = false; } - } else if (phase == 3) { - if (phases.size() == 2) { - if (ticks >= 20) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 3) { + } + else if (phase == 3) + { + if (phases.size() == 2) + { + prayerconserve = ticks >= 20; + } + else if (phases.size() == 3) + { prayerconserve = true; - if (ticks >= 24 && ticks <= 25) { + if (ticks >= 24 && ticks <= 25) + { MeleeTile = SECornerTileMelee; - } else if (ticks >= 32 && ticks <= 33) { + } + else if (ticks >= 32 && ticks <= 33) + { MeleeTile = SECornerTile; - } else { + } + else + { MeleeTile = null; } - } else if (phases.size() == 7 || phases.size() == 11) { + } + else if (phases.size() == 7 || phases.size() == 11) + { prayerconserve = true; - } else if (phases.size() == 9) { - if (ticks >= 16) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else { + } + else if (phases.size() == 9) + { + prayerconserve = ticks >= 16; + } + else + { prayerconserve = false; } - } else if (phase == 4) { - if (phases.size() == 2) { - if (ticks >= 10 && ticks <= 16) { + } + else if (phase == 4) + { + if (phases.size() == 2) + { + if (ticks >= 10 && ticks <= 16) + { nextprayerendticks = 16; - } else { + } + else + { nextprayerendticks = 0; } - if (ticks >= 16) { - prayerconserve = false; - } else { - prayerconserve = true; - } - } else if (phases.size() == 3) { - if (ticks >= 16) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 4) { - if (ticks >= 10 && ticks <= 16) { + prayerconserve = ticks < 16; + } + else if (phases.size() == 3) + { + prayerconserve = ticks >= 16; + } + else if (phases.size() == 4) + { + if (ticks >= 10 && ticks <= 16) + { nextprayerendticks = 16; - } else { + } + else + { nextprayerendticks = 0; } - if (ticks <= 16) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 5 || phases.size() == 7 || phases.size() == 12) { + prayerconserve = ticks <= 16; + } + else if (phases.size() == 5 || phases.size() == 7 || phases.size() == 12) + { prayerconserve = true; - } else if (phases.size() == 8) { - if (ticks >= 18) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else if (phases.size() == 10) { - if (ticks >= 14) { - prayerconserve = true; - } else { - prayerconserve = false; - } - } else { + } + else if (phases.size() == 8) + { + prayerconserve = ticks >= 18; + } + else if (phases.size() == 10) + { + prayerconserve = ticks >= 14; + } + else + { prayerconserve = false; } } } } - } else { - if (zulrahstart > 0) { + } + else + { + if (zulrahstart > 0) + { phases.clear(); locations.clear(); zulrahstart = 0; - lastphase= 0; + lastphase = 0; lastloc = null; phase = 0; phase1 = true; @@ -557,12 +728,38 @@ public class ZulrahPlugin extends Plugin prayerconserve = false; not = 0; nextprayerendticks = 0; + jadphase = 0; + jadflip = false; } } } - public Color zulrahtype(int type) { - switch(type) { + @Subscribe + public void onAnimationChanged(AnimationChanged event) + { + Actor Zulrhyboy = event.getActor(); + if (Zulrhyboy != null && Zulrhyboy.getName() != null) + { + if (Zulrhyboy instanceof NPC) + { + if (Zulrhyboy.equals(Zulrah)) + { + if (jadphase > 0) + { + if (Zulrhyboy.getAnimation() == 5069) + { + jadflip = !jadflip; + } + } + } + } + } + } + + public Color zulrahtype(int type) + { + switch (type) + { case 2042: return Color.GREEN; case 2043: @@ -573,7 +770,8 @@ public class ZulrahPlugin extends Plugin return null; } - private void loadProtectionIcons() { + private void loadProtectionIcons() + { final IndexedSprite[] protectionIcons = {}; final IndexedSprite[] newProtectionIcons = Arrays.copyOf(protectionIcons, PROTECTION_ICONS.length); int curPosition = 0; @@ -586,73 +784,34 @@ public class ZulrahPlugin extends Plugin } } - private static IndexedSprite createIndexedSprite(final Client client, final BufferedImage bufferedImage) { - final IndexColorModel indexedCM = (IndexColorModel) bufferedImage.getColorModel(); - - final int width = bufferedImage.getWidth(); - final int height = bufferedImage.getHeight(); - final byte[] pixels = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData(); - final int[] palette = new int[indexedCM.getMapSize()]; - indexedCM.getRGBs(palette); - - final IndexedSprite newIndexedSprite = client.createIndexedSprite(); - newIndexedSprite.setPixels(pixels); - newIndexedSprite.setPalette(palette); - newIndexedSprite.setWidth(width); - newIndexedSprite.setHeight(height); - newIndexedSprite.setOriginalWidth(width); - newIndexedSprite.setOriginalHeight(height); - newIndexedSprite.setOffsetX(0); - newIndexedSprite.setOffsetY(0); - return newIndexedSprite; - } - - private static BufferedImage rgbaToIndexedBufferedImage(final BufferedImage sourceBufferedImage) { - final BufferedImage indexedImage = new BufferedImage( - sourceBufferedImage.getWidth(), - sourceBufferedImage.getHeight(), - BufferedImage.TYPE_BYTE_INDEXED); - - final ColorModel cm = indexedImage.getColorModel(); - final IndexColorModel icm = (IndexColorModel) cm; - - final int size = icm.getMapSize(); - final byte[] reds = new byte[size]; - final byte[] greens = new byte[size]; - final byte[] blues = new byte[size]; - icm.getReds(reds); - icm.getGreens(greens); - icm.getBlues(blues); - - final WritableRaster raster = indexedImage.getRaster(); - final int pixel = raster.getSample(0, 0, 0); - final IndexColorModel resultIcm = new IndexColorModel(8, size, reds, greens, blues, pixel); - final BufferedImage resultIndexedImage = new BufferedImage(resultIcm, raster, sourceBufferedImage.isAlphaPremultiplied(), null); - resultIndexedImage.getGraphics().drawImage(sourceBufferedImage, 0, 0, null); - return resultIndexedImage; - } - - private static BufferedImage ProtectionIconFromSprite(final BufferedImage freezeSprite) { - final BufferedImage freezeCanvas = ImageUtil.resizeCanvas(freezeSprite, PROTECTION_ICON_DIMENSION.width, PROTECTION_ICON_DIMENSION.height); - return ImageUtil.outlineImage(freezeCanvas, PROTECTION_ICON_OUTLINE_COLOR); - } - - BufferedImage getProtectionIcon() { + BufferedImage getProtectionIcon() + { int type = 0; - if (phase1) { + if (phase1) + { type = Phase1types.get(phases.size()); - } else if (phase2) { + } + else if (phase2) + { type = Phase2types.get(phases.size()); - } else if (phase3) { + } + else if (phase3) + { type = Phase3types.get(phases.size()); - } else if (phase4) { + } + else if (phase4) + { type = Phase4types.get(phases.size()); - } else { + } + else + { System.out.println("ERROR: COULD NOT IDENTIFY ZULRAH PHASE!"); } - if (type > 0) { - switch (type) { + if (type > 0) + { + switch (type) + { case 2042: return ProtectionIcons[0]; case 2043: @@ -663,4 +822,4 @@ public class ZulrahPlugin extends Plugin } return null; } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahTileOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahTileOverlay.java index 20e7d43b88..65d5668be9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahTileOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahTileOverlay.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2018, https://runelitepl.us + * Copyright (c) 2018, https://github.com/runeliteplusplus * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,13 +23,19 @@ * (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.zulrah; -import java.awt.*; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Polygon; import java.awt.image.BufferedImage; import javax.inject.Inject; - -import net.runelite.api.*; +import net.runelite.api.Client; +import net.runelite.api.NPC; +import net.runelite.api.Perspective; +import net.runelite.api.Player; import net.runelite.api.Point; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.Overlay; @@ -60,29 +67,39 @@ public class ZulrahTileOverlay extends Overlay { NPC Zulrah = plugin.Zulrah; - if (Zulrah != null) { + if (Zulrah != null) + { OverlayUtil.renderTextLocation(graphics, Zulrah.getCanvasTextLocation(graphics, Integer.toString(plugin.phaseticks - plugin.ticks), Zulrah.getLogicalHeight() + 40), Integer.toString(plugin.phaseticks - plugin.ticks), Color.WHITE); Player player = client.getLocalPlayer(); - if (plugin.currenttile != null) { - if (plugin.currenttile.equals(plugin.nexttile)) { + if (plugin.currenttile != null) + { + if (plugin.currenttile.equals(plugin.nexttile)) + { final Polygon poly = Perspective.getCanvasTilePoly(client, plugin.currenttile); - if (poly != null) { + if (poly != null) + { Point textLocationtile = Perspective.getCanvasTextLocation(client, graphics, plugin.currenttile, "Current & Next", 50); OverlayUtil.renderTextLocation(graphics, textLocationtile, "Current & Next", Color.WHITE); OverlayUtil.renderPolygon(graphics, poly, Color.WHITE); } - } else { - if (!player.getLocalLocation().equals(plugin.currenttile)) { + } + else + { + if (!player.getLocalLocation().equals(plugin.currenttile)) + { final Polygon poly = Perspective.getCanvasTilePoly(client, plugin.currenttile); - if (poly != null) { + if (poly != null) + { Point textLocationtile = Perspective.getCanvasTextLocation(client, graphics, plugin.currenttile, "Current", 50); OverlayUtil.renderTextLocation(graphics, textLocationtile, "Current", Color.WHITE); OverlayUtil.renderPolygon(graphics, poly, Color.GREEN); } } - if (plugin.nexttile != null) { + if (plugin.nexttile != null) + { final Polygon poly2 = Perspective.getCanvasTilePoly(client, plugin.nexttile); - if (poly2 != null) { + if (poly2 != null) + { Point textLocationtile = Perspective.getCanvasTextLocation(client, graphics, plugin.nexttile, "Next", 50); OverlayUtil.renderTextLocation(graphics, textLocationtile, "Next", Color.WHITE); OverlayUtil.renderPolygon(graphics, poly2, Color.RED); @@ -90,15 +107,23 @@ public class ZulrahTileOverlay extends Overlay } } } - if (plugin.nextzulrahtile != null) { + if (plugin.nextzulrahtile != null) + { String style = ""; - if (plugin.nztcolor.equals(Color.RED)) { + if (plugin.nztcolor.equals(Color.RED)) + { style = "MELEE"; - } else if (plugin.nztcolor.equals(Color.BLUE)) { + } + else if (plugin.nztcolor.equals(Color.BLUE)) + { style = "MAGE"; - } else if (plugin.nztcolor.equals(Color.GREEN)) { + } + else if (plugin.nztcolor.equals(Color.GREEN)) + { style = "RANGE"; - } else if (plugin.nztcolor.equals(Color.YELLOW)) { + } + else if (plugin.nztcolor.equals(Color.YELLOW)) + { style = "JAD"; } @@ -107,19 +132,28 @@ public class ZulrahTileOverlay extends Overlay if (poly != null) { BufferedImage clanchatImage = null; - if (style.equals("JAD")) { - if (plugin.phase4 && plugin.phases.size() == 10) { + if (style.equals("JAD")) + { + if (plugin.phase4 && plugin.phases.size() == 10) + { clanchatImage = plugin.ProtectionIcons[2]; - } else if (plugin.phase3 && plugin.phases.size() == 9) { + } + else if (plugin.phase3 && plugin.phases.size() == 9) + { clanchatImage = plugin.ProtectionIcons[2]; - } else { + } + else + { clanchatImage = plugin.ProtectionIcons[0]; } - } else { + } + else + { clanchatImage = plugin.getProtectionIcon(); } - if (clanchatImage != null) { + if (clanchatImage != null) + { Point imageLocation = new Point(textLocation.getX(), textLocation.getY() + 15); OverlayUtil.renderImageLocation(graphics, imageLocation, clanchatImage); } @@ -129,9 +163,11 @@ public class ZulrahTileOverlay extends Overlay OverlayUtil.renderPolygon(graphics, poly, plugin.nztcolor); } } - if (plugin.MeleeTile != null) { + if (plugin.MeleeTile != null) + { final Polygon poly = Perspective.getCanvasTilePoly(client, plugin.MeleeTile); - if (poly != null) { + if (poly != null) + { Point textLocationtile = Perspective.getCanvasTextLocation(client, graphics, plugin.MeleeTile, "MOVE HERE NOW!", 50); graphics.setFont(FontManager.getRunescapeBoldFont()); OverlayUtil.renderTextLocation(graphics, textLocationtile, "MOVE HERE NOW!", Color.WHITE); From 0be6bee146f25208bafe25ba3749fa35daf704d0 Mon Sep 17 00:00:00 2001 From: Ganom Date: Fri, 3 May 2019 23:24:13 -0400 Subject: [PATCH 2/2] Added missing jad overlay --- .../plugins/zulrah/ZulrahJadOverlay.java | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahJadOverlay.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahJadOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahJadOverlay.java new file mode 100644 index 0000000000..161a2ee0df --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahJadOverlay.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2018, https://runelitepl.us + * Copyright (c) 2018, https://github.com/runeliteplusplus + * 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.zulrah; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import javax.inject.Inject; +import net.runelite.api.Client; +import net.runelite.api.NPC; +import net.runelite.api.Prayer; +import net.runelite.api.SpriteID; +import net.runelite.client.game.SpriteManager; +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.OverlayPriority; +import net.runelite.client.ui.overlay.components.ComponentConstants; +import net.runelite.client.ui.overlay.components.ImageComponent; +import net.runelite.client.ui.overlay.components.PanelComponent; + +public class ZulrahJadOverlay extends Overlay +{ + private static final Color NOT_ACTIVATED_BACKGROUND_COLOR = new Color(150, 0, 0, 150); + private final ZulrahConfig config; + private final ZulrahPlugin plugin; + private final SpriteManager spriteManager; + private final PanelComponent imagePanelComponent = new PanelComponent(); + + @Inject + private Client client; + + @Inject + private ZulrahJadOverlay(ZulrahConfig config, ZulrahPlugin plugin, SpriteManager spriteManager) + { + this.config = config; + this.plugin = plugin; + this.spriteManager = spriteManager; + setLayer(OverlayLayer.ABOVE_SCENE); + setPosition(OverlayPosition.BOTTOM_RIGHT); + setPriority(OverlayPriority.MED); + } + + @Override + public Dimension render(Graphics2D graphics) + { + if (!config.ZulrahJadHelper()) + { + return null; + } + NPC Zulrah = plugin.Zulrah; + if (Zulrah != null) + { + if (plugin.jadphase > 0) + { + if (plugin.jadphase == 1) + { + if (plugin.jadflip) + { + final BufferedImage prayerImage = spriteManager.getSprite(SpriteID.PRAYER_PROTECT_FROM_MISSILES, 0); + imagePanelComponent.getChildren().clear(); + imagePanelComponent.getChildren().add(new ImageComponent(prayerImage)); + imagePanelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MISSILES) + ? ComponentConstants.STANDARD_BACKGROUND_COLOR + : NOT_ACTIVATED_BACKGROUND_COLOR); + } + else + { + final BufferedImage prayerImage = spriteManager.getSprite(SpriteID.PRAYER_PROTECT_FROM_MAGIC, 0); + imagePanelComponent.getChildren().clear(); + imagePanelComponent.getChildren().add(new ImageComponent(prayerImage)); + imagePanelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MAGIC) + ? ComponentConstants.STANDARD_BACKGROUND_COLOR + : NOT_ACTIVATED_BACKGROUND_COLOR); + } + } + else if (plugin.jadphase == 2) + { + if (plugin.jadflip) + { + final BufferedImage prayerImage = spriteManager.getSprite(SpriteID.PRAYER_PROTECT_FROM_MAGIC, 0); + imagePanelComponent.getChildren().clear(); + imagePanelComponent.getChildren().add(new ImageComponent(prayerImage)); + imagePanelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MAGIC) + ? ComponentConstants.STANDARD_BACKGROUND_COLOR + : NOT_ACTIVATED_BACKGROUND_COLOR); + } + else + { + final BufferedImage prayerImage = spriteManager.getSprite(SpriteID.PRAYER_PROTECT_FROM_MISSILES, 0); + imagePanelComponent.getChildren().clear(); + imagePanelComponent.getChildren().add(new ImageComponent(prayerImage)); + imagePanelComponent.setBackgroundColor(client.isPrayerActive(Prayer.PROTECT_FROM_MISSILES) + ? ComponentConstants.STANDARD_BACKGROUND_COLOR + : NOT_ACTIVATED_BACKGROUND_COLOR); + } + } + return imagePanelComponent.render(graphics); + } + } + return null; + } +}