promotional bannermobile promotional banner

JetTools

Multi purpose addon with features such as: personal crosshair for dodging, AH expansion filter and auto accepting queues.

File Details

v1.4.6

  • R
  • Mar 29, 2026
  • 68.13 KB
  • 22
  • 12.0.0
  • Retail

File Name

JetTools-v1.4.6.zip

Supported Versions

  • 12.0.0

JetTools

v1.4.6 (2026-03-29)

Full Changelog Previous Releases

  • feat: CombatTimer, CombatRes modules + button/anchor/preview fixes (#20)
    • Add CombatTimer and CombatRes modules; consolidate sidebar tabs
    • Remove AbstractFramework dependency (toc, pkgmeta, Core.lua)
    • Add Modules/CombatTimer.lua: elapsed combat time overlay (MM:SS / MM:SS.d,
      print-on-end, font, position settings)
    • Add Modules/CombatRes.lua: Rebirth charge+cooldown tracker (group-only,
      charge coloring, optional label, font, position settings)
    • Update JetTools.toc with new module load order
    • Options.lua rewritten with pure WoW API (no AbstractFramework)
    • Consolidate sidebar: CombatStatus/CombatTimer/CombatRes → 'Combat' tab;
      PetReminders/StealthReminder → 'Reminders' tab
    • fix: use explicit background texture for sidebar button tinting
      GetNormalTexture() returns nil on UIPanelButtonTemplate buttons in modern
      WoW. Store an explicit WHITE8X8 texture on btn._bg and tint that instead.
    • fix(Options): resolve four nil-safety issues in widget helpers
    • JT_CreateCheckButton: remove bogus CheckButton.SetChecked shim that
      referenced a non-existent global; CheckButton frames already have
      SetChecked built-in
    • JT_CreateButton: call SetNormalTexture() before GetNormalTexture()
      so tinting doesn't crash when UIPanelButtonTemplate has no NormalTexture
    • JT_CreateDropdown: same SetNormalTexture fix for the dropdown button
    • ClearFrame: remove SetParent(nil) which reparents to WorldFrame in
      modern WoW; Hide() alone is correct and sufficient
    • fix: options UI widget bugs
    • Slider: replace OptionsSliderTemplate with plain Slider to eliminate
      Low/High/Text child frames that overlapped our value readout; add
      track background, styled thumb, flanking min/max labels
    • Dropdown arrow: fix garbled ▾ glyph (\xbe is not valid Lua 5.1;
      use \226\150\190 decimal escapes for U+25BE)
    • Dropdown singleton bug: rows are now children of scrollContent inside
      the popup, hidden on OnHide, and always assigned fresh OnClick
      closures so the second (and later) dropdowns on a page work correctly
    • Dropdown long lists: added scroll frame + UIPanelScrollBarTemplate
      inside the popup, capped at maxVisible rows height; bar shown only
      when items exceed maxVisible
    • Main scrollbar: hide bar entirely when scrollRange == 0 so short
      module pages don't show a spuriously active scrollbar
    • fix: dropdown double-wraps pre-built {text,value} options tables
      BuildOptionControl was wrapping all options[1]-truthy arrays, but
      GetAvailableFonts() already returns {text,value} pairs. Detect that
      case (first entry is a table with a .text field) and use the list
      directly instead of re-wrapping, which produced item.text =
      and a SetText() error.
    • feat: auto-preview, anchor frame input, and global font dropdown
    • CombatTimer/CombatRes: ShowPreview()/HidePreview() for live preview while
      options panel is open; OnSettingChanged re-calls ShowPreview() if panel open
    • CombatTimer/CombatRes: anchorFrame input setting; ApplyPosition() resolves
      _G[anchorFrame] with UIParent fallback
    • Core: JT:GetAvailableFonts() helper (LSM or FALLBACK_FONTS); JT:ApplyGlobalFont()
      broadcasts fontFace to all font-aware modules and persists to JetToolsDB.globalFont
    • Options: global font dropdown in title bar; refreshes on OnShow from JetToolsDB
    • Options: merge character tabs; fix spacing; expand position range + anchor points for combat overlays
    • Options.lua: merge CharacterSheet, GearUpgradeRanks, CharacterStatFormatting into a single 'Character' sidebar tab
    • Options.lua: fix vertical overlap — slider bottom gap +10px, input +8px; dropdown shifted down 14px to absorb label overhang
    • CombatTimer/CombatRes: posX range expanded to ±2000, posY to ±1200
    • CombatTimer/CombatRes: add anchorPoint + relativePoint dropdowns (9 WoW anchor points each)
    • CombatTimer/CombatRes: ApplyPosition() now uses anchorPoint/relativePoint settings
    • CombatTimer/CombatRes: OnSettingChanged triggers on anchorPoint/relativePoint changes
    • Core.lua: add anchorPoint/relativePoint defaults (CENTER/CENTER) for both modules
    • fix: replace dropdown arrow FontString with Texture to fix missing glyph
      U+25BE (▾) is not present in WoW's bundled fonts (FRIZQT__, ARIALN),
      causing the arrow indicator to render as an empty box. Switch to a
      native WoW texture (Interface\Buttons\Arrow-Down-Up) cropped to the
      down-arrow half via SetTexCoord — no font dependency, always visible.
      Closes jettools-8xk
    • chore: sync beads interactions log
    • fix: hoist groupState to module-level local in Options.lua
      BuildOptionControl._groupState was attaching a field to a function value,
      which is illegal in Lua 5.1 and caused a crash:
      'attempt to index upvalue BuildOptionControl (a function value)'
      Fix: declare 'local groupState = ' at module scope before
      BuildOptionControl is defined, and update all references.
    • chore: update beads interactions log
    • fix: add isPreviewMode flag to keep previews visible while options panel is open
      CombatTimer and CombatRes previews were unreliable when modules were
      disabled because Disable() hid the frame and OnUpdate had no mechanism
      to keep it shown. Introduce isPreviewMode to:
    • Block Disable() from hiding the frame during a preview session
    • Prevent UpdateDisplay() from hiding the CombatRes frame in preview mode
    • Ensure OnUpdate skips its normal logic (which would overwrite preview text)
      while preview is active, but still keeps the frame shown
    • Use isPreviewMode directly in OnSettingChanged instead of querying the
      global frame state, making the logic self-contained
    • fix: button artwork bleed, preview guard, and anchor frame resolution
    • Options.lua: add JT_StripButtonTextures() helper that overrides all four
      texture slots (normal, pushed, highlight, disabled) on UIPanelButtonTemplate
      buttons; apply to JT_CreateButton (all styles incl. unstyled), the dropdown
      button, and the sidebar nav buttons — eliminates the red/orange Blizzard
      artwork bleed in all interactive states (jettools-tf6)
    • Options.lua OnShow: only call ShowPreview() when settings.enabled is true,
      so disabled modules don't pop up their overlay when the options panel opens
      (jettools-iyn)
    • CombatTimer + CombatRes ApplyPosition(): replace bare _G[anchorName] lookup
      with ResolveAnchorFrame() which (a) supports case-insensitive friendly
      aliases (chat, minimap, playerframe, targetframe, etc.), (b) validates the
      resolved object has GetObjectType before using it, (c) prints a helpful
      warning and falls back to UIParent on invalid input, and (d) temporarily
      clears SetClampedToScreen before SetPoint so large X/Y offsets are applied
      correctly then re-enables clamping (jettools-4ro)
    • fix: always show previews in options panel regardless of enabled state
      The previous fix (jettools-iyn) added an settings.enabled guard to the
      OnShow preview logic, which broke previews for all users since CombatTimer
      and CombatRes both default to enabled=false. Previews should always display
      when the options panel opens — that's their entire purpose.
    • chore: update beads interactions log
  • Add BuffBarStyling module with collapsible options groups
    Implements the BuffBarStyling module per plans 011/012/013: a 0.1s ticker
    styles BuffBarCooldownViewer children with configurable texture, bar size,
    font, icon visibility, and 1px black border, then repositions the viewer to
    a named anchor frame with configurable anchor points and X/Y offsets.
    Options.lua gains a new 'group' schema type for collapsible sections,
    with state stored per-group and repopulation triggered via
    JT._requestOptionsRepopulate.