diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FontStyle.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FontStyle.java deleted file mode 100644 index c9921af410..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FontStyle.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2019, ganom - * 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.freezetimers; - -import java.awt.Font; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter(AccessLevel.PACKAGE) -@AllArgsConstructor -public enum FontStyle -{ - BOLD("Bold", Font.BOLD), - ITALIC("Italic", Font.ITALIC), - PLAIN("Plain", Font.PLAIN); - - private String name; - private int font; - - @Override - public String toString() - { - return getName(); - } -} \ No newline at end of file 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 fbd3f9efbd..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersConfig.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2019, ganom - * Copyright (c) 2019, pklite - * 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.freezetimers; - -import net.runelite.client.config.Config; -import net.runelite.client.config.ConfigGroup; -import net.runelite.client.config.ConfigItem; -import net.runelite.client.config.ConfigTitleSection; -import net.runelite.client.config.Range; -import net.runelite.client.config.Title; -import net.runelite.client.config.Units; - -@ConfigGroup("freezetimers") -public interface FreezeTimersConfig extends Config -{ - @ConfigTitleSection( - keyName = "timersTitle", - name = "Timers", - description = "", - position = 1 - ) - default Title timersTitle() - { - return new Title(); - } - - @ConfigItem( - keyName = "showOverlay", - name = "Show Players", - description = "Configure if the player overlay should be shown", - position = 2, - titleSection = "timersTitle" - ) - default boolean showPlayers() - { - return true; - } - - @ConfigItem( - keyName = "showNpcs", - name = "Show NPCs", - description = "Configure if the npc overlay should be shown", - position = 3, - titleSection = "timersTitle" - ) - default boolean showNpcs() - { - return false; - } - - @ConfigItem( - keyName = "FreezeTimers", - name = "Show Freeze Timers", - description = "Toggle overlay for Freeze timers", - position = 4, - titleSection = "timersTitle" - ) - default boolean FreezeTimers() - { - return true; - } - - @ConfigItem( - keyName = "TB", - name = "Show TB Timers", - description = "Toggle overlay for TB timers", - position = 5, - titleSection = "timersTitle" - ) - default boolean TB() - { - return true; - } - - @ConfigItem( - keyName = "Veng", - name = "Show Veng Timers", - description = "Toggle overlay for Veng timers", - position = 6, - titleSection = "timersTitle" - ) - default boolean Veng() - { - return true; - } - - @ConfigTitleSection( - keyName = "overlayTitle", - name = "Overlay", - description = "", - position = 7 - ) - default Title overlayTitle() - { - return new Title(); - } - - @ConfigItem( - keyName = "xoffset", - name = "X Offset", - description = "Increasing this will push further away from model. Does not apply to text timers.", - position = 8, - titleSection = "overlayTitle" - ) - @Units(Units.PIXELS) - default int offset() - { - return 20; - } - - @ConfigItem( - keyName = "noImage", - name = "Text Timers", - description = "Remove Images from Timers", - position = 9, - titleSection = "overlayTitle" - ) - default boolean noImage() - { - return false; - } - - @ConfigItem( - keyName = "fontStyle", - name = "Font Style", - description = "Bold/Italics/Plain", - position = 10, - titleSection = "overlayTitle" - ) - default FontStyle fontStyle() - { - return FontStyle.BOLD; - } - - @Range( - min = 9, - max = 14 - ) - @ConfigItem( - keyName = "textSize", - name = "Text Size", - description = "Text Size for Timers.", - position = 11, - titleSection = "overlayTitle" - ) - @Units(Units.POINTS) - default int textSize() - { - return 11; - } -} 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 7daa3b7089..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersOverlay.java +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Copyright (c) 2019, ganom - * Copyright (c) 2019, kyle - * Copyright (c) 2019, pklite - * 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.freezetimers; - -import java.awt.Color; -import static java.awt.Color.WHITE; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import javax.inject.Inject; -import javax.inject.Singleton; -import net.runelite.api.Actor; -import net.runelite.api.Client; -import net.runelite.api.Point; -import net.runelite.client.ui.FontManager; -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; -import net.runelite.client.util.ImageUtil; - -@Singleton -public class FreezeTimersOverlay extends Overlay -{ - private final FreezeTimersPlugin plugin; - private final Client client; - private final Font timerFont = FontManager.getRunescapeBoldFont().deriveFont(14.0f); - private final BufferedImage FREEZE_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "freeze.png"); - private final BufferedImage FREEZE_IMMUNE_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "freezeimmune.png"); - private final BufferedImage TB_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "teleblock.png"); - private final BufferedImage TB_IMMUNE_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "teleblockimmune.png"); - private final BufferedImage VENG_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "veng.png"); - private final Timers timers; - - - @Inject - public FreezeTimersOverlay(final FreezeTimersPlugin plugin, final Client client, final Timers timers) - { - this.plugin = plugin; - this.client = client; - this.timers = timers; - setPriority(OverlayPriority.HIGHEST); - setPosition(OverlayPosition.DYNAMIC); - setLayer(OverlayLayer.UNDER_WIDGETS); - } - - @Override - public Dimension render(Graphics2D graphics) - { - if (plugin.isShowPlayers()) - { - client.getPlayers().forEach((p) -> renderOverlayFor(graphics, p)); - } - if (plugin.isShowNpcs()) - { - client.getNpcs().forEach((npc) -> renderOverlayFor(graphics, npc)); - } - return null; - } - - private void renderOverlayFor(Graphics2D g, Actor actor) - { - if (timers.areAllTimersZero(actor)) - { - return; - } - - int overlaysDrawn = 0; - - if (drawFreezeOverlay(g, actor, overlaysDrawn) && plugin.isFreezeTimers()) - { - overlaysDrawn++; - } - if (drawTBOverlay(g, actor, overlaysDrawn) && plugin.isTB()) - { - overlaysDrawn++; - } - if (drawVengOverlay(g, actor, overlaysDrawn) && plugin.isVeng()) - { - overlaysDrawn++; - } - } - - private boolean drawFreezeOverlay(Graphics2D g, Actor actor, int overlaysDrawn) - { - final long currentTick = System.currentTimeMillis(); - if (timers.getTimerReApply(actor, TimerType.FREEZE) <= currentTick) - { - return false; - } - - long finishedAt; - BufferedImage image; - if (timers.getTimerEnd(actor, TimerType.FREEZE) > currentTick) - { - finishedAt = timers.getTimerEnd(actor, TimerType.FREEZE); - image = FREEZE_IMAGE; - } - else - { - finishedAt = timers.getTimerReApply(actor, TimerType.FREEZE); - image = FREEZE_IMMUNE_IMAGE; - } - - final String text = processTickCounter(finishedAt); - final Point poi = actor.getCanvasTextLocation(g, text, 0); - - if (poi == null) - { - return false; - } - - final Point fixedPoint = new Point(poi.getX(), poi.getY()); - - if (plugin.isNoImage()) - { - if (image == FREEZE_IMAGE) - { - OverlayUtil.renderTextLocation(g, text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.WHITE, fixedPoint, false, 0); - } - else - { - OverlayUtil.renderTextLocation(g, text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.YELLOW, fixedPoint, false, 0); - } - } - else - { - renderActorText(g, actor, text, overlaysDrawn, image); - } - return true; - } - - private boolean drawTBOverlay(Graphics2D g, Actor actor, int overlaysDrawn) - { - final long currentTick = System.currentTimeMillis(); - if (!plugin.isTB()) - { - return false; - } - if (timers.getTimerReApply(actor, TimerType.TELEBLOCK) <= currentTick) - { - return false; - } - - long finishedAt; - BufferedImage image; - if (timers.getTimerEnd(actor, TimerType.TELEBLOCK) > currentTick) - { - finishedAt = timers.getTimerEnd(actor, TimerType.TELEBLOCK); - image = TB_IMAGE; - } - else - { - finishedAt = timers.getTimerReApply(actor, TimerType.TELEBLOCK); - image = TB_IMMUNE_IMAGE; - } - - final String text = processTickCounter(finishedAt); - final Point poi = actor.getCanvasTextLocation(g, text, 0); - - if (poi == null) - { - return false; - } - - final Point fixedPoint = new Point(poi.getX() + 20, poi.getY()); - - if (plugin.isNoImage()) - { - if (timers.getTimerReApply(actor, TimerType.FREEZE) <= currentTick) - { - OverlayUtil.renderTextLocation(g, text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.CYAN, poi, false, 0); - } - else - { - OverlayUtil.renderTextLocation(g, " | " + text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.CYAN, fixedPoint, false, 0); - } - - if (timers.getTimerReApply(actor, TimerType.VENG) >= currentTick) - { - OverlayUtil.renderTextLocation(g, " | " + text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.CYAN, fixedPoint, false, 0); - } - } - else - { - renderActorText(g, actor, text, overlaysDrawn, image); - } - return true; - } - - private boolean drawVengOverlay(Graphics2D g, Actor actor, int overlaysDrawn) - { - final long currentTick = System.currentTimeMillis(); - if (!plugin.isVeng()) - { - return false; - } - if (timers.getTimerEnd(actor, TimerType.VENG) <= currentTick) - { - return false; - } - final long finishedAt = timers.getTimerEnd(actor, TimerType.VENG); - - final String text = processTickCounter(finishedAt); - final Point poi = actor.getCanvasTextLocation(g, text, 0); - - if (poi == null) - { - return false; - } - - final Point fixedPoint = new Point(poi.getX() - 20, poi.getY()); - if (plugin.isNoImage()) - { - if (timers.getTimerEnd(actor, TimerType.FREEZE) <= currentTick) - { - OverlayUtil.renderTextLocation(g, text, plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.RED, poi, false, 0); - } - if (timers.getTimerEnd(actor, TimerType.FREEZE) >= currentTick) - { - OverlayUtil.renderTextLocation(g, text + " | ", plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.RED, fixedPoint, false, 0); - } - if (timers.getTimerEnd(actor, TimerType.TELEBLOCK) >= currentTick) - { - OverlayUtil.renderTextLocation(g, text + " | ", plugin.getTextSize(), plugin.getFontStyle().getFont(), Color.RED, fixedPoint, false, 0); - } - } - else - { - renderActorText(g, actor, text, overlaysDrawn, VENG_IMAGE); - } - return true; - } - - private void renderActorText(Graphics2D g, Actor actor, String text, int overlaysDrawn, BufferedImage image) - { - final int yOffset = (overlaysDrawn * 18); - g.setFont(timerFont); - g.setColor(WHITE); - final int xOffset = plugin.getOffset(); - renderActorTextAndImage(g, actor, text, Color.WHITE, image, yOffset, - xOffset); - } - - private void renderImageLocation(Graphics2D graphics, Point imgLoc, BufferedImage image) - { - final int x = imgLoc.getX(); - final int y = imgLoc.getY(); - - graphics.drawImage(image, x, y, null); - } - - private void renderActorTextAndImage(Graphics2D graphics, Actor actor, String text, Color color, BufferedImage image, int yOffset, int xOffset) - { - Point textLocation = new Point(actor.getCanvasImageLocation(image, 0).getX() + xOffset, actor.getCanvasImageLocation(image, 0).getY() + yOffset); - renderImageLocation(graphics, textLocation, image); - xOffset = image.getWidth() + 1; - yOffset = (image.getHeight() - (int) graphics.getFontMetrics().getStringBounds(text, graphics).getHeight()); - textLocation = new Point(textLocation.getX() + xOffset, textLocation.getY() + image.getHeight() - yOffset); - OverlayUtil.renderTextLocation(graphics, textLocation, text, color); - } - - private String processTickCounter(long finishedAt) - { - final long currentTick = System.currentTimeMillis(); - final long tickDifference = finishedAt - currentTick; - long seconds = tickDifference / 1000; - seconds++; - final int minutes = (int) (seconds / 60); - seconds = seconds % 60; - String text = seconds > 9 ? seconds + "" : "0" + seconds; - if (minutes > 0) - { - text = minutes + ":" + text; - } - return text + ""; - } -} 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 93a0566faa..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright (c) 2019, ganom - * Copyright (c) 2019, pklite - * 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.freezetimers; - -import com.google.inject.Provides; -import java.util.EnumSet; -import java.util.List; -import javax.inject.Inject; -import javax.inject.Singleton; -import lombok.AccessLevel; -import lombok.Getter; -import net.runelite.api.Actor; -import net.runelite.api.ChatMessageType; -import net.runelite.api.Client; -import net.runelite.api.NPC; -import net.runelite.api.Player; -import net.runelite.api.WorldType; -import net.runelite.api.coords.WorldPoint; -import net.runelite.api.events.ChatMessage; -import net.runelite.api.events.GameTick; -import net.runelite.api.events.NpcDespawned; -import net.runelite.api.events.PlayerDeath; -import net.runelite.api.events.SpotAnimationChanged; -import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.Subscribe; -import net.runelite.client.events.ConfigChanged; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginType; -import net.runelite.client.plugins.multiindicators.MapLocations; -import net.runelite.client.ui.overlay.OverlayManager; -import net.runelite.client.util.PvPUtil; -import org.apache.commons.lang3.ArrayUtils; - -@PluginDescriptor( - name = "Freeze Timers", - description = "Shows a freeze timer overlay on players", - tags = {"freeze", "timers", "barrage", "teleblock", "pklite"}, - type = PluginType.PVP, - enabledByDefault = false -) -@Singleton -public class FreezeTimersPlugin extends Plugin -{ - private static final int VORKATH_REGION = 9023; - - @Inject - private Client client; - - @Inject - private OverlayManager overlayManager; - - @Inject - private Timers timers; - - @Inject - private PrayerTracker prayerTracker; - - @Inject - private FreezeTimersOverlay overlay; - - @Inject - private FreezeTimersConfig config; - - @Getter(AccessLevel.PACKAGE) - private boolean showPlayers; - @Getter(AccessLevel.PACKAGE) - private boolean showNpcs; - @Getter(AccessLevel.PACKAGE) - private boolean FreezeTimers; - @Getter(AccessLevel.PACKAGE) - private boolean TB; - @Getter(AccessLevel.PACKAGE) - private boolean Veng; - @Getter(AccessLevel.PACKAGE) - private int offset; - @Getter(AccessLevel.PACKAGE) - private boolean noImage; - @Getter(AccessLevel.PACKAGE) - private FontStyle fontStyle; - @Getter(AccessLevel.PACKAGE) - private int textSize; - - public void startUp() - { - updateConfig(); - - overlayManager.add(overlay); - } - - public void shutDown() - { - overlayManager.remove(overlay); - } - - @Provides - public FreezeTimersConfig getConfig(ConfigManager configManager) - { - return configManager.getConfig(FreezeTimersConfig.class); - } - - @Subscribe - public void onSpotAnimationChanged(SpotAnimationChanged graphicChanged) - { - final int oldGraphic = prayerTracker.getSpotanimLastTick(graphicChanged.getActor()); - final int newGraphic = graphicChanged.getActor().getSpotAnimation(); - - if (oldGraphic == newGraphic) - { - return; - } - - final PlayerSpellEffect effect = PlayerSpellEffect.getFromSpotAnim(newGraphic); - - if (effect == PlayerSpellEffect.NONE) - { - return; - } - - final long currentTime = System.currentTimeMillis(); - - if (timers.getTimerReApply(graphicChanged.getActor(), effect.getType()) > currentTime) - { - return; - } - - long length = effect.getTimerLengthTicks(); - - if (effect.isHalvable() && prayerTracker.getPrayerIconLastTick(graphicChanged.getActor()) == 2) - { - length /= 2; - } - - timers.setTimerEnd(graphicChanged.getActor(), effect.getType(), - currentTime + length); - } - - @Subscribe - public void onGameTick(GameTick tickEvent) - { - prayerTracker.gameTick(); - - for (Actor actor : client.getPlayers()) - { - if (prayerTracker.getSpotanimLastTick(actor) != actor.getSpotAnimation()) - { - SpotAnimationChanged callback = new SpotAnimationChanged(); - callback.setActor(actor); - client.getCallbacks().post(SpotAnimationChanged.class, callback); - } - } - - List teleblocked = timers.getAllActorsOnTimer(TimerType.TELEBLOCK); - - if (!teleblocked.isEmpty()) - { - final EnumSet worldTypes = client.getWorldType(); - - for (Actor actor : teleblocked) - { - final WorldPoint actorLoc = actor.getWorldLocation(); - - if (!WorldType.isAllPvpWorld(worldTypes) && (actorLoc.getY() < 3525 || PvPUtil.getWildernessLevelFrom(actorLoc) <= 0)) - { - timers.setTimerReApply(actor, TimerType.TELEBLOCK, System.currentTimeMillis()); - } - else if (WorldType.isPvpWorld(worldTypes) && - MapLocations.getPvpSafeZones(actorLoc.getPlane()).contains(actorLoc.getX(), actorLoc.getY())) - { - timers.setTimerReApply(actor, TimerType.TELEBLOCK, System.currentTimeMillis()); - } - else if (WorldType.isDeadmanWorld(worldTypes) && - MapLocations.getDeadmanSafeZones(actorLoc.getPlane()).contains(actorLoc.getX(), actorLoc.getY())) - { - timers.setTimerReApply(actor, TimerType.TELEBLOCK, System.currentTimeMillis()); - } - } - } - } - - @Subscribe - private void onPlayerDeath(PlayerDeath event) - { - final Player localPlayer = client.getLocalPlayer(); - final long currentTime = System.currentTimeMillis(); - - for (TimerType type : TimerType.values()) - { - if (timers.getTimerReApply(localPlayer, type) <= currentTime) - { - continue; - } - - timers.setTimerReApply(localPlayer, type, currentTime); - } - } - - @Subscribe - public void onNpcDespawned(NpcDespawned event) - { - if (!isAtVorkath()) - { - return; - } - - final NPC npc = event.getNpc(); - - if (npc.getName() == null) - { - return; - } - - if (npc.getName().equals("Zombified Spawn")) - { - timers.setTimerReApply(client.getLocalPlayer(), TimerType.FREEZE, - System.currentTimeMillis()); - } - } - - @Subscribe - public void onChatMessage(ChatMessage event) - { - if (event.getType() != ChatMessageType.GAMEMESSAGE - || !event.getMessage().contains("Your Tele Block has been removed")) - { - return; - } - - timers.setTimerReApply(client.getLocalPlayer(), TimerType.TELEBLOCK, System.currentTimeMillis()); - } - - private boolean isAtVorkath() - { - return ArrayUtils.contains(client.getMapRegions(), VORKATH_REGION); - } - - @Subscribe - private void onConfigChanged(ConfigChanged event) - { - if (event.getGroup().equals("freezetimers")) - { - updateConfig(); - } - } - - private void updateConfig() - { - this.showPlayers = config.showPlayers(); - this.showNpcs = config.showNpcs(); - this.FreezeTimers = config.FreezeTimers(); - this.TB = config.TB(); - this.Veng = config.Veng(); - this.offset = config.offset(); - this.noImage = config.noImage(); - this.fontStyle = config.fontStyle(); - this.textSize = config.textSize(); - } -} \ No newline at end of file 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 7c7123fc1f..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/PlayerSpellEffect.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2019, ganom - * Copyright (c) 2019, pklite - * 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.freezetimers; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@AllArgsConstructor -public enum PlayerSpellEffect -{ - BIND("Bind", 181, 4800, false, 0, TimerType.FREEZE), - SNARE("Snare", 180, 9600, false, 1, TimerType.FREEZE), - ENTANGLE("Entangle", 179, 14400, false, 2, TimerType.FREEZE), - RUSH("Ice Rush", 361, 4800, false, 3, TimerType.FREEZE), - BURST("Ice Burst", 363, 9600, false, 4, TimerType.FREEZE), - BLITZ("Ice Blitz", 367, 14400, false, 5, TimerType.FREEZE), - BARRAGE("Ice Barrage", 369, 19200, false, 6, TimerType.FREEZE), - TELEBLOCK("Teleblock", 345, 300000, true, 7, TimerType.TELEBLOCK), - VENG("Vengeance", 726, 30000, false, 8, TimerType.VENG), - VENG_OTHER("Vengeance Other", 725, 30000, false, 9, TimerType.VENG), - NONE("Nothing", -69, 420, true, 9999, TimerType.THIS_SHIT_BROKE); - - @Getter(AccessLevel.PACKAGE) - private final String name; - @Getter(AccessLevel.PACKAGE) - private final int spotAnimId; - @Getter(AccessLevel.PACKAGE) - private final int timerLengthTicks; - @Getter(AccessLevel.PACKAGE) - private boolean halvable; - @Getter(AccessLevel.PACKAGE) - private final int spriteIdx; - @Getter(AccessLevel.PACKAGE) - private final TimerType type; - - static PlayerSpellEffect getFromSpotAnim(int spotAnim) - { - for (PlayerSpellEffect effect : values()) - { - if (effect.getSpotAnimId() == spotAnim) - { - return effect; - } - } - return NONE; - } - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/PrayerTracker.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/PrayerTracker.java deleted file mode 100644 index 38f236567c..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/PrayerTracker.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2019, pklite - * 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.freezetimers; - -import java.util.HashMap; -import java.util.Map; -import javax.inject.Inject; -import javax.inject.Singleton; -import lombok.extern.slf4j.Slf4j; -import net.runelite.api.Actor; -import net.runelite.api.Client; -import net.runelite.api.NPC; -import net.runelite.api.Player; - -@Slf4j -@Singleton -class PrayerTracker -{ - - @Inject - private Client client; - - private final Map> lastTick = new HashMap<>(); - private final Map> newTick = new HashMap<>(); - - public void gameTick() - { - lastTick.clear(); - lastTick.putAll(newTick); - newTick.clear(); - for (Player p : client.getPlayers()) - { - processActor(p); - } - for (NPC npc : client.getNpcs()) - { - processActor(npc); - } - } - - private void processActor(Actor actor) - { - if (!newTick.containsKey(actor)) - { - newTick.put(actor, new HashMap<>()); - } - if (actor instanceof Player) - { - newTick.get(actor).put("PrayerIcon", ((Player) actor).getOverheadIcon() == null ? -1 : ((Player) actor).getOverheadIcon().ordinal()); - } - newTick.get(actor).put("SpotAnim", actor.getSpotAnimation()); - } - - int getPrayerIconLastTick(Actor p) - { - return lastTick.getOrDefault(p, new HashMap<>()).getOrDefault("PrayerIcon", -1337); - } - - int getSpotanimLastTick(Actor p) - { - return lastTick.getOrDefault(p, new HashMap<>()).getOrDefault("SpotAnim", -1337); - } - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/TimerType.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/TimerType.java deleted file mode 100644 index 82aee9aecb..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/TimerType.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2019, pklite - * 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.freezetimers; - -import lombok.AccessLevel; -import lombok.Getter; - -public enum TimerType -{ - FREEZE(3000), - VENG(0), - TELEBLOCK(45000), - THIS_SHIT_BROKE(-1); - - @Getter(AccessLevel.PACKAGE) - private final int immunityTime; - - TimerType(int immunityTime) - { - this.immunityTime = immunityTime; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java deleted file mode 100644 index 7e025e6ad4..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2019, pklite - * 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.freezetimers; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import javax.inject.Singleton; -import lombok.extern.slf4j.Slf4j; -import net.runelite.api.Actor; - -@Slf4j -@Singleton -class Timers -{ - private final Map> timerMap = new HashMap<>(); - - void setTimerEnd(Actor actor, TimerType type, long n) - { - if (!timerMap.containsKey(actor)) - { - timerMap.put(actor, new HashMap<>()); - } - - timerMap.get(actor).put(type, n + type.getImmunityTime()); - } - - void setTimerReApply(Actor actor, TimerType type, long n) - { - if (!timerMap.containsKey(actor)) - { - timerMap.put(actor, new HashMap<>()); - } - - timerMap.get(actor).put(type, n); - } - - long getTimerEnd(Actor actor, TimerType type) - { - if (!timerMap.containsKey(actor)) - { - return 0; - } - - return timerMap.get(actor).getOrDefault(type, (long) type.getImmunityTime()) - type.getImmunityTime(); - } - - long getTimerReApply(Actor actor, TimerType type) - { - if (!timerMap.containsKey(actor)) - { - return 0; - } - - return timerMap.get(actor).getOrDefault(type, (long) 0); - } - - List getAllActorsOnTimer(TimerType type) - { - final List actors = new ArrayList<>(); - final Iterator it = timerMap.keySet().iterator(); - - while (it.hasNext()) - { - final Actor actor = it.next(); - - for (TimerType timerType : TimerType.values()) - { - if (getTimerReApply(actor, timerType) > System.currentTimeMillis()) - { - break; - } - it.remove(); - break; - } - - final long end = getTimerReApply(actor, type); - - if (end > System.currentTimeMillis()) - { - actors.add(actor); - } - } - - return actors; - } - - boolean areAllTimersZero(Actor actor) - { - for (TimerType type : TimerType.values()) - { - if (getTimerReApply(actor, type) > System.currentTimeMillis()) - { - return false; - } - } - return true; - } -} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/freeze.png b/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/freeze.png deleted file mode 100644 index 12b6928900..0000000000 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/freeze.png and /dev/null differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/freezeimmune.png b/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/freezeimmune.png deleted file mode 100644 index bdfa3c9445..0000000000 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/freezeimmune.png and /dev/null differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/teleblock.png b/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/teleblock.png deleted file mode 100644 index b04586b676..0000000000 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/teleblock.png and /dev/null differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/teleblockimmune.png b/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/teleblockimmune.png deleted file mode 100644 index 79514a7d3c..0000000000 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/teleblockimmune.png and /dev/null differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/veng.png b/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/veng.png deleted file mode 100644 index 3d652e504f..0000000000 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/freezetimers/veng.png and /dev/null differ