Hammer of Justas
----------------
a World of Warcraft add-on for Paladins
by Justas ( paladin (dot) justas (at) gmail (dot) com )
version 0.93
Copyright (c) 2010-18 by Jonathan E. Wright

Summary
--------
Hammer of Justas is a utility add-on for Retribution and Protection paladins, providing:

- Rotation optimization
- Highly visible holy power meter.
- Highly visible Templar's Verdict indicator.
- An Inquisition timer.
- Buff reminders.
- Cooldown reminders.
- Unique rules based on current paladin role (prot or ret).
- A chat ignore system that allows silent and stealth ignoring and keeps ignored messages in a special history that can be viewed later.
- Easy-to-move invisible windows (just hold control and mouse over a window to unhide it, then click to drag it anywhere).
- Ability to toggle individual windows off if not needed or desired.
- Cooldowns that need to be refreshed are shown on a separate, clickable bar that can be placed anywhere. The add-on is smart enough to only show some of these skills when an enemy is targeted, so that it's not constantly nagging about them in towns, etc.
- Interoperable with OmniCC. If OmniCC is not available HoJ will show its own cooldown text in some places, otherwise it will let OmniCC do it.

All meters and reminder windows are easy to move around (hold control and mouse over, click to drag) so that they can be placed anywhere on the screen, and easily adjusted for different scenarios (for instance raids vs. PvP).

NOTE: Protection mode is EXPERIMENTAL right now. Rotation should work ok. Mitigation/healing priorities have not been given much testing but they are working.

Usage
-----
When the addon starts the first time, hold control and mouse over the windows in the center. Drag the windows to the desired locations while holding control. Windows can be turned on and off entirely in the addon settings.

It's a good idea to try a target using a target dummy when deciding where to place the windows.

Which skills are display in the bars can be toggled in the addon settings. Note this does not affect if they are chosen in the rotation, so there may be rotation gaps if certain rotation skills are disabled. For buffs and other skills that aren't part of the normal rotation, they just won't appear on the skill or buffs bar.

User Interface
--------------
The addon adds several window frames. Each of these can be toggled on or off in the AddOn settings. When holding control and mousing over a window, the name of the windows is shown as "HoJ:" plus the window name.

In general, windows are context sensitive and will become active targetting a mob that is attackable and in range, or when the character is in combat.

HoJ: Holy Power (Retribution Only)
Shows the number of Holy Power stacks as little glowing judgment masks. Note that this was made back when the only Holy Power indicator was on the player portrait frame. It's not as useful today if "Personal Resource Display" under "Names" is turned on in the WoW Interface settings.

HoJ: Templar's Verdict (Retribution Only)
Shows a large glowing judgment mask whenever 3 or more Holy Power is available. Note that this is decoupled from the rotation frame, in that it will become visible whether or not it is the best time to use Holy Power. Situationally, it can be good to know when a Holy Power skill is available. This can be considered redundant with the Holy Power Frame or Personal Resource Display option, so it can be turned off. 

HoJ: Rotation
Shows the icon of the best current skill in the DPS rotation. For Ret, this is currently based on Icy Veins rotation here (https://www.icy-veins.com/wow/retribution-paladin-pve-dps-rotation-cooldowns-abilities) which looks similar to the rotation Wowhead here (https://www.wowhead.com/retribution-paladin-rotation-guide). 
- whether or not the target is within range of the skill.
- whether or not using the skill will overflow five Holy Power.
- If Wake of Ashes available and there is a a choice of Holy Power generators:
  - If less than 3 holy power, choose a generator that will result in 3 Holy Power
  - Then choose a Holy Power consuming skill
  - Then Wake is available without any loss of Holy Power generation.
- There may be other rules added in the future, such as inserting Divine Shield or Lay on Hands into the rotation when death appears to be imminent.

HoJ: Inquisition (Retribution Only)
This shows the Inquisition icon with a countdown timer for keeping track of this important buff. This window is only visible with control + mouse over or when Inquisition is talented.

HoJ: Cooldowns
This windows shows situational cooldowns. These are generally skills that are not part of the DPS rotation. 

For Retribution this window will show:
- Selfless Healer when it has 4 stacks, or if it has any stacks and character health is lower than a threshold.
- Shield of Vengeance when it is off cooldown and the character is in combat.

For Protection this window shows mitigation and healing cooldowns, based on incoming DPS and current health:
- Ardent Defender
- Guardian of Ancient Kings
- Lay on Hands
- Light / Hand of the Protector
- Gift of the Naaru
- Blessing of Protection
- Divine Shield

For Protection and Retribution it will show:
- Interrupts when the target is casting an interruptible spell.
- Avenging Wrath / Crusade when it is off cooldown and the character is in combat.

In the future:
- Shield of Vengeance, Divine Shield, Lay on Hands when they are available and character health is lower than a threshold, or incoming damage predicts death in a short time.

HoJ: Buffs
This window shows buffs that need to be refreshed. Currently this is just Greater Blessing of Kings and Greater Blessing of Wisdon. Buff spells can be cast by clicking the icon in the buffs bar when not in combat. Nothing will show up here for Protection right now.

Caveats
-------
I make no claims about the fitness of this add-on for any particular purpose. I only decided to finally release it because some paladins may find it useful.


Using the Ignore List
---------------------
The main reason for the ignore list was so that I could stealth ignore people -- not get any message from them at all, or even a message telling me I had received a message from them, and not have WoW tell them that I was ignoring them. I could not find any other add-on that would do exactly this and still keep a history of the ignored messages for later inspection.

This predates BattleTags and RealID -- it works with toon names only right now.

Commands (always preceded by /hoj):
/hoj ignore <player name>  - ignores the player with the specified name
/hoj add <player name> - same as /ignore
/hoj unignore <player name> - removes the specified player from the ignore list
/hoj remove <player name> - same as /unignore
/hoj list -- lists all player names in the ignore list
/hoj silent -- toggle silent mode, which, when enabled, stops HoJ from printing the "Whisper from <player name> blocked." message. The only way to know if a message was received from a blocked player is by checking the ignore history.
/hoj stealth -- toggles stealth ignore. With stealth ignore on, some innocuous message will be printed when a message is received an ignored player (currently something like "Isle of Quel'Danas is under attack!"). "silent" will override this behavior. If silent is on nothing will be seen when an incoming message arrives from a blocked player.
/hoj history -- show the history of ignored messages since logging on
/hoj clear -- clear the ignore history
/hoj - show command list help

About Protection Spec (Protected Mode 8-D )
-------------------------------------------
When the character is in Procection spec, a health history is kept for 3 seconds and this is used to determine how much healing and damage the character has taken over the last 3 seconds. Using this history the addon tries to predict how much damage will occur in the future and whether or not the character will die in the next couple of seconds. This, along with the current health and status of cooldowns and some buffs, is used the select mitigation skills and/or healing spells. This is really rough right now and is likely to become significantly more complex. This was re-written entirely from WoD, which was the last time I bothered to handle mitigation skills in the addon.

Known Issues
------------
- Protection paladin is absolutely experimental. The rotation skill should be working ok, though I think I've noticed some funkiness with it not detecting when I'm not standing in Consecration. Mitigation/healing skills work based on damage taken and current health, but I'm not happy with it right now. 
- There is no Holy support and I have no plans to add it.
- Skills and Buffs cannot reliably be clicked on in combat. This is because these buttons are set up dynamically based on the current circumstances and some of the functions required to do this are protected in combat. If all skills are to keys or surfaced on other buttons this shouldn't matter. I am considering just making these bars non-clickable, but it is useful to click them outside of combat (which works reliably).
- blessings might appear on the skill bar even though the character has some equivalent blessing from another class. I'm not sure if this is an issue with current class buffs, but it used to be in MoP / WoD.
- blessings will appear on the buffs if it was cast on on another player. Probably the best that could be done here is remember when it was cast on someone else and set a timer, but that may be problematic in other ways since certain things can make the buff expire without the addon knowing. If this is annoying, these buffs (or the buffs bar) can be turned off in the addon settings.
- When running an addon module Swatter, some very infrequent warnings about protected functions being called in combat may appear. Please let me know the circumstances and error, preferably with a screenshot of the dialog.
- Can't currently turn off the Templar's Verdict, Holy Power and Inquisition windows. I will add this soon.
- Control is used for mouseing over the windows. I'm not sure what would happen if control is bound to some skill, but it's probably not good.

TODO (note this is not exhaustive):
- Show GCD / lockouts in the rotation frame.
- Mitigation skills (ret):
  - Show Lay on Hands and Divine Shield in the cooldowns bar.
  - Show Lay on Hands, Divine Shield in the rotation frame when incoming damage is extreme and or death is predicted within X seconds (based on incoming damage).
- Mitigation skills (prot):
  - priorities need tweaking
  - damage take
- Optimization. I am seeing some chunking in large battles. Fixing this is one of my highest priorities now.