What's New in Dalamud v10
Dalamud v10 is the current major version of Dalamud, and was released with Patch 7.0. This is a high-level overview of changes. You can see a code diff of all of these changes here.
Key Information
- Branch:
apiX
(view on GitHub) - Release Date: July 5, 2024
- API Level: 10
- .NET Version: .NET 8.0
New Features
- New APIs have been added.
IConsole
lets you add console variables and commands to the Dalamud console(/xllog
). These are distinct to chat commands and offer various convenience features such as completion and support for types. No string parsing needed.IMarketBoard
lets you access market board data events that Dalamud already had implemented to provide Universalis with it's pricing data. This will allow users to subscribe to these events without having to hook those events themselves.
Major Changes
-
There has been refactoring in relation to what interfaces/classes Dalamud provides. Generally speaking Dalamud will now provide interfaces where possible. This should make it easier for plugins to unit test/mock as required.
- The majority of public facing classes provided by dalamud services to plugins have been interfaced.
DalamudPluginInterface
is nowIDalamudPluginInterface
, you must request aIDalamudPluginInterface
in your plugin's constructor.UiBuilder
is nowIUiBuilder
- For a full list please see Class/Interface Changes
-
ITextureProvider
has been reworked to be more performant and easier to use.- All of the functions inside now return a
ISharedImmediateTexture
, instead of a texture wrap. This represents an instance of a texture that may or may not be loaded yet. All textures are loaded asynchronously to avoid making the game hitch. - You don't need to maintain your own "texture cache" anymore. Caching
IDalamudTextureWrap
is now explicitly discouraged, as it sidesteps all of the asynchronous loading and performance optimizations in the new texture provider implementation. You should try to remove your caches and useISharedImmediateTexture.GetWrapOrEmpty()
,ISharedImmediateTexture.GetWrapOrDefault()
orISharedImmediateTexture.TryGetWrap()
. The formerGetWrapOrEmpty()
function will return a transparent 4x4 texture if it hasn't loaded yet, allowing easy upgrades. ISharedImmediateTexture.RentAsync()
can be used to obtain aIDalamudTextureWrap
that stays valid, but it's a legacy option and should only be used if you need to acquire a texture off the main thread, for example, inside a task. You should always prefer to use the other functions if you are planning to use the texture to render with ImGui.- Please refer to the updated documentation of
ITextureProvider
andISharedImmediateTexture
for more guidance.
- All of the functions inside now return a
-
ITextureReadbackProvider
has been added to allow accessing raw RGBA data of textures as streams, or saving them to a file.
Minor Changes
-
Some
IBattleChara
properties were renamed.- In
BattleChara
,TotalCastTime
was renamed toBaseCastTime
. - In
BattleChara
,AdjustedTotalCastTime
was renamed toTotalCastTime
.
- In
-
Dalamud.ClientLanguage
was moved toDalamud.Game.ClientLanguage
.- The
ToLumina()
extension method was moved toDalamud.Utility
.
- The
-
IDalamudPluginInstaller.OpenPluginInstaller()
was removed. Please useOpenPluginInstallerTo()
instead. -
The type returned by
IDalamudPluginInterface.InstalledPlugins
has been changed toIExposedPlugin
- Functions to open the main and config UIs have been added.
-
Some changes were made to unify texture wraps.
- The public
DalamudTextureWrap
class has been removed. Please useIDalamudTextureWrap
instead. IDalamudTextureWrap
has been moved out of an internal namespace intoDalamud.Interface.Textures.TextureWraps
- The public
-
ImRaii
style functions will now throw if an invalid type is specified. -
The
RequiredVersion
attribute for injected services has been removed. You don't need to replace it with anything.
Errata
These changes have been made after the official stabilization.
Contributors
We want to thank the following people for their contributions to Dalamud during this patch cycle:
FFXIVClientStructs Changes
These are relevant changes made to FFXIVClientStructs, listed here for reference. We want to thank aers, Pohky, WildWolf and the other FFXIVClientStructs contributors for their work.
Class/Interface Changes
- DalamudPluginInterface -> IDalamudPluginInterface
- UiBuilder -> IUiBuilder
- AetheryteEntry -> IAetheryteEntry
- AetheryteList -> IAetheryteList
- BuddyMember -> IBuddyMember
- BuddyList -> IBuddyList
- GameObject -> IGameObject
- PlayerCharacter -> IPlayerCharacter
- BattleChara -> IBattleChara
- BattleNpc -> IBattleNpc
- Character -> ICharacter
- Npc -> INpc
- EventObj -> IEventObj
- Fate -> IFate
- PartyMember -> IPartyMember
- CommandInfo -> IReadOnlyCommandInfo
- MenuItem -> IMenuItem
- MenuArgs -> IMenuArgs
- MenuItemClickedArgs -> IMenuItemClickedArgs
- MenuOpenedArgs -> IMenuOpenedArgs
- DtrBarEntry -> IDtrBarEntry
- PartyFinderListing -> IPartyFinderListing
- PartyFinderListingEventArgs -> IPartyFinderListingEventArgs
- TitleScreenMenuEntry -> ITitleScreenMenuEntry and IReadOnlyTitleScreenMenuEntry