Bartender4
Bartender4 is a full ActionBar replacement mod. It provides you with all the features needed to fully customization most aspects of your action and related bars.
Status for Dragonflight / 10.0
- Hold-to-cast is not currently available for addons
- Action Bars have been slightly re-arranged in Bartender4 for Dragonflight
- Bar 1-8 now reflect Blizzard Bars 1-8 (these are old 1, 3-6, and the 3 new bars)
- The old bars 7-10 are now called "Class Bar 1-4" (Shapeshifting, Stances, etc)
- The old bar 2 is now called Bonus Action Bar
Features
- Support for all Action Bars and all related bars
- 10 Action Bars (13 in Dragonflight!)
- Stance Bar
- Pet Bar
- Bag Bar
- Micro Menu
- XP/Reputation Bar
- All Bars are fully customizable (Scale, Alpha, Fade-Out settings, ...)
- Very flexible and customizable Show/Hide driver based on Macro Conditions
- Additional Layout and Paging settings for Action Bars
- Page all bars based on Stance or Modifier
- Possess Bar support
- Custom State driver support with Macro Conditions
- Options to hide specific elements of the buttons (Macro Text, HotKey, more could be added on demand)
- StickyFrames support
- Masque/ButtonFacade support!
- Easy Hotkey Binding using KeyBound
- Options to control the hiding of the default blizzard artwork (you might still want that to be displayed..)
FAQ
Q: I cannot move/drag my skills on my bars?
A: Hold Shift to move skills safely. You can also unlock your bars in the Bartender4 options, but using Shift is safer and recommended.
Q: How do i access the Configuration?
A: You can open the configuration with the Slash Commands (/bt or /bartender) or through the Bartender4 LDB plugin.
Q: Where are my keybindings? And how do i bind new keys?
A: Bartender4 buttons should automatically inherit keybindings from the Blizzard bars. For new keybindings, you can use KeyBound to re-bind your keys. You can access KeyBound by its slash command (/kb) or through the button in the BT4 config. Hover a button, press key → voila!
Q: Can I skin the buttons beyond the built-in options?
A: Bartender4 allows skinning through Masque! After installing both Bartender4 and Masque, you can customize the BT4 appearance in the Masque options.
Q: How do i disable the snapping of the bars?
A: Currently, you can temporarily override the snapping by holding down the Shift Key while moving your bars, or uncheck the option in the popup when your bars are unlocked.
Feature Requests/Bug Tracker
Please submit Bugs and/or Feature Requests using the Ticket System on the WoWAce Project page or in the Bartender4 Forum Thread. Please provide as many information as possible, including your client language, the exact version you are running, how to reproduce any errors, and a stack trace, if applicable.
Links
WoWAce Project: Bartender4 on WoWAce
Custom State Header: Info page on WoWAce
In reply to Reyard1: Came here to say the same thing. Turning off only Bartender and no other addon i usually play with, gets rid of the "forced" cooldown timer.
In reply to Reyard1: Bartender4 does not see or ignores the settings in the game
In reply to Reyard1: Same here, it's really annoying when the cooldown number is shown on things that has stack numbers like potions.
In reply to Reyard1: same here. seems like bartender auto enables the new cooldown numbers option from blizzard even when you disabled it in their options by yourself? at least that's what i am thinking cause i cant find a new option in bartender itself
This was caused by a change in the game with the recent update. But it should be fixed now.
I just want to thank you for your time updating and maintaining this great addon.
until it gets fixed, solution to making bags work is turn off "Display Money" option in Frame settings. Gold wont show on bags but least they open. Have to turn off Display money for bank tab and guild bank tab to
Todays update has cause my bags not to open. pressing my keybind Shift-b does not open my bags. this update has caused many errors with multiple other add-ons.
In reply to RandyM: Same.
In reply to RandyM: same, no bags opening, even when reverting to old update for Bartender and Bagnon, nothin :(
to fix issues with today's patch on anniversary realms,
1.) Navigate to World of Warcraft\_classic_era_\Interface\AddOns\Bartender4\libs\LibActionButton-1.0 and open up the .lua file
2.) Scroll down until you see the functions, pick a spot between the end of a function and the next one starting(dont paste it into an existing function), paste in this new function once:
function Generic:OnButtonStateChanged(...)
end
3.) Save and reload
edit: to clarify, you only need this one time in the lua file. i put mine after line 275, right between the 'end' and 'function SetupSecureSnippets(button)'.
In reply to spacious: This doesnt make sense, 80% of that file is functions. Theres over 100 functions called out, and atleast another 90 under the button mapping sections. And about 4-5x's as many 'end's called out
Do you have line #'s or any other starting point? Because to me it looks like i gotta add that line in 200+ times.
In reply to AbsoluTalenT:
sorry, i meant just add it 1 single time after ANY function. you dont need to add it after every 'end'. you just dont want to add it into another function. ill edit my post to clarify this
In reply to spacious: Thank you. And solution works great. I know enough with some things, not so much of others. Maybe I overthunk your original message and confused myself.
I am also having the same issues.
I get this error everytime i hover over my action bars with my mouse. Im on wow anniversary servers
Message: ...ddOns/Blizzard_SharedXMLBase/ButtonStateBehavior.lua:39: attempt to call method 'OnButtonStateChanged' (a nil value)
Time: Tue Apr 8 12:03:53 2025
Count: 185
Stack:
[Interface/AddOns/Blizzard_SharedXMLBase/ButtonStateBehavior.lua]:39: in function 'OnEnter'
[Interface/AddOns/Blizzard_Flyout/Flyout.lua]:28: in function 'OnEnter'
[Interface/AddOns/Bartender4/libs/LibActionButton-1.0/LibActionButton-1.0.lua]:1078: in function <...er4/libs/LibActionButton-1.0/LibActionButton-1.0.lua:1064>
Locals:
self = BT4Button36 {
NormalTexture = BT4Button36NormalTexture {
}
HotKey = BT4Button36HotKey {
}
action = 0
NewActionTexture = Texture {
}
over = true
flashing = 0
Flash = BT4Button36Flash {
}
state_actions = <table> {
}
FlyoutBorderShadow = BT4Button36FlyoutBorderShadow {
}
Border = BT4Button36Border {
}
Name = BT4Button36Name {
}
_state_action = 36
icon = BT4Button36Icon {
}
Count = BT4Button36Count {
}
AutoCastable = Texture {
}
SpellHighlightAnim = AnimationGroup {
}
rangeTimer = -1
header = BT4Bar3 {
}
id = 36
AutoCastShine = BT4Button36Shine {
}
SpellHighlightTexture = Texture {
}
__LAB_Version = 120
outOfRange = false
config = <table> {
}
FlyoutBorder = BT4Button36FlyoutBorder {
}
_state_type = "action"
state_types = <table> {
}
FlyoutArrow = BT4Button36FlyoutArrow {
}
cooldown = BT4Button36Cooldown {
}
zoneAbilityDisabled = false
}
(*temporary) = nil
(*temporary) = BT4Button36 {
NormalTexture = BT4Button36NormalTexture {
}
HotKey = BT4Button36HotKey {
}
action = 0
NewActionTexture = Texture {
}
over = true
flashing = 0
Flash = BT4Button36Flash {
}
state_actions = <table> {
}
FlyoutBorderShadow = BT4Button36FlyoutBorderShadow {
}
Border = BT4Button36Border {
}
Name = BT4Button36Name {
}
_state_action = 36
icon = BT4Button36Icon {
}
Count = BT4Button36Count {
}
AutoCastable = Texture {
}
SpellHighlightAnim = AnimationGroup {
}
rangeTimer = -1
header = BT4Bar3 {
}
id = 36
AutoCastShine = BT4Button36Shine {
}
SpellHighlightTexture = Texture {
}
__LAB_Version = 120
outOfRange = false
config = <table> {
}
FlyoutBorder = BT4Button36FlyoutBorder {
}
_state_type = "action"
state_types = <table> {
}
FlyoutArrow = BT4Button36FlyoutArrow {
}
cooldown = BT4Button36Cooldown {
}
zoneAbilityDisabled = false
}
(*temporary) = "attempt to call method 'OnButtonStateChanged' (a nil value)"
i get this error multiple times on a daily basis
65x ...zzard_ActionBar/Mainline/MainMenuBarMicroButtons.lua:1763: attempt to compare two nil values
[Blizzard_ActionBar/Mainline/MainMenuBarMicroButtons.lua]:1763: in function 'GetEdgeButton'
[Blizzard_ActionBar/Mainline/MainMenuBarMicroButtons.lua]:1791: in function 'UpdateHelpTicketButtonAnchor'
[Blizzard_ActionBar/Mainline/MainMenuBarMicroButtons.lua]:1850: in function 'Layout'
[Blizzard_SharedXML/LayoutFrame.lua]:14: in function <Blizzard_SharedXML/LayoutFrame.lua:12>
[C]: ?
[C]: in function 'Show'
[Blizzard_UIParentPanelManager/Mainline/UIParentPanelManager.lua]:448: in function 'SetUIPanel'
[Blizzard_UIParentPanelManager/Mainline/UIParentPanelManager.lua]:532: in function 'HideUIPanelImplementation'
[Blizzard_UIParentPanelManager/Mainline/UIParentPanelManager.lua]:521: in function 'HideUIPanel'
[Blizzard_UIParentPanelManager/Mainline/UIParentPanelManager.lua]:178: in function <...ParentPanelManager/Mainline/UIParentPanelManager.lua:169>
[C]: in function 'SetAttribute'
[Blizzard_UIParentPanelManager/Mainline/UIParentPanelManager.lua]:913: in function <...ParentPanelManager/Mainline/UIParentPanelManager.lua:896>
[C]: in function 'HideUIPanel'
[Blizzard_FrameXML/Shared/CinematicFrame.lua]:97: in function <...eBlizzard_FrameXML/Shared/CinematicFrame.lua:81>
Locals:
self = MicroMenu {
layoutFramesGoingRight = true
isHorizontal = true
normalScale = 1
dirty = false
oldGridSettings = <table> {
}
childYPadding = -5
layoutFramesGoingUp = false
numButtons = 12
stride = 12
childXPadding = -5
}
rightMost = false
topMost = true
firstButton = HelpMicroButton {
FlashBorder = Texture {
}
layoutIndex = 10
textureName = "GameMenu"
FlashContent = Texture {
}
Background = Texture {
}
PushedBackground = Texture {
}
QuickKeybindHighlightTexture = Texture {
}
tooltipText = "Customer Support"
}
lastButton = HelpMicroButton {
FlashBorder = Texture {
}
layoutIndex = 10
textureName = "GameMenu"
FlashContent = Texture {
}
Background = Texture {
}
PushedBackground = Texture {
}
QuickKeybindHighlightTexture = Texture {
}
tooltipText = "Customer Support"
}
firstButtonX = nil
firstButtonY = nil
lastButtonX = nil
lastButtonY = nil
(*temporary) = true
(*temporary) = 1
(*temporary) = 2
(*temporary) = "attempt to compare two nil values"
every time i swap from preservation to devastation spec, i get this error. Also happens when I swap from disc to shadow. This error only seems to show when I swap from spec profiles that have stance bar enabled to spec profile that don't
1767x Bartender4/Bar.lua:123: attempt to compare nil with number
[Bartender4/Bar.lua]:123: in function <Bartender4/Bar.lua:121>
Locals:
self = BT4BarStanceBar {
disabled = true
buttons = <table> {
}
id = "StanceBar"
hidedriver = <table> {
}
faded = true
config = <table> {
}
name = "Stance Bar"
numbuttons = 1
elapsed = 0.044000
overlay = BT4BarStanceBarOverlay {
}
}
elapsed = 0.013000
(*temporary) = 0.044000
(*temporary) = nil
(*temporary) = "attempt to compare nil with number"
the empty slots are always visible with addon v4.15.16 in classic anniversary hardcore
I'm having a lot of issues with Bartender and Vehicle UI in this season.
Specifically in the Cinderbrew Meadery, on the boss where you mount the bees while in combat, very often the vehicle UI doesn't show up at all. And the times it does, it does not go away after dismounting the bee.
I've tried both using the default Blizzard vehicle UI and Bartener's "possess bar" option. Neither of them work properly while entering a vehicle in combat.
Does anyone have any tips on how to get this working reliably?