@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
package/dist/index.js ADDED
@@ -0,0 +1,609 @@
1
+ #!/usr/bin/env node
2
+ import { Paths, log, colors } from '@minecraft-docker/shared';
3
+ import { initCommand, statusCommand, createCommand, deleteCommand, worldCommand, backupCommand, execCommand, configCommand, opCommand, serverBackupCommand, serverRestoreCommand, whitelistCommand, banCommand, kickCommand, playerOnlineCommand, playerCommand, migrateCommand, } from './commands/index.js';
4
+ import { ShellExecutor } from './lib/shell.js';
5
+ const VERSION = '0.1.0';
6
+ /**
7
+ * Print usage information
8
+ */
9
+ function printUsage() {
10
+ console.log(`
11
+ ${colors.bold('mcctl')} - Minecraft Server Management CLI
12
+
13
+ ${colors.cyan('Usage:')}
14
+ mcctl <command> [options]
15
+
16
+ ${colors.cyan('Commands:')}
17
+ ${colors.bold('init')} Initialize platform (~/.minecraft-servers)
18
+ ${colors.bold('up')} Start all infrastructure (router + servers)
19
+ ${colors.bold('down')} Stop all infrastructure
20
+ ${colors.bold('router')} <start|stop|restart> Manage mc-router only
21
+ ${colors.bold('create')} <name> [options] Create a new server
22
+ ${colors.bold('delete')} <name> [--force] Delete a server (preserves world data)
23
+ ${colors.bold('status')} [options] Show status of all servers
24
+ ${colors.bold('status')} <server> Show detailed status of a server
25
+ ${colors.bold('status')} router Show mc-router status with routes
26
+ ${colors.bold('start')} <server> [--all] Start a server (--all for all servers)
27
+ ${colors.bold('stop')} <server> [--all] Stop a server (--all for all servers)
28
+ ${colors.bold('logs')} <server> [lines] View server logs
29
+ ${colors.bold('console')} <server> Connect to RCON console
30
+ ${colors.bold('exec')} <server> <cmd...> Execute RCON command
31
+ ${colors.bold('config')} <server> [key] [val] View/set server config
32
+
33
+ ${colors.cyan('Config Shortcuts:')}
34
+ --cheats, --no-cheats Enable/disable cheats (ALLOW_CHEATS)
35
+ --pvp, --no-pvp Enable/disable PvP
36
+ --command-block Enable/disable command blocks
37
+
38
+ ${colors.cyan('Player Management:')}
39
+ ${colors.bold('op')} <server> <action> [player] Manage operators
40
+ ${colors.bold('whitelist')} <server> <action> [player] Manage whitelist
41
+ ${colors.bold('ban')} <server> <action> [player/ip] Manage bans
42
+ ${colors.bold('kick')} <server> <player> [reason] Kick player
43
+
44
+ ${colors.cyan('Operator Actions:')}
45
+ list List current operators
46
+ add <player> Add operator (RCON + config)
47
+ remove <player> Remove operator
48
+
49
+ ${colors.cyan('Whitelist Actions:')}
50
+ list Show whitelisted players
51
+ add <player> Add to whitelist
52
+ remove <player> Remove from whitelist
53
+ on / off Enable/disable whitelist
54
+ status Show whitelist status
55
+
56
+ ${colors.cyan('Ban Actions:')}
57
+ list Show banned players
58
+ add <player> [reason] Ban player
59
+ remove <player> Unban player
60
+ ip list Show banned IPs
61
+ ip add <ip> [reason] Ban IP
62
+ ip remove <ip> Unban IP
63
+
64
+ ${colors.cyan('World Management:')}
65
+ ${colors.bold('world list')} [--json] List worlds and lock status
66
+ ${colors.bold('world assign')} <world> <srv> Lock world to server
67
+ ${colors.bold('world release')} <world> Release world lock
68
+
69
+ ${colors.cyan('Player Management (Interactive):')}
70
+ ${colors.bold('player')} Interactive mode: server → player → action
71
+ ${colors.bold('player')} <server> Interactive mode for specific server
72
+ ${colors.bold('player info')} <name> Player info lookup (UUID, skin)
73
+ ${colors.bold('player info')} <name> --offline Get offline player info
74
+ ${colors.bold('player online')} <server> List online players
75
+ ${colors.bold('player online')} --all List online players on all servers
76
+ ${colors.bold('player cache')} clear Clear player info cache
77
+ ${colors.bold('player cache')} stats Show cache statistics
78
+
79
+ ${colors.cyan('Player Lookup (Legacy):')}
80
+ ${colors.bold('player lookup')} <name> Look up player info
81
+ ${colors.bold('player uuid')} <name> Get player UUID
82
+
83
+ ${colors.cyan('Server Backup/Restore:')}
84
+ ${colors.bold('server-backup')} <server> [-m msg] Backup server configuration
85
+ ${colors.bold('server-backup')} <server> --list List all backups
86
+ ${colors.bold('server-restore')} <server> [id] Restore from backup
87
+
88
+ ${colors.cyan('World Backup (requires .env config):')}
89
+ ${colors.bold('backup push')} [--message] Backup worlds to GitHub
90
+ ${colors.bold('backup status')} Show backup configuration
91
+ ${colors.bold('backup history')} [--json] Show backup history
92
+ ${colors.bold('backup restore')} <commit> Restore from commit
93
+
94
+ ${colors.cyan('Migration:')}
95
+ ${colors.bold('migrate worlds')} Migrate worlds to shared directory
96
+ ${colors.bold('migrate status')} Check migration status
97
+ ${colors.bold('migrate worlds')} --all Migrate all servers
98
+ ${colors.bold('migrate worlds')} --dry-run Preview changes without applying
99
+
100
+ ${colors.cyan('Create Options:')}
101
+ -t, --type TYPE Server type: PAPER, VANILLA, FORGE, FABRIC
102
+ -v, --version VERSION Minecraft version (e.g., 1.21.1)
103
+ -s, --seed NUMBER World seed
104
+ -u, --world-url URL Download world from ZIP URL
105
+ -w, --world NAME Use existing world (symlink)
106
+ --no-start Create without starting
107
+
108
+ ${colors.cyan('Status Options:')}
109
+ --detail, -d Show detailed info (memory, CPU, players)
110
+ --watch, -W Real-time monitoring mode
111
+ --interval <sec> Watch refresh interval (default: 5)
112
+
113
+ ${colors.cyan('Global Options:')}
114
+ --root <path> Custom data directory
115
+ --sudo-password <pwd> Sudo password for automation (or use MCCTL_SUDO_PASSWORD env)
116
+ --json Output in JSON format
117
+ -h, --help Show this help
118
+ --version Show version
119
+
120
+ ${colors.cyan('Examples:')}
121
+ mcctl init
122
+ mcctl up # Start everything
123
+ mcctl down # Stop everything
124
+ mcctl router start # Start mc-router only
125
+ mcctl router restart # Restart mc-router
126
+ mcctl start --all # Start all MC servers
127
+ mcctl stop --all # Stop all MC servers
128
+ mcctl create myserver -t FORGE -v 1.20.4
129
+ mcctl status --json
130
+ mcctl status --detail # Show detailed info
131
+ mcctl status --watch # Real-time monitoring
132
+ mcctl status --watch --interval 2 # Watch with 2s refresh
133
+ mcctl status myserver # Single server status
134
+ mcctl status router # mc-router status
135
+ mcctl logs myserver -f
136
+ mcctl exec myserver say "Hello!" # Execute RCON command
137
+ mcctl exec myserver list # List online players
138
+ mcctl config myserver # View all config
139
+ mcctl config myserver --cheats # Enable cheats
140
+ mcctl config myserver MOTD "Welcome!" # Set MOTD
141
+ mcctl op myserver list # List operators
142
+ mcctl op myserver add Notch # Add operator
143
+ mcctl whitelist myserver add Steve # Add to whitelist
144
+ mcctl ban myserver add Griefer # Ban player
145
+ mcctl kick myserver AFK "Too long" # Kick player
146
+ mcctl player online myserver # Show online players
147
+ mcctl server-backup myserver # Backup server config
148
+ mcctl server-restore myserver # Restore from backup
149
+ `);
150
+ }
151
+ /**
152
+ * Parse command line arguments
153
+ */
154
+ function parseArgs(args) {
155
+ const result = {
156
+ command: '',
157
+ subCommand: undefined,
158
+ positional: [],
159
+ flags: {},
160
+ };
161
+ let i = 0;
162
+ // Skip node and script path
163
+ while (i < args.length) {
164
+ const arg = args[i];
165
+ if (arg.startsWith('--')) {
166
+ const key = arg.slice(2);
167
+ const nextArg = args[i + 1];
168
+ // Boolean-only flags (never take a value)
169
+ const booleanOnlyFlags = ['all', 'json', 'help', 'version', 'force', 'yes', 'follow', 'detail', 'watch', 'offline', 'no-start', 'list', 'dry-run'];
170
+ if (booleanOnlyFlags.includes(key)) {
171
+ result.flags[key] = true;
172
+ i++;
173
+ }
174
+ else if (nextArg && !nextArg.startsWith('-')) {
175
+ result.flags[key] = nextArg;
176
+ i += 2;
177
+ }
178
+ else {
179
+ result.flags[key] = true;
180
+ i++;
181
+ }
182
+ }
183
+ else if (arg.startsWith('-') && arg.length === 2) {
184
+ const key = arg.slice(1);
185
+ const nextArg = args[i + 1];
186
+ // Map short flags to long names
187
+ const flagMap = {
188
+ h: 'help',
189
+ t: 'type',
190
+ v: 'version',
191
+ s: 'seed',
192
+ u: 'world-url',
193
+ w: 'world',
194
+ f: 'follow',
195
+ n: 'lines',
196
+ m: 'message',
197
+ y: 'yes',
198
+ a: 'all',
199
+ d: 'detail',
200
+ W: 'watch',
201
+ };
202
+ const longKey = flagMap[key] ?? key;
203
+ // Boolean-only short flags
204
+ const booleanOnlyShortFlags = ['h', 'f', 'y', 'a', 'd', 'W'];
205
+ if (booleanOnlyShortFlags.includes(key)) {
206
+ result.flags[longKey] = true;
207
+ i++;
208
+ }
209
+ else if (nextArg && !nextArg.startsWith('-')) {
210
+ result.flags[longKey] = nextArg;
211
+ i += 2;
212
+ }
213
+ else {
214
+ result.flags[longKey] = true;
215
+ i++;
216
+ }
217
+ }
218
+ else {
219
+ if (!result.command) {
220
+ result.command = arg;
221
+ }
222
+ else if (!result.subCommand && ['world', 'player', 'backup', 'op', 'whitelist', 'ban', 'router', 'migrate'].includes(result.command)) {
223
+ result.subCommand = arg;
224
+ }
225
+ else {
226
+ result.positional.push(arg);
227
+ }
228
+ i++;
229
+ }
230
+ }
231
+ return result;
232
+ }
233
+ /**
234
+ * Main entry point
235
+ */
236
+ async function main() {
237
+ const args = process.argv.slice(2);
238
+ if (args.length === 0) {
239
+ printUsage();
240
+ process.exit(0);
241
+ }
242
+ const parsed = parseArgs(args);
243
+ const { command, subCommand, positional, flags } = parsed;
244
+ // Handle global flags
245
+ if (flags['help'] || command === 'help') {
246
+ printUsage();
247
+ process.exit(0);
248
+ }
249
+ if (flags['version'] || command === '--version') {
250
+ console.log(`mcctl version ${VERSION}`);
251
+ process.exit(0);
252
+ }
253
+ const rootDir = flags['root'];
254
+ const sudoPassword = flags['sudo-password'];
255
+ const paths = new Paths(rootDir);
256
+ const shell = new ShellExecutor({ paths, sudoPassword });
257
+ let exitCode = 0;
258
+ try {
259
+ switch (command) {
260
+ case 'init':
261
+ exitCode = await initCommand({
262
+ root: rootDir,
263
+ skipValidation: flags['skip-validation'] === true,
264
+ skipDocker: flags['skip-docker'] === true,
265
+ });
266
+ break;
267
+ case 'status':
268
+ exitCode = await statusCommand({
269
+ json: flags['json'] === true,
270
+ root: rootDir,
271
+ detail: flags['detail'] === true,
272
+ watch: flags['watch'] === true,
273
+ interval: flags['interval'] ? parseInt(flags['interval'], 10) : undefined,
274
+ serverName: positional[0],
275
+ });
276
+ break;
277
+ case 'up': {
278
+ if (!paths.isInitialized()) {
279
+ log.error('Platform not initialized. Run: mcctl init');
280
+ exitCode = 1;
281
+ break;
282
+ }
283
+ exitCode = await shell.up();
284
+ break;
285
+ }
286
+ case 'down': {
287
+ if (!paths.isInitialized()) {
288
+ log.error('Platform not initialized. Run: mcctl init');
289
+ exitCode = 1;
290
+ break;
291
+ }
292
+ exitCode = await shell.down();
293
+ break;
294
+ }
295
+ case 'create': {
296
+ // Use new interactive create command
297
+ // If no name provided, will run in interactive mode
298
+ exitCode = await createCommand({
299
+ root: rootDir,
300
+ name: positional[0],
301
+ type: flags['type'],
302
+ version: flags['version'],
303
+ seed: flags['seed'],
304
+ worldUrl: flags['world-url'],
305
+ worldName: flags['world'],
306
+ noStart: flags['no-start'] === true,
307
+ sudoPassword,
308
+ });
309
+ break;
310
+ }
311
+ case 'delete': {
312
+ // Use new interactive delete command
313
+ // If no name provided, will run in interactive mode with server selection
314
+ exitCode = await deleteCommand({
315
+ root: rootDir,
316
+ name: positional[0],
317
+ force: flags['force'] === true || flags['yes'] === true,
318
+ sudoPassword,
319
+ });
320
+ break;
321
+ }
322
+ case 'start': {
323
+ if (!paths.isInitialized()) {
324
+ log.error('Platform not initialized. Run: mcctl init');
325
+ exitCode = 1;
326
+ break;
327
+ }
328
+ if (flags['all']) {
329
+ exitCode = await shell.startAll();
330
+ }
331
+ else {
332
+ const mcctlArgs = [command, ...positional];
333
+ if (flags['json'])
334
+ mcctlArgs.push('--json');
335
+ exitCode = await shell.mcctl(mcctlArgs);
336
+ }
337
+ break;
338
+ }
339
+ case 'stop': {
340
+ if (!paths.isInitialized()) {
341
+ log.error('Platform not initialized. Run: mcctl init');
342
+ exitCode = 1;
343
+ break;
344
+ }
345
+ if (flags['all']) {
346
+ exitCode = await shell.stopAll();
347
+ }
348
+ else {
349
+ const mcctlArgs = [command, ...positional];
350
+ if (flags['json'])
351
+ mcctlArgs.push('--json');
352
+ exitCode = await shell.mcctl(mcctlArgs);
353
+ }
354
+ break;
355
+ }
356
+ case 'console':
357
+ case 'logs': {
358
+ if (!paths.isInitialized()) {
359
+ log.error('Platform not initialized. Run: mcctl init');
360
+ exitCode = 1;
361
+ break;
362
+ }
363
+ // Pass through to mcctl.sh
364
+ const mcctlArgs = [command, ...positional];
365
+ if (flags['json'])
366
+ mcctlArgs.push('--json');
367
+ if (flags['follow'])
368
+ mcctlArgs.push('-f');
369
+ if (flags['lines'])
370
+ mcctlArgs.push('-n', flags['lines']);
371
+ exitCode = await shell.mcctl(mcctlArgs);
372
+ break;
373
+ }
374
+ case 'exec': {
375
+ exitCode = await execCommand({
376
+ root: rootDir,
377
+ serverName: positional[0],
378
+ command: positional.slice(1),
379
+ });
380
+ break;
381
+ }
382
+ case 'config': {
383
+ exitCode = await configCommand({
384
+ root: rootDir,
385
+ serverName: positional[0],
386
+ key: positional[1],
387
+ value: positional[2],
388
+ json: flags['json'] === true,
389
+ cheats: flags['cheats'] === true,
390
+ noCheats: flags['no-cheats'] === true,
391
+ pvp: flags['pvp'] === true,
392
+ noPvp: flags['no-pvp'] === true,
393
+ commandBlock: flags['command-block'] === true,
394
+ noCommandBlock: flags['no-command-block'] === true,
395
+ });
396
+ break;
397
+ }
398
+ case 'world': {
399
+ // Use new interactive world command
400
+ exitCode = await worldCommand({
401
+ root: rootDir,
402
+ subCommand: subCommand,
403
+ worldName: positional[0],
404
+ serverName: positional[1],
405
+ json: flags['json'] === true,
406
+ force: flags['force'] === true,
407
+ });
408
+ break;
409
+ }
410
+ case 'player': {
411
+ // Handle player subcommands
412
+ if (subCommand === 'online') {
413
+ // player online <server> - List online players
414
+ exitCode = await playerOnlineCommand({
415
+ root: rootDir,
416
+ serverName: positional[0],
417
+ all: flags['all'] === true,
418
+ json: flags['json'] === true,
419
+ });
420
+ }
421
+ else if (subCommand === 'info') {
422
+ // player info <name> - Player info lookup
423
+ exitCode = await playerCommand({
424
+ root: rootDir,
425
+ subCommand: 'info',
426
+ playerName: positional[0],
427
+ offline: flags['offline'] === true,
428
+ json: flags['json'] === true,
429
+ });
430
+ }
431
+ else if (subCommand === 'cache') {
432
+ // player cache <clear|stats> - Cache management
433
+ exitCode = await playerCommand({
434
+ root: rootDir,
435
+ subCommand: 'cache',
436
+ cacheAction: positional[0],
437
+ json: flags['json'] === true,
438
+ });
439
+ }
440
+ else if (subCommand === 'lookup' || subCommand === 'uuid') {
441
+ // Legacy lookup commands via shell.player
442
+ const playerArgs = [subCommand, ...positional];
443
+ if (flags['json'])
444
+ playerArgs.push('--json');
445
+ if (flags['offline'])
446
+ playerArgs.push('--offline');
447
+ exitCode = await shell.player(playerArgs);
448
+ }
449
+ else if (!subCommand || subCommand) {
450
+ // Interactive mode: player [server]
451
+ // If subCommand is provided but not a known command, treat it as server name
452
+ exitCode = await playerCommand({
453
+ root: rootDir,
454
+ serverName: subCommand || positional[0],
455
+ json: flags['json'] === true,
456
+ });
457
+ }
458
+ break;
459
+ }
460
+ case 'backup': {
461
+ // Use new interactive backup command
462
+ exitCode = await backupCommand({
463
+ root: rootDir,
464
+ subCommand: subCommand,
465
+ message: flags['message'],
466
+ commitHash: positional[0],
467
+ json: flags['json'] === true,
468
+ auto: flags['auto'] === true,
469
+ });
470
+ break;
471
+ }
472
+ case 'op': {
473
+ // op command: op <server> <action> [player]
474
+ // parseArgs treats second arg as subCommand, so:
475
+ // subCommand = server name, positional[0] = action, positional[1] = player
476
+ exitCode = await opCommand({
477
+ root: rootDir,
478
+ serverName: subCommand,
479
+ subCommand: positional[0],
480
+ playerName: positional[1],
481
+ json: flags['json'] === true,
482
+ });
483
+ break;
484
+ }
485
+ case 'server-backup': {
486
+ exitCode = await serverBackupCommand({
487
+ root: rootDir,
488
+ serverName: positional[0],
489
+ message: flags['message'],
490
+ list: flags['list'] === true,
491
+ json: flags['json'] === true,
492
+ });
493
+ break;
494
+ }
495
+ case 'server-restore': {
496
+ exitCode = await serverRestoreCommand({
497
+ root: rootDir,
498
+ serverName: positional[0],
499
+ backupId: positional[1],
500
+ force: flags['force'] === true,
501
+ dryRun: flags['dry-run'] === true,
502
+ json: flags['json'] === true,
503
+ });
504
+ break;
505
+ }
506
+ case 'whitelist': {
507
+ // whitelist command: whitelist <server> <action> [player]
508
+ // subCommand = server name, positional[0] = action, positional[1] = player
509
+ exitCode = await whitelistCommand({
510
+ root: rootDir,
511
+ serverName: subCommand,
512
+ subCommand: positional[0],
513
+ playerName: positional[1],
514
+ json: flags['json'] === true,
515
+ });
516
+ break;
517
+ }
518
+ case 'ban': {
519
+ // ban command: ban <server> <action> [target] [reason...]
520
+ // subCommand = server name, positional[0] = action, positional[1] = target
521
+ const action = positional[0];
522
+ let ipAction;
523
+ let target;
524
+ let reason;
525
+ if (action === 'ip') {
526
+ // ban <server> ip <list|add|remove> [ip] [reason]
527
+ ipAction = positional[1];
528
+ target = positional[2];
529
+ reason = positional.slice(3).join(' ') || undefined;
530
+ }
531
+ else {
532
+ target = positional[1];
533
+ reason = positional.slice(2).join(' ') || undefined;
534
+ }
535
+ exitCode = await banCommand({
536
+ root: rootDir,
537
+ serverName: subCommand,
538
+ subCommand: action,
539
+ target,
540
+ reason,
541
+ ipAction,
542
+ json: flags['json'] === true,
543
+ });
544
+ break;
545
+ }
546
+ case 'kick': {
547
+ // kick command: kick <server> <player> [reason...]
548
+ const serverName = positional[0];
549
+ const playerName = positional[1];
550
+ const reason = positional.slice(2).join(' ') || undefined;
551
+ exitCode = await kickCommand({
552
+ root: rootDir,
553
+ serverName,
554
+ playerName,
555
+ reason,
556
+ json: flags['json'] === true,
557
+ });
558
+ break;
559
+ }
560
+ case 'router': {
561
+ if (!paths.isInitialized()) {
562
+ log.error('Platform not initialized. Run: mcctl init');
563
+ exitCode = 1;
564
+ break;
565
+ }
566
+ switch (subCommand) {
567
+ case 'start':
568
+ exitCode = await shell.routerStart();
569
+ break;
570
+ case 'stop':
571
+ exitCode = await shell.routerStop();
572
+ break;
573
+ case 'restart':
574
+ exitCode = await shell.routerRestart();
575
+ break;
576
+ default:
577
+ log.error('Usage: mcctl router <start|stop|restart>');
578
+ exitCode = 1;
579
+ }
580
+ break;
581
+ }
582
+ case 'migrate': {
583
+ // migrate command: migrate [worlds|status] [options]
584
+ exitCode = await migrateCommand({
585
+ root: rootDir,
586
+ subCommand: subCommand,
587
+ serverName: flags['server'],
588
+ all: flags['all'] === true,
589
+ dryRun: flags['dry-run'] === true,
590
+ backup: flags['backup'] === true,
591
+ force: flags['force'] === true,
592
+ json: flags['json'] === true,
593
+ });
594
+ break;
595
+ }
596
+ default:
597
+ log.error(`Unknown command: ${command}`);
598
+ printUsage();
599
+ exitCode = 1;
600
+ }
601
+ }
602
+ catch (err) {
603
+ log.error(`Unexpected error: ${err instanceof Error ? err.message : String(err)}`);
604
+ exitCode = 1;
605
+ }
606
+ process.exit(exitCode);
607
+ }
608
+ main();
609
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ServerName, ServerType, McVersion, Memory, WorldOptions, Server, World, type IPromptPort, type TextPromptOptions, type SelectPromptOptions, type ConfirmPromptOptions, type Spinner, type WorldWithServerStatus } from '@minecraft-docker/shared';
2
+ /**
3
+ * ClackPromptAdapter
4
+ * Implements IPromptPort using @clack/prompts
5
+ */
6
+ export declare class ClackPromptAdapter implements IPromptPort {
7
+ intro(message: string): void;
8
+ outro(message: string): void;
9
+ text(options: TextPromptOptions): Promise<string>;
10
+ select<T>(options: SelectPromptOptions<T>): Promise<T>;
11
+ confirm(options: ConfirmPromptOptions): Promise<boolean>;
12
+ promptServerName(): Promise<ServerName>;
13
+ promptServerType(): Promise<ServerType>;
14
+ promptMcVersion(serverType: ServerType): Promise<McVersion>;
15
+ promptMemory(): Promise<Memory>;
16
+ promptWorldOptions(): Promise<WorldOptions>;
17
+ promptServerSelection(servers: Server[]): Promise<Server>;
18
+ promptWorldSelection(worlds: World[]): Promise<World>;
19
+ promptExistingWorldSelection(worlds: WorldWithServerStatus[]): Promise<World | null>;
20
+ spinner(): Spinner;
21
+ success(message: string): void;
22
+ error(message: string): void;
23
+ warn(message: string): void;
24
+ info(message: string): void;
25
+ note(message: string, title?: string): void;
26
+ isCancel(value: unknown): boolean;
27
+ handleCancel(): never;
28
+ }
29
+ //# sourceMappingURL=ClackPromptAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClackPromptAdapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/ClackPromptAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IAKpD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAItB,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAejD,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAsBtD,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBxD,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAqBvC,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAoBvC,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IA4C3D,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IA2C/B,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC;IA8E3C,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBzD,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAsBrD,4BAA4B,CAChC,MAAM,EAAE,qBAAqB,EAAE,GAC9B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA6IxB,OAAO,IAAI,OAAO;IASlB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ3C,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIjC,YAAY,IAAI,KAAK;CAItB"}