diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Barrage.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Barrage.java deleted file mode 100644 index 3e9fc7d6ec..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Barrage.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2019. PKLite - All Rights Reserved - * Unauthorized modification, distribution, or possession of this source file, via any medium is strictly prohibited. - * Proprietary and confidential. Refer to PKLite License file for more information on - * full terms of this copyright and to determine what constitutes authorized use. - * Written by PKLite(ST0NEWALL, others) , 2019 - * - */ - -package net.runelite.client.plugins.freezetimers; - -import lombok.Getter; -import net.runelite.api.Actor; -import net.runelite.client.util.Text; -import org.jetbrains.annotations.NotNull; - -public class Barrage extends Spell -{ - - - @Getter - public static final long DURATION = 20000; - private long remainingTime; - @Getter - private boolean isFinished; - - - public Barrage(Actor affectedTarget, Actor caster) - { - super(affectedTarget, caster); - } - - public long getRemainingTime() - { - long elapsedTime = System.currentTimeMillis() - this.startTime; - if (getDURATION() > elapsedTime) - { - return getDURATION() - elapsedTime; - } - else - { - this.isFinished = true; - return 0; - } - } - - public boolean equals(Object o) - { - if (o instanceof Barrage) - { - Barrage barrage = (Barrage) o; - if (Text.standardize(this.getAffectedTarget().getName()).equals(Text.standardize(((Barrage) o) - .getAffectedTarget().getName())) && this.getStartTime() == ((Barrage) o).getStartTime()) - { - return true; - } - else - { - return false; - } - } - else - { - return false; - } - } - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersConfig.java deleted file mode 100644 index 8d484f11cc..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersConfig.java +++ /dev/null @@ -1,88 +0,0 @@ -package net.runelite.client.plugins.freezetimers; - -import java.awt.Color; -import net.runelite.client.config.Config; -import net.runelite.client.config.ConfigGroup; -import net.runelite.client.config.ConfigItem; - -@ConfigGroup("freezetimers") -public interface FreezeTimersConfig extends Config -{ - - @ConfigItem( - position = 0, - keyName = "freezeenable", - name = "Enable PvP freeze timers", - description = "Configures whether or not to show freeze timers." - ) - default boolean EnableFreezeTimers() - { - return false; - } - - @ConfigItem( - position = 1, - keyName = "tilehighlight", - name = "Frozen opponent tile highlighting", - description = "Configures whether or not to highlight tiles frozen opponents are standing on." - ) - default boolean drawTiles() - { - return false; - } - - @ConfigItem( - position = 2, - keyName = "timercolor", - name = "Freeze Timer Color", - description = "Color of freeze timer" - ) - default Color FreezeTimerColor() - { - return new Color(0, 184, 212); - } - - @ConfigItem( - position = 3, - keyName = "spellIcon", - name = "Show spell icon", - description = "Shows the spell icon for the freeze spell affecting the target" - ) - default boolean spellIcon() - { - return true; - } - - @ConfigItem( - position = 4, - keyName = "refreezeTimer", - name = "Refreeze Timer", - description = "Show a timer that counts up until the target can be refrozen" - ) - default boolean refreezeTimer() - { - return true; - } - - @ConfigItem( - position = 5, - keyName = "refreezeTimerColor", - name = "Refreeze color", - description = "The color for the timer that counts until the target can be refrozen" - ) - default Color RefreezeTimerColor() - { - return Color.red; - } - - @ConfigItem(position = 6, keyName = "tbtimer", name = "Tele Block Timer", description = "Enables tele block timer") - default boolean TBTimer() { - return true; - } - - @ConfigItem(position = 7, keyName = "timerpos", name = "Freeze Timer Position", description = "Position of freeze timer") - default int FreezeTimerPos() { - return 80; - } -} - diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersOverlay.java deleted file mode 100644 index 5718c506d1..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersOverlay.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 2019. PKLite - All Rights Reserved - * Unauthorized modification, distribution, or possession of this source file, via any medium is strictly prohibited. - * Proprietary and confidential. Refer to PKLite License file for more information on - * full terms of this copyright and to determine what constitutes authorized use. - * Written by PKLite(ST0NEWALL, others) , 2019 - * - */ - -package net.runelite.client.plugins.freezetimers; - -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.font.TextLayout; -import java.awt.image.*; -import javax.inject.Inject; -import javax.inject.Singleton; - -import net.runelite.api.*; -import net.runelite.client.game.SpriteManager; -import net.runelite.client.ui.FontManager; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayPriority; -import net.runelite.client.ui.overlay.OverlayUtil; - -@Singleton -public class FreezeTimersOverlay extends Overlay -{ - private final FreezeTimersService FreezeTimersService; - private final FreezeTimersConfig config; - private final FreezeTimersPlugin plugin; - private final SpriteManager spriteManager; - private final Client client; - - @Inject - private FreezeTimersOverlay(FreezeTimersConfig config, FreezeTimersService FreezeTimersService, FreezeTimersPlugin plugin, Client client, SpriteManager spriteManager) - { - this.config = config; - this.FreezeTimersService = FreezeTimersService; - this.plugin = plugin; - this.client = client; - this.spriteManager = spriteManager; - setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.MED); - } - - @Override - public Dimension render(Graphics2D graphics) - { - if (!config.EnableFreezeTimers()) - { - return null; - } - FreezeTimersService.forEachPlayer((player, color) -> renderPlayerOverlay(graphics, player, color)); - return null; - } - - private void renderPlayerOverlay(Graphics2D graphics, Player actor, Color color) - { - int timer = 0; - String name = actor.getName(); - int freezetype = plugin.freezetype(name); - boolean frozenoverlay = false; - int offset = 5; - long dtime = plugin.opponentfreezetime(name); - long tbed = plugin.istbed(name); - Point textLocation = null; - HeadIcon headIcon = actor.getOverheadIcon(); - int freezetime = 0; - if (freezetype == 1 || freezetype == 4) - { - freezetime = 5000; - } - else if (freezetype == 2 || freezetype == 5) - { - freezetime = 10000; - } - else if (freezetype == 3 || freezetype == 6) - { - freezetime = 15000; - } - else if (freezetype == 7) - { - freezetime = 20000; - } - else if (freezetype == 8) - { - freezetime = 2500; - } - else if (freezetype == 9) - { - freezetime = 5000; - } - else if (freezetype == 10) - { - freezetime = 7500; - } - - long currenttime = System.currentTimeMillis(); - long timediff = currenttime - dtime; - timer = (freezetime - (int) timediff) / 1000; - - if (timediff < freezetime) - { - // if the freezetimer is still active. . . - textLocation = actor.getCanvasTextLocation(graphics, String.valueOf((timer)), offset); - textLocation = new Point(textLocation.getX(), textLocation.getY() - config.FreezeTimerPos()); - } - else - { - if (timediff < freezetime + 3000) - { - timer = Math.abs(timer); - timer += 1; - if (config.refreezeTimer()) - { - textLocation = actor.getCanvasTextLocation(graphics, String.valueOf((timer)), offset); - textLocation = new Point(textLocation.getX(), textLocation.getY() - config.FreezeTimerPos()); - graphics.setFont(FontManager.getRunescapeBoldFont()); - if (headIcon != null) - { - textLocation = new Point(textLocation.getX() + 10, textLocation.getY() + 5); - } - frozenoverlay = true; - OverlayUtil.renderTextLocation(graphics, textLocation, String.valueOf((timer)), config.RefreezeTimerColor()); - return; - } - } - else - { - plugin.deleteopponent(name); - } - } - - if (textLocation != null) - { - BufferedImage clanchatImage = plugin.GetFreezeIcon(freezetype - 1); - - if (clanchatImage != null) - { - int width = clanchatImage.getWidth(); - int textHeight = graphics.getFontMetrics().getHeight() - graphics.getFontMetrics().getMaxDescent(); - Point imageLocation = new Point(textLocation.getX() - width, ((textLocation.getY() - - graphics.getFontMetrics().getHeight()) + 10)); - graphics.setFont(FontManager.getRunescapeFont()); - // graphics.setStroke(new BasicStroke(3)); - - if (config.spellIcon()) - { - frozenoverlay = true; - // graphics.drawOval(imageLocation.getX(), imageLocation.getY(), clanchatImage.getWidth(), clanchatImage.getHeight()); - OverlayUtil.renderImageLocation(graphics, imageLocation, clanchatImage); - OverlayUtil.renderTextLocation(graphics, textLocation, String.valueOf(timer), color); - - } - else - { - graphics.setColor(Color.cyan); - graphics.drawOval(textLocation.getX() - 3, textLocation.getY() - 15, clanchatImage.getWidth(), - graphics.getFontMetrics().getHeight()); - graphics.setColor(Color.blue); - graphics.fillOval(textLocation.getX() - 3, textLocation.getY() - 15, clanchatImage.getWidth(), - graphics.getFontMetrics().getHeight()); - - OverlayUtil.renderTextLocation(graphics, textLocation, String.valueOf(timer), Color.WHITE); - } - } - if (config.TBTimer()) { - if (tbed > 0) { - int type = plugin.tbtype(name); - int tbexpiry; - if (type > 0) { - if (type == 1) { - tbexpiry = 300000; - } else if (type == 2) { - tbexpiry = 150000; - } else { - return; - } - long tbtime = currenttime - tbed; - int tbtimer = (tbexpiry - (int) tbtime) / 1000; - if (tbtime < tbexpiry) { - textLocation = actor.getCanvasTextLocation(graphics, Integer.toString(tbtimer), actor.getLogicalHeight() + config.FreezeTimerPos()); - if (frozenoverlay) { - textLocation = new Point(textLocation.getX() + 40, textLocation.getY() - config.FreezeTimerPos()); - } else { - textLocation = new Point(textLocation.getX(), textLocation.getY() - config.FreezeTimerPos()); - } - } else { - plugin.deletetb(name); - } - } - } - } - } - } -} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java deleted file mode 100644 index 59f4ff6ccb..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java +++ /dev/null @@ -1,464 +0,0 @@ -/* - * Copyright (c) 2019. PKLite - All Rights Reserved - * Unauthorized modification, distribution, or possession of this source file, via any medium is strictly prohibited. - * Proprietary and confidential. Refer to PKLite License file for more information on - * full terms of this copyright and to determine what constitutes authorized use. - * Written by PKLite(ST0NEWALL, others) , 2019 - * - */ - -package net.runelite.client.plugins.freezetimers; - -import net.runelite.api.events.*; -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.util.regex.Matcher; -import java.util.regex.Pattern; - -import net.runelite.api.*; - -import net.runelite.api.coords.WorldPoint; -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.plugins.PluginType; -import net.runelite.client.ui.overlay.OverlayManager; -import net.runelite.client.util.ImageUtil; -import org.slf4j.Logger; - -@PluginDescriptor( - name = "Freeze Timers", - description = "PVP Freeze Timers", - type = PluginType.PVP, - tags = {"PvP", "Freeze", "Timers", "pklite"} -) -public class FreezeTimersPlugin extends Plugin -{ - @Inject - private OverlayManager overlayManager; - - @Inject - private FreezeTimersConfig config; - - @Inject - private FreezeTimersOverlay FreezeTimersOverlay; - - @Inject - private FreezeTimersTileOverlay FreezeTimersTileOverlay; - - @Inject - private Client client; - - @Inject - private SpriteManager spriteManager; - - @Provides - FreezeTimersConfig provideConfig(ConfigManager configManager) - { - return configManager.getConfig(FreezeTimersConfig.class); - } - - private static final int[] FREEZE_ICONS = - { - SpriteID.SPELL_BIND, - SpriteID.SPELL_SNARE, - SpriteID.SPELL_ENTANGLE, - SpriteID.SPELL_ICE_RUSH, - SpriteID.SPELL_ICE_BURST, - SpriteID.SPELL_ICE_BLITZ, - SpriteID.SPELL_ICE_BARRAGE, - SpriteID.SPELL_BIND, - SpriteID.SPELL_SNARE, - SpriteID.SPELL_ENTANGLE, - SpriteID.SPELL_TELE_BLOCK - }; - - private static final Dimension FREEZE_ICON_DIMENSION = new Dimension(25, 25); - private static final Color FREEZE_ICON_OUTLINE_COLOR = new Color(33, 33, 33); - private final BufferedImage[] FreezeIcons = new BufferedImage[FREEZE_ICONS.length]; - - private final int SPLASH_ID = 85; - Map tbedthings = new HashMap<>(); - Map tbtypes = new HashMap<>(); - Map testMap = new HashMap(); - Map frozenthings = new HashMap(); - Map frozenthingpoints = new HashMap(); - Map freezetype = new HashMap(); - Map magexp = new HashMap(); - int lastxp; - int ticks; - int currticks; - String currtarget; - String spell; - - - @Subscribe - public void onGameStateChanged(GameStateChanged gameStateChanged) { - if (gameStateChanged.getGameState() == GameState.LOGGED_IN) { - loadFreezeIcons(); - } - } - - @Override - protected void startUp() throws Exception { - overlayManager.add(FreezeTimersOverlay); - overlayManager.add(FreezeTimersTileOverlay); - } - - @Override - protected void shutDown() throws Exception { - overlayManager.remove(FreezeTimersOverlay); - overlayManager.remove(FreezeTimersTileOverlay); - frozenthings.clear(); - frozenthingpoints.clear(); - tbedthings.clear(); - tbtypes.clear(); - } - - - @Subscribe - public void onMenuOptionClicked(MenuOptionClicked event) - { - if (event.getMenuTarget().contains("->")) - { - final Pattern spattern = Pattern.compile(">(.+?)"); - final Pattern ppattern = Pattern.compile("> (.+?) 0 && currtarget != null) - { - if (frozenthings.containsKey(currtarget)) - { - currtarget = null; - return; - } - WorldPoint targetPosition = null; - for (Player player : client.getPlayers()) - { - if (player == null) - { - continue; - } - String playerName = player.getName(); - if (playerName.equals(currtarget)) - { - if (player.getOverheadIcon() != null) - { - if (player.getOverheadIcon().equals(HeadIcon.MAGIC)) - { - praymage = true; - } - } - targetPosition = player.getWorldLocation(); - break; - } - } - if (targetPosition != null) - { - if (spell.equals("Bind") && xp > 30) - { - frozenthings.put(currtarget, System.currentTimeMillis()); - frozenthingpoints.put(currtarget, targetPosition); - if (praymage) - { - freezetype.put(currtarget, 8); - } - else - { - freezetype.put(currtarget, 1); - } - } - else if (spell.equals("Snare") && xp > 60) - { - frozenthings.put(currtarget, System.currentTimeMillis()); - frozenthingpoints.put(currtarget, targetPosition); - if (praymage) - { - freezetype.put(currtarget, 9); - } - else - { - freezetype.put(currtarget, 2); - } - } - else if (spell.equals("Entangle") && xp >= 89) - { - frozenthings.put(currtarget, System.currentTimeMillis()); - frozenthingpoints.put(currtarget, targetPosition); - if (praymage) - { - freezetype.put(currtarget, 10); - } - else - { - freezetype.put(currtarget, 3); - } - } - else if (spell.equals("Ice Rush") && xp > 34) - { - frozenthings.put(currtarget, System.currentTimeMillis()); - frozenthingpoints.put(currtarget, targetPosition); - freezetype.put(currtarget, 4); - } - else if (spell.equals("Ice Burst") && xp > 40) - { - frozenthings.put(currtarget, System.currentTimeMillis()); - frozenthingpoints.put(currtarget, targetPosition); - freezetype.put(currtarget, 5); - } - else if (spell.equals("Ice Blitz") && xp > 46) - { - frozenthings.put(currtarget, System.currentTimeMillis()); - frozenthingpoints.put(currtarget, targetPosition); - freezetype.put(currtarget, 6); - } - else if (spell.equals("Ice Barrage") && xp > 52) - { - Barrage barrage = new Barrage(client.getLocalPlayer().getInteracting(), client.getLocalPlayer()); - testMap.put(currtarget, barrage); - frozenthings.put(currtarget, System.currentTimeMillis()); - frozenthingpoints.put(currtarget, targetPosition); - freezetype.put(currtarget, 7); - } - } else if (spell.equals("Tele Block") && xp == 95) { - if (config.TBTimer()) { - if (praymage) { - tbtypes.put(currtarget, 2); - } else { - tbtypes.put(currtarget, 1); - } - tbedthings.put(currtarget, System.currentTimeMillis()); - } - } - } - if (currtarget != null && ticks > currticks + 1) - { - Player local = client.getLocalPlayer(); - Actor interacting = local.getInteracting(); - if (interacting != null) - { - if (!interacting.getName().equals(currtarget)) - { - currtarget = null; - } - } - else - { - currtarget = null; - } - } - ticks++; - } - - public long opponentfreezetime(String name) - { - if (frozenthings.containsKey(name)) - { - return frozenthings.get(name); - } - return 0; - } - - public WorldPoint playerpos(String name) - { - if (frozenthingpoints.containsKey(name)) - { - return frozenthingpoints.get(name); - } - return null; - } - - public void updatePosition(String name, WorldPoint point) - { - if (frozenthingpoints.containsKey(name)) - { - frozenthingpoints.remove(name); - frozenthingpoints.put(name, point); - } - } - - public int freezetype(String name) - { - if (freezetype.containsKey(name)) - { - return freezetype.get(name); - } - return 0; - } - - public long istbed(String name) { - if (tbedthings.containsKey(name)) { - return tbedthings.get(name); - } - return 0; - } - public int tbtype(String name) { - if (tbtypes.containsKey(name)) { - return tbtypes.get(name); - } - return 0; - } - - public void deleteopponent(String name) - { - if (frozenthings.containsKey(name)) - { - frozenthings.remove(name); - } - if (frozenthingpoints.containsKey(name)) - { - frozenthingpoints.remove(name); - } - if (freezetype.containsKey(name)) - { - freezetype.remove(name); - } - } - - public void deletetb(String name) { - if (tbedthings.containsKey(name)) { - tbedthings.remove(name); - } - if (tbtypes.containsKey(name)) { - tbtypes.remove(name); - } - } - - private void loadFreezeIcons() - { - final IndexedSprite[] freezeIcons = {}; - final IndexedSprite[] newfreezeIcons = Arrays.copyOf(freezeIcons, FREEZE_ICONS.length); - int curPosition = 0; - - for (int i = 0; i < FREEZE_ICONS.length; i++, curPosition++) - { - final int resource = FREEZE_ICONS[i]; - FreezeIcons[i] = rgbaToIndexedBufferedImage(FreezeIconFromSprite(spriteManager.getSprite(resource, 0))); - newfreezeIcons[curPosition] = createIndexedSprite(client, FreezeIcons[i]); - } - } - - private static IndexedSprite createIndexedSprite(Client client, BufferedImage bufferedImage) { - IndexColorModel indexedCM = (IndexColorModel)bufferedImage.getColorModel(); - int width = bufferedImage.getWidth(); - int height = bufferedImage.getHeight(); - byte[] pixels = ((DataBufferByte)bufferedImage.getRaster().getDataBuffer()).getData(); - int[] palette = new int[indexedCM.getMapSize()]; - indexedCM.getRGBs(palette); - 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(BufferedImage sourceBufferedImage) { - BufferedImage indexedImage = new BufferedImage(sourceBufferedImage.getWidth(), sourceBufferedImage.getHeight(), BufferedImage.TYPE_BYTE_INDEXED); - ColorModel cm = indexedImage.getColorModel(); - IndexColorModel icm = (IndexColorModel)cm; - int size = icm.getMapSize(); - byte[] reds = new byte[size]; - byte[] greens = new byte[size]; - 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 FreezeIconFromSprite(final BufferedImage freezeSprite) - { - final BufferedImage freezeCanvas = ImageUtil.resizeCanvas(freezeSprite, FREEZE_ICON_DIMENSION.width, FREEZE_ICON_DIMENSION.height); - return ImageUtil.outlineImage(freezeCanvas, FREEZE_ICON_OUTLINE_COLOR); - } - - BufferedImage GetFreezeIcon(int id) - { - return FreezeIcons[id]; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersService.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersService.java deleted file mode 100644 index 912c106ba1..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersService.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2019. PKLite - All Rights Reserved - * Unauthorized modification, distribution, or possession of this source file, via any medium is strictly prohibited. - * Proprietary and confidential. Refer to PKLite License file for more information on - * full terms of this copyright and to determine what constitutes authorized use. - * Written by PKLite(ST0NEWALL, others) , 2019 - * - */ - -package net.runelite.client.plugins.freezetimers; - -import java.awt.Color; -import java.util.Objects; -import java.util.function.BiConsumer; -import javax.inject.Inject; -import javax.inject.Singleton; -import net.runelite.api.Client; -import net.runelite.api.Player; -import net.runelite.api.coords.WorldPoint; - - -@Singleton -public class FreezeTimersService -{ - private final Client client; - private final FreezeTimersConfig config; - private final FreezeTimersPlugin plugin; - - @Inject - private FreezeTimersService(Client client, FreezeTimersConfig config, FreezeTimersPlugin plugin) - { - this.config = config; - this.plugin = plugin; - this.client = client; - } - - public void forEachPlayer(final BiConsumer consumer) - { - - for (Player player : client.getPlayers()) - { - if (player == null || player.getName() == null) - { - continue; - } - - String name = player.getName(); - int freezetype = plugin.freezetype(name); - long dtime = plugin.opponentfreezetime(name); - long tbed = plugin.istbed(name); - int freezetime = 0; - if (freezetype == 1 || freezetype == 4) - { - freezetime = 5000; - } - else if (freezetype == 2 || freezetype == 5) - { - freezetime = 10000; - } - else if (freezetype == 3 || freezetype == 6) - { - freezetime = 15000; - } - else if (freezetype == 7) - { - freezetime = 20000; - } - else if (freezetype == 8) - { - freezetime = 2500; - } - else if (freezetype == 9) - { - freezetime = 5000; - } - else if (freezetype == 10) - { - freezetime = 7500; - } - if (dtime > 0) - { - long currenttime = System.currentTimeMillis(); - long timediff = currenttime - dtime; - if (timediff < freezetime) - { - WorldPoint currentWorldPoint = player.getWorldLocation(); - WorldPoint lastWorldPoint = plugin.playerpos(name); - if (currentWorldPoint.equals(lastWorldPoint)) - { - consumer.accept(player, config.FreezeTimerColor()); - } - else - { - if (timediff < 605) - { - plugin.updatePosition(name, currentWorldPoint); - consumer.accept(player, config.FreezeTimerColor()); - } - else - { - plugin.deleteopponent(name); - } - } - } - else - { - if (timediff < freezetime + 3000) - { - consumer.accept(player, Color.YELLOW); - } - else - { - plugin.deleteopponent(name); - } - if (tbed > 0) { - consumer.accept(player, config.FreezeTimerColor()); - return; - } - } - } - } - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersTileOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersTileOverlay.java deleted file mode 100644 index 37eea87b7a..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersTileOverlay.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2019. PKLite - All Rights Reserved - * Unauthorized modification, distribution, or possession of this source file, via any medium is strictly prohibited. - * Proprietary and confidential. Refer to PKLite License file for more information on - * full terms of this copyright and to determine what constitutes authorized use. - * Written by PKLite(ST0NEWALL, others) , 2019 - * - */ - -package net.runelite.client.plugins.freezetimers; - -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.Polygon; -import javax.inject.Inject; -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.OverlayUtil; - -public class FreezeTimersTileOverlay extends Overlay -{ - private final FreezeTimersService FreezeTimersService; - private final FreezeTimersConfig config; - - @Inject - private FreezeTimersTileOverlay(FreezeTimersConfig config, FreezeTimersService FreezeTimersService) - { - this.config = config; - this.FreezeTimersService = FreezeTimersService; - setLayer(OverlayLayer.ABOVE_SCENE); - setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.MED); - } - - @Override - public Dimension render(Graphics2D graphics) - { - if (!config.drawTiles()) - { - return null; - } - - FreezeTimersService.forEachPlayer((player, color) -> - { - final Polygon poly = player.getCanvasTilePoly(); - - if (poly != null) - { - OverlayUtil.renderPolygon(graphics, poly, color); - } - }); - - return null; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/PlayerSpellEffect.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/PlayerSpellEffect.java deleted file mode 100644 index a2d47b7695..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/PlayerSpellEffect.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2019. PKLite - All Rights Reserved - * Unauthorized modification, distribution, or possession of this source file, via any medium is strictly prohibited. - * Proprietary and confidential. Refer to PKLite License file for more information on - * full terms of this copyright and to determine what constitutes authorized use. - * Written by PKLite(ST0NEWALL, others) , 2019 - * - */ - -package net.runelite.client.plugins.freezetimers; - -import lombok.Getter; -import lombok.Setter; - -public enum PlayerSpellEffect -{ - - - BARRAGE("Ice Barrage", 20000, false), - BLITZ("Ice Blitz", 15000, false); - - @Getter - private final String SPELL_NAME; - @Getter - private long startTime; - @Getter - private int duration; - @Getter - private boolean halvable; - //private final BufferedImage SPELL_ICON; - - - - PlayerSpellEffect(String name, int duration, boolean halvable) - { - this.SPELL_NAME = name; - this.duration = duration; - this.halvable = halvable; - this.startTime = System.currentTimeMillis(); - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Spell.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Spell.java deleted file mode 100644 index 5407951aa8..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Spell.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2019. PKLite - All Rights Reserved - * Unauthorized modification, distribution, or possession of this source file, via any medium is strictly prohibited. - * Proprietary and confidential. Refer to PKLite License file for more information on - * full terms of this copyright and to determine what constitutes authorized use. - * Written by PKLite(ST0NEWALL, others) , 2019 - * - */ - -package net.runelite.client.plugins.freezetimers; - -import lombok.Getter; -import net.runelite.api.Actor; - -public abstract class Spell -{ - - @Getter - private final Actor affectedTarget; - @Getter - private final Actor caster; - @Getter - public final long startTime; - private long remainingTime; - @Getter - private boolean isFinished; - - protected Spell(Actor affectedTarget, Actor caster) - { - this.affectedTarget = affectedTarget; - this.caster = caster; - startTime = System.currentTimeMillis(); - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PlayerContainer.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PlayerContainer.java deleted file mode 100644 index 6c1370ef76..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PlayerContainer.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2019, gazivodag - * 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.prayagainstplayer; - -import net.runelite.api.Player; - -/** - * Contains a player object - * When they attacked me - * And (in milliseconds) when to expire the overlay around them - */ -public class PlayerContainer { - - private Player player; - private long whenTheyAttackedMe; - private int millisToExpireHighlight; - - public PlayerContainer(Player player, long whenTheyAttackedMe, int millisToExpireHighlight) { - this.player = player; - this.whenTheyAttackedMe = whenTheyAttackedMe; - this.millisToExpireHighlight = millisToExpireHighlight; - } - - - //getters - public Player getPlayer() { - return player; - } - public long getWhenTheyAttackedMe() { - return whenTheyAttackedMe; - } - public int getMillisToExpireHighlight() { return millisToExpireHighlight; }; - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerConfig.java deleted file mode 100644 index ce453fd3d9..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerConfig.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c) 2019, gazivodag - * 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.prayagainstplayer; - -import net.runelite.client.config.Config; -import net.runelite.client.config.ConfigGroup; -import net.runelite.client.config.ConfigItem; - -import java.awt.*; - -@ConfigGroup("prayagainstplayer") -public interface PrayAgainstPlayerConfig extends Config { - @ConfigItem( - position = 0, - keyName = "attackerPlayerColor", - name = "Attacker color", - description = "This is the color that will be used to highlight attackers." - ) - default Color attackerPlayerColor() { return new Color(0xFF0006); } - - @ConfigItem( - position = 1, - keyName = "potentialPlayerColor", - name = "Potential Attacker color", - description = "This is the color that will be used to highlight potential attackers." - ) - default Color potentialPlayerColor() { return new Color(0xFFFF00); } - - //// - @ConfigItem( - position = 2, - keyName = "attackerTargetTimeout", - name = "Attacker Timeout", - description = "Seconds until attacker is no longer highlighted." - ) - default int attackerTargetTimeout() { return 10; } - - @ConfigItem( - position = 3, - keyName = "potentialTargetTimeout", - name = "Potential Attacker Timeout", - description = "Seconds until potential attacker is no longer highlighted." - ) - default int potentialTargetTimeout() { return 10; } - - @ConfigItem( - position = 4, - keyName = "newSpawnTimeout", - name = "New Player Timeout", - description = "Seconds until logged in/spawned player is no longer highlighted." - ) - default int newSpawnTimeout() { return 5; } - //// - - //// - @ConfigItem( - position = 5, - keyName = "ignoreFriends", - name = "Ignore Friends", - description = "This lets you decide whether you want friends to be highlighted by this plugin." - ) - default boolean ignoreFriends() { return true; } - - @ConfigItem( - position = 6, - keyName = "ignoreClanMates", - name = "Ignore Clan Mates", - description = "This lets you decide whether you want clan mates to be highlighted by this plugin." - ) - default boolean ignoreClanMates() { return true; } - //// - - @ConfigItem( - position = 7, - keyName = "markNewPlayer", - name = "Mark new player as potential attacker", - description = "Marks someone that logged in or teleported as a potential attacker for your safety\nDO NOT RUN THIS IN WORLD 1-2 GRAND EXCHANGE!" - ) - default boolean markNewPlayer() { return false; } - - @ConfigItem( - position = 8, - keyName = "drawTargetPrayAgainst", - name = "Draw what to pray on attacker", - description = "Tells you what to pray from what weapon the attacker is holding" - ) - default boolean drawTargetPrayAgainst() { return true; } - - @ConfigItem( - position = 9, - keyName = "drawPotentialTargetPrayAgainst", - name = "Draw what to pray on potential attacker", - description = "Tells you what to pray from what weapon the potential attacker is holding" - ) - default boolean drawPotentialTargetPrayAgainst() { return true; } - - @ConfigItem( - position = 10, - keyName = "drawTargetPrayAgainstPrayerTab", - name = "Draw what to pray from prayer tab", - description = "Tells you what to pray from what weapon the attacker is holding from the prayer tab" - ) - default boolean drawTargetPrayAgainstPrayerTab() { return false; } - - @ConfigItem( - position = 11, - keyName = "drawTargetsName", - name = "Draw name on attacker", - description = "Configures whether or not the attacker\'s name should be shown" - ) - default boolean drawTargetsName() { return true; } - - @ConfigItem( - position = 12, - keyName = "drawPotentialTargetsName", - name = "Draw name on potential attacker", - description = "Configures whether or not the potential attacker\'s name should be shown" - ) - default boolean drawPotentialTargetsName() { return true; } - - @ConfigItem( - position = 13, - keyName = "drawTargetHighlight", - name = "Draw highlight around attacker", - description = "Configures whether or not the attacker should be highlighted" - ) - default boolean drawTargetHighlight() { return true; } - - @ConfigItem( - position = 14, - keyName = "drawPotentialTargetHighlight", - name = "Draw highlight around potential attacker", - description = "Configures whether or not the potential attacker should be highlighted" - ) - default boolean drawPotentialTargetHighlight() { return true; } - - @ConfigItem( - position = 15, - keyName = "drawTargetTile", - name = "Draw tile under attacker", - description = "Configures whether or not the attacker\'s tile be highlighted" - ) - default boolean drawTargetTile() { return false; } - - @ConfigItem( - position = 16, - keyName = "drawPotentialTargetTile", - name = "Draw tile under potential attacker", - description = "Configures whether or not the potential attacker\'s tile be highlighted" - ) - default boolean drawPotentialTargetTile() { return false; } - - @ConfigItem( - position = 17, - keyName = "drawUnknownWeapons", - name = "Draw unknown weapons", - description = "Configures whether or not the unknown weapons should be shown when a player equips one" - ) - default boolean drawUnknownWeapons() { return false; } - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlay.java deleted file mode 100644 index e54efd8127..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlay.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (c) 2019, gazivodag - * 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.prayagainstplayer; - -import net.runelite.api.Client; -import net.runelite.api.ItemComposition; -import net.runelite.api.Player; -import net.runelite.api.kit.KitType; -import net.runelite.client.ui.overlay.*; -import net.runelite.client.util.Text; -import net.runelite.api.Point; - -import javax.inject.Inject; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.util.ConcurrentModificationException; - -class PrayAgainstPlayerOverlay extends Overlay { - - private final PrayAgainstPlayerPlugin plugin; - private final PrayAgainstPlayerConfig config; - private final Client client; - - @Inject - private PrayAgainstPlayerOverlay(PrayAgainstPlayerPlugin plugin, PrayAgainstPlayerConfig config, Client client) { - super(plugin); - this.plugin = plugin; - this.config = config; - this.client = client; - - setLayer(OverlayLayer.ABOVE_SCENE); - setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGH); - } - - - @Override - public Dimension render(Graphics2D graphics) { - renderPotentialPlayers(graphics); - renderAttackingPlayers(graphics); - return null; - } - - private void renderPotentialPlayers(Graphics2D graphics) { - if (plugin.getPotentialPlayersAttackingMe() == null || !plugin.getPotentialPlayersAttackingMe().isEmpty()) { - try { - for (PlayerContainer container : plugin.getPotentialPlayersAttackingMe()) { - if ((System.currentTimeMillis() > (container.getWhenTheyAttackedMe() + container.getMillisToExpireHighlight())) && (container.getPlayer().getInteracting() != client.getLocalPlayer())) { - plugin.removePlayerFromPotentialContainer(container); - } - if (config.drawPotentialTargetsName()) renderNameAboveHead(graphics, container.getPlayer(), config.potentialPlayerColor()); - if (config.drawPotentialTargetHighlight()) renderHighlightedPlayer(graphics, container.getPlayer(), config.potentialPlayerColor()); - if (config.drawPotentialTargetTile()) renderTileUnderPlayer(graphics, container.getPlayer(), config.potentialPlayerColor()); - if (config.drawPotentialTargetPrayAgainst()) renderPrayAgainstOnPlayer(graphics, container.getPlayer(), config.potentialPlayerColor()); - } - } catch (ConcurrentModificationException e) { - } - } - } - - private void renderAttackingPlayers(Graphics2D graphics) { - if (plugin.getPlayersAttackingMe() == null || !plugin.getPlayersAttackingMe().isEmpty()) { - try { - for (PlayerContainer container : plugin.getPlayersAttackingMe()) { - if ((System.currentTimeMillis() > (container.getWhenTheyAttackedMe() + container.getMillisToExpireHighlight())) && (container.getPlayer().getInteracting() != client.getLocalPlayer())) { - plugin.removePlayerFromAttackerContainer(container); - } - - if (config.drawTargetsName()) renderNameAboveHead(graphics, container.getPlayer(), config.attackerPlayerColor()); - if (config.drawTargetHighlight()) renderHighlightedPlayer(graphics, container.getPlayer(), config.attackerPlayerColor()); - if (config.drawTargetTile()) renderTileUnderPlayer(graphics, container.getPlayer(), config.attackerPlayerColor()); - if (config.drawTargetPrayAgainst()) renderPrayAgainstOnPlayer(graphics, container.getPlayer(), config.attackerPlayerColor()); - } - } catch (ConcurrentModificationException e) { - } - } - } - - private void renderNameAboveHead(Graphics2D graphics, Player player, Color color) { - final String name = Text.sanitize(player.getName()); - final int offset = player.getLogicalHeight() + 40; - Point textLocation = player.getCanvasTextLocation(graphics, name, offset); - if (textLocation != null) { - OverlayUtil.renderTextLocation(graphics, textLocation, name, color); - } - } - - private void renderHighlightedPlayer(Graphics2D graphics, Player player, Color color) { - try { - OverlayUtil.renderPolygon(graphics, player.getConvexHull(), color); - } catch (NullPointerException e) { - } - } - - private void renderTileUnderPlayer(Graphics2D graphics, Player player, Color color) { - Polygon poly = player.getCanvasTilePoly(); - OverlayUtil.renderPolygon(graphics, poly, color); - } - - private void renderPrayAgainstOnPlayer(Graphics2D graphics, Player player, Color color) { - final int offset = (player.getLogicalHeight() / 2) + 75; - BufferedImage icon; - - switch (WeaponType.checkWeaponOnPlayer(client, player)) { - case WEAPON_MELEE: - icon = plugin.getProtectionIcon(WeaponType.WEAPON_MELEE); - break; - case WEAPON_MAGIC: - icon = plugin.getProtectionIcon(WeaponType.WEAPON_MAGIC); - break; - case WEAPON_RANGED: - icon = plugin.getProtectionIcon(WeaponType.WEAPON_RANGED); - break; - default: - icon = null; - break; - } - try { - if (icon != null) { - Point point = player.getCanvasImageLocation(icon, offset); - OverlayUtil.renderImageLocation(graphics, point, icon); - } else { - if (config.drawUnknownWeapons()) { - int itemId = player.getPlayerComposition().getEquipmentId(KitType.WEAPON); - ItemComposition itemComposition = client.getItemDefinition(itemId); - - final String str = itemComposition.getName().toUpperCase(); - Point point = player.getCanvasTextLocation(graphics, str, offset); - OverlayUtil.renderTextLocation(graphics, point, str, color); - } - } - } catch (Exception e) { - } - } - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlayPrayerTab.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlayPrayerTab.java deleted file mode 100644 index 4e505675f6..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlayPrayerTab.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2019, gazivodag - * 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.prayagainstplayer; - -import net.runelite.api.Client; -import net.runelite.api.Player; -import net.runelite.api.widgets.Widget; -import net.runelite.api.widgets.WidgetInfo; -import net.runelite.client.ui.overlay.*; - -import javax.inject.Inject; -import java.awt.*; -import java.util.ConcurrentModificationException; - -class PrayAgainstPlayerOverlayPrayerTab extends Overlay { - - private final PrayAgainstPlayerPlugin plugin; - private final PrayAgainstPlayerConfig config; - private final Client client; - - @Inject - private PrayAgainstPlayerOverlayPrayerTab (PrayAgainstPlayerPlugin plugin, PrayAgainstPlayerConfig config, Client client) { - super(plugin); - this.plugin = plugin; - this.config = config; - this.client = client; - - setPosition(OverlayPosition.DETACHED); - setLayer(OverlayLayer.ALWAYS_ON_TOP); - setPriority(OverlayPriority.MED); - } - - - @Override - public Dimension render(Graphics2D graphics) { - if (plugin.getPlayersAttackingMe() == null || !plugin.getPlayersAttackingMe().isEmpty()) { - try { - for (PlayerContainer container : plugin.getPlayersAttackingMe()) { - if (plugin.getPlayersAttackingMe() != null && plugin.getPlayersAttackingMe().size() > 0) { - //no reason to show you what prayers to pray in your prayer tab if multiple people are attacking you - if ((plugin.getPlayersAttackingMe().size() == 1) && (config.drawTargetPrayAgainstPrayerTab())) { - renderPrayerToClick(graphics, container.getPlayer()); - } - } - } - } catch (ConcurrentModificationException e) { - } - } - return null; - } - - private void renderPrayerToClick(Graphics2D graphics, Player player) { - Widget PROTECT_FROM_MAGIC = client.getWidget(WidgetInfo.PRAYER_PROTECT_FROM_MAGIC); - Widget PROTECT_FROM_RANGED = client.getWidget(WidgetInfo.PRAYER_PROTECT_FROM_MISSILES); - Widget PROTECT_FROM_MELEE = client.getWidget(WidgetInfo.PRAYER_PROTECT_FROM_MELEE); - Color color = Color.RED; - if (PROTECT_FROM_MELEE.isHidden()) return; - switch (WeaponType.checkWeaponOnPlayer(client, player)) { - case WEAPON_MAGIC: - OverlayUtil.renderPolygon(graphics, rectangleToPolygon(PROTECT_FROM_MAGIC.getBounds()), color); - break; - case WEAPON_MELEE: - OverlayUtil.renderPolygon(graphics, rectangleToPolygon(PROTECT_FROM_MELEE.getBounds()), color); - break; - case WEAPON_RANGED: - OverlayUtil.renderPolygon(graphics, rectangleToPolygon(PROTECT_FROM_RANGED.getBounds()), color); - break; - default: - break; - } - } - - private static Polygon rectangleToPolygon(Rectangle rect) { - int[] xpoints = {rect.x, rect.x + rect.width, rect.x + rect.width, rect.x}; - int[] ypoints = {rect.y, rect.y, rect.y + rect.height, rect.y + rect.height}; - return new Polygon(xpoints, ypoints, 4); - } - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerPlugin.java deleted file mode 100644 index 0f9d144bcb..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerPlugin.java +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright (c) 2019, gazivodag - * 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.prayagainstplayer; - -import com.google.inject.Provides; -import net.runelite.api.*; -import net.runelite.api.events.*; -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; -import net.runelite.client.plugins.PluginType; -import net.runelite.client.ui.overlay.OverlayManager; -import net.runelite.client.util.ImageUtil; - -import javax.inject.Inject; -import java.awt.*; -import java.awt.image.*; -import java.util.ArrayList; -import java.util.Arrays; - -@PluginDescriptor( - name = "Pray Against Player", - description = "Use plugin in PvP situations for best results!!", - tags = {"highlight", "pvp", "overlay", "players"}, - type = PluginType.PVP -) - -/** - * I am fully aware that there is plenty of overhead and is a MESS! - * If you'd like to contribute please do! - */ -public class PrayAgainstPlayerPlugin extends Plugin { - - 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]; - - private ArrayList potentialPlayersAttackingMe; - private ArrayList playersAttackingMe; - - @Inject - private Client client; - - @Inject - private SpriteManager spriteManager; - - @Inject - private OverlayManager overlayManager; - - @Inject - private PrayAgainstPlayerOverlay overlay; - - @Inject - private PrayAgainstPlayerOverlayPrayerTab overlayPrayerTab; - - @Inject - private PrayAgainstPlayerConfig config; - - @Provides - PrayAgainstPlayerConfig provideConfig(ConfigManager configManager) { - return configManager.getConfig(PrayAgainstPlayerConfig.class); - } - - @Subscribe - public void onGameStateChanged(GameStateChanged gameStateChanged) { - if (gameStateChanged.getGameState() == GameState.LOGGED_IN) { - loadProtectionIcons(); - } - } - - @Override - protected void startUp() { - potentialPlayersAttackingMe = new ArrayList<>(); - playersAttackingMe = new ArrayList<>(); - overlayManager.add(overlay); - overlayManager.add(overlayPrayerTab); - } - - @Override - protected void shutDown() throws Exception { - overlayManager.remove(overlay); - overlayManager.remove(overlayPrayerTab); - } - - @Subscribe - protected void onAnimationChanged(AnimationChanged animationChanged) { - if ((animationChanged.getActor() instanceof Player) && (animationChanged.getActor().getInteracting() instanceof Player) && (animationChanged.getActor().getInteracting() == client.getLocalPlayer())) { - Player sourcePlayer = (Player) animationChanged.getActor(); - - //is the client is a friend/clan and the config is set to ignore friends/clan dont add them to list - if (client.isFriended(sourcePlayer.getName(), true) && config.ignoreFriends()) return; - if (client.isClanMember(sourcePlayer.getName()) && config.ignoreClanMates()) return; - - if ((sourcePlayer.getAnimation() != -1) && (!isBlockAnimation(sourcePlayer.getAnimation()))) { - //if attacker attacks again, reset his timer so overlay doesn't go away - if (findPlayerInAttackerList(sourcePlayer) != null) { - resetPlayerFromAttackerContainerTimer(findPlayerInAttackerList(sourcePlayer)); - } - //if he attacks and he was in the potential attackers list, remove him - if (!potentialPlayersAttackingMe.isEmpty() && potentialPlayersAttackingMe.contains(findPlayerInPotentialList(sourcePlayer))) { - removePlayerFromPotentialContainer(findPlayerInPotentialList(sourcePlayer)); - } - //if he's not in the attackers list, add him - if (findPlayerInAttackerList(sourcePlayer) == null) { - PlayerContainer container = new PlayerContainer(sourcePlayer, System.currentTimeMillis(), (config.attackerTargetTimeout() * 1000)); - playersAttackingMe.add(container); - } - } - } - } - - @Subscribe - protected void onInteractingChanged(InteractingChanged interactingChanged) { - //if someone interacts with you, add them to the potential attackers list - if ((interactingChanged.getSource() instanceof Player) && (interactingChanged.getTarget() instanceof Player)) { - Player sourcePlayer = (Player) interactingChanged.getSource(); - Player targetPlayer = (Player) interactingChanged.getTarget(); - if ((targetPlayer == client.getLocalPlayer()) && (findPlayerInPotentialList(sourcePlayer) == null)) { //we're being interacted with - - //is the client is a friend/clan and the config is set to ignore friends/clan dont add them to list - if (client.isFriended(sourcePlayer.getName(), true) && config.ignoreFriends()) return; - if (client.isClanMember(sourcePlayer.getName()) && config.ignoreClanMates()) return; - - PlayerContainer container = new PlayerContainer(sourcePlayer, System.currentTimeMillis(), (config.potentialTargetTimeout() * 1000)); - potentialPlayersAttackingMe.add(container); - } - } - } - - @Subscribe - protected void onPlayerDespawned(PlayerDespawned playerDespawned) { - PlayerContainer container = findPlayerInAttackerList(playerDespawned.getPlayer()); - PlayerContainer container2 = findPlayerInPotentialList(playerDespawned.getPlayer()); - if (container != null) { - playersAttackingMe.remove(container); - } - if (container2 != null) { - potentialPlayersAttackingMe.remove(container2); - } - } - - @Subscribe - protected void onPlayerSpawned(PlayerSpawned playerSpawned) { - if (config.markNewPlayer()) { - Player p = playerSpawned.getPlayer(); - - if (client.isFriended(p.getName(), true) && config.ignoreFriends()) return; - if (client.isClanMember(p.getName()) && config.ignoreClanMates()) return; - - PlayerContainer container = findPlayerInPotentialList(p); - if (container == null) { - container = new PlayerContainer(p, System.currentTimeMillis(), (config.newSpawnTimeout() * 1000)); - potentialPlayersAttackingMe.add(container); - } - } - } - - PlayerContainer findPlayerInAttackerList(Player player) { - if (playersAttackingMe.isEmpty()) { - return null; - } - for (int i = 0 ; i < playersAttackingMe.size() ; i++) { - PlayerContainer container = playersAttackingMe.get(i); - if (container.getPlayer() == player) { - return container; - } - } - return null; - } - - PlayerContainer findPlayerInPotentialList(Player player) { - if (potentialPlayersAttackingMe.isEmpty()) { - return null; - } - for (int i = 0 ; i < potentialPlayersAttackingMe.size() ; i++) { - PlayerContainer container = potentialPlayersAttackingMe.get(i); - if (container.getPlayer() == player) { - return container; - } - } - return null; - } - - /** - * Resets player timer in case he attacks again, so his highlight doesn't go away so easily - * @param container - */ - public void resetPlayerFromAttackerContainerTimer(PlayerContainer container) { - removePlayerFromAttackerContainer(container); - PlayerContainer newContainer = new PlayerContainer(container.getPlayer(), System.currentTimeMillis(), (config.attackerTargetTimeout() * 1000)); - playersAttackingMe.add(newContainer); - } - - - public void removePlayerFromPotentialContainer(PlayerContainer container) { - if ((potentialPlayersAttackingMe != null) && (!potentialPlayersAttackingMe.isEmpty()) && (potentialPlayersAttackingMe.contains(container))) { - potentialPlayersAttackingMe.remove(container); - } - } - - public void removePlayerFromAttackerContainer(PlayerContainer container) { - if ((playersAttackingMe != null) && (!playersAttackingMe.isEmpty()) && (playersAttackingMe.contains(container))) { - playersAttackingMe.remove(container); - } - } - - private boolean isBlockAnimation(int anim) { - switch (anim) { - case AnimationID.BLOCK_DEFENDER: - case AnimationID.BLOCK_NO_SHIELD: - case AnimationID.BLOCK_SHIELD: - case AnimationID.BLOCK_SWORD: - case AnimationID.BLOCK_UNARMED: - return true; - default: - return false; - } - } - - public ArrayList getPotentialPlayersAttackingMe() { return potentialPlayersAttackingMe; } - public ArrayList getPlayersAttackingMe() { return playersAttackingMe; } - - //All of the methods below are from the Zulrah plugin!!! Credits to it's respective owner - private void loadProtectionIcons() { - final IndexedSprite[] protectionIcons = {}; - final IndexedSprite[] newProtectionIcons = Arrays.copyOf(protectionIcons, PROTECTION_ICONS.length); - int curPosition = 0; - - for (int i = 0; i < PROTECTION_ICONS.length; i++, curPosition++) - { - final int resource = PROTECTION_ICONS[i]; - ProtectionIcons[i] = rgbaToIndexedBufferedImage(ProtectionIconFromSprite(spriteManager.getSprite(resource, 0))); - newProtectionIcons[curPosition] = createIndexedSprite(client, ProtectionIcons[i]); - } - } - - 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(WeaponType weaponType) { - switch (weaponType) { - case WEAPON_RANGED: - return ProtectionIcons[0]; - case WEAPON_MELEE: - return ProtectionIcons[1]; - case WEAPON_MAGIC: - return ProtectionIcons[2]; - } - return null; - } - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/WeaponType.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/WeaponType.java deleted file mode 100644 index 1dc00c8311..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/WeaponType.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2019, gazivodag - * 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.prayagainstplayer; - -import net.runelite.api.Client; -import net.runelite.api.ItemComposition; -import net.runelite.api.Player; -import net.runelite.api.kit.KitType; - -enum WeaponType { - - WEAPON_MELEE, - WEAPON_RANGED, - WEAPON_MAGIC, - WEAPON_UNKNOWN; - - /** - * im fully aware this could of been done better!!! - * @param client - * @param attacker - * @return - */ - public static WeaponType checkWeaponOnPlayer (Client client, Player attacker) { - int itemId = attacker.getPlayerComposition().getEquipmentId(KitType.WEAPON); - ItemComposition itemComposition = client.getItemDefinition(itemId); - String weaponNameGivenLowerCase = itemComposition.getName().toLowerCase(); - - if (itemId == -1) return WEAPON_MELEE; - if (weaponNameGivenLowerCase == null || weaponNameGivenLowerCase.toLowerCase().contains("null")) return WEAPON_MELEE; - - for (String meleeWeaponName : meleeWeaponNames) { - if (weaponNameGivenLowerCase.contains(meleeWeaponName) && !weaponNameGivenLowerCase.contains("thrownaxe")) { - return WEAPON_MELEE; - } - } - - for (String rangedWeaponName : rangedWeaponNames) { - if (weaponNameGivenLowerCase.contains(rangedWeaponName)) { - return WEAPON_RANGED; - } - } - - for (String magicWeaponName : magicWeaponNames) { - if (weaponNameGivenLowerCase.contains(magicWeaponName)) { - return WEAPON_MAGIC; - } - } - - return WEAPON_UNKNOWN; - - } - - private static String[] meleeWeaponNames = { - "sword", - "scimitar", - "dagger", - "spear", - "mace", - "axe", - "whip", - "tentacle", - "-ket-", - "-xil-", - "warhammer", - "halberd", - "claws", - "hasta", - "scythe", - "maul", - "anchor", - "sabre", - "excalibur", - "machete", - "dragon hunter lance", - "event rpg", - "silverlight", - "darklight", - "arclight", - "flail", - "granite hammer", - "rapier", - "bulwark" - }; - - private static String[] rangedWeaponNames = { - "bow", - "blowpipe", - "xil-ul", - "knife", - "dart", - "thrownaxe", - "chinchompa", - "ballista" - }; - - private static String[] magicWeaponNames = { - "staff", - "trident", - "wand", - "dawnbringer" - }; - -}