From d5c2ec5e420486dfc7f52cab7dd725c2f8a7b65f Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Sun, 11 Aug 2019 21:31:59 +0200 Subject: [PATCH] idlenotifier: Refactor switch fallthrough and abstractions --- .../idlenotifier/IdleNotifierPlugin.java | 324 +++++++++--------- 1 file changed, 164 insertions(+), 160 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java index 88db86c14c..67e328cee7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java @@ -25,6 +25,7 @@ */ package net.runelite.client.plugins.idlenotifier; +import com.google.common.collect.ImmutableSet; import com.google.inject.Provides; import java.awt.TrayIcon; import java.time.Duration; @@ -33,6 +34,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; import java.util.List; +import java.util.Set; import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; @@ -74,10 +76,6 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.PvPUtil; -//import java.io.IOException; -//import javax.sound.sampled.LineUnavailableException; -//import javax.sound.sampled.UnsupportedAudioFileException; - @PluginDescriptor( name = "Idle Notifier", description = "Send a notification when going idle, or when HP/Prayer reaches a threshold", @@ -97,6 +95,133 @@ public class IdleNotifierPlugin extends Plugin private static final String FISHING_SPOT = "Fishing spot"; + private static final Set nominalAnimations = new ImmutableSet.Builder() + .addAll( + Arrays.asList( + /* Woodcutting */ + WOODCUTTING_BRONZE, + WOODCUTTING_IRON, + WOODCUTTING_STEEL, + WOODCUTTING_BLACK, + WOODCUTTING_MITHRIL, + WOODCUTTING_ADAMANT, + WOODCUTTING_RUNE, + WOODCUTTING_DRAGON, + WOODCUTTING_INFERNAL, + WOODCUTTING_3A_AXE, + WOODCUTTING_CRYSTAL, + /* Cooking(Fire, Range) */ + COOKING_FIRE, + COOKING_RANGE, + COOKING_WINE, + /* Crafting(Gem Cutting, Glassblowing, Spinning, Battlestaves, Pottery) */ + GEM_CUTTING_OPAL, + GEM_CUTTING_JADE, + GEM_CUTTING_REDTOPAZ, + GEM_CUTTING_SAPPHIRE, + GEM_CUTTING_EMERALD, + GEM_CUTTING_RUBY, + GEM_CUTTING_DIAMOND, + GEM_CUTTING_AMETHYST, + CRAFTING_GLASSBLOWING, + CRAFTING_SPINNING, + CRAFTING_BATTLESTAVES, + CRAFTING_LEATHER, + CRAFTING_POTTERS_WHEEL, + CRAFTING_POTTERY_OVEN, + /* Fletching(Cutting, Stringing, Adding feathers and heads) */ + FLETCHING_BOW_CUTTING, + FLETCHING_STRING_NORMAL_SHORTBOW, + FLETCHING_STRING_OAK_SHORTBOW, + FLETCHING_STRING_WILLOW_SHORTBOW, + FLETCHING_STRING_MAPLE_SHORTBOW, + FLETCHING_STRING_YEW_SHORTBOW, + FLETCHING_STRING_MAGIC_SHORTBOW, + FLETCHING_STRING_NORMAL_LONGBOW, + FLETCHING_STRING_OAK_LONGBOW, + FLETCHING_STRING_WILLOW_LONGBOW, + FLETCHING_STRING_MAPLE_LONGBOW, + FLETCHING_STRING_YEW_LONGBOW, + FLETCHING_STRING_MAGIC_LONGBOW, + FLETCHING_ATTACH_FEATHERS_TO_ARROWSHAFT, + FLETCHING_ATTACH_HEADS, + /* Smithing(Anvil, Furnace, Cannonballs */ + SMITHING_ANVIL, + SMITHING_SMELTING, + SMITHING_CANNONBALL, + /* Fishing */ + FISHING_CRUSHING_INFERNAL_EELS, + FISHING_CUTTING_SACRED_EELS, + FISHING_BIG_NET, + FISHING_NET, + FISHING_POLE_CAST, + FISHING_CAGE, + FISHING_HARPOON, + FISHING_BARBTAIL_HARPOON, + FISHING_DRAGON_HARPOON, + FISHING_INFERNAL_HARPOON, + FISHING_OILY_ROD, + FISHING_KARAMBWAN, + FISHING_BAREHAND, + /* Mining(Normal) */ + MINING_BRONZE_PICKAXE, + MINING_IRON_PICKAXE, + MINING_STEEL_PICKAXE, + MINING_BLACK_PICKAXE, + MINING_MITHRIL_PICKAXE, + MINING_ADAMANT_PICKAXE, + MINING_RUNE_PICKAXE, + MINING_DRAGON_PICKAXE, + MINING_DRAGON_PICKAXE_UPGRADED, + MINING_DRAGON_PICKAXE_OR, + MINING_INFERNAL_PICKAXE, + MINING_3A_PICKAXE, + MINING_CRYSTAL_PICKAXE, + DENSE_ESSENCE_CHIPPING, + DENSE_ESSENCE_CHISELING, + /* Mining(Motherlode) */ + MINING_MOTHERLODE_BRONZE, + MINING_MOTHERLODE_IRON, + MINING_MOTHERLODE_STEEL, + MINING_MOTHERLODE_BLACK, + MINING_MOTHERLODE_MITHRIL, + MINING_MOTHERLODE_ADAMANT, + MINING_MOTHERLODE_RUNE, + MINING_MOTHERLODE_DRAGON, + MINING_MOTHERLODE_DRAGON_UPGRADED, + MINING_MOTHERLODE_DRAGON_OR, + MINING_MOTHERLODE_INFERNAL, + MINING_MOTHERLODE_3A, + MINING_MOTHERLODE_CRYSTAL, + /* Herblore */ + HERBLORE_PESTLE_AND_MORTAR, + HERBLORE_POTIONMAKING, + HERBLORE_MAKE_TAR, + /* Magic */ + MAGIC_CHARGING_ORBS, + MAGIC_LUNAR_PLANK_MAKE, + MAGIC_LUNAR_STRING_JEWELRY, + MAGIC_MAKE_TABLET, + MAGIC_ENCHANTING_JEWELRY, + MAGIC_ENCHANTING_AMULET_1, + MAGIC_ENCHANTING_AMULET_2, + MAGIC_ENCHANTING_AMULET_3, + /* Prayer */ + USING_GILDED_ALTAR, + /* Farming */ + FARMING_MIX_ULTRACOMPOST, + FARMING_HARVEST_BUSH, + FARMING_HARVEST_HERB, + FARMING_HARVEST_FRUIT_TREE, + FARMING_HARVEST_FLOWER, + FARMING_HARVEST_ALLOTMENT, + /* Misc */ + PISCARILIUS_CRANE_REPAIR, + HOME_MAKE_TABLET, + SAND_COLLECTION + ) + ).build(); + @Inject private Notifier notifier; @@ -182,151 +307,26 @@ public class IdleNotifierPlugin extends Plugin int graphic = localPlayer.getSpotAnimation(); int animation = localPlayer.getAnimation(); - switch (animation) + + if (nominalAnimations.contains(animation) || (animation == MAGIC_LUNAR_SHARED && graphic == GraphicID.BAKE_PIE)) { - /* Woodcutting */ - case WOODCUTTING_BRONZE: - case WOODCUTTING_IRON: - case WOODCUTTING_STEEL: - case WOODCUTTING_BLACK: - case WOODCUTTING_MITHRIL: - case WOODCUTTING_ADAMANT: - case WOODCUTTING_RUNE: - case WOODCUTTING_DRAGON: - case WOODCUTTING_INFERNAL: - case WOODCUTTING_3A_AXE: - case WOODCUTTING_CRYSTAL: - /* Cooking(Fire, Range) */ - case COOKING_FIRE: - case COOKING_RANGE: - case COOKING_WINE: - /* Crafting(Gem Cutting, Glassblowing, Spinning, Battlestaves, Pottery) */ - case GEM_CUTTING_OPAL: - case GEM_CUTTING_JADE: - case GEM_CUTTING_REDTOPAZ: - case GEM_CUTTING_SAPPHIRE: - case GEM_CUTTING_EMERALD: - case GEM_CUTTING_RUBY: - case GEM_CUTTING_DIAMOND: - case GEM_CUTTING_AMETHYST: - case CRAFTING_GLASSBLOWING: - case CRAFTING_SPINNING: - case CRAFTING_BATTLESTAVES: - case CRAFTING_LEATHER: - case CRAFTING_POTTERS_WHEEL: - case CRAFTING_POTTERY_OVEN: - /* Fletching(Cutting, Stringing, Adding feathers and heads) */ - case FLETCHING_BOW_CUTTING: - case FLETCHING_STRING_NORMAL_SHORTBOW: - case FLETCHING_STRING_OAK_SHORTBOW: - case FLETCHING_STRING_WILLOW_SHORTBOW: - case FLETCHING_STRING_MAPLE_SHORTBOW: - case FLETCHING_STRING_YEW_SHORTBOW: - case FLETCHING_STRING_MAGIC_SHORTBOW: - case FLETCHING_STRING_NORMAL_LONGBOW: - case FLETCHING_STRING_OAK_LONGBOW: - case FLETCHING_STRING_WILLOW_LONGBOW: - case FLETCHING_STRING_MAPLE_LONGBOW: - case FLETCHING_STRING_YEW_LONGBOW: - case FLETCHING_STRING_MAGIC_LONGBOW: - case FLETCHING_ATTACH_FEATHERS_TO_ARROWSHAFT: - case FLETCHING_ATTACH_HEADS: - /* Smithing(Anvil, Furnace, Cannonballs */ - case SMITHING_ANVIL: - case SMITHING_SMELTING: - case SMITHING_CANNONBALL: - /* Fishing */ - case FISHING_CRUSHING_INFERNAL_EELS: - case FISHING_CUTTING_SACRED_EELS: - case FISHING_BIG_NET: - case FISHING_NET: - case FISHING_POLE_CAST: - case FISHING_CAGE: - case FISHING_HARPOON: - case FISHING_BARBTAIL_HARPOON: - case FISHING_DRAGON_HARPOON: - case FISHING_INFERNAL_HARPOON: - case FISHING_OILY_ROD: - case FISHING_KARAMBWAN: - case FISHING_BAREHAND: - /* Mining(Normal) */ - case MINING_BRONZE_PICKAXE: - case MINING_IRON_PICKAXE: - case MINING_STEEL_PICKAXE: - case MINING_BLACK_PICKAXE: - case MINING_MITHRIL_PICKAXE: - case MINING_ADAMANT_PICKAXE: - case MINING_RUNE_PICKAXE: - case MINING_DRAGON_PICKAXE: - case MINING_DRAGON_PICKAXE_UPGRADED: - case MINING_DRAGON_PICKAXE_OR: - case MINING_INFERNAL_PICKAXE: - case MINING_3A_PICKAXE: - case MINING_CRYSTAL_PICKAXE: - case DENSE_ESSENCE_CHIPPING: - case DENSE_ESSENCE_CHISELING: - /* Mining(Motherlode) */ - case MINING_MOTHERLODE_BRONZE: - case MINING_MOTHERLODE_IRON: - case MINING_MOTHERLODE_STEEL: - case MINING_MOTHERLODE_BLACK: - case MINING_MOTHERLODE_MITHRIL: - case MINING_MOTHERLODE_ADAMANT: - case MINING_MOTHERLODE_RUNE: - case MINING_MOTHERLODE_DRAGON: - case MINING_MOTHERLODE_DRAGON_UPGRADED: - case MINING_MOTHERLODE_DRAGON_OR: - case MINING_MOTHERLODE_INFERNAL: - case MINING_MOTHERLODE_3A: - case MINING_MOTHERLODE_CRYSTAL: - /* Herblore */ - case HERBLORE_PESTLE_AND_MORTAR: - case HERBLORE_POTIONMAKING: - case HERBLORE_MAKE_TAR: - /* Magic */ - case MAGIC_CHARGING_ORBS: - case MAGIC_LUNAR_PLANK_MAKE: - case MAGIC_LUNAR_STRING_JEWELRY: - case MAGIC_MAKE_TABLET: - case MAGIC_ENCHANTING_JEWELRY: - case MAGIC_ENCHANTING_AMULET_1: - case MAGIC_ENCHANTING_AMULET_2: - case MAGIC_ENCHANTING_AMULET_3: - /* Prayer */ - case USING_GILDED_ALTAR: - /* Farming */ - case FARMING_MIX_ULTRACOMPOST: - case FARMING_HARVEST_BUSH: - case FARMING_HARVEST_HERB: - case FARMING_HARVEST_FRUIT_TREE: - case FARMING_HARVEST_FLOWER: - case FARMING_HARVEST_ALLOTMENT: - /* Misc */ - case PISCARILIUS_CRANE_REPAIR: - case HOME_MAKE_TABLET: - case SAND_COLLECTION: - resetTimers(); - lastAnimation = animation; - lastAnimating = Instant.now(); - interactingNotified = false; - break; - case MAGIC_LUNAR_SHARED: - if (graphic == GraphicID.BAKE_PIE) - { - resetTimers(); - lastAnimation = animation; - lastAnimating = Instant.now(); - interactingNotified = false; - break; - } - case IDLE: - lastAnimating = Instant.now(); - interactingNotified = false; - break; - default: - // On unknown animation simply assume the animation is invalid and dont throw notification - lastAnimation = IDLE; - lastAnimating = null; + resetTimers(); + lastAnimation = animation; + lastAnimating = Instant.now(); + interactingNotified = false; + } + + else if (animation == IDLE) + { + lastAnimating = Instant.now(); + interactingNotified = false; + } + + // On unknown animation simply assume the animation is invalid and dont throw notification + else + { + lastAnimation = IDLE; + lastAnimating = null; } } @@ -555,17 +555,17 @@ public class IdleNotifierPlugin extends Plugin if (this.logoutIdle && checkIdleLogout()) { - notifier.notify("[" + local.getName() + "] is about to log out from idling too long!"); + notifyWith(local, "is about to log out from idling too long!"); } if (check6hrLogout()) { - notifier.notify("[" + local.getName() + "] is about to log out from being online for 6 hours!"); + notifyWith(local, "is about to log out from being online for 6 hours!"); } if (this.outOfItemsIdle && checkOutOfItemsIdle(waitDuration)) { - notifier.notify("[" + local.getName() + "] has run out of items!"); + notifyWith(local, "has run out of items!"); // If this triggers, don't also trigger animation idle notification afterwards. lastAnimation = IDLE; } @@ -574,7 +574,7 @@ public class IdleNotifierPlugin extends Plugin { if (lastInteractWasCombat) { - notifier.notify("[" + local.getName() + "] is now out of combat!"); + notifyWith(local, "is now out of combat!"); if (this.outOfCombatSound) { soundManager.playSound(Sound.OUT_OF_COMBAT); @@ -582,7 +582,7 @@ public class IdleNotifierPlugin extends Plugin } else { - notifier.notify("[" + local.getName() + "] is now idle!"); + notifyWith(local, "is now idle!"); if (this.interactionIdleSound) { soundManager.playSound(Sound.IDLE); @@ -593,7 +593,7 @@ public class IdleNotifierPlugin extends Plugin if (this.animationIdle && checkAnimationIdle(waitDuration, local)) { - notifier.notify("[" + local.getName() + "] is now idle!"); + notifyWith(local, "is now idle!"); if (this.animationIdleSound) { soundManager.playSound(Sound.IDLE); @@ -602,7 +602,7 @@ public class IdleNotifierPlugin extends Plugin if (checkLowHitpoints()) { - notifier.notify("[" + local.getName() + "] has low hitpoints!"); + notifyWith(local, "has low hitpoints!"); if (this.getPlayHealthSound) { soundManager.playSound(Sound.LOW_HEATLH); @@ -611,7 +611,7 @@ public class IdleNotifierPlugin extends Plugin if (checkLowPrayer()) { - notifier.notify("[" + local.getName() + "] has low prayer!"); + notifyWith(local, "has low prayer!"); if (this.getPlayPrayerSound) { soundManager.playSound(Sound.LOW_PRAYER); @@ -620,12 +620,12 @@ public class IdleNotifierPlugin extends Plugin if (checkLowOxygen()) { - notifier.notify("[" + local.getName() + "] has low oxygen!"); + notifyWith(local, "has low oxygen!"); } if (checkFullSpecEnergy()) { - notifier.notify("[" + local.getName() + "] has restored spec energy!"); + notifyWith(local, "has restored spec energy!"); if (this.getSpecSound) { soundManager.playSound(Sound.RESTORED_SPECIAL_ATTACK); @@ -895,11 +895,11 @@ public class IdleNotifierPlugin extends Plugin { if (this.showSkullNotification && lastTickSkull == null && currentTickSkull == SkullIcon.SKULL) { - notifier.notify("[" + local.getName() + "] is now skulled!"); + notifyWith(local, "is now skulled!"); } else if (this.showUnskullNotification && lastTickSkull == SkullIcon.SKULL && currentTickSkull == null) { - notifier.notify("[" + local.getName() + "] is now unskulled!"); + notifyWith(local, "is now unskulled!"); } } else @@ -911,6 +911,10 @@ public class IdleNotifierPlugin extends Plugin } } + private void notifyWith(Player local, String message) { + notifier.notify("[" + local.getName() + "] " + message); + } + @Override protected void startUp() throws Exception {