@minecraft-docker/mcctl 1.5.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/application/index.d.ts +2 -0
  2. package/dist/application/index.d.ts.map +1 -0
  3. package/dist/application/index.js +5 -0
  4. package/dist/application/index.js.map +1 -0
  5. package/dist/commands/backup.d.ts +16 -0
  6. package/dist/commands/backup.d.ts.map +1 -0
  7. package/dist/commands/backup.js +182 -0
  8. package/dist/commands/backup.js.map +1 -0
  9. package/dist/commands/ban.d.ts +14 -0
  10. package/dist/commands/ban.d.ts.map +1 -0
  11. package/dist/commands/ban.js +418 -0
  12. package/dist/commands/ban.js.map +1 -0
  13. package/dist/commands/config.d.ts +18 -0
  14. package/dist/commands/config.d.ts.map +1 -0
  15. package/dist/commands/config.js +106 -0
  16. package/dist/commands/config.js.map +1 -0
  17. package/dist/commands/create.d.ts +22 -0
  18. package/dist/commands/create.d.ts.map +1 -0
  19. package/dist/commands/create.js +83 -0
  20. package/dist/commands/create.js.map +1 -0
  21. package/dist/commands/delete.d.ts +17 -0
  22. package/dist/commands/delete.d.ts.map +1 -0
  23. package/dist/commands/delete.js +71 -0
  24. package/dist/commands/delete.js.map +1 -0
  25. package/dist/commands/exec.d.ts +10 -0
  26. package/dist/commands/exec.d.ts.map +1 -0
  27. package/dist/commands/exec.js +29 -0
  28. package/dist/commands/exec.js.map +1 -0
  29. package/dist/commands/index.d.ts +18 -0
  30. package/dist/commands/index.d.ts.map +1 -0
  31. package/dist/commands/index.js +18 -0
  32. package/dist/commands/index.js.map +1 -0
  33. package/dist/commands/init.d.ts +9 -0
  34. package/dist/commands/init.d.ts.map +1 -0
  35. package/dist/commands/init.js +186 -0
  36. package/dist/commands/init.js.map +1 -0
  37. package/dist/commands/kick.d.ts +12 -0
  38. package/dist/commands/kick.d.ts.map +1 -0
  39. package/dist/commands/kick.js +71 -0
  40. package/dist/commands/kick.js.map +1 -0
  41. package/dist/commands/migrate.d.ts +18 -0
  42. package/dist/commands/migrate.d.ts.map +1 -0
  43. package/dist/commands/migrate.js +470 -0
  44. package/dist/commands/migrate.js.map +1 -0
  45. package/dist/commands/op.d.ts +12 -0
  46. package/dist/commands/op.d.ts.map +1 -0
  47. package/dist/commands/op.js +220 -0
  48. package/dist/commands/op.js.map +1 -0
  49. package/dist/commands/player-online.d.ts +11 -0
  50. package/dist/commands/player-online.d.ts.map +1 -0
  51. package/dist/commands/player-online.js +151 -0
  52. package/dist/commands/player-online.js.map +1 -0
  53. package/dist/commands/player.d.ts +18 -0
  54. package/dist/commands/player.d.ts.map +1 -0
  55. package/dist/commands/player.js +352 -0
  56. package/dist/commands/player.js.map +1 -0
  57. package/dist/commands/server-backup.d.ts +36 -0
  58. package/dist/commands/server-backup.d.ts.map +1 -0
  59. package/dist/commands/server-backup.js +320 -0
  60. package/dist/commands/server-backup.js.map +1 -0
  61. package/dist/commands/server-restore.d.ts +13 -0
  62. package/dist/commands/server-restore.d.ts.map +1 -0
  63. package/dist/commands/server-restore.js +294 -0
  64. package/dist/commands/server-restore.js.map +1 -0
  65. package/dist/commands/status.d.ts +13 -0
  66. package/dist/commands/status.d.ts.map +1 -0
  67. package/dist/commands/status.js +325 -0
  68. package/dist/commands/status.js.map +1 -0
  69. package/dist/commands/whitelist.d.ts +12 -0
  70. package/dist/commands/whitelist.d.ts.map +1 -0
  71. package/dist/commands/whitelist.js +316 -0
  72. package/dist/commands/whitelist.js.map +1 -0
  73. package/dist/commands/world.d.ts +16 -0
  74. package/dist/commands/world.d.ts.map +1 -0
  75. package/dist/commands/world.js +135 -0
  76. package/dist/commands/world.js.map +1 -0
  77. package/dist/domain/index.d.ts +2 -0
  78. package/dist/domain/index.d.ts.map +1 -0
  79. package/dist/domain/index.js +7 -0
  80. package/dist/domain/index.js.map +1 -0
  81. package/dist/index.d.ts +3 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +609 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts +29 -0
  86. package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts.map +1 -0
  87. package/dist/infrastructure/adapters/ClackPromptAdapter.js +419 -0
  88. package/dist/infrastructure/adapters/ClackPromptAdapter.js.map +1 -0
  89. package/dist/infrastructure/adapters/index.d.ts +3 -0
  90. package/dist/infrastructure/adapters/index.d.ts.map +1 -0
  91. package/dist/infrastructure/adapters/index.js +5 -0
  92. package/dist/infrastructure/adapters/index.js.map +1 -0
  93. package/dist/infrastructure/di/container.d.ts +47 -0
  94. package/dist/infrastructure/di/container.d.ts.map +1 -0
  95. package/dist/infrastructure/di/container.js +140 -0
  96. package/dist/infrastructure/di/container.js.map +1 -0
  97. package/dist/infrastructure/di/index.d.ts +2 -0
  98. package/dist/infrastructure/di/index.d.ts.map +1 -0
  99. package/dist/infrastructure/di/index.js +2 -0
  100. package/dist/infrastructure/di/index.js.map +1 -0
  101. package/dist/infrastructure/index.d.ts +4 -0
  102. package/dist/infrastructure/index.d.ts.map +1 -0
  103. package/dist/infrastructure/index.js +7 -0
  104. package/dist/infrastructure/index.js.map +1 -0
  105. package/dist/lib/mojang-api.d.ts +51 -0
  106. package/dist/lib/mojang-api.d.ts.map +1 -0
  107. package/dist/lib/mojang-api.js +136 -0
  108. package/dist/lib/mojang-api.js.map +1 -0
  109. package/dist/lib/player-cache.d.ts +79 -0
  110. package/dist/lib/player-cache.d.ts.map +1 -0
  111. package/dist/lib/player-cache.js +302 -0
  112. package/dist/lib/player-cache.js.map +1 -0
  113. package/dist/lib/player-json.d.ts +69 -0
  114. package/dist/lib/player-json.d.ts.map +1 -0
  115. package/dist/lib/player-json.js +96 -0
  116. package/dist/lib/player-json.js.map +1 -0
  117. package/dist/lib/prompts/action-select.d.ts +23 -0
  118. package/dist/lib/prompts/action-select.d.ts.map +1 -0
  119. package/dist/lib/prompts/action-select.js +124 -0
  120. package/dist/lib/prompts/action-select.js.map +1 -0
  121. package/dist/lib/prompts/index.d.ts +7 -0
  122. package/dist/lib/prompts/index.d.ts.map +1 -0
  123. package/dist/lib/prompts/index.js +7 -0
  124. package/dist/lib/prompts/index.js.map +1 -0
  125. package/dist/lib/prompts/player-select.d.ts +25 -0
  126. package/dist/lib/prompts/player-select.d.ts.map +1 -0
  127. package/dist/lib/prompts/player-select.js +122 -0
  128. package/dist/lib/prompts/player-select.js.map +1 -0
  129. package/dist/lib/prompts/server-select.d.ts +26 -0
  130. package/dist/lib/prompts/server-select.d.ts.map +1 -0
  131. package/dist/lib/prompts/server-select.js +99 -0
  132. package/dist/lib/prompts/server-select.js.map +1 -0
  133. package/dist/lib/rcon.d.ts +53 -0
  134. package/dist/lib/rcon.d.ts.map +1 -0
  135. package/dist/lib/rcon.js +131 -0
  136. package/dist/lib/rcon.js.map +1 -0
  137. package/dist/lib/shell.d.ts +109 -0
  138. package/dist/lib/shell.d.ts.map +1 -0
  139. package/dist/lib/shell.js +318 -0
  140. package/dist/lib/shell.js.map +1 -0
  141. package/package.json +2 -2
@@ -0,0 +1,220 @@
1
+ import { Paths, log, colors } from '@minecraft-docker/shared';
2
+ import { ShellExecutor } from '../lib/shell.js';
3
+ import { isContainerRunning, execRconWithOutput, getContainerName } from '../lib/rcon.js';
4
+ /**
5
+ * Manage server operators
6
+ */
7
+ export async function opCommand(options) {
8
+ const paths = new Paths(options.root);
9
+ if (!paths.isInitialized()) {
10
+ log.error('Platform not initialized. Run: mcctl init');
11
+ return 1;
12
+ }
13
+ if (!options.serverName) {
14
+ log.error('Server name is required');
15
+ log.info('Usage: mcctl op <server> <add|remove|list> [player]');
16
+ return 1;
17
+ }
18
+ if (!options.subCommand) {
19
+ log.error('Action is required: add, remove, or list');
20
+ log.info('Usage: mcctl op <server> <add|remove|list> [player]');
21
+ return 1;
22
+ }
23
+ const shell = new ShellExecutor(paths);
24
+ const config = shell.readConfig(options.serverName);
25
+ if (config === null) {
26
+ log.error(`Server '${options.serverName}' not found`);
27
+ return 1;
28
+ }
29
+ const containerName = getContainerName(options.serverName);
30
+ const isRunning = await isContainerRunning(containerName);
31
+ switch (options.subCommand) {
32
+ case 'list': {
33
+ return await listOps(shell, options, config, containerName, isRunning);
34
+ }
35
+ case 'add': {
36
+ if (!options.playerName) {
37
+ log.error('Player name is required for add');
38
+ log.info('Usage: mcctl op <server> add <player>');
39
+ return 1;
40
+ }
41
+ return await addOp(shell, options, config, containerName, isRunning);
42
+ }
43
+ case 'remove': {
44
+ if (!options.playerName) {
45
+ log.error('Player name is required for remove');
46
+ log.info('Usage: mcctl op <server> remove <player>');
47
+ return 1;
48
+ }
49
+ return await removeOp(shell, options, config, containerName, isRunning);
50
+ }
51
+ default:
52
+ log.error(`Unknown action: ${options.subCommand}`);
53
+ log.info('Valid actions: add, remove, list');
54
+ return 1;
55
+ }
56
+ }
57
+ /**
58
+ * List current operators
59
+ */
60
+ async function listOps(shell, options, config, containerName, isRunning) {
61
+ // Get OPs from config.env
62
+ const configOps = config['OPS'] ? config['OPS'].split(',').map((s) => s.trim()).filter(Boolean) : [];
63
+ if (options.json) {
64
+ console.log(JSON.stringify({
65
+ server: options.serverName,
66
+ running: isRunning,
67
+ operators: configOps,
68
+ source: 'config.env',
69
+ }));
70
+ }
71
+ else {
72
+ console.log(colors.bold(`\nOperators for ${options.serverName}:\n`));
73
+ if (configOps.length === 0) {
74
+ console.log(' (none)');
75
+ }
76
+ else {
77
+ for (const op of configOps) {
78
+ console.log(` ${colors.cyan(op)}`);
79
+ }
80
+ }
81
+ console.log('');
82
+ if (!isRunning) {
83
+ log.warn('Server is not running. Showing operators from config.env');
84
+ }
85
+ }
86
+ return 0;
87
+ }
88
+ /**
89
+ * Add an operator
90
+ */
91
+ async function addOp(shell, options, config, containerName, isRunning) {
92
+ const playerName = options.playerName;
93
+ // Get current OPs from config
94
+ const currentOps = config['OPS']
95
+ ? config['OPS'].split(',').map((s) => s.trim()).filter(Boolean)
96
+ : [];
97
+ // Check if already an OP
98
+ if (currentOps.some((op) => op.toLowerCase() === playerName.toLowerCase())) {
99
+ if (options.json) {
100
+ console.log(JSON.stringify({
101
+ success: false,
102
+ error: 'already_op',
103
+ player: playerName,
104
+ server: options.serverName,
105
+ }));
106
+ }
107
+ else {
108
+ log.warn(`${playerName} is already an operator`);
109
+ }
110
+ return 0;
111
+ }
112
+ let rconSuccess = false;
113
+ let rconMessage = '';
114
+ // Execute RCON if server is running
115
+ if (isRunning) {
116
+ const result = await execRconWithOutput(containerName, ['op', playerName]);
117
+ rconSuccess = result.code === 0;
118
+ rconMessage = result.output.trim();
119
+ }
120
+ // Update config.env
121
+ const newOps = [...currentOps, playerName].join(',');
122
+ const configSuccess = shell.writeConfigValue(options.serverName, 'OPS', newOps);
123
+ if (options.json) {
124
+ console.log(JSON.stringify({
125
+ success: true,
126
+ player: playerName,
127
+ server: options.serverName,
128
+ rcon: isRunning ? { success: rconSuccess, message: rconMessage } : null,
129
+ config: { success: configSuccess },
130
+ running: isRunning,
131
+ }));
132
+ }
133
+ else {
134
+ if (isRunning && rconSuccess) {
135
+ console.log(colors.green(`✓ ${playerName} is now an operator (applied immediately)`));
136
+ }
137
+ else if (isRunning && !rconSuccess) {
138
+ console.log(colors.yellow(`⚠ RCON failed: ${rconMessage}`));
139
+ if (configSuccess) {
140
+ console.log(colors.green(`✓ Config updated. Will apply on server restart.`));
141
+ }
142
+ }
143
+ else {
144
+ console.log(colors.yellow(`⚠ Server is not running.`));
145
+ if (configSuccess) {
146
+ console.log(colors.green(`✓ Config updated. Changes will apply on next start.`));
147
+ }
148
+ }
149
+ }
150
+ return 0;
151
+ }
152
+ /**
153
+ * Remove an operator
154
+ */
155
+ async function removeOp(shell, options, config, containerName, isRunning) {
156
+ const playerName = options.playerName;
157
+ // Get current OPs from config
158
+ const currentOps = config['OPS']
159
+ ? config['OPS'].split(',').map((s) => s.trim()).filter(Boolean)
160
+ : [];
161
+ // Check if is an OP
162
+ const opIndex = currentOps.findIndex((op) => op.toLowerCase() === playerName.toLowerCase());
163
+ if (opIndex === -1) {
164
+ if (options.json) {
165
+ console.log(JSON.stringify({
166
+ success: false,
167
+ error: 'not_an_op',
168
+ player: playerName,
169
+ server: options.serverName,
170
+ }));
171
+ }
172
+ else {
173
+ log.warn(`${playerName} is not an operator`);
174
+ }
175
+ return 0;
176
+ }
177
+ let rconSuccess = false;
178
+ let rconMessage = '';
179
+ // Execute RCON if server is running
180
+ if (isRunning) {
181
+ const result = await execRconWithOutput(containerName, ['deop', playerName]);
182
+ rconSuccess = result.code === 0;
183
+ rconMessage = result.output.trim();
184
+ }
185
+ // Update config.env
186
+ currentOps.splice(opIndex, 1);
187
+ const newOps = currentOps.join(',');
188
+ const configSuccess = newOps
189
+ ? shell.writeConfigValue(options.serverName, 'OPS', newOps)
190
+ : shell.writeConfigValue(options.serverName, 'OPS', '');
191
+ if (options.json) {
192
+ console.log(JSON.stringify({
193
+ success: true,
194
+ player: playerName,
195
+ server: options.serverName,
196
+ rcon: isRunning ? { success: rconSuccess, message: rconMessage } : null,
197
+ config: { success: configSuccess },
198
+ running: isRunning,
199
+ }));
200
+ }
201
+ else {
202
+ if (isRunning && rconSuccess) {
203
+ console.log(colors.green(`✓ ${playerName} is no longer an operator (applied immediately)`));
204
+ }
205
+ else if (isRunning && !rconSuccess) {
206
+ console.log(colors.yellow(`⚠ RCON failed: ${rconMessage}`));
207
+ if (configSuccess) {
208
+ console.log(colors.green(`✓ Config updated. Will apply on server restart.`));
209
+ }
210
+ }
211
+ else {
212
+ console.log(colors.yellow(`⚠ Server is not running.`));
213
+ if (configSuccess) {
214
+ console.log(colors.green(`✓ Config updated. Changes will apply on next start.`));
215
+ }
216
+ }
217
+ }
218
+ return 0;
219
+ }
220
+ //# sourceMappingURL=op.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"op.js","sourceRoot":"","sources":["../../src/commands/op.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface PlayerOnlineCommandOptions {
2
+ root?: string;
3
+ serverName?: string;
4
+ all?: boolean;
5
+ json?: boolean;
6
+ }
7
+ /**
8
+ * Show online players
9
+ */
10
+ export declare function playerOnlineCommand(options: PlayerOnlineCommandOptions): Promise<number>;
11
+ //# sourceMappingURL=player-online.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-online.d.ts","sourceRoot":"","sources":["../../src/commands/player-online.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAeD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAmE9F"}
@@ -0,0 +1,151 @@
1
+ import { Paths, log, colors, getRunningMcContainers } from '@minecraft-docker/shared';
2
+ import { ShellExecutor } from '../lib/shell.js';
3
+ import { isContainerRunning, execRconWithOutput, getContainerName } from '../lib/rcon.js';
4
+ /**
5
+ * Show online players
6
+ */
7
+ export async function playerOnlineCommand(options) {
8
+ const paths = new Paths(options.root);
9
+ if (!paths.isInitialized()) {
10
+ log.error('Platform not initialized. Run: mcctl init');
11
+ return 1;
12
+ }
13
+ if (options.all) {
14
+ return await listAllOnlinePlayers(paths, options);
15
+ }
16
+ if (!options.serverName) {
17
+ log.error('Server name is required (or use --all for all servers)');
18
+ log.info('Usage: mcctl player online <server>');
19
+ log.info(' mcctl player online --all');
20
+ return 1;
21
+ }
22
+ const shell = new ShellExecutor(paths);
23
+ const config = shell.readConfig(options.serverName);
24
+ if (config === null) {
25
+ log.error(`Server '${options.serverName}' not found`);
26
+ return 1;
27
+ }
28
+ const containerName = getContainerName(options.serverName);
29
+ const isRunning = await isContainerRunning(containerName);
30
+ if (!isRunning) {
31
+ if (options.json) {
32
+ console.log(JSON.stringify({
33
+ server: options.serverName,
34
+ running: false,
35
+ players: [],
36
+ playerCount: 0,
37
+ }));
38
+ }
39
+ else {
40
+ log.warn(`Server '${options.serverName}' is not running`);
41
+ }
42
+ return 0;
43
+ }
44
+ const serverInfo = await getServerOnlineInfo(containerName, options.serverName);
45
+ if (options.json) {
46
+ console.log(JSON.stringify(serverInfo));
47
+ }
48
+ else {
49
+ console.log(colors.bold(`\nOnline Players for ${options.serverName}:\n`));
50
+ console.log(` Status: ${colors.green('Running')} (${serverInfo.playerCount}/${serverInfo.maxPlayers})`);
51
+ console.log('');
52
+ if (serverInfo.players.length === 0) {
53
+ console.log(' No players online');
54
+ }
55
+ else {
56
+ for (const player of serverInfo.players) {
57
+ console.log(` ${colors.cyan(player)}`);
58
+ }
59
+ }
60
+ console.log('');
61
+ }
62
+ return 0;
63
+ }
64
+ /**
65
+ * List online players from all running servers
66
+ */
67
+ async function listAllOnlinePlayers(paths, options) {
68
+ const containers = getRunningMcContainers();
69
+ if (containers.length === 0) {
70
+ if (options.json) {
71
+ console.log(JSON.stringify({
72
+ servers: [],
73
+ totalPlayers: 0,
74
+ }));
75
+ }
76
+ else {
77
+ log.warn('No running servers found');
78
+ }
79
+ return 0;
80
+ }
81
+ const serverInfos = [];
82
+ const allPlayers = [];
83
+ for (const container of containers) {
84
+ const serverName = container.replace(/^mc-/, '');
85
+ const info = await getServerOnlineInfo(container, serverName);
86
+ serverInfos.push(info);
87
+ for (const player of info.players) {
88
+ allPlayers.push({ name: player, server: serverName });
89
+ }
90
+ }
91
+ if (options.json) {
92
+ console.log(JSON.stringify({
93
+ servers: serverInfos,
94
+ totalPlayers: allPlayers.length,
95
+ players: allPlayers,
96
+ }));
97
+ }
98
+ else {
99
+ console.log(colors.bold('\nOnline Players (All Servers):\n'));
100
+ if (allPlayers.length === 0) {
101
+ console.log(' No players online on any server');
102
+ }
103
+ else {
104
+ console.log(` Total: ${colors.cyan(String(allPlayers.length))} players\n`);
105
+ for (const info of serverInfos) {
106
+ if (info.players.length > 0) {
107
+ console.log(` ${colors.bold(info.server)} (${info.playerCount}/${info.maxPlayers}):`);
108
+ for (const player of info.players) {
109
+ console.log(` ${colors.cyan(player)}`);
110
+ }
111
+ console.log('');
112
+ }
113
+ }
114
+ }
115
+ }
116
+ return 0;
117
+ }
118
+ /**
119
+ * Get online player information for a server
120
+ */
121
+ async function getServerOnlineInfo(containerName, serverName) {
122
+ const result = await execRconWithOutput(containerName, ['list']);
123
+ let players = [];
124
+ let playerCount = 0;
125
+ let maxPlayers = 20;
126
+ if (result.code === 0) {
127
+ // Parse "There are X of a max of Y players online: player1, player2"
128
+ // or "There are X/Y players online: player1, player2"
129
+ const countMatch = result.output.match(/There are (\d+)(?:\s+of a max of\s+|\/)(\d+) players? online/i);
130
+ if (countMatch && countMatch[1] && countMatch[2]) {
131
+ playerCount = parseInt(countMatch[1], 10);
132
+ maxPlayers = parseInt(countMatch[2], 10);
133
+ }
134
+ // Extract player names after the colon
135
+ const playersMatch = result.output.match(/:\s*(.+)$/);
136
+ if (playersMatch && playersMatch[1]) {
137
+ players = playersMatch[1]
138
+ .split(',')
139
+ .map((s) => s.trim())
140
+ .filter(Boolean);
141
+ }
142
+ }
143
+ return {
144
+ server: serverName,
145
+ running: true,
146
+ players,
147
+ playerCount,
148
+ maxPlayers,
149
+ };
150
+ }
151
+ //# sourceMappingURL=player-online.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-online.js","sourceRoot":"","sources":["../../src/commands/player-online.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Unified player management command
3
+ * Interactive mode for player management actions
4
+ */
5
+ export interface PlayerCommandOptions {
6
+ root?: string;
7
+ subCommand?: 'info' | 'cache';
8
+ serverName?: string;
9
+ playerName?: string;
10
+ cacheAction?: 'clear' | 'stats';
11
+ offline?: boolean;
12
+ json?: boolean;
13
+ }
14
+ /**
15
+ * Execute player management command
16
+ */
17
+ export declare function playerCommand(options: PlayerCommandOptions): Promise<number>;
18
+ //# sourceMappingURL=player.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../src/commands/player.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlF"}