diff --git a/Dalamud/Game/ClientState/Objects/Types/Character.cs b/Dalamud/Game/ClientState/Objects/Types/Character.cs
index c4c91f5b0..72f6a9950 100644
--- a/Dalamud/Game/ClientState/Objects/Types/Character.cs
+++ b/Dalamud/Game/ClientState/Objects/Types/Character.cs
@@ -98,6 +98,13 @@ public interface ICharacter : IGameObject
/// Gets the current mount for this character. Will be null if the character doesn't have a mount.
///
public ExcelResolver? CurrentMount { get; }
+
+ ///
+ /// Gets the current minion summoned for this character. Will be null if the character doesn't have a minion.
+ /// This method *will* return information about a spawned (but invisible) minion, e.g. if the character is riding a
+ /// mount.
+ ///
+ public ExcelResolver? CurrentMinion { get; }
}
///
@@ -183,13 +190,27 @@ internal unsafe class Character : GameObject, ICharacter
{
get
{
- if (this.Struct->IsNotMounted()) return null; // safety i guess?
+ if (this.Struct->IsNotMounted()) return null; // just for safety.
var mountId = this.Struct->Mount.MountId;
return mountId == 0 ? null : new ExcelResolver(mountId);
}
}
+ ///
+ public ExcelResolver? CurrentMinion
+ {
+ get
+ {
+ if (this.Struct->CompanionObject != null)
+ return new ExcelResolver(this.Struct->CompanionObject->BaseId);
+
+ // this is only present if a minion is summoned but hidden (e.g. the player's on a mount).
+ var hiddenCompanionId = this.Struct->CompanionData.CompanionId;
+ return hiddenCompanionId == 0 ? null : new ExcelResolver(hiddenCompanionId);
+ }
+ }
+
///
/// Gets the underlying structure.
///