refactor: unlink no longer needs a groupname arg

A claim can only belong to one claim link at a time, so it resolves
via the new Registry.FindLinkContaining(playerUid, claimIndex).
This commit is contained in:
2026-07-12 19:52:23 +02:00
parent 1803aaaa37
commit 4e97e25b38
2 changed files with 13 additions and 16 deletions
+8 -13
View File
@@ -69,7 +69,7 @@ public static class ClaimLinkChatCommand
Array.Empty<ICommandArgumentParser>(), true, Cancel),
new(new[] { "unlink", "ul" }, "Remove a claim you own from its claim link (requires confirm).",
new ICommandArgumentParser[] { p.Word("groupname"), p.IntRange("claim", 0, 999) }, true, Unlink),
new ICommandArgumentParser[] { p.IntRange("claim", 0, 999) }, true, Unlink),
new(new[] { "kick" }, "Force-unlink all of a player's claims from the link (Owner/Op, requires confirm).",
new ICommandArgumentParser[] { p.Word("groupname"), p.OnlinePlayer("playername") }, true, Kick),
@@ -239,23 +239,18 @@ public static class ClaimLinkChatCommand
public static TextCommandResult Unlink(TextCommandCallingArgs args)
{
string groupName = (string)args[0];
int claimIndex = (int)args[1];
TextCommandResult? err = TryResolveGroup(groupName, out PlayerGroup group);
if (err != null) return err;
err = TryResolveClaimLink(group, out ClaimLink link);
if (err != null) return err;
int claimIndex = (int)args[0];
string playerUid = args.Caller.Player.PlayerUID;
ClaimLinkMember? member = link.Members.Find(m => m.OwnerPlayerUid == playerUid);
if (member == null || !member.LocalClaimIndices.Contains(claimIndex))
return TextCommandResult.Error($"Claim {claimIndex} is not linked into '{groupName}' by you.");
ClaimLink? link = ClaimLinkModSystem.Registry.FindLinkContaining(playerUid, claimIndex);
if (link == null)
return TextCommandResult.Error($"Claim {claimIndex} is not linked into any claim link by you.");
string groupName = ClaimLinkModSystem.Groups.PlayerGroupsById[link.GroupId].Name;
return Stage(playerUid, $"Claim {claimIndex} will be unlinked from '{groupName}'.", () =>
{
ClaimLinkMember member = link.Members.Find(m => m.OwnerPlayerUid == playerUid)!;
member.LocalClaimIndices.Remove(claimIndex);
if (member.LocalClaimIndices.Count == 0)
link.Members.Remove(member);