diff --git a/ClaimLink/ClaimLinkModSystem.cs b/ClaimLink/ClaimLinkModSystem.cs index b7ae7dd..3f1f086 100644 --- a/ClaimLink/ClaimLinkModSystem.cs +++ b/ClaimLink/ClaimLinkModSystem.cs @@ -12,6 +12,7 @@ public class ClaimLinkModSystem : ModSystem internal static ClaimLinkRegistry Registry = null!; internal static IGroupManager Groups = null!; internal static IWorldAccessor World = null!; + internal static IPlayerDataManager PlayerData = null!; internal ClaimLinkCommandListener? CmdListener; public override bool ShouldLoad(EnumAppSide forSide) => forSide == EnumAppSide.Server; @@ -22,6 +23,7 @@ public class ClaimLinkModSystem : ModSystem World = api.World; Groups = api.Groups; Logger = api.Logger; + PlayerData = api.PlayerData; Registry = new ClaimLinkRegistry(api.WorldManager.SaveGame); CmdListener = new ClaimLinkCommandListener(); diff --git a/ClaimLink/ClaimLinkRegistry.cs b/ClaimLink/ClaimLinkRegistry.cs index 4391fb5..6323a1c 100644 --- a/ClaimLink/ClaimLinkRegistry.cs +++ b/ClaimLink/ClaimLinkRegistry.cs @@ -142,6 +142,12 @@ public class ClaimLinkRegistry Save(); } + public void ClearAllForPlayer(string uid) + { + entries.Remove(uid); + Save(); + } + public IEnumerable MemberUidsForGroup(int groupId) { foreach (var (uid, groups) in entries) diff --git a/ClaimLink/LandCommandListener.cs b/ClaimLink/LandCommandListener.cs index 642cf05..69b62db 100644 --- a/ClaimLink/LandCommandListener.cs +++ b/ClaimLink/LandCommandListener.cs @@ -22,6 +22,7 @@ public class ClaimLinkCommandListener : ICommandHookListener ["claim"] = Claim, ["free"] = Free, ["adminfree"] = AdminFree, + ["adminfreehere"] = AdminFreeHere, }; private static readonly Dictionary claimSub = new() @@ -124,6 +125,23 @@ public class ClaimLinkCommandListener : ICommandHookListener } private static void AdminFree(Caller caller, CmdArgs args) + { + if (caller.Player == null) + return; + + string? name = args.PopWord(); + if (name == null) + return; + + string? uid = ClaimLinkModSystem.PlayerData.GetPlayerDataByLastKnownName(name)?.PlayerUID; + if (uid == null) + return; + + ClaimLinkModSystem.Registry.ClearAllForPlayer(uid); + ClaimLinkChatCommand.PendingActions.Remove(uid); + } + + private static void AdminFreeHere(Caller caller, CmdArgs args) { if (caller.Player == null) return;