diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/WaveOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/WaveOverlay.java index 6421dfbcbc..2b5fdf370b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/WaveOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/WaveOverlay.java @@ -38,6 +38,7 @@ import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; import net.runelite.client.ui.overlay.components.table.TableComponent; +import net.runelite.client.ui.overlay.components.table.TableAlignment; class WaveOverlay extends Overlay { @@ -97,14 +98,19 @@ class WaveOverlay extends Overlay .color(HEADER_COLOR) .build()); + TableComponent tableComponent = new TableComponent(); + tableComponent.setColumnAlignments(TableAlignment.CENTER); for (String line : buildWaveLines(waveContents)) { tableComponent.addRow(line); } - panelComponent.getChildren().add(tableComponent); + if (!tableComponent.isEmpty()) + { + panelComponent.getChildren().add(tableComponent); + } } private static Collection buildWaveLines(final Map wave) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoConfig.java index 1d25deef3e..22f0a3f63b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoConfig.java @@ -28,39 +28,63 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; +import java.awt.*; + @ConfigGroup("inferno") public interface InfernoConfig extends Config -{ + { @ConfigItem( - position = 0, - keyName = "Nibbler Overlay", - name = "Nibbler Overlay", - description = "Shows if there are any Nibblers left" + position = 0, + keyName = "Nibbler Overlay", + name = "Nibbler Overlay", + description = "Shows if there are any Nibblers left" ) default boolean displayNibblerOverlay() - { - return false; - } + { + return false; + } @ConfigItem( - position = 1, - keyName = "Prayer Helper", - name = "Prayer Helper", - description = "Tells you what to flick in how many ticks" + position = 1, + keyName = "Prayer Helper", + name = "Prayer Helper", + description = "Tells you what to flick in how many ticks" ) default boolean showPrayerHelp() - { - return false; - } - + { + return false; + } + @ConfigItem( - position = 2, - keyName = "Wave Display", - name = "Wave display", - description = "Shows monsters that will spawn on the selected wave(s)." + position = 2, + keyName = "Wave Display", + name = "Wave display", + description = "Shows monsters that will spawn on the selected wave(s)." ) default InfernoWaveDisplayMode waveDisplay() - { - return InfernoWaveDisplayMode.BOTH; - } -} + { + return InfernoWaveDisplayMode.BOTH; + } + + @ConfigItem( + position = 3, + keyName = "getWaveOverlayHeaderColor", + name = "Wave Header", + description = "Color for Wave Header" + ) + default Color getWaveOverlayHeaderColor() + { + return Color.ORANGE; + } + + @ConfigItem( + position = 4, + keyName = "getWaveTextColor", + name = "Wave Text Color", + description = "Color for Wave Texts" + ) + default Color getWaveTextColor() + { + return Color.WHITE; + } + } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoPlugin.java index fd48d077b7..0bc1b4f746 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoPlugin.java @@ -25,17 +25,16 @@ package net.runelite.client.plugins.inferno; import com.google.inject.Provides; + import java.util.ArrayList; -import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.annotation.Nullable; import javax.inject.Inject; 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.GameState; @@ -57,18 +56,13 @@ import net.runelite.client.ui.overlay.OverlayManager; import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( - name = "Inferno", - description = "Inferno helper", - tags = {"combat", "overlay", "pve", "pvm"}, - type = PluginType.PVM + name = "Inferno", + description = "Inferno helper", + tags = {"combat", "overlay", "pve", "pvm"}, + type = PluginType.PVM ) public class InfernoPlugin extends Plugin -{ - - private static final Pattern WAVE_PATTERN = Pattern.compile(".*Wave: (\\d+).*"); - private static final int MAX_MONSTERS_OF_TYPE_PER_WAVE = 6; - private static final int INFERNO_REGION = 9043; - static final int MAX_WAVE = 69; + { @Inject private Client client; @@ -78,7 +72,7 @@ public class InfernoPlugin extends Plugin @Inject private InfernoOverlay infernoOverlay; - + @Inject private InfernoWaveOverlay waveOverlay; @@ -93,10 +87,7 @@ public class InfernoPlugin extends Plugin @Inject private InfernoConfig config; - - @Getter - static final List> WAVES = new ArrayList<>(); - + @Getter private int currentWave = -1; @@ -118,310 +109,330 @@ public class InfernoPlugin extends Plugin private InfernoJadAttack attack; private NPC jad; + private static final int INFERNO_REGION = 9043; + private int currentWaveNumber; + private int nextWaveNumber; + private Map monster; + private Map waves; + private List waveMonsters; - - static - { - final InfernoWaveMonster[] waveMonsters = InfernoWaveMonster.values(); - - // Add wave 1, future waves are derived from its contents - final EnumMap waveOne = new EnumMap<>(InfernoWaveMonster.class); - waveOne.put(waveMonsters[0], 1); - WAVES.add(waveOne); - - for (int wave = 1; wave < MAX_WAVE; wave++) + public InfernoPlugin() { - final EnumMap prevWave = WAVES.get(wave - 1).clone(); - int maxMonsterOrdinal = -1; - - for (int i = 0; i < waveMonsters.length; i++) - { - final int ordinalMonsterQuantity = prevWave.getOrDefault(waveMonsters[i], 0); - - if (ordinalMonsterQuantity == MAX_MONSTERS_OF_TYPE_PER_WAVE) - { - maxMonsterOrdinal = i; - break; - } - } - - if (maxMonsterOrdinal >= 0) - { - prevWave.remove(waveMonsters[maxMonsterOrdinal]); - } - - final int addedMonsterOrdinal = maxMonsterOrdinal >= 0 ? maxMonsterOrdinal + 1 : 0; - final InfernoWaveMonster addedMonster = waveMonsters[addedMonsterOrdinal]; - final int addedMonsterQuantity = prevWave.getOrDefault(addedMonster, 0); - - prevWave.put(addedMonster, addedMonsterQuantity + 1); - - WAVES.add(prevWave); + waveMonsters = new ArrayList(); } - } @Provides InfernoConfig provideConfig(ConfigManager configManager) - { - return configManager.getConfig(InfernoConfig.class); - } + { + return configManager.getConfig(InfernoConfig.class); + } @Override protected void startUp() throws Exception - { - overlayManager.add(infernoOverlay); - overlayManager.add(infernoInfobox); - overlayManager.add(nibblerOverlay); - overlayManager.add(waveOverlay); - overlayManager.add(jadOverlay); - monsters = new HashMap<>(); - monsterCurrentAttackMap = new HashMap<>(6); - for (int i = 1; i <= 6; i++) { - monsterCurrentAttackMap.put(i, new ArrayList<>()); + overlayManager.add(infernoOverlay); + overlayManager.add(infernoInfobox); + overlayManager.add(nibblerOverlay); + overlayManager.add(waveOverlay); + overlayManager.add(jadOverlay); + monster = InfernoWaveMappings.npcNameMapping(); + waves = InfernoWaveMappings.waveMapping(); + monsters = new HashMap<>(); + monsterCurrentAttackMap = new HashMap<>(6); + for (int i = 1; i <= 6; i++) + { + monsterCurrentAttackMap.put(i, new ArrayList<>()); + } + nibblers = new ArrayList<>(); + priorityNPC = new InfernoNPC[4]; } - nibblers = new ArrayList<>(); - priorityNPC = new InfernoNPC[4]; - } @Override protected void shutDown() throws Exception - { - overlayManager.remove(infernoInfobox); - overlayManager.remove(infernoOverlay); - overlayManager.remove(nibblerOverlay); - overlayManager.remove(waveOverlay); - overlayManager.remove(jadOverlay); - jad = null; - attack = null; - } + { + overlayManager.remove(infernoInfobox); + overlayManager.remove(infernoOverlay); + overlayManager.remove(nibblerOverlay); + overlayManager.remove(waveOverlay); + overlayManager.remove(jadOverlay); + jad = null; + attack = null; + monster = null; + waves = null; + currentWaveNumber = -1; + nextWaveNumber = -1; + } @Subscribe public void onNpcSpawned(NpcSpawned event) - { - if (client.getMapRegions()[0] != 9043) return; - - NPC npc = event.getNpc(); - if (isValidInfernoMob(npc)) { - monsters.put(npc, new InfernoNPC(npc)); - System.out.println(monsters.size()); - } - if (npc.getId() == NpcID.JALNIB) - { - nibblers.add(npc); - } + if (client.getMapRegions()[0] != 9043) return; - final int id = event.getNpc().getId(); + NPC npc = event.getNpc(); + if (isValidInfernoMob(npc)) + { + monsters.put(npc, new InfernoNPC(npc)); + System.out.println(monsters.size()); + } + if (npc.getId() == NpcID.JALNIB) + { + nibblers.add(npc); + } - if (id == NpcID.JALTOKJAD || id == NpcID.JALTOKJAD_7704) - { - jad = event.getNpc(); + final int id = event.getNpc().getId(); + + if (id == NpcID.JALTOKJAD || id == NpcID.JALTOKJAD_7704) + { + jad = event.getNpc(); + } + final Actor actor = event.getActor(); + if (actor != null) + { + waveMonsters.add(actor); + } } - } @Subscribe public void onNpcDespawned(NpcDespawned event) - { - if (client.getMapRegions()[0] != 9043) return; - - NPC npc = event.getNpc(); - if (monsters.containsKey(npc)) { - monsters.remove(npc); - System.out.println(monsters.size()); + if (client.getMapRegions()[0] != 9043) return; + + NPC npc = event.getNpc(); + if (monsters.containsKey(npc)) + { + monsters.remove(npc); + System.out.println(monsters.size()); + } + + if (npc.getId() == NpcID.JALNIB) + { + nibblers.remove(npc); + } + + if (jad == event.getNpc()) + { + jad = null; + attack = null; + } + final Actor actor = event.getActor(); + if (actor != null) + { + waveMonsters.remove(actor); + } } - if (npc.getId() == NpcID.JALNIB) - { - nibblers.remove(npc); - } - - if (jad == event.getNpc()) - { - jad = null; - attack = null; - } - } - @Subscribe public void onGameStateChanged(GameStateChanged event) - { - if (event.getGameState() != GameState.LOGGED_IN) { - return; + if (event.getGameState() != GameState.LOGGED_IN) + { + return; + } + + if (!inInferno()) + { + currentWave = -1; + } } - if (!inInferno()) - { - currentWave = -1; - } - } - @Subscribe public void onChatMessage(ChatMessage event) - { - final Matcher waveMatcher = WAVE_PATTERN.matcher(event.getMessage()); - - if (event.getType() != ChatMessageType.GAMEMESSAGE - || !inInferno() - || !waveMatcher.matches()) { - return; - } - currentWave = Integer.parseInt(waveMatcher.group(1)); - } + if (event.getType() != ChatMessageType.GAMEMESSAGE || !inInferno()) + { + return; + } + String message = event.getMessage(); + if (event.getMessage().contains("Wave:")) + { + message = message.substring(message.indexOf(": ") + 2); + currentWaveNumber = Integer.parseInt(message.substring(0, message.indexOf("<"))); + nextWaveNumber = ((currentWaveNumber < 63) ? (currentWaveNumber + 1) : -1); + } + + } @Subscribe public void onGameTick(GameTick event) - { - if (client.getMapRegions()[0] != 9043) return; - - clearMapAndPriority(); - - for (InfernoNPC monster : monsters.values()) { - calculateDistanceToPlayer(monster); + if (client.getMapRegions()[0] != 9043) return; - NPC npc = monster.getNpc(); + clearMapAndPriority(); - // if they are not attacking but are still attacking - if (monster.isAttacking()) - { - monster.setTicksTillAttack(monster.getTicksTillAttack() - 1); - - // sets the blobs attack style - if (monster.getName().equals("blob") && monster.getTicksTillAttack() == 3 && monster.getDistanceToPlayer() <= 15) + for (InfernoNPC monster : monsters.values()) { - if (client.getLocalPlayer().getOverheadIcon() == null) - { - monster.setAttackstyle(InfernoNPC.Attackstyle.RANDOM); - } - else if (client.getLocalPlayer().getOverheadIcon().equals(HeadIcon.MAGIC)) - { - monster.setAttackstyle(InfernoNPC.Attackstyle.RANGE); - } - else if (client.getLocalPlayer().getOverheadIcon().equals(HeadIcon.RANGED)) - { - monster.setAttackstyle(InfernoNPC.Attackstyle.MAGE); - } - } + calculateDistanceToPlayer(monster); - // we know the monster is not attacking because it should have attacked and is idling - if (monster.getTicksTillAttack() == 0) - { - if (npc.getAnimation() == -1) + NPC npc = monster.getNpc(); + + // if they are not attacking but are still attacking + if (monster.isAttacking()) { - monster.setAttacking(false); + monster.setTicksTillAttack(monster.getTicksTillAttack() - 1); + + // sets the blobs attack style + if (monster.getName().equals("blob") && monster.getTicksTillAttack() == 3 && monster.getDistanceToPlayer() <= 15) + { + if (client.getLocalPlayer().getOverheadIcon() == null) + { + monster.setAttackstyle(InfernoNPC.Attackstyle.RANDOM); + } + else if (client.getLocalPlayer().getOverheadIcon().equals(HeadIcon.MAGIC)) + { + monster.setAttackstyle(InfernoNPC.Attackstyle.RANGE); + } + else if (client.getLocalPlayer().getOverheadIcon().equals(HeadIcon.RANGED)) + { + monster.setAttackstyle(InfernoNPC.Attackstyle.MAGE); + } + } + + // we know the monster is not attacking because it should have attacked and is idling + if (monster.getTicksTillAttack() == 0) + { + if (npc.getAnimation() == -1) + { + monster.setAttacking(false); + } + else + { + // want to reset the monsters attack back to attacking + monster.attacked(); + } + } } - else + else { - // want to reset the monsters attack back to attacking + // they've just attacked + if (npc.getAnimation() == monster.getAttackAnimation() || npc.getAnimation() == 7581) // special case for blob + { monster.attacked(); + } + } + + if (monster.getTicksTillAttack() >= 1) + { + monsterCurrentAttackMap.get(monster.getTicksTillAttack()).add(monster); } } - } - else - { - // they've just attacked - if (npc.getAnimation() == monster.getAttackAnimation() || npc.getAnimation() == 7581) // special case for blob - { - monster.attacked(); - } - } - if (monster.getTicksTillAttack() >= 1) - { - monsterCurrentAttackMap.get(monster.getTicksTillAttack()).add(monster); - } + calculatePriorityNPC(); } - calculatePriorityNPC(); - } - @Subscribe public void onAnimationChanged(final AnimationChanged event) - { - if (event.getActor() != jad) { - return; - } + if (event.getActor() != jad) + { + return; + } - if (jad.getAnimation() == InfernoJadAttack.MAGIC.getAnimation()) - { - attack = InfernoJadAttack.MAGIC; + if (jad.getAnimation() == InfernoJadAttack.MAGIC.getAnimation()) + { + attack = InfernoJadAttack.MAGIC; + } + else if (jad.getAnimation() == InfernoJadAttack.RANGE.getAnimation()) + { + attack = InfernoJadAttack.RANGE; + } } - else if (jad.getAnimation() == InfernoJadAttack.RANGE.getAnimation()) - { - attack = InfernoJadAttack.RANGE; - } - } private void calculatePriorityNPC() - { - for (int i = 0; i < priorityNPC.length; i++) { - ArrayList monsters = monsterCurrentAttackMap.get(i + 1); - - if ( monsters.size() == 0) continue; - - int priority = monsters.get(0).getPriority(); - - InfernoNPC infernoNPC = monsters.get(0); - - for (InfernoNPC npc : monsters) - { - if (npc.getPriority() < priority) + for (int i = 0; i < priorityNPC.length; i++) { - priority = npc.getPriority(); - infernoNPC = npc; + ArrayList monsters = monsterCurrentAttackMap.get(i + 1); + + if (monsters.size() == 0) continue; + + int priority = monsters.get(0).getPriority(); + + InfernoNPC infernoNPC = monsters.get(0); + + for (InfernoNPC npc : monsters) + { + if (npc.getPriority() < priority) + { + priority = npc.getPriority(); + infernoNPC = npc; + } + } + priorityNPC[i] = infernoNPC; + System.out.println("i: " + i + " " + infernoNPC.getName()); } - } - priorityNPC[i] = infernoNPC; - System.out.println("i: " + i + " " + infernoNPC.getName()); } - } // TODO: blob calculator private void calculateDistanceToPlayer(InfernoNPC monster) - { - monster.setDistanceToPlayer(client.getLocalPlayer().getWorldLocation().distanceTo(monster.getNpc().getWorldArea())); - } + { + monster.setDistanceToPlayer(client.getLocalPlayer().getWorldLocation().distanceTo(monster.getNpc().getWorldArea())); + } private void clearMapAndPriority() - { - for (List l : monsterCurrentAttackMap.values()) { - l.clear(); - } + for (List l : monsterCurrentAttackMap.values()) + { + l.clear(); + } - for (int i = 0; i < priorityNPC.length; i++) - { - priorityNPC[i] = null; + for (int i = 0; i < priorityNPC.length; i++) + { + priorityNPC[i] = null; + } } - } public boolean isValidInfernoMob(NPC npc) - { - // we only want the bat, blob, melee, ranger and mager - if (npc.getId() == NpcID.JALMEJRAH || - npc.getId() == NpcID.JALAK || - npc.getId() == NpcID.JALIMKOT || - npc.getId() == NpcID.JALXIL || - npc.getId() == NpcID.JALZEK) return true; + { + // we only want the bat, blob, melee, ranger and mager + if (npc.getId() == NpcID.JALMEJRAH || + npc.getId() == NpcID.JALAK || + npc.getId() == NpcID.JALIMKOT || + npc.getId() == NpcID.JALXIL || + npc.getId() == NpcID.JALZEK) return true; + + return false; + } - return false; - } - boolean inInferno() - { - return ArrayUtils.contains(client.getMapRegions(), INFERNO_REGION); - } + { + return ArrayUtils.contains(client.getMapRegions(), INFERNO_REGION); + } - static String formatMonsterQuantity(final InfernoWaveMonster monster, final int quantity) - { - return String.format("%dx %s", quantity, monster); - } - -} \ No newline at end of file + public boolean isNotFinalWave() + { + return currentWaveNumber <= 68; + } + + @Nullable + InfernoJadAttack getAttack() + { + return attack; + } + + int getCurrentWaveNumber() + { + return currentWaveNumber; + } + + int getNextWaveNumber() + { + return nextWaveNumber; + } + + Map getMonster() + { + return monster; + } + + Map getWaves() + { + return waves; + } + + List getWaveMonsters() + { + return waveMonsters; + } + + } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveMappings.java b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveMappings.java new file mode 100644 index 0000000000..068ed55d1f --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveMappings.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2019, Kyleeld + * Copyright (c) 2019, RuneLitePlus + * + * 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.inferno; + +import java.util.HashMap; +import java.util.Map; + +public class InfernoWaveMappings + { + static Map waveMapping() + { + return new HashMap() + { + { + put(1, new int[]{32, 32, 32, 85}); + put(2, new int[]{32, 32, 32, 85, 85}); + put(3, new int[]{32, 32, 32, 32, 32, 32}); + put(4, new int[]{32, 32, 32, 165}); + put(5, new int[]{32, 32, 32, 85, 165}); + put(6, new int[]{32, 32, 32, 85, 85, 165}); + put(7, new int[]{32, 32, 32, 165, 165}); + put(8, new int[]{32, 32, 32, 32, 32, 32}); + put(9, new int[]{32, 32, 32, 240}); + put(10, new int[]{32, 32, 32, 85, 240}); + put(11, new int[]{32, 32, 32, 85, 85, 240}); + put(12, new int[]{32, 32, 32, 165, 240}); + put(13, new int[]{32, 32, 32, 85, 165, 240}); + put(14, new int[]{32, 32, 32, 85, 85, 165, 240}); + put(15, new int[]{32, 32, 32, 165, 165, 240}); + put(16, new int[]{32, 32, 32, 240, 240}); + put(17, new int[]{32, 32, 32, 32, 32, 32}); + put(18, new int[]{32, 32, 32, 370}); + put(19, new int[]{32, 32, 32, 85, 370}); + put(20, new int[]{32, 32, 32, 85, 85, 370}); + put(21, new int[]{32, 32, 32, 165, 370}); + put(22, new int[]{32, 32, 32, 85, 165, 370}); + put(23, new int[]{32, 32, 32, 85, 85, 165, 370}); + put(24, new int[]{32, 32, 32, 165, 165, 370}); + put(25, new int[]{32, 32, 32, 240, 370}); + put(26, new int[]{32, 32, 32, 85, 240, 370}); + put(27, new int[]{32, 32, 32, 85, 85, 240, 370}); + put(28, new int[]{32, 32, 32, 165, 240, 370}); + put(29, new int[]{32, 32, 32, 85, 165, 240, 370}); + put(30, new int[]{32, 32, 32, 85, 85, 165, 240, 370}); + put(31, new int[]{32, 32, 32, 165, 165, 240, 370}); + put(32, new int[]{32, 32, 32, 240, 240, 370}); + put(33, new int[]{32, 32, 32, 370, 370}); + put(34, new int[]{32, 32, 32, 32, 32, 32}); + put(35, new int[]{32, 32, 32, 490}); + put(36, new int[]{32, 32, 32, 85, 490}); + put(37, new int[]{32, 32, 32, 85, 85, 490}); + put(38, new int[]{32, 32, 32, 165, 490}); + put(39, new int[]{32, 32, 32, 85, 165, 490}); + put(40, new int[]{32, 32, 32, 85, 85, 165, 490}); + put(41, new int[]{32, 32, 32, 165, 165, 490}); + put(42, new int[]{32, 32, 32, 240, 490}); + put(43, new int[]{32, 32, 32, 85, 240, 490}); + put(44, new int[]{32, 32, 32, 85, 85, 240, 490}); + put(45, new int[]{32, 32, 32, 165, 240, 490 }); + put(46, new int[]{32, 32, 32, 85, 165, 240, 490}); + put(47, new int[]{32, 32, 32, 85, 85, 165, 240, 490}); + put(48, new int[]{32, 32, 32, 165, 165, 240, 490}); + put(49, new int[]{32, 32, 32, 240, 240, 490}); + put(50, new int[]{32, 32, 32, 370, 490}); + put(51, new int[]{32, 32, 32, 85, 370, 490}); + put(52, new int[]{32, 32, 32, 85, 85, 370, 490}); + put(53, new int[]{32, 32, 32, 165, 370, 490}); + put(54, new int[]{32, 32, 32, 85, 165, 370, 490}); + put(55, new int[]{32, 32, 32, 85, 85, 165, 370, 490}); + put(56, new int[]{32, 32, 32, 165, 165, 370, 490}); + put(57, new int[]{32, 32, 32, 240, 370, 490}); + put(58, new int[]{32, 32, 32, 85, 240, 370, 490}); + put(59, new int[]{32, 32, 32, 85, 85, 240, 370, 490}); + put(60, new int[]{32, 32, 32, 165, 240, 370, 490}); + put(61, new int[]{32, 32, 32, 85, 165, 240, 370, 490}); + put(62, new int[]{32, 32, 32, 85, 85, 165, 240, 370, 490}); + put(63, new int[]{32, 32, 32, 165, 165, 240, 370, 490}); + put(64, new int[]{32, 32, 32, 85, 240, 240, 370, 490}); + put(65, new int[]{32, 32, 32, 85, 370, 370, 490}); + put(66, new int[]{32, 32, 32, 85, 490, 490}); + put(67, new int[]{900}); + put(68, new int[]{900, 900, 900}); + put(69, new int[]{1400}); + + } + }; + } + + static Map npcNameMapping() + { + return new HashMap() + { + { + put(32, "Jal-Nib - Level 32"); + put(85, " Jal-MejRah - Level 85"); + put(165, "Jal-Ak - Level 165"); + put(240, "Jal-ImKot - Level 240"); + put(370, "Jal-Xil - Level 370"); + put(490, "Jal-Zek - Level 490"); + put(900, "JalTok-Jad - Level 900"); + put(1400, "TzKal-Zuk - Level 1400"); + } + }; + } + + static HashMap intArrayToHashmap(int inputArray[]) + { + HashMap elementCountMap = new HashMap(); + for (int i : inputArray) + { + if (elementCountMap.containsKey(i)) + { + elementCountMap.put(i, elementCountMap.get(i) + 1); + } + else + { + elementCountMap.put(i, 1); + } + } + return elementCountMap; + } + } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveMonster.java b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveMonster.java deleted file mode 100644 index 3c93005f37..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveMonster.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2018, Jordan Atwood - * 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.inferno; - -import lombok.AllArgsConstructor; - -@AllArgsConstructor -enum InfernoWaveMonster -{ - - JAL_NIB("Jal-Nib", 32), - JAL_MEJRAH("Jal-MejRah", 85), - JAL_AK("Jal-Ak", 165), - JAL_IMKOT("Jal-ImKot", 240), - JAL_XIL("Jal-XIL", 370), - JAL_ZEK("Jal-Zek", 490), - JALTOK_JAD("JalTok-Jad", 900), - TZKAL_ZUK("TzKal-Zuk", 1400); - - private final String name; - private final int level; - - @Override - public String toString() - { - return String.format("%s - Level %s", name, level); - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveOverlay.java index 32fb60d2f4..e8957a2026 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoWaveOverlay.java @@ -1,127 +1,70 @@ -/* - * Copyright (c) 2018, Jordan Atwood - * 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.inferno; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.Iterator; +import java.util.HashMap; import java.util.Map; -import javax.inject.Inject; -import net.runelite.client.ui.ColorScheme; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.components.PanelComponent; +import com.google.inject.Inject; import net.runelite.client.ui.overlay.components.TitleComponent; -import net.runelite.client.ui.overlay.components.table.TableComponent; +import java.awt.Graphics2D; +import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.ui.overlay.OverlayPosition; +import java.awt.Dimension; +import net.runelite.client.ui.overlay.components.PanelComponent; +import net.runelite.api.Client; +import net.runelite.client.ui.overlay.Overlay; -class InfernoWaveOverlay extends Overlay -{ - private static final Color HEADER_COLOR = ColorScheme.BRAND_ORANGE; - - private final InfernoConfig config; +public class InfernoWaveOverlay extends Overlay + { + private final Client client; private final InfernoPlugin plugin; - - private final PanelComponent panelComponent = new PanelComponent(); + private final InfernoConfig config; + private PanelComponent panelComponent; @Inject - private InfernoWaveOverlay(InfernoConfig config, InfernoPlugin plugin) - { - setPosition(OverlayPosition.TOP_RIGHT); - this.config = config; - this.plugin = plugin; + InfernoWaveOverlay(final Client client, final InfernoPlugin plugin, final InfernoConfig config) + { + (this.panelComponent = new PanelComponent()).setPreferredSize(new Dimension(150, 0)); + this.setPosition(OverlayPosition.TOP_RIGHT); + this.setPriority(OverlayPriority.HIGH); + this.client = client; + this.plugin = plugin; + this.config = config; + } + + public Dimension render(final Graphics2D graphics) + { + if (!plugin.inInferno() || plugin.getCurrentWaveNumber() == -1) + { + return null; + } + panelComponent.getChildren().clear(); + if (config.waveDisplay() == InfernoWaveDisplayMode.CURRENT + || config.waveDisplay() == InfernoWaveDisplayMode.BOTH) + { + renderWave("Wave " + plugin.getCurrentWaveNumber(), plugin.getCurrentWaveNumber()); + } + if ((config.waveDisplay() == InfernoWaveDisplayMode.NEXT + || config.waveDisplay() == InfernoWaveDisplayMode.BOTH) + && plugin.isNotFinalWave()) + { + renderWave("Next Wave:", plugin.getNextWaveNumber()); + } + return panelComponent.render(graphics); + } + + private void renderWave(final String header, final int waveNumber) + { + panelComponent.getChildren().add(TitleComponent.builder().text(header).color(config.getWaveOverlayHeaderColor()).build()); + final HashMap waveMap = (HashMap) InfernoWaveMappings.intArrayToHashmap(plugin.getWaves().get(waveNumber)); + for (final Map.Entry entry : waveMap.entrySet()) + { + final int monsterID = entry.getKey(); + final int quantity = entry.getValue(); + if (quantity <= 0) + { + continue; + } + panelComponent.getChildren().add(TitleComponent.builder().text(quantity + "x " + plugin.getMonster().get(monsterID)).color(config.getWaveTextColor()).build()); + } + } } - - @Override - public Dimension render(Graphics2D graphics) - { - if (!plugin.inInferno() - || plugin.getCurrentWave() < 0) - { - return null; - } - - panelComponent.getChildren().clear(); - - final int currentWave = plugin.getCurrentWave(); - final int waveIndex = currentWave - 1; - - if (config.waveDisplay() == InfernoWaveDisplayMode.CURRENT - || config.waveDisplay() == InfernoWaveDisplayMode.BOTH) - { - final Map waveContents = InfernoPlugin.getWAVES().get(waveIndex); - - addWaveInfo("Wave " + plugin.getCurrentWave(), waveContents); - } - - if ((config.waveDisplay() == InfernoWaveDisplayMode.NEXT - || config.waveDisplay() == InfernoWaveDisplayMode.BOTH) - && currentWave != InfernoPlugin.MAX_WAVE) - { - final Map waveContents = InfernoPlugin.getWAVES().get(waveIndex + 1); - - addWaveInfo("Next wave", waveContents); - } - - return panelComponent.render(graphics); - } - - private void addWaveInfo(final String headerText, final Map waveContents) - { - panelComponent.getChildren().add(TitleComponent.builder() - .text(headerText) - .color(HEADER_COLOR) - .build()); - - TableComponent tableComponent = new TableComponent(); - - for (String line : buildWaveLines(waveContents)) - { - tableComponent.addRow(line); - } - - panelComponent.getChildren().add(tableComponent); - } - - private static Collection buildWaveLines(final Map wave) - { - final List> monsters = new ArrayList<>(wave.entrySet()); - monsters.sort(Map.Entry.comparingByKey()); - final List outputLines = new ArrayList<>(); - - for (Map.Entry monsterEntry : monsters) - { - final InfernoWaveMonster monster = monsterEntry.getKey(); - final int quantity = monsterEntry.getValue(); - final String line = InfernoPlugin.formatMonsterQuantity(monster, quantity); - - outputLines.add(line); - } - - return outputLines; - } -}