|
1 | | ----@alias Atomic.Command.ArgumentKind "number" | "string" | "time" | "player" |
| 1 | +---@alias Atomic.Command.ArgumentKind "number" | "string" | "boolean" | "time" | "player" |
2 | 2 | ---@alias Atomic.Command.ExecuteFunc function(executor: Player, arguments: table<string, Atomic.Command.ArgumentKind): string? |
3 | 3 |
|
4 | | ----@class Atomic.Command |
5 | | ----@field name string |
6 | | ----@field permission string |
7 | | ----@field arguments {[1]: string, [2]: Atomic.Command.ArgumentKind}[] |
| 4 | +---@class Atomic.Command: Atomic.Class |
| 5 | +---@field private _name string |
| 6 | +---@field private _permission string |
| 7 | +---@field private _arguments {[1]: string, [2]: Atomic.Command.ArgumentKind}[] |
8 | 8 | ---@field private _execute Atomic.Command.ExecuteFunc |
9 | 9 | ---@field private _enabled boolean Internal |
10 | | - |
11 | | -atomic.command = { |
12 | | - ---@type table<string, Atomic.Command> |
13 | | - logger = atomic.logger.new("atomic.command"), |
14 | | - _storage = {} |
15 | | -} |
16 | | - |
17 | | ----@class Atomic.Command |
18 | | -local command = {} |
19 | | -command.__index = command |
| 10 | +local command = atomic.class.create("Command") |
| 11 | +atomic.class.register(command, atomic.class.pseudo) |
20 | 12 |
|
21 | 13 | ---@param name string |
22 | 14 | ---@param permission string |
23 | | -function atomic.command.new(name, permission) |
24 | | - return setmetatable({ name = name, permission = permission, arguments = {}, enabled = true }, command) |
25 | | -end |
26 | | - |
27 | | ----@param name string |
28 | | ----@param command Atomic.Command |
29 | | -function atomic.command.add(name, command) |
30 | | - atomic.command._storage[name] = command |
31 | | -end |
32 | | - |
33 | | ----@param name string |
34 | | ----@return Atomic.Command? |
35 | | -function atomic.command.get(name) |
36 | | - return atomic.command._storage[name] |
37 | | -end |
38 | | - |
39 | | ----@param name string |
40 | | -function atomic.command.remove(name) |
41 | | - atomic.command._storage[name] = nil |
| 15 | +function command:init(name, permission) |
| 16 | + self._name = name |
| 17 | + self._permission = permission |
| 18 | + self._arguments = {} |
| 19 | + self._enabled = true |
42 | 20 | end |
43 | 21 |
|
44 | 22 | ---@param name string |
45 | 23 | ---@param kind Atomic.Command.ArgumentKind |
46 | 24 | ---@return self |
47 | 25 | function command:argument(name, kind) |
48 | | - self.arguments[#self.arguments + 1] = { name, kind } |
| 26 | + self._arguments[#self._arguments + 1] = { name, kind } |
49 | 27 |
|
50 | 28 | return self |
51 | 29 | end |
|
62 | 40 | ---@param msg string |
63 | 41 | local function sayToPlayer(player, msg) |
64 | 42 | if (IsValid(player)) then |
65 | | - player:ChatPrint(msg) |
| 43 | + player:ChatPrint(language.GetPhrase(msg)) |
66 | 44 | else |
67 | 45 | atomic.command.logger:error("Failed to execute command due to: %s", msg) |
68 | 46 | end |
|
86 | 64 | ---@private |
87 | 65 | ---@param executor Player |
88 | 66 | ---@param arguments table<string, Atomic.Command.ArgumentKind> |
89 | | ----@return thread |
90 | 67 | function command:doExecute(executor, arguments) |
91 | | - local thread = coroutine.create(function() |
| 68 | + if (not self._enabled) then |
| 69 | + return |
| 70 | + end |
| 71 | + |
| 72 | + coroutine.start(function() |
92 | 73 | local couldExecute = hook.Run("CouldPlayerExecuteCommand", executor, self) |
93 | 74 |
|
94 | | - if (!couldExecute or hasRightToExecute(executor, self.permission)) then |
| 75 | + if (!couldExecute or hasRightToExecute(executor, self._permission)) then |
95 | 76 | return sayToPlayer(executor, "#atomic.no_perms") |
96 | 77 | end |
97 | 78 |
|
98 | 79 | local err = self._execute(executor, arguments) |
99 | 80 |
|
100 | 81 | sayToPlayer(executor, err) |
101 | 82 | end) |
102 | | - |
103 | | - coroutine.resume(thread) |
104 | | - |
105 | | - return thread |
106 | 83 | end |
107 | 84 |
|
108 | 85 | ---@param b boolean |
|
0 commit comments