diff --git a/src/main/java/com/attacktimer/AnimationData.java b/src/main/java/com/attacktimer/AnimationData.java index db6f696..e905d5f 100644 --- a/src/main/java/com/attacktimer/AnimationData.java +++ b/src/main/java/com/attacktimer/AnimationData.java @@ -35,236 +35,245 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import net.runelite.api.gameval.AnimationID; import org.apache.commons.lang3.StringUtils; public enum AnimationData { // MELEE - MELEE_VIGGORAS_CHAINMACE(245, AttackStyle.MELEE), - MELEE_DAGGER_SLASH(376, AttackStyle.MELEE), // tested w/ dds - MELEE_SPEAR_STAB(381, AttackStyle.MELEE), // tested w/ zammy hasta - MELEE_SWORD_STAB(386, AttackStyle.MELEE), // tested w/ dragon sword, obby sword, d long - MELEE_SCIM_SLASH(390, AttackStyle.MELEE), // tested w/ rune & dragon scim, d sword, VLS, obby sword - - MELEE_LANCE_STAB(8288, AttackStyle.MELEE), - MELEE_LANCE_CRUSH(8290, AttackStyle.MELEE), - MELEE_LANCE_SLASH(8289, AttackStyle.MELEE), - - MELEE_FANG_STAB(9471, AttackStyle.MELEE), // tested w/ fang - MELEE_FANG_SPEC(6118, AttackStyle.MELEE, true), // tested w/ fang spec - - MELEE_GENERIC_SLASH(393, AttackStyle.MELEE), // tested w/ zuriel's staff, d long slash, dclaws regular slash - MELEE_STAFF_CRUSH(0, AttackStyle.MELEE), // 393 previously, save name to support old fights but no longer track - - MELEE_BATTLEAXE_SLASH(395, AttackStyle.MELEE), // tested w/ rune baxe - MELEE_MACE_STAB(400, AttackStyle.MELEE), // tested w/ d mace - MELEE_BATTLEAXE_CRUSH(401, AttackStyle.MELEE), // tested w/ rune baxe, dwh & statius warhammer animation, d mace - MELEE_2H_CRUSH(406, AttackStyle.MELEE), // tested w/ rune & dragon 2h - MELEE_2H_SLASH(407, AttackStyle.MELEE), // tested w/ rune & dragon 2h - MELEE_STAFF_CRUSH_2(414, AttackStyle.MELEE), // tested w/ ancient staff, 3rd age wand - MELEE_STAFF_CRUSH_3(419, AttackStyle.MELEE), // Common staff crush. Air/fire/etc staves, smoke battlestaff, SOTD/SOL crush, zammy hasta crush - MELEE_PUNCH(422, AttackStyle.MELEE), - MELEE_KICK(423, AttackStyle.MELEE), - MELEE_STAFF_STAB(428, AttackStyle.MELEE), // tested w/ SOTD/SOL jab, vesta's spear stab, c hally - MELEE_SPEAR_CRUSH(429, AttackStyle.MELEE), // tested w/ vesta's spear - MELEE_STAFF_SLASH(440, AttackStyle.MELEE), // tested w/ SOTD/SOL slash, zammy hasta slash, vesta's spear slash, c hally - MELEE_DLONG_SPEC(1058, AttackStyle.MELEE, true), // tested w/ d long spec, also thammaron's sceptre crush (????)... - MELEE_DRAGON_MACE_SPEC(1060, AttackStyle.MELEE, true), - MELEE_DRAGON_DAGGER_SPEC(1062, AttackStyle.MELEE, true), - MELEE_DRAGON_WARHAMMER_SPEC(1378, AttackStyle.MELEE, true), // tested w/ dwh, statius warhammer spec - MELEE_ABYSSAL_WHIP(1658, AttackStyle.MELEE), // tested w/ whip, tent whip - MELEE_GRANITE_MAUL(1665, AttackStyle.MELEE), // tested w/ normal gmaul, ornate maul - MELEE_GRANITE_MAUL_SPEC(1667, AttackStyle.MELEE, true), // tested w/ normal gmaul, ornate maul - MELEE_DHAROKS_GREATAXE_CRUSH(2066, AttackStyle.MELEE), - MELEE_DHAROKS_GREATAXE_SLASH(2067, AttackStyle.MELEE), - MELEE_AHRIMS_STAFF_CRUSH(2078, AttackStyle.MELEE), - MELEE_OBBY_MAUL_CRUSH(2661, AttackStyle.MELEE), - MELEE_ABYSSAL_DAGGER_STAB(3297, AttackStyle.MELEE), // spec un-tested - MELEE_ABYSSAL_BLUDGEON_CRUSH(3298, AttackStyle.MELEE), - MELEE_ABYSSAL_BLUDGEON_SPEC(3299, AttackStyle.MELEE, true), - MELEE_LEAF_BLADED_BATTLEAXE_CRUSH(3852, AttackStyle.MELEE), - MELEE_INQUISITORS_MACE(4503, AttackStyle.MELEE), - MELEE_BARRELCHEST_ANCHOR_CRUSH(5865, AttackStyle.MELEE), - MELEE_BARRELCHEST_ANCHOR_CRUSH_SPEC(5870, AttackStyle.MELEE, true), - MELEE_LEAF_BLADED_BATTLEAXE_SLASH(7004, AttackStyle.MELEE), - MELEE_GODSWORD_SLASH(7045, AttackStyle.MELEE), // tested w/ AGS, BGS, ZGS, SGS, AGS(or) sara sword - MELEE_GODSWORD_CRUSH(7054, AttackStyle.MELEE), // tested w/ AGS, BGS, ZGS, SGS, sara sword - MELEE_GODSWORD_DEFENSIVE(7055, AttackStyle.MELEE), // tested w/ BGS - MELEE_RUNE_CLAWS_SPEC(923, AttackStyle.MELEE, true), - MELEE_DRAGON_CLAWS_SPEC(7514, AttackStyle.MELEE, true), - MELEE_VLS_SPEC(7515, AttackStyle.MELEE, true), // both VLS and dragon sword spec - MELEE_ELDER_MAUL(7516, AttackStyle.MELEE), - MELEE_ZAMORAK_GODSWORD_SPEC(7638, AttackStyle.MELEE, true), // tested zgs spec - MELEE_ELDER_MAUL_SPEC(11124, AttackStyle.MELEE), - MELEE_ZAMORAK_GODSWORD_OR_SPEC(7639, AttackStyle.MELEE, true), // verified 22/06/2024, assumed due to ags(or) - MELEE_SARADOMIN_GODSWORD_SPEC(7640, AttackStyle.MELEE, true), // tested sgs spec - MELEE_SARADOMIN_GODSWORD_OR_SPEC(7641, AttackStyle.MELEE, true), // verified 22/06/2024, assumed due to ags(or) - MELEE_BANDOS_GODSWORD_SPEC(7642, AttackStyle.MELEE, true), // tested bgs spec - MELEE_BANDOS_GODSWORD_OR_SPEC(7643, AttackStyle.MELEE, true), // verified 22/06/2024, assumed due to ags(or) - MELEE_ARMADYL_GODSWORD_SPEC(7644, AttackStyle.MELEE, true), // tested ags spec - MELEE_ARMADYL_GODSWORD_OR_SPEC(7645, AttackStyle.MELEE, true), // tested ags(or) spec - MELEE_SCYTHE(8056, AttackStyle.MELEE), // tested w/ all scythe styles (so could be crush, but unlikely) - MELEE_GHAZI_RAPIER_STAB(8145, AttackStyle.MELEE), // rapier slash is 390, basic slash animation. Also VLS stab. - MELEE_ANCIENT_GODSWORD_SPEC(9171, AttackStyle.MELEE, true), - MELEE_CRYSTAL_HALBERD_SPEC(1203, AttackStyle.MELEE, true), - MELEE_SOULREAPER_AXE(10172, AttackStyle.MELEE, true), - MELEE_SOULREAPER_AXE_SPEC(10173, AttackStyle.MELEE, true), - MELEE_GUTHANS_LUNGE(2080, AttackStyle.MELEE), - MELEE_GUTHANS_SWIPE(2081, AttackStyle.MELEE), - MELEE_GUTHANS_POUNDMA(2082, AttackStyle.MELEE), - MELEE_TORAG_HAMMERS(2068, AttackStyle.MELEE), - MELEE_VERACS_FLAIL(2062, AttackStyle.MELEE), - MELEE_BLISTERWOOD_FLAIL_CRUSH(8010, AttackStyle.MELEE), // blisterwood flail - MELEE_BONE_DAGGER_SPEC(4198, AttackStyle.MELEE, true), // tested with all poison variants (p, p+, p++, none) - MELEE_DUAL_MACUAHUITL(10989, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Dual_macuahuitl set effect needs custom code - MELEE_BLUE_MOON_SPEAR_SPEC(1710, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Blue_moon_spear - MELEE_BLUE_MOON_SPEAR(1711, AttackStyle.MELEE), - MELEE_DHINS(7511, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Dinh%27s_bulwark - MELEE_URSINE_CHAINMACE_SPEC(9963, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Ursine_chainmace#Charged - MELEE_ANCIENT_MACE_SPEC(6147, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Ancient_mace - MELEE_DSCIM_SPEC(1872, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Dragon_scimitar - MELEE_D2H_SPEC(3157, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Dragon_2h_sword - MELEE_ARCLIGHT_SPEC(2890, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Arclight - MELEE_SARA_SWORD_SPEC(1132, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Saradomin_sword assumed to be the same for the blessed version - MELEE_RED_KERIS_SPEC(9544, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Keris_partisan_of_corruption - MELEE_SALAMANDER(5247, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Salamander - MELEE_INFERNAL_TECPATL(12342, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Infernal_tecpatl - MELEE_HALLOWED_FLAIL(14244, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Hallowed_flail - MELEE_FELLING_AXE(10079, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Crystal_felling_axe - MELEE_HALLOWFELL(14470, AttackStyle.MELEE), + MELEE_VIGGORAS_CHAINMACE(AnimationID.WILD_CAVE_CHAINMACE_CRUSH, AttackStyle.MELEE), + MELEE_DAGGER_SLASH(AnimationID.HUMAN_DDAGGER_LUNGE, AttackStyle.MELEE), // tested w/ dds + MELEE_SPEAR_STAB(AnimationID.HUMAN_DSPEAR_STAB, AttackStyle.MELEE), // tested w/ zammy hasta + MELEE_SWORD_STAB(AnimationID.HUMAN_SWORD_STAB, AttackStyle.MELEE), // tested w/ dragon sword, obby sword, d long + MELEE_SCIM_SLASH(AnimationID.HUMAN_SWORD_SLASH, AttackStyle.MELEE), // tested w/ rune & dragon scim, d sword, VLS, obby sword + + MELEE_LANCE_STAB(AnimationID.HUMAN_DHUNTER_LANCE_ATTACK, AttackStyle.MELEE), + MELEE_LANCE_CRUSH(AnimationID.HUMAN_DHUNTER_LANCE_CRUSH, AttackStyle.MELEE), + MELEE_LANCE_SLASH(AnimationID.HUMAN_DHUNTER_LANCE_SLASH, AttackStyle.MELEE), + + MELEE_FANG_STAB(AnimationID.HUMAN_OSMUMTENS_FANG, AttackStyle.MELEE), // tested w/ fang + MELEE_FANG_SPEC(AnimationID.OLAF2_BRINE_SABRE_SPECIAL, AttackStyle.MELEE, true), // tested w/ fang spec + + MELEE_GENERIC_SLASH(AnimationID.HUMAN_AXE_CHOP, AttackStyle.MELEE), // tested w/ zuriel's staff, d long slash, dclaws regular slash + + MELEE_BATTLEAXE_SLASH(AnimationID.HUMAN_AXE_HACK, AttackStyle.MELEE), // tested w/ rune baxe + MELEE_MACE_STAB(AnimationID.HUMAN_BLUNT_SPIKE, AttackStyle.MELEE), // tested w/ d mace + MELEE_BATTLEAXE_CRUSH(AnimationID.HUMAN_BLUNT_POUND, AttackStyle.MELEE), // tested w/ rune baxe, dwh & statius warhammer animation, d mace + MELEE_2H_CRUSH(AnimationID.HUMAN_DHSWORD_CHOP, AttackStyle.MELEE), // tested w/ rune & dragon 2h + MELEE_2H_SLASH(AnimationID.HUMAN_DHSWORD_SLASH, AttackStyle.MELEE), // tested w/ rune & dragon 2h + MELEE_STAFF_CRUSH_2(AnimationID.HUMAN_STAFF_PUMMEL, AttackStyle.MELEE), // tested w/ ancient staff, 3rd age wand + MELEE_STAFF_CRUSH_3(AnimationID.HUMAN_STAFFORB_PUMMEL, AttackStyle.MELEE), // Common staff crush. Air/fire/etc staves, smoke battlestaff, SOTD/SOL crush, zammy hasta crush + MELEE_PUNCH(AnimationID.HUMAN_UNARMEDPUNCH, AttackStyle.MELEE), + MELEE_KICK(AnimationID.HUMAN_UNARMEDKICK, AttackStyle.MELEE), + MELEE_STAFF_STAB(AnimationID.HUMAN_SPEAR_SPIKE, AttackStyle.MELEE), // tested w/ SOTD/SOL jab, vesta's spear stab, c hally + MELEE_SPEAR_CRUSH(AnimationID.HUMAN_SPEAR_LUNGE, AttackStyle.MELEE), // tested w/ vesta's spear + MELEE_STAFF_SLASH(AnimationID.HUMAN_SCYTHE_SWEEP, AttackStyle.MELEE), // tested w/ SOTD/SOL slash, zammy hasta slash, vesta's spear slash, c hally + MELEE_DLONG_SPEC(AnimationID.CLEAVE, AttackStyle.MELEE, true), // tested w/ d long spec, also thammaron's sceptre crush (????)... + MELEE_DRAGON_MACE_SPEC(AnimationID.SHATTER, AttackStyle.MELEE, true), + MELEE_DRAGON_DAGGER_SPEC(AnimationID.PUNCTURE, AttackStyle.MELEE, true), + MELEE_DRAGON_WARHAMMER_SPEC(AnimationID.DRAGON_WARHAMMER_SA_PLAYER, AttackStyle.MELEE, true), // tested w/ dwh, statius warhammer spec + MELEE_ABYSSAL_WHIP(AnimationID.SLAYER_ABYSSAL_WHIP_ATTACK, AttackStyle.MELEE), // tested w/ whip, tent whip + MELEE_GRANITE_MAUL(AnimationID.SLAYER_GRANITE_MAUL_ATTACK, AttackStyle.MELEE), // tested w/ normal gmaul, ornate maul + MELEE_GRANITE_MAUL_SPEC(AnimationID.SLAYER_GRANITE_MAUL_SPECIAL_ATTACK, AttackStyle.MELEE, true), // tested w/ normal gmaul, ornate maul + MELEE_DHAROKS_GREATAXE_CRUSH(AnimationID.BARROW_DHAROK_SLASH, AttackStyle.MELEE), + MELEE_DHAROKS_GREATAXE_SLASH(AnimationID.BARROW_DHAROK_CRUSH, AttackStyle.MELEE), + MELEE_AHRIMS_STAFF_CRUSH(AnimationID.BARROWS_QUARTERSTAFF_ATTACK, AttackStyle.MELEE), + MELEE_OBBY_MAUL_CRUSH(AnimationID.DRAGON_PICKAXE_ANIM, AttackStyle.MELEE), + MELEE_ABYSSAL_DAGGER_STAB(AnimationID.ABYSSAL_DAGGER_LUNGE, AttackStyle.MELEE), // spec un-tested + MELEE_ABYSSAL_BLUDGEON_CRUSH(AnimationID.ABYSSAL_BLUDGEON_CRUSH, AttackStyle.MELEE), + MELEE_ABYSSAL_BLUDGEON_SPEC(AnimationID.ABYSSAL_BLUDGEON_SPECIAL_ATTACK, AttackStyle.MELEE, true), + MELEE_LEAF_BLADED_BATTLEAXE_CRUSH(AnimationID.BATTLEAXE_CRUSH, AttackStyle.MELEE), + MELEE_INQUISITORS_MACE(AnimationID.HUMAN_INQUISITORS_MACE_CRUSH, AttackStyle.MELEE), + MELEE_BARRELCHEST_ANCHOR_CRUSH(AnimationID.BRAIN_PLAYER_ANCHOR_ATTACK, AttackStyle.MELEE), + MELEE_BARRELCHEST_ANCHOR_CRUSH_SPEC(AnimationID.BRAIN_PLAYER_ANCHOR_SPECIAL_ATTACK, AttackStyle.MELEE, true), + MELEE_LEAF_BLADED_BATTLEAXE_SLASH(AnimationID.GODWARS_GODSWORD_ZAMORAK_PLAYER, AttackStyle.MELEE), + MELEE_GODSWORD_SLASH(AnimationID.DH_SWORD_UPDATE_SLASH, AttackStyle.MELEE), // tested w/ AGS, BGS, ZGS, SGS, AGS(or) sara sword + MELEE_GODSWORD_CRUSH(AnimationID.DH_SWORD_UPDATE_SMASH, AttackStyle.MELEE), // tested w/ AGS, BGS, ZGS, SGS, sara sword + MELEE_GODSWORD_DEFENSIVE(AnimationID.DH_SWORD_UPDATE_BLOCK, AttackStyle.MELEE), // tested w/ BGS + MELEE_RUNE_CLAWS_SPEC(AnimationID.IMPALE, AttackStyle.MELEE, true), + MELEE_DRAGON_CLAWS_SPEC(AnimationID.HUMAN_DRAGON_CLAWS_SPEC, AttackStyle.MELEE, true), + MELEE_VLS_SPEC(AnimationID.HUMAN_DRAGON_SWORD_SPEC, AttackStyle.MELEE, true), // both VLS and dragon sword spec + MELEE_ELDER_MAUL(AnimationID.HUMAN_ELDER_MAUL_ATTACK, AttackStyle.MELEE), + MELEE_ZAMORAK_GODSWORD_SPEC(AnimationID.ZGS_SPECIAL_PLAYER, AttackStyle.MELEE, true), // tested zgs spec + MELEE_ELDER_MAUL_SPEC(AnimationID.HUMAN_ELDER_MAUL_SPEC, AttackStyle.MELEE), + MELEE_ZAMORAK_GODSWORD_OR_SPEC(AnimationID.ZGS_SPECIAL_ORNATE_PLAYER, AttackStyle.MELEE, true), // verified 22/06/2024, assumed due to ags(or) + MELEE_SARADOMIN_GODSWORD_SPEC(AnimationID.SGS_SPECIAL_PLAYER, AttackStyle.MELEE, true), // tested sgs spec + MELEE_SARADOMIN_GODSWORD_OR_SPEC(AnimationID.SGS_SPECIAL_ORNATE_PLAYER, AttackStyle.MELEE, true), // verified 22/06/2024, assumed due to ags(or) + MELEE_BANDOS_GODSWORD_SPEC(AnimationID.BGS_SPECIAL_PLAYER, AttackStyle.MELEE, true), // tested bgs spec + MELEE_BANDOS_GODSWORD_OR_SPEC(AnimationID.BGS_SPECIAL_ORNATE_PLAYER, AttackStyle.MELEE, true), // verified 22/06/2024, assumed due to ags(or) + MELEE_ARMADYL_GODSWORD_SPEC(AnimationID.AGS_SPECIAL_PLAYER, AttackStyle.MELEE, true), // tested ags spec + MELEE_ARMADYL_GODSWORD_OR_SPEC(AnimationID.AGS_SPECIAL_ORNATE_PLAYER, AttackStyle.MELEE, true), // tested ags(or) spec + MELEE_SCYTHE(AnimationID.SCYTHE_OF_VITUR_ATTACK, AttackStyle.MELEE), // tested w/ all scythe styles (so could be crush, but unlikely) + MELEE_GHAZI_RAPIER_STAB(AnimationID.GHRAZI_RAPIER_ATTACK, AttackStyle.MELEE), // rapier slash is 390, basic slash animation. Also VLS stab. + MELEE_ANCIENT_GODSWORD_SPEC(AnimationID.NGS_SPECIAL_PLAYER, AttackStyle.MELEE, true), + MELEE_CRYSTAL_HALBERD_SPEC(AnimationID.DRAGON_HALBERD_SPECIAL_ATTACK, AttackStyle.MELEE, true), + MELEE_SOULREAPER_AXE(AnimationID.ANCIENT_AXE_CRUSH, AttackStyle.MELEE, true), + MELEE_SOULREAPER_AXE_SPEC(AnimationID.ANCIENT_AXE_SPECIAL, AttackStyle.MELEE, true), + MELEE_GUTHANS_LUNGE(AnimationID.BARROWS_WAR_SPEAR_STAB, AttackStyle.MELEE), + MELEE_GUTHANS_SWIPE(AnimationID.BARROWS_WAR_SPEAR_SLASH, AttackStyle.MELEE), + MELEE_GUTHANS_POUNDMA(AnimationID.BARROWS_WAR_SPEAR_CRUSH, AttackStyle.MELEE), + MELEE_TORAG_HAMMERS(AnimationID.BARROW_TORAG_CRUSH, AttackStyle.MELEE), + MELEE_VERACS_FLAIL(AnimationID.BARROW_GUTHAN_CRUSH, AttackStyle.MELEE), + MELEE_BLISTERWOOD_FLAIL_CRUSH(AnimationID.IVANDIS_FLAIL_ATTACK, AttackStyle.MELEE), // blisterwood flail + MELEE_BONE_DAGGER_SPEC(AnimationID.DTTD_PLAYER_STAB_BONE_DAGGER, AttackStyle.MELEE, true), // tested with all poison variants (p, p+, p++, none) + MELEE_DUAL_MACUAHUITL(AnimationID.PMOON_MACUAHUITL_CRUSH, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Dual_macuahuitl set effect needs custom code + MELEE_BLUE_MOON_SPEAR_SPEC(AnimationID.HUMAN_ZAMORAKSPEAR_LUNGE, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Blue_moon_spear + MELEE_BLUE_MOON_SPEAR(AnimationID.HUMAN_ZAMORAKSPEAR_STAB, AttackStyle.MELEE), + MELEE_DHINS(AnimationID.HUMAN_DINHS_BULWARK_BASH, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Dinh%27s_bulwark + MELEE_URSINE_CHAINMACE_SPEC(AnimationID.HUMAN_SPECIAL02_URSINE, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Ursine_chainmace#Charged + MELEE_ANCIENT_MACE_SPEC(AnimationID.SLICE_PLAYER_MACE_SPECIAL_ATTACK, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Ancient_mace + MELEE_DSCIM_SPEC(AnimationID.SP_ATTACK_DRAGON_SCIMITAR, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Dragon_scimitar + MELEE_D2H_SPEC(AnimationID.DRAGON_TWO_HANDED_SWORD, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Dragon_2h_sword + MELEE_ARCLIGHT_SPEC(AnimationID.DARK_SPEC_PLAYER, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Arclight + MELEE_SARA_SWORD_SPEC(AnimationID.SARADOMIN_SWORD_SPECIAL_PLAYER, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Saradomin_sword assumed to be the same for the blessed version + MELEE_RED_KERIS_SPEC(AnimationID.TOA_KERIS_PARTISAN_SPECIAL01, AttackStyle.MELEE, true), // https://oldschool.runescape.wiki/w/Keris_partisan_of_corruption + MELEE_SALAMANDER(AnimationID.HUMAN_ATTACK_SALAMANDER, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Salamander + MELEE_INFERNAL_TECPATL(AnimationID.TECPATL_STAB, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Infernal_tecpatl + MELEE_HALLOWED_FLAIL(AnimationID.HUMAN_WEAPONS_HALLOWED_FLAIL01_ATTACK01, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Hallowed_flail + MELEE_FELLING_AXE(AnimationID.FORESTRY_2H_AXE_ATTACK, AttackStyle.MELEE), // https://oldschool.runescape.wiki/w/Crystal_felling_axe + MELEE_HALLOWFELL(AnimationID.HUMAN_HALLOWFELL_SLASH, AttackStyle.MELEE), // RANGED - RANGED_CHINCHOMPA(7618, AttackStyle.RANGED), - RANGED_SHORTBOW(426, AttackStyle.RANGED), // Confirmed same w/ 3 types of arrows, w/ maple, magic, & hunter's shortbow, craw's bow, dbow, dbow spec - RANGED_RUNE_KNIFE_PVP(929, AttackStyle.RANGED), // 1 tick animation, has 1 tick delay between attacks. likely same for all knives. Same for morrigan's javelins, both spec & normal attack. - RANGED_MAGIC_SHORTBOW_SPEC(1074, AttackStyle.RANGED, true), - RANGED_CROSSBOW_PVP(4230, AttackStyle.RANGED), // Tested RCB & ACB w/ dragonstone bolts (e) & diamond bolts (e) - RANGED_BLOWPIPE(5061, AttackStyle.RANGED), // tested in PvP with all styles. Has 1 tick delay between animations in pvp. - RANGED_DARTS(7554, AttackStyle.RANGED), // tested w/ addy darts. Seems to be constant animation but sometimes stalls and doesn't animate - RANGED_BALLISTA(7218, AttackStyle.RANGED), // Tested w/ dragon javelins. - RANGED_BALLISTA_SPEC(7556, AttackStyle.RANGED, true), - RANGED_RUNE_THROWNAXE_SPEC(1068, AttackStyle.RANGED, true), // https://oldschool.runescape.wiki/w/Rune_thrownaxe - RANGED_DRAGON_THROWNAXE_SPEC(7521, AttackStyle.RANGED, true), - RANGED_RUNE_CROSSBOW(7552, AttackStyle.RANGED), - RANGED_RUNE_CROSSBOW_OR(9206, AttackStyle.RANGED), - RANGED_BALLISTA_2(7555, AttackStyle.RANGED), // tested w/ light & heavy ballista, dragon & iron javelins. - RANGED_RUNE_KNIFE(7617, AttackStyle.RANGED), // 1 tick animation, has 1 tick delay between attacks. Also d thrownaxe - RANGED_DRAGON_KNIFE(8194, AttackStyle.RANGED), - RANGED_DRAGON_KNIFE_SPEC(8291, AttackStyle.RANGED, true), - RANGED_DRAGON_KNIFE_POISONED(8195, AttackStyle.RANGED), // tested w/ d knife p++ - RANGED_DRAGON_KNIFE_POISONED_SPEC(8292, AttackStyle.RANGED, true), - RANGED_ZARYTE_CROSSBOW(9168, AttackStyle.RANGED), - RANGED_ZARYTE_CROSSBOW_PVP(9166, AttackStyle.RANGED), - RANGED_BLAZING_BLOWPIPE(10656, AttackStyle.RANGED), - RANGED_VENATOR_BOW(9858, AttackStyle.RANGED), - RANGED_KARIL_CROSSBOW(2075, AttackStyle.RANGED), - RANGED_ATLATL(11057, AttackStyle.RANGED), // https://oldschool.runescape.wiki/w/Eclipse_atlatl - RANGED_ATLATL_SPEC(11060, AttackStyle.RANGED, true), - RANGED_TONALZTICS(10923, AttackStyle.RANGED), // https://oldschool.runescape.wiki/w/Tonalztics_of_ralos#Charged - RANGED_TONALZTICS_SPEC(10914, AttackStyle.RANGED, true), - RANGED_WEBWEAVER_SPEC(9964, AttackStyle.RANGED, true), // https://oldschool.runescape.wiki/w/Webweaver_bow#Charged - RANGED_BONE_CROSSBOW_SPEC(7557, AttackStyle.RANGED, true), // https://oldschool.runescape.wiki/w/Dorgeshuun_crossbow + RANGED_CHINCHOMPA(AnimationID.HUMAN_CHINCHOMPA_ATTACK_PVN, AttackStyle.RANGED), + RANGED_SHORTBOW(AnimationID.HUMAN_BOW, AttackStyle.RANGED), // Confirmed same w/ 3 types of arrows, w/ maple, magic, & hunter's shortbow, craw's bow, dbow, dbow spec + RANGED_RUNE_KNIFE_PVP(AnimationID.HUMAN_STAKE2, AttackStyle.RANGED), // 1 tick animation, has 1 tick delay between attacks. likely same for all knives. Same for morrigan's javelins, both spec & normal attack. + RANGED_MAGIC_SHORTBOW_SPEC(AnimationID.SNAPSHOT, AttackStyle.RANGED, true), + RANGED_CROSSBOW_PVP(AnimationID.XBOWS_HUMAN_FIRE_AND_RELOAD, AttackStyle.RANGED), // Tested RCB & ACB w/ dragonstone bolts (e) & diamond bolts (e) + RANGED_BLOWPIPE(AnimationID.SNAKEBOSS_BLOWPIPE_ATTACK, AttackStyle.RANGED), // tested in PvP with all styles. Has 1 tick delay between animations in pvp. + RANGED_DARTS(AnimationID.II_HUMAN_DART_THROW_PVN, AttackStyle.RANGED), // tested w/ addy darts. Seems to be constant animation but sometimes stalls and doesn't animate + RANGED_BALLISTA(AnimationID.BALLISTA_ATTACK, AttackStyle.RANGED), // Tested w/ dragon javelins. + RANGED_BALLISTA_SPEC(AnimationID.BALLISTA_SPECIAL_ATTACK_PVN, AttackStyle.RANGED, true), + RANGED_RUNE_THROWNAXE_SPEC(AnimationID.CHAINHIT, AttackStyle.RANGED, true), // https://oldschool.runescape.wiki/w/Rune_thrownaxe + RANGED_DRAGON_THROWNAXE_SPEC(AnimationID.HUMAN_DRAGON_TAXE_SPEC, AttackStyle.RANGED, true), + RANGED_RUNE_CROSSBOW(AnimationID.XBOWS_HUMAN_FIRE_AND_RELOAD_PVN, AttackStyle.RANGED), + RANGED_RUNE_CROSSBOW_OR(AnimationID.HUMAN_XBOWS_LEAGUE03_ATTACK_PVN, AttackStyle.RANGED), + RANGED_BALLISTA_2(AnimationID.BALLISTA_ATTACK_PVN, AttackStyle.RANGED), // tested w/ light & heavy ballista, dragon & iron javelins. + RANGED_RUNE_KNIFE(AnimationID.HUMAN_STAKE2_PVN, AttackStyle.RANGED), // 1 tick animation, has 1 tick delay between attacks. Also d thrownaxe + RANGED_DRAGON_KNIFE(AnimationID.HUMAN_DRAGON_KNIFE, AttackStyle.RANGED), + RANGED_DRAGON_KNIFE_SPEC(AnimationID.HUMAN_DRAGON_TKNIVES_SPEC, AttackStyle.RANGED, true), + RANGED_DRAGON_KNIFE_POISONED(AnimationID.HUMAN_DRAGON_KNIFE_P, AttackStyle.RANGED), // tested w/ d knife p++ + RANGED_DRAGON_KNIFE_POISONED_SPEC(AnimationID.HUMAN_DRAGON_TKNIVES_SPEC_POISON, AttackStyle.RANGED, true), + RANGED_ZARYTE_CROSSBOW(AnimationID.ZCB_ATTACK_PVN, AttackStyle.RANGED), + RANGED_ZARYTE_CROSSBOW_PVP(AnimationID.ZCB_ATTACK, AttackStyle.RANGED), + RANGED_BLAZING_BLOWPIPE(AnimationID.SNAKEBOSS_BLOWPIPE_ATTACK_ORNAMENT, AttackStyle.RANGED), + RANGED_VENATOR_BOW(AnimationID.HUMAN_WEAPON_BOW_VENATOR01_SHOOT, AttackStyle.RANGED), + RANGED_KARIL_CROSSBOW(AnimationID.BARROWS_REPEATING_CROSSBOW_FIRE, AttackStyle.RANGED), + RANGED_ATLATL(AnimationID.HUMAN_ATLATL_ATTACK_RANGED_01, AttackStyle.RANGED), // https://oldschool.runescape.wiki/w/Eclipse_atlatl + RANGED_ATLATL_SPEC(AnimationID.HUMAN_SPECIAL_ATLATL_01, AttackStyle.RANGED, true), + RANGED_TONALZTICS(AnimationID.HUMAN_GLAIVE_RALOS01_CHARGED_THROW, AttackStyle.RANGED), // https://oldschool.runescape.wiki/w/Tonalztics_of_ralos#Charged + RANGED_TONALZTICS_SPEC(AnimationID.HUMAN_GLAIVE_RALOS01_CHARGED_SPECIAL, AttackStyle.RANGED, true), + RANGED_WEBWEAVER_SPEC(AnimationID.HUMAN_SPECIAL01_WEBWEAVER, AttackStyle.RANGED, true), // https://oldschool.runescape.wiki/w/Webweaver_bow#Charged + RANGED_BONE_CROSSBOW_SPEC(AnimationID.DTTD_PLAYER_FIRE_BONE_CROSSBOW_PVN, AttackStyle.RANGED, true), // https://oldschool.runescape.wiki/w/Dorgeshuun_crossbow // MAGIC - Keep in spellbook order (staves last) then alphabetical order and oneline - MAGIC_GOD_SPELL(811, AttackStyle.MAGIC, Spellbook.STANDARD), // https://oldschool.runescape.wiki/w/God_spells - MAGIC_IBAN_BLAST(708, AttackStyle.MAGIC, Spellbook.STANDARD), - MAGIC_SLAYER_DART(1576, AttackStyle.MAGIC, Spellbook.STANDARD), // https://oldschool.runescape.wiki/w/Magic_Dart - MAGIC_STANDARD_BIND(710, AttackStyle.MAGIC, Spellbook.STANDARD), // tested w/ bind, snare, entangle - MAGIC_STANDARD_BIND_STAFF(1161, AttackStyle.MAGIC, Spellbook.STANDARD), // tested w/ bind, snare, entangle, various staves - MAGIC_STANDARD_CONFUSE(1163, AttackStyle.MAGIC, Spellbook.STANDARD), - MAGIC_STANDARD_CRUMBLE_UNDEAD(724, AttackStyle.MAGIC, Spellbook.STANDARD), - MAGIC_STANDARD_CRUMBLE_UNDEAD_HOLDING_STAFF(1166, AttackStyle.MAGIC, Spellbook.STANDARD), - MAGIC_STANDARD_ENFEEBLE(1168, AttackStyle.MAGIC, Spellbook.STANDARD), - MAGIC_STANDARD_STRIKE_BOLT_BLAST(9144, AttackStyle.MAGIC, Spellbook.STANDARD), // tested w/ bolt - MAGIC_STANDARD_STRIKE_MANUAL(711, AttackStyle.MAGIC, Spellbook.STANDARD), - MAGIC_STANDARD_STRIKE_STAFF(1162, AttackStyle.MAGIC, Spellbook.STANDARD), - MAGIC_STANDARD_STRIKE_BOLT_BLAST_STAFF(11423, AttackStyle.MAGIC, Spellbook.STANDARD), // strike, bolt and blast (tested all spells, different weapons) - MAGIC_STANDARD_STUN(1169, AttackStyle.MAGIC, Spellbook.STANDARD), - MAGIC_STANDARD_SURGE_STAFF(9145, AttackStyle.MAGIC, Spellbook.STANDARD), // tested many staves - MAGIC_STANDARD_VULNERABILITY_CURSE(1165, AttackStyle.MAGIC, Spellbook.STANDARD), - MAGIC_STANDARD_WAVE(11429, AttackStyle.MAGIC, Spellbook.STANDARD), // tested w/ wave spells - MAGIC_STANDARD_WAVE_STAFF(11430, AttackStyle.MAGIC, Spellbook.STANDARD), // tested many staves - MAGIC_STANDARD_WEAKEN(1164, AttackStyle.MAGIC, Spellbook.STANDARD), - - MAGIC_ANCIENT_MULTI_TARGET(10092, AttackStyle.MAGIC, Spellbook.ANCIENT), // Burst & Barrage animations (tested all 8, different weapons) - MAGIC_ANCIENT_MULTI_TARGET_PVP(1979, AttackStyle.MAGIC, Spellbook.ANCIENT), // Burst & Barrage animations (tested all 8, different weapons) - MAGIC_ANCIENT_SINGLE_TARGET(10091, AttackStyle.MAGIC, Spellbook.ANCIENT), // Rush & Blitz animations (tested all 8, different weapons) - MAGIC_ANCIENT_SINGLE_TARGET_PVP(1978, AttackStyle.MAGIC, Spellbook.ANCIENT), // Rush & Blitz animations - - MAGIC_ARCEUUS_DEMONBANE(8977, AttackStyle.MAGIC, Spellbook.ARCEUUS), // Also greater corruption, so that may accidentally trigger a manual-cast, but that's probably fine only affects Muspah - MAGIC_ARCEUUS_GRASP(8972, AttackStyle.MAGIC, Spellbook.ARCEUUS), - - MAGIC_ACCURSED_SCEPTRE_SPEC(9961, AttackStyle.MAGIC, true), - MAGIC_TUMEKENS_SHADOW(9493, AttackStyle.MAGIC, false), - MAGIC_WARPED_SCEPTRE(10501, AttackStyle.MAGIC, false), // https://oldschool.runescape.wiki/w/Warped_sceptre - MAGIC_VOLATILE_NIGHTMARE_STAFF_SPEC(8532, AttackStyle.MAGIC, true), // assume 99 mage's base damage (does not rise when boosted). - - MAGIC_EYE_OF_AYAK(12397, AttackStyle.MAGIC, false), - MAGIC_EYE_OF_AYAK_SPEC(12394, AttackStyle.MAGIC, true), // https://github.com/ngraves95/attacktimer/issues/91 + MAGIC_GOD_SPELL(AnimationID.HUMAN_CASTING, AttackStyle.MAGIC, Spellbook.STANDARD), // https://oldschool.runescape.wiki/w/God_spells + MAGIC_IBAN_BLAST(AnimationID.HUMAN_CASTIBANBLAST, AttackStyle.MAGIC, Spellbook.STANDARD), + MAGIC_SLAYER_DART(AnimationID.SLAYER_MAGICDART_CAST, AttackStyle.MAGIC, Spellbook.STANDARD), // https://oldschool.runescape.wiki/w/Magic_Dart + MAGIC_STANDARD_BIND(AnimationID.HUMAN_CASTENTANGLE, AttackStyle.MAGIC, Spellbook.STANDARD), // tested w/ bind, snare, entangle + MAGIC_STANDARD_BIND_STAFF(AnimationID.HUMAN_CASTENTANGLE_STAFF, AttackStyle.MAGIC, Spellbook.STANDARD), // tested w/ bind, snare, entangle, various staves + MAGIC_STANDARD_CONFUSE(AnimationID.HUMAN_CASTCONFUSE_STAFF, AttackStyle.MAGIC, Spellbook.STANDARD), + MAGIC_STANDARD_CRUMBLE_UNDEAD(AnimationID.HUMAN_CASTCRUMBLEUNDEAD, AttackStyle.MAGIC, Spellbook.STANDARD), + MAGIC_STANDARD_CRUMBLE_UNDEAD_HOLDING_STAFF(AnimationID.HUMAN_CASTCRUMBLEUNDEAD_STAFF, AttackStyle.MAGIC, Spellbook.STANDARD), + MAGIC_STANDARD_ENFEEBLE(AnimationID.HUMAN_CASTENFEEBLE_STAFF, AttackStyle.MAGIC, Spellbook.STANDARD), + MAGIC_STANDARD_STRIKE_BOLT_BLAST(AnimationID.HUMAN_CASTSTRIKE_WALKMERGE, AttackStyle.MAGIC, Spellbook.STANDARD), // tested w/ bolt + MAGIC_STANDARD_STRIKE_MANUAL(AnimationID.HUMAN_CASTSTRIKE, AttackStyle.MAGIC, Spellbook.STANDARD), + MAGIC_STANDARD_STRIKE_STAFF(AnimationID.HUMAN_CASTSTRIKE_STAFF, AttackStyle.MAGIC, Spellbook.STANDARD), + MAGIC_STANDARD_STRIKE_BOLT_BLAST_STAFF(AnimationID.HUMAN_CASTSTRIKE_STAFF_WALKMERGE, AttackStyle.MAGIC, Spellbook.STANDARD), // strike, bolt and blast (tested all spells, different weapons) + MAGIC_STANDARD_STUN(AnimationID.HUMAN_CASTSTUN_STAFF, AttackStyle.MAGIC, Spellbook.STANDARD), + MAGIC_STANDARD_SURGE_STAFF(AnimationID.HUMAN_CAST_SURGE_WALKMERGE, AttackStyle.MAGIC, Spellbook.STANDARD), // tested many staves + MAGIC_STANDARD_VULNERABILITY_CURSE(AnimationID.HUMAN_CASTCURSE_STAFF, AttackStyle.MAGIC, Spellbook.STANDARD), + MAGIC_STANDARD_WAVE(AnimationID.HUMAN_CASTWAVE_WALKMERGE, AttackStyle.MAGIC, Spellbook.STANDARD), // tested w/ wave spells + MAGIC_STANDARD_WAVE_STAFF(AnimationID.HUMAN_CASTWAVE_STAFF_WALKMERGE, AttackStyle.MAGIC, Spellbook.STANDARD), // tested many staves + MAGIC_STANDARD_WEAKEN(AnimationID.HUMAN_CASTWEAKEN_STAFF, AttackStyle.MAGIC, Spellbook.STANDARD), + + MAGIC_ANCIENT_MULTI_TARGET(AnimationID.ZAROS_VERTICAL_CASTING_WALKMERGE, AttackStyle.MAGIC, Spellbook.ANCIENT), // Burst & Barrage animations (tested all 8, different weapons) + MAGIC_ANCIENT_MULTI_TARGET_PVP(AnimationID.ZAROS_VERTICAL_CASTING, AttackStyle.MAGIC, Spellbook.ANCIENT), // Burst & Barrage animations (tested all 8, different weapons) + MAGIC_ANCIENT_SINGLE_TARGET(AnimationID.ZAROS_CASTING_WALKMERGE, AttackStyle.MAGIC, Spellbook.ANCIENT), // Rush & Blitz animations (tested all 8, different weapons) + MAGIC_ANCIENT_SINGLE_TARGET_PVP(AnimationID.ZAROS_CASTING, AttackStyle.MAGIC, Spellbook.ANCIENT), // Rush & Blitz animations + + MAGIC_ARCEUUS_DEMONBANE(AnimationID.HUMAN_SPELLCAST_DEMONBANE, AttackStyle.MAGIC, Spellbook.ARCEUUS), // Also greater corruption, so that may accidentally trigger a manual-cast, but that's probably fine only affects Muspah + MAGIC_ARCEUUS_GRASP(AnimationID.HUMAN_SPELLCAST_GRASP, AttackStyle.MAGIC, Spellbook.ARCEUUS), + + MAGIC_ACCURSED_SCEPTRE_SPEC(AnimationID.HUMAN_SPECIAL_ACCURSED, AttackStyle.MAGIC, true), + MAGIC_TUMEKENS_SHADOW(AnimationID.TOA_SOT_CAST_B, AttackStyle.MAGIC, false), + MAGIC_WARPED_SCEPTRE(AnimationID.POG_WARPED_SCEPTRE_ATTACK, AttackStyle.MAGIC, false), // https://oldschool.runescape.wiki/w/Warped_sceptre + MAGIC_VOLATILE_NIGHTMARE_STAFF_SPEC(AnimationID.NIGHTMARE_STAFF_SPECIAL, AttackStyle.MAGIC, true), // assume 99 mage's base damage (does not rise when boosted). + + MAGIC_EYE_OF_AYAK(AnimationID.HUMAN_EYE_OF_AYAK_NORMAL, AttackStyle.MAGIC, false), + MAGIC_EYE_OF_AYAK_SPEC(AnimationID.HUMAN_EYE_OF_AYAK_SPECIAL, AttackStyle.MAGIC, true), // https://github.com/ngraves95/attacktimer/issues/91 // Misc - MAGIC_IMBUE(722, AttackStyle.NON_ATTACK), - SPELLBOOK_SWAP(6299, AttackStyle.NON_ATTACK), - LUNAR_GROUP(4409, AttackStyle.NON_ATTACK), // heal group, cure group, etc - LUNAR_OTHER(4411, AttackStyle.NON_ATTACK), // Venge other, heal other, spec transfer, cure other, cure me, etc - NPC_CONTACT(4413, AttackStyle.NON_ATTACK), // Also bake pie and pot share - VENGEANCE(8316, AttackStyle.NON_ATTACK), - REANIMATION(7198, AttackStyle.NON_ATTACK), - DEMONIC_OFFERING(8975, AttackStyle.NON_ATTACK), // Also sinister offering - SHADOW_VEIL(8979, AttackStyle.NON_ATTACK), - MARK_OF_DARKNESS(8970, AttackStyle.NON_ATTACK), // Also death charge and ward of arceuss - PICK_POCKETING(881, AttackStyle.NON_ATTACK), - SUMMON_THRALL(8973, AttackStyle.NON_ATTACK), - LUNAR_TELEPORT(1816, AttackStyle.NON_ATTACK), - MONSTER_EXAMINE(6293, AttackStyle.NON_ATTACK), // Also stat spy - HUMIDIFY(6294, AttackStyle.NON_ATTACK), - GEOMANCY(7118, AttackStyle.NON_ATTACK), - DREAM(7672, AttackStyle.NON_ATTACK), - ROCKSLUG_BAG_OF_SALT(1574, AttackStyle.NON_ATTACK), // https://oldschool.runescape.wiki/w/Rockslug - DESSET_LIZARD_ICE_COOLER(2779, AttackStyle.NON_ATTACK), // https://oldschool.runescape.wiki/w/Desert_Lizard + MAGIC_IMBUE(AnimationID.HUMAN_CASTBONESTOBANANAS, AttackStyle.NON_ATTACK), + SPELLBOOK_SWAP(AnimationID.DREAM_PLAYER_SPELLBOOK_SWAP, AttackStyle.NON_ATTACK), + LUNAR_GROUP(AnimationID.QUEST_LUNAR_SPELL_CAST_SPELL_ON_GROUP, AttackStyle.NON_ATTACK), // heal group, cure group, etc + LUNAR_OTHER(AnimationID.QUEST_LUNAR_PUSHING_MAGIC_ANIMATION, AttackStyle.NON_ATTACK), // Venge other, heal other, spec transfer, cure other, cure me, etc + NPC_CONTACT(AnimationID.LUNAR_HUMAN_MAGIC_SUMMON2, AttackStyle.NON_ATTACK), // Also bake pie and pot share + VENGEANCE_1(AnimationID.VENGEANCE_SPELL_ANIM_NOSTALLING, AttackStyle.NON_ATTACK), + VENGEANCE_2(AnimationID.VENGEANCE_SPELL_ANIM_STALLING, AttackStyle.NON_ATTACK), + REANIMATION(AnimationID.ARCEUUS_NECROMANCY_PLAYERANIM, AttackStyle.NON_ATTACK), + DEMONIC_OFFERING(AnimationID.HUMAN_CAST_OFFERING, AttackStyle.NON_ATTACK), // Also sinister offering + SHADOW_VEIL(AnimationID.HUMAN_SPELLCAST_SHADOWVEIL, AttackStyle.NON_ATTACK), + MARK_OF_DARKNESS(AnimationID.HUMAN_CAST_SELFIMBUE, AttackStyle.NON_ATTACK), // Also death charge and ward of arceuss + PICK_POCKETING(AnimationID.HUMAN_PICKPOCKET, AttackStyle.NON_ATTACK), + SUMMON_THRALL(AnimationID.HUMAN_SPELLCAST_RESURRECT, AttackStyle.NON_ATTACK), + LUNAR_TELEPORT(AnimationID.HUMAN_TELEPORT_OTHER_IMPACT, AttackStyle.NON_ATTACK), + MONSTER_EXAMINE(AnimationID.DREAM_PLAYER_MONSTEREXAM_STATSPY, AttackStyle.NON_ATTACK), // Also stat spy + HUMIDIFY(AnimationID.DREAM_PLAYER_HUMIDIFY_SPELL, AttackStyle.NON_ATTACK), + GEOMANCY(AnimationID.LUNAR_HUMAN_MAGIC_GEOMANCY, AttackStyle.NON_ATTACK), + DREAM(AnimationID.FOSSIL_LOC_CLAM_IDLE_SHUT, AttackStyle.NON_ATTACK), + ROCKSLUG_BAG_OF_SALT(AnimationID.SLAYER_SALT_SPRINKLE, AttackStyle.NON_ATTACK), // https://oldschool.runescape.wiki/w/Rockslug + DESSET_LIZARD_ICE_COOLER(AnimationID.HUMAN_CHINCHOMPA_ATTACK, AttackStyle.NON_ATTACK), // https://oldschool.runescape.wiki/w/Desert_Lizard // Tick manipulation actions are not trustworthy for attack starts, in fact for the most part they're like an eat and would stop attacks being allowed. - FLECTHING_KNIFE(1248, AttackStyle.NON_ATTACK), // knife & log (celastrus bark, etc) - FLECTHING_KEBBIT(5243, AttackStyle.NON_ATTACK), // kebbit & vamb - FLECTHING_CHISEL(5244, AttackStyle.NON_ATTACK), // chisel & moonlight antler - FLECTHING_DART_TIP(8485, AttackStyle.NON_ATTACK), // dart tip & feather - HERB_TAR(5249, AttackStyle.NON_ATTACK), // pestle motar animation - SETUP_HUNTER_TRAP(5208, AttackStyle.NON_ATTACK), - RESET_SNARE_TRAP(5207, AttackStyle.NON_ATTACK), - RESET_BOX_TRAP(5212, AttackStyle.NON_ATTACK), - - DESERT_AMMY(3872, AttackStyle.NON_ATTACK), - - EAT_FOOD_OR_POTION(829, AttackStyle.NON_ATTACK), - OVERLOAD_HIT(3170, AttackStyle.NON_ATTACK), // https://oldschool.runescape.wiki/w/Overload_(Chambers_of_Xeric)#4_dose - - TAKING_HIT_1HANDED_UNARMED(397, AttackStyle.NON_ATTACK), - TAKING_HIT_2H_SWORD(410, AttackStyle.NON_ATTACK), - TAKING_HIT_ANCHOR(5866, AttackStyle.NON_ATTACK), - TAKING_HIT_BLISTERWOOD_FLAIL(8017, AttackStyle.NON_ATTACK), - TAKING_HIT_BLOWPIPE(430, AttackStyle.NON_ATTACK), - TAKING_HIT_BULWARK(7512, AttackStyle.NON_ATTACK), - TAKING_HIT_CHAINMACE(7200, AttackStyle.NON_ATTACK), - TAKING_HIT_CHIN_CHOMPA(3176, AttackStyle.NON_ATTACK), - TAKING_HIT_DAGGER(378, AttackStyle.NON_ATTACK), - TAKING_HIT_DEFENDER(4177, AttackStyle.NON_ATTACK), - TAKING_HIT_FANG(388, AttackStyle.NON_ATTACK), - TAKING_HIT_GODSWORD(7056, AttackStyle.NON_ATTACK), - TAKING_HIT_KERIS(383, AttackStyle.NON_ATTACK), - TAKING_HIT_LARGE_STAFF(420, AttackStyle.NON_ATTACK), - TAKING_HIT_MACE(403, AttackStyle.NON_ATTACK), - TAKING_HIT_OBBY_MAUL(1666, AttackStyle.NON_ATTACK), - TAKING_HIT_SCYTHE(435, AttackStyle.NON_ATTACK), - TAKING_HIT_SHIELD(1156, AttackStyle.NON_ATTACK), - TAKING_HIT_SPEAR(1709, AttackStyle.NON_ATTACK), - TAKING_HIT_STAFF(415, AttackStyle.NON_ATTACK), - TAKING_HIT_UNARMED(424, AttackStyle.NON_ATTACK), - TAKING_HIT_VERACS_FLAIL(2063, AttackStyle.NON_ATTACK), - TAKING_HIT_WHIP(1659, AttackStyle.NON_ATTACK), - TAKING_HIT_KISTEN(14257, AttackStyle.NON_ATTACK), - TAKING_HIT_HALLOWFELL(14472, AttackStyle.NON_ATTACK), - - LOW_ALCH(712, AttackStyle.NON_ATTACK), - HIGH_ALCH(713, AttackStyle.NON_ATTACK); + FLECTHING_KNIFE(AnimationID.HUMAN_FLETCHING, AttackStyle.NON_ATTACK), // knife & log (celastrus bark, etc) + FLECTHING_KEBBIT(AnimationID.HUMAN_CRAFTING_SPIKEDVAMBRACES, AttackStyle.NON_ATTACK), // kebbit & vamb + FLECTHING_CHISEL(AnimationID.HUMAN_FLETCHING_HUNTINGBOLTS, AttackStyle.NON_ATTACK), // chisel & moonlight antler + FLECTHING_DART_TIP_1(AnimationID.HUMAN_FLETCHING_ADD_DART_FEATHERS_BRONZE, AttackStyle.NON_ATTACK), // dart tip & feather + FLECTHING_DART_TIP_2(AnimationID.HUMAN_FLETCHING_ADD_DART_FEATHERS_IRON, AttackStyle.NON_ATTACK), // dart tip & feather + FLECTHING_DART_TIP_3(AnimationID.HUMAN_FLETCHING_ADD_DART_FEATHERS_STEEL, AttackStyle.NON_ATTACK), // dart tip & feather + FLECTHING_DART_TIP_4(AnimationID.HUMAN_FLETCHING_ADD_DART_FEATHERS_MITHRIL, AttackStyle.NON_ATTACK), // dart tip & feather + FLECTHING_DART_TIP_5(AnimationID.HUMAN_FLETCHING_ADD_DART_FEATHERS_ADAMANT, AttackStyle.NON_ATTACK), // dart tip & feather + FLECTHING_DART_TIP_6(AnimationID.HUMAN_FLETCHING_ADD_DART_FEATHERS_RUNE, AttackStyle.NON_ATTACK), // dart tip & feather + FLECTHING_DART_TIP_7(AnimationID.HUMAN_FLETCHING_ADD_DART_FEATHERS_DRAGON, AttackStyle.NON_ATTACK), // dart tip & feather + FLECTHING_DART_TIP_8(AnimationID.HUMAN_FLETCHING_ADD_DART_FEATHERS_AMETHYST, AttackStyle.NON_ATTACK), // dart tip & feather + HERB_TAR(AnimationID.HUMAN_SALAMANDER_TAR_GRIND, AttackStyle.NON_ATTACK), // pestle motar animation + SETUP_HUNTER_TRAP(AnimationID.HUMAN_LAYTRAP, AttackStyle.NON_ATTACK), + RESET_SNARE_TRAP(AnimationID.HUMAN_HUNTING_DISMANTLE_NET, AttackStyle.NON_ATTACK), + RESET_BOX_TRAP(AnimationID.HUNTING_SETTING_TRAP_SMALL, AttackStyle.NON_ATTACK), + + DESERT_AMMY(AnimationID.TELEPORT_NARDAH_HUMAN, AttackStyle.NON_ATTACK), + + EAT_FOOD_OR_POTION(AnimationID.HUMAN_EAT, AttackStyle.NON_ATTACK), + OVERLOAD_HIT(AnimationID.HUMAN_KILLERWATT_ELECTRICSHOCK, AttackStyle.NON_ATTACK), // https://oldschool.runescape.wiki/w/Overload_(Chambers_of_Xeric)#4_dose + + TAKING_HIT_1HANDED_UNARMED(AnimationID.HUMAN_AXE_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_2H_SWORD(AnimationID.HUMAN_DHSWORD_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_ANCHOR(AnimationID.BRAIN_PLAYER_ANCHOR_DEFEND, AttackStyle.NON_ATTACK), + TAKING_HIT_BLISTERWOOD_FLAIL(AnimationID.IVANDIS_FLAIL_DEFEND, AttackStyle.NON_ATTACK), + TAKING_HIT_BLOWPIPE(AnimationID.HUMAN_SPEAR_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_BULWARK(AnimationID.HUMAN_DINHS_BULWARK_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_CHAINMACE(AnimationID.WILD_CAVE_CHAINMACE_DEFEND, AttackStyle.NON_ATTACK), + TAKING_HIT_CHIN_CHOMPA(AnimationID.HUMAN_CHINCHOMPA_DEFEND, AttackStyle.NON_ATTACK), + TAKING_HIT_DAGGER(AnimationID.HUMAN_DDAGGER_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_DEFENDER(AnimationID.WARGUILD_PARRY_DEFEND, AttackStyle.NON_ATTACK), + TAKING_HIT_FANG(AnimationID.HUMAN_SWORD_DEF, AttackStyle.NON_ATTACK), + TAKING_HIT_GODSWORD(AnimationID.DH_SWORD_UPDATE_DEFEND, AttackStyle.NON_ATTACK), + TAKING_HIT_KERIS(AnimationID.HUMAN_DSPEAR_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_LARGE_STAFF(AnimationID.HUMAN_STAFFORB_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_MACE(AnimationID.HUMAN_BLUNT_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_OBBY_MAUL(AnimationID.SLAYER_GRANITE_MAUL_DEFEND, AttackStyle.NON_ATTACK), + TAKING_HIT_SCYTHE(AnimationID.HUMAN_SCYTHE_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_SHIELD(AnimationID.HUMAN_SHIELD_DEFENCE, AttackStyle.NON_ATTACK), + TAKING_HIT_SPEAR(AnimationID.HUMAN_ZAMORAKSPEAR_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_STAFF(AnimationID.HUMAN_STAFF_BLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_UNARMED(AnimationID.HUMAN_UNARMEDBLOCK, AttackStyle.NON_ATTACK), + TAKING_HIT_VERACS_FLAIL(AnimationID.BARROW_GUTHAN_DEFEND, AttackStyle.NON_ATTACK), + TAKING_HIT_WHIP(AnimationID.SLAYER_ABYSSAL_WHIP_DEFEND, AttackStyle.NON_ATTACK), + TAKING_HIT_KISTEN(AnimationID.HUMAN_WEAPONS_CRIMSON_KISTEN_DEF, AttackStyle.NON_ATTACK), + TAKING_HIT_HALLOWFELL(AnimationID.HUMAN_HALLOWFELL_DEFEND, AttackStyle.NON_ATTACK), + + LOW_ALCH(AnimationID.HUMAN_CASTLOWLVLALCHEMY, AttackStyle.NON_ATTACK), + HIGH_ALCH(AnimationID.HUMAN_CASTHIGHLVLALCHEMY, AttackStyle.NON_ATTACK), + ; private static final Map DATA; private static final Map> SPELL_BOOK_ANIMATIONS; diff --git a/src/main/java/com/attacktimer/AttackBarStyle.java b/src/main/java/com/attacktimer/AttackBarStyle.java index 317784e..aeb07d6 100644 --- a/src/main/java/com/attacktimer/AttackBarStyle.java +++ b/src/main/java/com/attacktimer/AttackBarStyle.java @@ -1,5 +1,31 @@ package com.attacktimer; +/* + * Copyright (c) 2026, Pedro Alves + * + * 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. + */ + import lombok.AllArgsConstructor; import lombok.Getter; @@ -9,7 +35,8 @@ public enum AttackBarStyle { AUTO("Auto"), STANDARD("Standard"), - HIGH_DETAIL("High Detail"); + HIGH_DETAIL("High Detail"), + ; private final String name; diff --git a/src/main/java/com/attacktimer/AttackStyle.java b/src/main/java/com/attacktimer/AttackStyle.java index e6b2b9f..3fd0a55 100644 --- a/src/main/java/com/attacktimer/AttackStyle.java +++ b/src/main/java/com/attacktimer/AttackStyle.java @@ -39,7 +39,8 @@ public enum AttackStyle LONGRANGE("Longrange", Skill.RANGED, Skill.DEFENCE), CASTING("Casting", Skill.MAGIC), DEFENSIVE_CASTING("Defensive Casting", Skill.MAGIC, Skill.DEFENCE), - OTHER("Other"); + OTHER("Other"), + ; @Getter private final String name; diff --git a/src/main/java/com/attacktimer/AttackTimerMetronomePlugin.java b/src/main/java/com/attacktimer/AttackTimerMetronomePlugin.java index 0148da6..5e385c6 100644 --- a/src/main/java/com/attacktimer/AttackTimerMetronomePlugin.java +++ b/src/main/java/com/attacktimer/AttackTimerMetronomePlugin.java @@ -59,6 +59,8 @@ import net.runelite.api.events.SoundEffectPlayed; import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; +import net.runelite.api.gameval.ItemID; +import net.runelite.api.gameval.SpotanimID; import net.runelite.api.gameval.VarPlayerID; import net.runelite.api.gameval.VarbitID; import net.runelite.client.config.ConfigManager; @@ -143,20 +145,12 @@ public enum AttackState private static final int ATTACK_DELAY_NONE = 0; public static final int DEFAULT_SIZE_UNIT_PX = 25; - public static final int SALAMANDER_SET_ANIM_ID = 952; // Used by all 4 types of salamander - // https://oldschool.runescape.wiki/w/Salamander - - private static final int TWINFLAME_STAFF_WEAPON_ID = 30634; - private static final int ECHO_VENATOR_BOW_WEAPON_ID = 30434; - private static final int VENATOR_BOW_WEAPON_ID = 27610; - private static final int HALLOWFELL_ID = 34027; // https://oldschool.runescape.wiki/w/Hallowfell - // Add other weapons here if in the Runelite dev shell this prints a different value to it's actual speed: // // var itemManager = inject(ItemManager.class); // log.info("Speed {}", itemManager.getItemStats().getEquipment().getAspeed()); private static final Map NON_STANDARD_ATTACK_SPEEDS = new ImmutableMap.Builder() - .put(HALLOWFELL_ID, 6) + .put(ItemID.HALLOWFELL, 6) .build(); // These animations are the ones which exceed the duration of their attack cooldown @@ -169,15 +163,14 @@ public enum AttackState .build(); private static final Map NON_STANDARD_MAGIC_WEAPON_SPEEDS = new ImmutableMap.Builder() - .put(TWINFLAME_STAFF_WEAPON_ID, 6) + .put(ItemID.TWINFLAME_STAFF, 6) .build(); // Map of problematic itemIds to equivalent working ones. // The Echo Venator Bow's ItemStats are returning null, so use the regular bow instead. - private static final Map WEAPON_ID_MAPPING_WORKAROUNDS = new ImmutableMap.Builder().put( - ECHO_VENATOR_BOW_WEAPON_ID, - VENATOR_BOW_WEAPON_ID - ).build(); + private static final Map WEAPON_ID_MAPPING_WORKAROUNDS = new ImmutableMap.Builder() + .put(ItemID.VENATOR_BOW_ORNAMENT, ItemID.VENATOR_BOW) + .build(); // https://oldschool.runescape.wiki/w/Food/Fast_foods#Food_Delays // These constants are not to be confused with eat delay. @@ -185,8 +178,6 @@ public enum AttackState private final int DEFAULT_FOOD_ATTACK_DELAY_TICKS = 3; private final int FAST_EAT_ATTACK_DELAY_TICKS = 2; - public static final int EQUIPPING_MONOTONIC = 384; // From empirical testing this clientint seems to always increase - // whenever the player equips an item public static final Dimension DEFAULT_SIZE = new Dimension(DEFAULT_SIZE_UNIT_PX, DEFAULT_SIZE_UNIT_PX); // region subscribers @@ -205,8 +196,7 @@ public void onVarbitChanged(final VarbitChanged varbitChanged) } // onSoundEffectPlayed used to track spell casts, for when the player casts a spell on first tick coming - // off cooldown, in some cases (e.g. ice barrage) the player will have no animation. Also they don't have - // a projectile to detect instead :/ + // off cooldown, in some cases (e.g. ice barrage) the player will have no animation. @Subscribe public void onSoundEffectPlayed(final SoundEffectPlayed event) { @@ -329,7 +319,7 @@ private ItemStats getWeaponStats(int weaponId) private boolean getSalamanderAttack() { - return client.getLocalPlayer().hasSpotAnim(SALAMANDER_SET_ANIM_ID); + return client.getLocalPlayer().hasSpotAnim(SpotanimID.FIREBREATH); } private void setAttackDelay() diff --git a/src/main/java/com/attacktimer/AttackType.java b/src/main/java/com/attacktimer/AttackType.java index 18b1fd5..0608da7 100644 --- a/src/main/java/com/attacktimer/AttackType.java +++ b/src/main/java/com/attacktimer/AttackType.java @@ -32,7 +32,8 @@ public enum AttackType STAB, RANGED, MAGIC, - NONE; + NONE, + ; public boolean IsMelee() { diff --git a/src/main/java/com/attacktimer/CastingSoundData.java b/src/main/java/com/attacktimer/CastingSoundData.java index a6c2066..bd861b6 100644 --- a/src/main/java/com/attacktimer/CastingSoundData.java +++ b/src/main/java/com/attacktimer/CastingSoundData.java @@ -74,7 +74,8 @@ enum CastingSoundData ARCEUUS_INFERIOR_DEMONBANE(5038, Spellbook.ARCEUUS), ARCEUUS_SKELETAL_GRASP(5026, Spellbook.ARCEUUS), ARCEUUS_SUPERIOR_DEMONBANE(5027, Spellbook.ARCEUUS), - ARCEUUS_UNDEAD_GRASP(5030, Spellbook.ARCEUUS); + ARCEUUS_UNDEAD_GRASP(5030, Spellbook.ARCEUUS), + ; private final int id; private final Spellbook spellbook; diff --git a/src/main/java/com/attacktimer/FontTypes.java b/src/main/java/com/attacktimer/FontTypes.java index d8c7ea5..8d630fe 100644 --- a/src/main/java/com/attacktimer/FontTypes.java +++ b/src/main/java/com/attacktimer/FontTypes.java @@ -1,5 +1,30 @@ package com.attacktimer; +/* + * Copyright (c) 2022, Nick Graves + * 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. + */ + import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -14,7 +39,8 @@ public enum FontTypes ROCKWELL("Rockwell"), SEGOE_UI("Segoe Ui"), TIMES_NEW_ROMAN("Times New Roman"), - VERDANA("Verdana"); + VERDANA("Verdana"), + ; private final String name; diff --git a/src/main/java/com/attacktimer/PoweredStaves.java b/src/main/java/com/attacktimer/PoweredStaves.java index 68cef54..74af3a3 100644 --- a/src/main/java/com/attacktimer/PoweredStaves.java +++ b/src/main/java/com/attacktimer/PoweredStaves.java @@ -1,7 +1,7 @@ package com.attacktimer; /* - * Copyright (c) 2024, Lexer747 + * Copyright (c) 2024-2026, Lexer747 * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -28,10 +28,10 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import java.util.Arrays; -import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; import lombok.Getter; +import net.runelite.api.gameval.ItemID; import org.apache.commons.lang3.StringUtils; // https://oldschool.runescape.wiki/w/Powered_staff @@ -42,44 +42,35 @@ // 5. This Enum is only to contain the staves which allow magic at 4 ticks. public enum PoweredStaves { - WEAPON_ACCURSED( Set.of(AnimationData.MAGIC_STANDARD_WAVE_STAFF, AnimationData.MAGIC_ACCURSED_SCEPTRE_SPEC), Projectiles(2337, 2339), 27665, 27666), // https://oldschool.runescape.wiki/w/Accursed_sceptre - WEAPON_BLUE_C_STAFF_A(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1720), 23899), // https://oldschool.runescape.wiki/w/Crystal_staff_(attuned) - WEAPON_BLUE_C_STAFF_B(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1720), 23898), // https://oldschool.runescape.wiki/w/Crystal_staff_(basic) - WEAPON_BLUE_C_STAFF_P(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1720),23900), // https://oldschool.runescape.wiki/w/Crystal_staff_(perfected) - WEAPON_BONE_STAFF(AnimationData.MELEE_GENERIC_SLASH, Projectiles(2647), 28796, 28797), //https://oldschool.runescape.wiki/w/Bone_staff - WEAPON_DAWNBRINGER(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1544, 1547),22516), // https://oldschool.runescape.wiki/w/Dawnbringer - WEAPON_HARM(Set.of( - AnimationData.MAGIC_STANDARD_STRIKE_STAFF, - AnimationData.MAGIC_STANDARD_WAVE_STAFF, - AnimationData.MAGIC_STANDARD_STRIKE_BOLT_BLAST_STAFF, - AnimationData.MAGIC_STANDARD_SURGE_STAFF - ), - Projectiles(/*in level order then air -> fire*/ - 91, 94, 97, 100, /* strikes */ - 118, 121, 124, 127, /* bolts */ - 133, 136, 139, 130, /* blasts */ - 159, 162, 165, 156, /* waves */ - 1456, 1459, 1462, 1465 /* surges */), - 24423), // https://oldschool.runescape.wiki/w/Harmonised_nightmare_staff - WEAPON_RED_C_STAFF_A(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1723), 23853), // https://oldschool.runescape.wiki/w/Corrupted_staff_(attuned) - WEAPON_RED_C_STAFF_B(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1723), 23852), // https://oldschool.runescape.wiki/w/Corrupted_staff_(basic) - WEAPON_RED_C_STAFF_P(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1723), 23854), // https://oldschool.runescape.wiki/w/Corrupted_staff_(perfected) - WEAPON_SANG(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1539), 22323), // https://oldschool.runescape.wiki/w/Sanguinesti_staff#Charged - WEAPON_SANG_KIT(AnimationData.MAGIC_STANDARD_WAVE_STAFF, 25731), // https://oldschool.runescape.wiki/w/Holy_sanguinesti_staff#Charged - WEAPON_STARTER_STAFF(22335, 22336, 28557, 28558), // https://oldschool.runescape.wiki/w/Starter_staff TODO get the animation when DMM goes live - WEAPON_SWAMP(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1040), 12899, 22292, 33314, 33318), // https://oldschool.runescape.wiki/w/Trident_of_the_swamp - WEAPON_THAMMARON(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(2340),22555, 22556), //https://oldschool.runescape.wiki/w/Thammaron%27s_sceptre - WEAPON_TRIDENT(AnimationData.MAGIC_STANDARD_WAVE_STAFF, Projectiles(1252), 11905, 11907, 22288, 33322, 33323, 33326), // https://oldschool.runescape.wiki/w/Trident_of_the_seas - WEAPON_WARPED_SCEPTRE(AnimationData.MAGIC_WARPED_SCEPTRE, 28585, 28586); // https://oldschool.runescape.wiki/w/Warped_sceptre + WEAPON_ACCURSED(Set.of(AnimationData.MAGIC_STANDARD_WAVE_STAFF, AnimationData.MAGIC_ACCURSED_SCEPTRE_SPEC), ItemID.WILD_CAVE_ACCURSED_CHARGED), // https://oldschool.runescape.wiki/w/Accursed_sceptre + WEAPON_BLUE_C_STAFF_A(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.GAUNTLET_MAGIC_T2), // https://oldschool.runescape.wiki/w/Crystal_staff_(attuned) + WEAPON_BLUE_C_STAFF_B(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.GAUNTLET_MAGIC_T1), // https://oldschool.runescape.wiki/w/Crystal_staff_(basic) + WEAPON_BLUE_C_STAFF_P(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.GAUNTLET_MAGIC_T3), // https://oldschool.runescape.wiki/w/Crystal_staff_(perfected) + WEAPON_BONE_STAFF(AnimationData.MELEE_GENERIC_SLASH, ItemID.RAT_BONE_STAFF), // https://oldschool.runescape.wiki/w/Bone_staff + WEAPON_DAWNBRINGER(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.VERZIK_SPECIAL_WEAPON), // https://oldschool.runescape.wiki/w/Dawnbringer + WEAPON_HARM( + Set.of(AnimationData.MAGIC_STANDARD_STRIKE_STAFF, AnimationData.MAGIC_STANDARD_WAVE_STAFF, + AnimationData.MAGIC_STANDARD_STRIKE_BOLT_BLAST_STAFF, AnimationData.MAGIC_STANDARD_SURGE_STAFF), + ItemID.NIGHTMARE_STAFF_HARMONISED), // https://oldschool.runescape.wiki/w/Harmonised_nightmare_staff + WEAPON_RED_C_STAFF_A(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.GAUNTLET_MAGIC_T2_HM), // https://oldschool.runescape.wiki/w/Corrupted_staff_(attuned) + WEAPON_RED_C_STAFF_B(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.GAUNTLET_MAGIC_T1_HM), // https://oldschool.runescape.wiki/w/Corrupted_staff_(basic) + WEAPON_RED_C_STAFF_P(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.GAUNTLET_MAGIC_T3_HM), // https://oldschool.runescape.wiki/w/Corrupted_staff_(perfected) + WEAPON_SANG(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.SANGUINESTI_STAFF, ItemID.SANGUINESTI_STAFF_OR), // https://oldschool.runescape.wiki/w/Sanguinesti_staff#Charged + WEAPON_STARTER_STAFF(ItemID.DEADMAN_STARTER_STAFF, ItemID.DEADMAN_APOCALYPSE_STAFF), // https://oldschool.runescape.wiki/w/Starter_staff + WEAPON_SWAMP(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.TOXIC_TOTS_CHARGED, ItemID.TOXIC_TOTS_I_CHARGED, + ItemID.TOXIC_TOTS_CHARGED_ORN, ItemID.TOXIC_TOTS_I_CHARGED_ORN), // https://oldschool.runescape.wiki/w/Trident_of_the_swamp + WEAPON_THAMMARON(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.WILD_CAVE_SCEPTRE_CHARGED), // https://oldschool.runescape.wiki/w/Thammaron%27s_sceptre + WEAPON_TRIDENT(AnimationData.MAGIC_STANDARD_WAVE_STAFF, ItemID.TOTS, ItemID.TOTS_CHARGED, ItemID.TOTS_I_CHARGED, + ItemID.TOTS_CHARGED_ORN, ItemID.TOTS_ORN, ItemID.TOTS_I_CHARGED_ORN), // https://oldschool.runescape.wiki/w/Trident_of_the_seas + WEAPON_WARPED_SCEPTRE(AnimationData.MAGIC_WARPED_SCEPTRE, ItemID.WARPED_SCEPTRE), // https://oldschool.runescape.wiki/w/Warped_sceptre + ; @Getter private final Set ids; @Getter - private final Set projectiles; - @Getter private final Set animations; - private static Set Projectiles(int... id) + private static Set ListToSet(int... id) { ImmutableSet.Builder builder = new ImmutableSet.Builder<>(); if (id.length == 0) @@ -93,38 +84,27 @@ private static Set Projectiles(int... id) return builder.build(); } - // Unknown projectile and animation + // Unknown animation PoweredStaves(int... id) { - this.ids = Projectiles(id); - this.projectiles = null; + this.ids = ListToSet(id); this.animations = null; } - // Unknown projectile + // Single animation 4t powered staff PoweredStaves(AnimationData spell, int... id) { - this.ids = Projectiles(id); - this.projectiles = new HashSet(); + this.ids = ListToSet(id); this.animations = Set.of(spell); } - // Single animation 4t powered staff - PoweredStaves(AnimationData spell, Set projectiles, int... id) - { - this.ids = Projectiles(id); - this.projectiles = projectiles; - this.animations = Set.of(spell); - } // Multiple animations 4t powered staff - PoweredStaves(Set spell, Set projectiles, int... id) + PoweredStaves(Set spell, int... id) { - this.ids = Projectiles(id); - this.projectiles = projectiles; + this.ids = ListToSet(id); this.animations = spell; } - protected static final boolean LOCAL_DEBUGGING = false; protected static final int UNKNOWN_SPELL = 0xDEADBEEF; protected static final ImmutableMap> POWERED_STAVES; @@ -151,16 +131,6 @@ private static Set Projectiles(int... id) builder.put(id, spellMap.build()); } } - if (LOCAL_DEBUGGING) - { - // Fake the kodai to be a harm for testing, because I don't own a harm. - ImmutableMap.Builder spellMap = new ImmutableMap.Builder<>(); - for (AnimationData harmAnim : WEAPON_HARM.animations) - { - spellMap.put(harmAnim.animationId, WEAPON_HARM); - } - builder.put(21006, spellMap.build()); - } POWERED_STAVES = builder.build(); } @@ -185,18 +155,8 @@ public static PoweredStaves getPoweredStaves(int weaponId, AnimationData animati public String toString() { String[] words = super.toString().toLowerCase().split("_"); - Arrays.stream(words) - .map(StringUtils::capitalize).collect(Collectors.toList()).toArray(words); + Arrays.stream(words).map(StringUtils::capitalize).collect(Collectors.toList()).toArray(words); return String.join(" ", words); } - - public boolean MatchesProjectile(int projectile) - { - if (this.projectiles == null) - { - return false; - } - return this.projectiles.contains(projectile); - } } diff --git a/src/main/java/com/attacktimer/Spellbook.java b/src/main/java/com/attacktimer/Spellbook.java index 89533c7..89f21ce 100644 --- a/src/main/java/com/attacktimer/Spellbook.java +++ b/src/main/java/com/attacktimer/Spellbook.java @@ -32,7 +32,8 @@ public enum Spellbook STANDARD(0), ANCIENT(1), LUNAR(2), - ARCEUUS(3); + ARCEUUS(3), + ; private final int id; diff --git a/src/main/java/com/attacktimer/VariableSpeed/BloodMoonSet.java b/src/main/java/com/attacktimer/VariableSpeed/BloodMoonSet.java index e2b2192..4558512 100644 --- a/src/main/java/com/attacktimer/VariableSpeed/BloodMoonSet.java +++ b/src/main/java/com/attacktimer/VariableSpeed/BloodMoonSet.java @@ -29,16 +29,15 @@ import com.attacktimer.AttackProcedure; import com.attacktimer.Spellbook; import net.runelite.api.Client; +import net.runelite.api.gameval.SpotanimID; public class BloodMoonSet implements IVariableSpeed { - private static final int BLOOD_MOON_SET_ANIM_ID = 2792; - public int apply(final Client client, final AnimationData curAnimation, final AttackProcedure atkType, final Spellbook spellbook, final int damageDealt, final int lastSpecDelta, final int baseSpeed, final int curSpeed) { - if (client.getLocalPlayer().hasSpotAnim(BLOOD_MOON_SET_ANIM_ID)) + if (client.getLocalPlayer().hasSpotAnim(SpotanimID.SPECIAL_DUAL_MACUAHUITL_SPOTANIM)) { return curSpeed - 1; } diff --git a/src/main/java/com/attacktimer/VariableSpeed/PurgingStaffSpec.java b/src/main/java/com/attacktimer/VariableSpeed/PurgingStaffSpec.java index 7113ec2..3683850 100644 --- a/src/main/java/com/attacktimer/VariableSpeed/PurgingStaffSpec.java +++ b/src/main/java/com/attacktimer/VariableSpeed/PurgingStaffSpec.java @@ -36,8 +36,6 @@ public class PurgingStaffSpec implements IVariableSpeed { - private static final int PURGING_STAFF_ID = ItemID.PURGING_STAFF; - private Yama yama; public NPC lastTarget; @@ -65,7 +63,7 @@ public int apply(final Client client, final AnimationData curAnimation, final At } yama.dealVoidFlareDamage(flare, damageDealt); - if (lastSpecDelta != -250 || Utils.getWeaponId(client) != PURGING_STAFF_ID || spellbook != Spellbook.ARCEUUS) + if (lastSpecDelta != -250 || Utils.getWeaponId(client) != ItemID.PURGING_STAFF || spellbook != Spellbook.ARCEUUS) { // not using the spec // not using a purging staff diff --git a/src/main/java/com/attacktimer/VariableSpeed/RoyalTitans.java b/src/main/java/com/attacktimer/VariableSpeed/RoyalTitans.java index f718884..4f5a0ba 100644 --- a/src/main/java/com/attacktimer/VariableSpeed/RoyalTitans.java +++ b/src/main/java/com/attacktimer/VariableSpeed/RoyalTitans.java @@ -38,6 +38,8 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; +import net.runelite.api.gameval.ItemID; +import net.runelite.api.gameval.NpcID; /** * RoyalTitans: https://oldschool.runescape.wiki/w/Royal_Titans/Strategies @@ -47,13 +49,8 @@ */ public class RoyalTitans implements IVariableSpeed { - private static final int TWINFLAME_STAFF_WEAPON_ID = 30634; - private static final int ROYAL_TITANS_REGION_ID = 11669; - private static final int FIRE_ELEMENTAL_ID = 14150; - private static final int ICE_ELEMENTAL_ID = 14151; - private static final int HP_FUDGE = 1; private static final int ELEMENTAL_HP = 40 - HP_FUDGE; @@ -96,7 +93,7 @@ public int apply(final Client client, final AnimationData curAnimation, final At // Note that the twinflame second spell does not give Magic or Hitpoints experience and therefore will // not be computed properly by the caller. - final boolean wieldingTwinflame = Utils.getWeaponId(client) == TWINFLAME_STAFF_WEAPON_ID; + final boolean wieldingTwinflame = Utils.getWeaponId(client) == ItemID.TWINFLAME_STAFF; final int computedDamage = wieldingTwinflame ? damageDealt + ((damageDealt * 4) / 10) : damageDealt; // Awkwardly you only got awarded the exp (and therefore computed damage) against the one of the @@ -107,7 +104,7 @@ public int apply(final Client client, final AnimationData curAnimation, final At return curSpeed; } // Compute the number of elementals in the a 3x3 from our target: - final var set = targetId == FIRE_ELEMENTAL_ID ? fireElementals : iceElementals; + final var set = targetId == NpcID.RT_SUMMON_ELEMENTAL_FIRE ? fireElementals : iceElementals; int count = 1; final var reference = target.getWorldLocation(); for (final NPC elemental : set) @@ -225,11 +222,11 @@ public void onNpcSpawned(final Client client, final NpcSpawned npcSpawned) } final NPC npc = npcSpawned.getNpc(); final int id = npc.getId(); - if (id == ICE_ELEMENTAL_ID) + if (id == NpcID.RT_SUMMON_ELEMENTAL_ICE) { iceElementals.add(npc); } - else if (id == FIRE_ELEMENTAL_ID) + else if (id == NpcID.RT_SUMMON_ELEMENTAL_FIRE) { fireElementals.add(npc); } @@ -244,11 +241,11 @@ public void onNpcDespawned(final Client client, final NpcDespawned npcDespawned) } final NPC npc = npcDespawned.getNpc(); final int id = npc.getId(); - if (id == ICE_ELEMENTAL_ID) + if (id == NpcID.RT_SUMMON_ELEMENTAL_ICE) { iceElementals.remove(npc); } - else if (id == FIRE_ELEMENTAL_ID) + else if (id == NpcID.RT_SUMMON_ELEMENTAL_FIRE) { fireElementals.remove(npc); } @@ -256,7 +253,7 @@ else if (id == FIRE_ELEMENTAL_ID) private static boolean isElemental(int id) { - return id == FIRE_ELEMENTAL_ID || id == ICE_ELEMENTAL_ID; + return id == NpcID.RT_SUMMON_ELEMENTAL_FIRE || id == NpcID.RT_SUMMON_ELEMENTAL_ICE; } private static boolean notInRegion(final Client client) diff --git a/src/main/java/com/attacktimer/VariableSpeed/Scurrius.java b/src/main/java/com/attacktimer/VariableSpeed/Scurrius.java index 26c2a9f..eb1b163 100644 --- a/src/main/java/com/attacktimer/VariableSpeed/Scurrius.java +++ b/src/main/java/com/attacktimer/VariableSpeed/Scurrius.java @@ -31,6 +31,8 @@ import com.attacktimer.Spellbook; import net.runelite.api.Client; import net.runelite.api.coords.WorldPoint; +import net.runelite.api.gameval.ItemID; +import net.runelite.api.gameval.NpcID; /** * Scurrius: https://oldschool.runescape.wiki/w/Scurrius/Strategies#Strategies @@ -40,11 +42,6 @@ */ public class Scurrius implements IVariableSpeed { - private static final int BONE_STAFF_ID = 28796; - private static final int BONE_MACE_ID = 28792; - private static final int BONE_BOW_ID = 28794; - private static final int GIANT_RAT = 7223; - private static final int SCURRIUS_REGION_ID = 13210; private static final int SCURRIUS_MIN_X = 3290; @@ -56,10 +53,10 @@ public class Scurrius implements IVariableSpeed private static boolean attackingGiantRatWithBoneWeapon(final int equipped, final int regionId, final int x, final int y, final int target) { - final boolean correctWeapon = equipped == BONE_STAFF_ID || equipped == BONE_MACE_ID || equipped == BONE_BOW_ID; + final boolean correctWeapon = equipped == ItemID.RAT_BONE_STAFF || equipped == ItemID.RAT_BONE_MACE || equipped == ItemID.RAT_BONE_BOW; final boolean correctCoords = x >= SCURRIUS_MIN_X && x <= SCURRIUS_MAX_X && y >= SCURRIUS_MIN_Y && y <= SCURRIUS_MAX_Y; final boolean correctRegion = regionId == SCURRIUS_REGION_ID; - final boolean correctEnemy = target == GIANT_RAT; + final boolean correctEnemy = target == NpcID.RAT_BOSS_GIANT_RAT; return correctWeapon && correctCoords && correctRegion && correctEnemy; } diff --git a/src/main/java/com/attacktimer/VariableSpeed/State/Yama.java b/src/main/java/com/attacktimer/VariableSpeed/State/Yama.java index 90c4dfb..78e8496 100644 --- a/src/main/java/com/attacktimer/VariableSpeed/State/Yama.java +++ b/src/main/java/com/attacktimer/VariableSpeed/State/Yama.java @@ -34,6 +34,7 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcSpawned; +import net.runelite.api.gameval.NpcID; /** * Yama tracks various bits of state related to the boss https://oldschool.runescape.wiki/w/Yama. @@ -44,10 +45,8 @@ public class Yama implements IStateTracker private static final int VOID_FLARE_HP_P1_P2 = 140 - HP_FUDGE; private static final int VOID_FLARE_HP_P3 = 71 - HP_FUDGE; - private static final int VOID_FLARE_ID = 14179; private static final int YAMA_REGION_ID = 6045; - private static final int YAMA_ID = 14176; private static final int YAMA_PHASE_TRANSITION_ANIMATION_ID = 12147; // null if yama isn't alive. @@ -96,7 +95,7 @@ public void onNpcSpawned(final Client client, final NpcSpawned npcSpawned) return; } final NPC npc = npcSpawned.getNpc(); - if (npc.getId() == YAMA_ID) + if (npc.getId() == NpcID.YAMA) { yama = new YamaData(npc); } @@ -104,12 +103,12 @@ public void onNpcSpawned(final Client client, final NpcSpawned npcSpawned) public static NPC isEitherVoidFlare(NPC a, NPC b) { - if (a != null && a.getId() == VOID_FLARE_ID) + if (a != null && a.getId() == NpcID.YAMA_VOIDFLARE) { return a; } - if (b != null && b.getId() == VOID_FLARE_ID) + if (b != null && b.getId() == NpcID.YAMA_VOIDFLARE) { return b; } diff --git a/src/main/java/com/attacktimer/VariableSpeed/TombsOfAmascut.java b/src/main/java/com/attacktimer/VariableSpeed/TombsOfAmascut.java index 6fb07f8..b2b4280 100644 --- a/src/main/java/com/attacktimer/VariableSpeed/TombsOfAmascut.java +++ b/src/main/java/com/attacktimer/VariableSpeed/TombsOfAmascut.java @@ -31,23 +31,22 @@ import com.attacktimer.ClientUtils.Utils; import com.attacktimer.Spellbook; import net.runelite.api.Client; +import net.runelite.api.gameval.NpcID; /** * There is no cooldown when attacking the skulls with melee. + * + * https://oldschool.runescape.wiki/w/Energy_Siphon */ public class TombsOfAmascut implements IVariableSpeed { - // The skulls during p3 wardens. - // https://oldschool.runescape.wiki/w/Energy_Siphon - private static final int ENERGY_SIPHON_ID = 11772; - public int apply(final Client client, final AnimationData curAnimation, final AttackProcedure atkType, final Spellbook spellbook, final int damageDealt, final int lastSpecDelta, final int baseSpeed, final int curSpeed) { final int targetId = Utils.getTargetId(client); final AttackType attkType = Utils.getAttackType(client); - if (targetId == ENERGY_SIPHON_ID && attkType.IsMelee()) + if (targetId == NpcID.WARDENS_P3_ORB_BLUE && attkType.IsMelee()) { return 1; } diff --git a/src/main/java/com/attacktimer/VariableSpeed/TormentedDemons.java b/src/main/java/com/attacktimer/VariableSpeed/TormentedDemons.java index 0ee8c6c..f298548 100644 --- a/src/main/java/com/attacktimer/VariableSpeed/TormentedDemons.java +++ b/src/main/java/com/attacktimer/VariableSpeed/TormentedDemons.java @@ -40,6 +40,8 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; +import net.runelite.api.gameval.NpcID; +import net.runelite.api.gameval.SpotanimID; /** * TormentedDemons is the variable speed implementation for the "punish" attack a player can do against a @@ -125,14 +127,9 @@ public int apply(final Client client, final AnimationData curAnimation, final At } } - private static final int TORMENTED_DEMON_VULN_SPOT_ANIM = 2852; - private static final int TORMENTED_DEMON_ID = 13600; - - private static final int TORMENTED_DEMON_2_ID = 13599; - private static boolean isTormentedDemon(int targetId) { - return targetId == TORMENTED_DEMON_ID || targetId == TORMENTED_DEMON_2_ID; + return targetId == NpcID.TORMENTED_DEMON_1 || targetId == NpcID.TORMENTED_DEMON_2; } private Map tormentedDemons = new HashMap(); @@ -142,7 +139,7 @@ public void onGameTick(Client client, GameTick tick) { for (final Entry td : tormentedDemons.entrySet()) { - final boolean isVulnerable = td.getKey().hasSpotAnim(TORMENTED_DEMON_VULN_SPOT_ANIM); + final boolean isVulnerable = td.getKey().hasSpotAnim(SpotanimID.LUC2_UNDEAD_DEMON_EXPLOSION_FIRE_SPOT); td.getValue().update(tickCount.get(), isVulnerable); } } @@ -158,7 +155,7 @@ private void maybeInsertDemon(final NPC npc) { if (isTormentedDemon(npc.getId())) { - final boolean isVulnerable = npc.hasSpotAnim(TORMENTED_DEMON_VULN_SPOT_ANIM); + final boolean isVulnerable = npc.hasSpotAnim(SpotanimID.LUC2_UNDEAD_DEMON_EXPLOSION_FIRE_SPOT); tormentedDemons.put(npc, new DemonData(tickCount.get(), isVulnerable)); } } diff --git a/src/main/java/com/attacktimer/WeaponType.java b/src/main/java/com/attacktimer/WeaponType.java index b6b0230..2ca7257 100644 --- a/src/main/java/com/attacktimer/WeaponType.java +++ b/src/main/java/com/attacktimer/WeaponType.java @@ -94,7 +94,8 @@ public enum WeaponType PLACE_HOLDER_1(null, null, null), // 32 PLACE_HOLDER_2(null, null, null), // 33 PLACE_HOLDER_3(null, null, null), // 34 - FLAIL(SLASH, SLASH, null, SLASH); // 35 + FLAIL(SLASH, SLASH, null, SLASH), // 35 + ; private static final Map WEAPON_TYPES; diff --git a/src/test/java/com/attacktimer/EnumTests.java b/src/test/java/com/attacktimer/EnumTests.java index c47fc2f..cdb6a13 100644 --- a/src/test/java/com/attacktimer/EnumTests.java +++ b/src/test/java/com/attacktimer/EnumTests.java @@ -25,7 +25,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import static org.junit.Assert.assertFalse; import static org.junit.Assert.fail; import org.junit.Ignore; @@ -58,7 +57,6 @@ public void runtimeCheck() { System.out.print(a.toString() + ", "); } - assertFalse(PoweredStaves.LOCAL_DEBUGGING); } @Ignore("Only for reporting purposes") @@ -81,11 +79,6 @@ public void missingIdReport() } break; } - if (staff.getProjectiles() == null) - { - fails += MessageFormatter.format("Staff | {} doesn't have a projectile associated\n", staff) - .getMessage(); - } } if (failed)