diff --git a/ClaimLink/LandCommandListener.cs b/ClaimLink/LandCommandListener.cs index 73f3c38..3faab54 100644 --- a/ClaimLink/LandCommandListener.cs +++ b/ClaimLink/LandCommandListener.cs @@ -15,21 +15,54 @@ public class ClaimLinkCommandListener : ICommandHookListener private static Dictionary pendingLoads = new Dictionary(); + private delegate void SubHandler(Caller caller, CmdArgs args); + + private static readonly Dictionary topLevel = new() + { + ["claim"] = Claim, + ["free"] = Free, + ["info"] = Info, + ["list"] = List, + ["adminfree"] = AdminFree, + }; + + private static readonly Dictionary claimSub = new() + { + ["load"] = ClaimLoad, + ["new"] = ClaimNew, + ["grant"] = ClaimGrant, + ["revoke"] = ClaimRevoke, + ["grantgroup"] = ClaimGrantGroup, + ["revokegroup"] = ClaimRevokeGroup, + ["start"] = ClaimStart, + ["end"] = ClaimEnd, + ["grow"] = ClaimGrow, + ["shrink"] = ClaimShrink, + ["add"] = ClaimAdd, + ["allowuseeveryone"] = ClaimAllowUseEveryone, + ["plevel"] = ClaimPLevel, + ["fullheight"] = ClaimFullHeight, + ["save"] = ClaimSave, + ["cancel"] = ClaimCancel, + ["download"] = ClaimDownload, + }; + private TextCommandResult? Before(TextCommandCallingArgs args) { CmdArgs rawArgs = args.RawArgs.Clone(); while (rawArgs.Length > 0) { - switch (rawArgs.PeekWord()) + string word = rawArgs.PeekWord(); + + if (topLevel.TryGetValue(word, out SubHandler handler)) { - case "claim": - rawArgs.PopWord(); - handleClaim(args.Caller, rawArgs); - break; - default: - rawArgs.PopWord(); - break; + rawArgs.PopWord(); + handler(args.Caller, rawArgs); + } + else + { + rawArgs.PopWord(); } } @@ -40,50 +73,74 @@ public class ClaimLinkCommandListener : ICommandHookListener { } - private void handleClaim(Caller caller, CmdArgs args) + private static void Claim(Caller caller, CmdArgs args) { - switch (args.PeekWord()) + string word = args.PeekWord(); + + if (claimSub.TryGetValue(word, out SubHandler handler)) { - case "load": - if (caller.Player == null) - break; - - args.PopWord(); - int? claimIndex = args.PopInt(); - if (claimIndex == null || claimIndex < 0 || claimIndex > 999) - break; - - List claims = ClaimLinkModSystem.LandClaimAPI.All, ownedClaims = new List(); - List globalIndex = new List(); - for (int i = 0; i < claims.Count; ++i) - { - if (claims[i].OwnedByPlayerUid != caller.Player.PlayerUID) - continue; - - globalIndex.Add(i); - ownedClaims.Add(claims[i]); - } - - if (claimIndex >= ownedClaims.Count) - break; - - pendingLoads[caller.Player.PlayerUID] = globalIndex[(int)claimIndex]; - break; - case "cancel": - if (caller.Player == null) - break; - - args.PopWord(); - pendingLoads.Remove(caller.Player.PlayerUID); - break; - default: - break; + args.PopWord(); + handler(caller, args); } } + private static void ClaimLoad(Caller caller, CmdArgs args) + { + if (caller.Player == null) + return; + + int? claimIndex = args.PopInt(); + if (claimIndex == null || claimIndex < 0 || claimIndex > 999) + return; + + List claims = ClaimLinkModSystem.LandClaimAPI.All, ownedClaims = new List(); + List globalIndex = new List(); + for (int i = 0; i < claims.Count; ++i) + { + if (claims[i].OwnedByPlayerUid != caller.Player.PlayerUID) + continue; + + globalIndex.Add(i); + ownedClaims.Add(claims[i]); + } + + if (claimIndex >= ownedClaims.Count) + return; + + pendingLoads[caller.Player.PlayerUID] = globalIndex[(int)claimIndex]; + } + + private static void ClaimCancel(Caller caller, CmdArgs args) + { + if (caller.Player == null) + return; + + pendingLoads.Remove(caller.Player.PlayerUID); + } + + private static void Free(Caller caller, CmdArgs args) { } + private static void Info(Caller caller, CmdArgs args) { } + private static void List(Caller caller, CmdArgs args) { } + private static void AdminFree(Caller caller, CmdArgs args) { } + + private static void ClaimNew(Caller caller, CmdArgs args) { } + private static void ClaimGrant(Caller caller, CmdArgs args) { } + private static void ClaimRevoke(Caller caller, CmdArgs args) { } + private static void ClaimGrantGroup(Caller caller, CmdArgs args) { } + private static void ClaimRevokeGroup(Caller caller, CmdArgs args) { } + private static void ClaimStart(Caller caller, CmdArgs args) { } + private static void ClaimEnd(Caller caller, CmdArgs args) { } + private static void ClaimGrow(Caller caller, CmdArgs args) { } + private static void ClaimShrink(Caller caller, CmdArgs args) { } + private static void ClaimAdd(Caller caller, CmdArgs args) { } + private static void ClaimAllowUseEveryone(Caller caller, CmdArgs args) { } + private static void ClaimPLevel(Caller caller, CmdArgs args) { } + private static void ClaimFullHeight(Caller caller, CmdArgs args) { } + private static void ClaimSave(Caller caller, CmdArgs args) { } + private static void ClaimDownload(Caller caller, CmdArgs args) { } + internal static void OnPlayerDisconnect(IServerPlayer player) { pendingLoads.Remove(player.PlayerUID); } } -