@minecraft-docker/mcctl 1.6.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.
- package/dist/application/index.d.ts +2 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +5 -0
- package/dist/application/index.js.map +1 -0
- package/dist/commands/backup.d.ts +16 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +182 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/ban.d.ts +14 -0
- package/dist/commands/ban.d.ts.map +1 -0
- package/dist/commands/ban.js +418 -0
- package/dist/commands/ban.js.map +1 -0
- package/dist/commands/config.d.ts +18 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +106 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +22 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +83 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/delete.d.ts +17 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +71 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/exec.d.ts +10 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +29 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/index.d.ts +18 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +18 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +186 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/kick.d.ts +12 -0
- package/dist/commands/kick.d.ts.map +1 -0
- package/dist/commands/kick.js +71 -0
- package/dist/commands/kick.js.map +1 -0
- package/dist/commands/migrate.d.ts +18 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +470 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/op.d.ts +12 -0
- package/dist/commands/op.d.ts.map +1 -0
- package/dist/commands/op.js +220 -0
- package/dist/commands/op.js.map +1 -0
- package/dist/commands/player-online.d.ts +11 -0
- package/dist/commands/player-online.d.ts.map +1 -0
- package/dist/commands/player-online.js +151 -0
- package/dist/commands/player-online.js.map +1 -0
- package/dist/commands/player.d.ts +18 -0
- package/dist/commands/player.d.ts.map +1 -0
- package/dist/commands/player.js +352 -0
- package/dist/commands/player.js.map +1 -0
- package/dist/commands/server-backup.d.ts +36 -0
- package/dist/commands/server-backup.d.ts.map +1 -0
- package/dist/commands/server-backup.js +320 -0
- package/dist/commands/server-backup.js.map +1 -0
- package/dist/commands/server-restore.d.ts +13 -0
- package/dist/commands/server-restore.d.ts.map +1 -0
- package/dist/commands/server-restore.js +294 -0
- package/dist/commands/server-restore.js.map +1 -0
- package/dist/commands/status.d.ts +13 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +325 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/whitelist.d.ts +12 -0
- package/dist/commands/whitelist.d.ts.map +1 -0
- package/dist/commands/whitelist.js +316 -0
- package/dist/commands/whitelist.js.map +1 -0
- package/dist/commands/world.d.ts +16 -0
- package/dist/commands/world.d.ts.map +1 -0
- package/dist/commands/world.js +135 -0
- package/dist/commands/world.js.map +1 -0
- package/dist/domain/index.d.ts +2 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +7 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +609 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts +29 -0
- package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/ClackPromptAdapter.js +419 -0
- package/dist/infrastructure/adapters/ClackPromptAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/index.d.ts +3 -0
- package/dist/infrastructure/adapters/index.d.ts.map +1 -0
- package/dist/infrastructure/adapters/index.js +5 -0
- package/dist/infrastructure/adapters/index.js.map +1 -0
- package/dist/infrastructure/di/container.d.ts +47 -0
- package/dist/infrastructure/di/container.d.ts.map +1 -0
- package/dist/infrastructure/di/container.js +140 -0
- package/dist/infrastructure/di/container.js.map +1 -0
- package/dist/infrastructure/di/index.d.ts +2 -0
- package/dist/infrastructure/di/index.d.ts.map +1 -0
- package/dist/infrastructure/di/index.js +2 -0
- package/dist/infrastructure/di/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +4 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +7 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/lib/mojang-api.d.ts +51 -0
- package/dist/lib/mojang-api.d.ts.map +1 -0
- package/dist/lib/mojang-api.js +136 -0
- package/dist/lib/mojang-api.js.map +1 -0
- package/dist/lib/player-cache.d.ts +79 -0
- package/dist/lib/player-cache.d.ts.map +1 -0
- package/dist/lib/player-cache.js +302 -0
- package/dist/lib/player-cache.js.map +1 -0
- package/dist/lib/player-json.d.ts +69 -0
- package/dist/lib/player-json.d.ts.map +1 -0
- package/dist/lib/player-json.js +96 -0
- package/dist/lib/player-json.js.map +1 -0
- package/dist/lib/prompts/action-select.d.ts +23 -0
- package/dist/lib/prompts/action-select.d.ts.map +1 -0
- package/dist/lib/prompts/action-select.js +124 -0
- package/dist/lib/prompts/action-select.js.map +1 -0
- package/dist/lib/prompts/index.d.ts +7 -0
- package/dist/lib/prompts/index.d.ts.map +1 -0
- package/dist/lib/prompts/index.js +7 -0
- package/dist/lib/prompts/index.js.map +1 -0
- package/dist/lib/prompts/player-select.d.ts +25 -0
- package/dist/lib/prompts/player-select.d.ts.map +1 -0
- package/dist/lib/prompts/player-select.js +122 -0
- package/dist/lib/prompts/player-select.js.map +1 -0
- package/dist/lib/prompts/server-select.d.ts +26 -0
- package/dist/lib/prompts/server-select.d.ts.map +1 -0
- package/dist/lib/prompts/server-select.js +99 -0
- package/dist/lib/prompts/server-select.js.map +1 -0
- package/dist/lib/rcon.d.ts +53 -0
- package/dist/lib/rcon.d.ts.map +1 -0
- package/dist/lib/rcon.js +131 -0
- package/dist/lib/rcon.js.map +1 -0
- package/dist/lib/shell.d.ts +109 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +318 -0
- package/dist/lib/shell.js.map +1 -0
- 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"}
|