@minecraft-docker/mcctl 1.6.0 → 1.6.2

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 (193) 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/console/api.d.ts +19 -0
  18. package/dist/commands/console/api.d.ts.map +1 -0
  19. package/dist/commands/console/api.js +399 -0
  20. package/dist/commands/console/api.js.map +1 -0
  21. package/dist/commands/console/index.d.ts +10 -0
  22. package/dist/commands/console/index.d.ts.map +1 -0
  23. package/dist/commands/console/index.js +12 -0
  24. package/dist/commands/console/index.js.map +1 -0
  25. package/dist/commands/console/init.d.ts +47 -0
  26. package/dist/commands/console/init.d.ts.map +1 -0
  27. package/dist/commands/console/init.js +491 -0
  28. package/dist/commands/console/init.js.map +1 -0
  29. package/dist/commands/console/remove.d.ts +25 -0
  30. package/dist/commands/console/remove.d.ts.map +1 -0
  31. package/dist/commands/console/remove.js +189 -0
  32. package/dist/commands/console/remove.js.map +1 -0
  33. package/dist/commands/console/service.d.ts +40 -0
  34. package/dist/commands/console/service.d.ts.map +1 -0
  35. package/dist/commands/console/service.js +321 -0
  36. package/dist/commands/console/service.js.map +1 -0
  37. package/dist/commands/console/user.d.ts +17 -0
  38. package/dist/commands/console/user.d.ts.map +1 -0
  39. package/dist/commands/console/user.js +431 -0
  40. package/dist/commands/console/user.js.map +1 -0
  41. package/dist/commands/create.d.ts +22 -0
  42. package/dist/commands/create.d.ts.map +1 -0
  43. package/dist/commands/create.js +86 -0
  44. package/dist/commands/create.js.map +1 -0
  45. package/dist/commands/delete.d.ts +17 -0
  46. package/dist/commands/delete.d.ts.map +1 -0
  47. package/dist/commands/delete.js +74 -0
  48. package/dist/commands/delete.js.map +1 -0
  49. package/dist/commands/exec.d.ts +10 -0
  50. package/dist/commands/exec.d.ts.map +1 -0
  51. package/dist/commands/exec.js +29 -0
  52. package/dist/commands/exec.js.map +1 -0
  53. package/dist/commands/index.d.ts +21 -0
  54. package/dist/commands/index.d.ts.map +1 -0
  55. package/dist/commands/index.js +23 -0
  56. package/dist/commands/index.js.map +1 -0
  57. package/dist/commands/init.d.ts +9 -0
  58. package/dist/commands/init.d.ts.map +1 -0
  59. package/dist/commands/init.js +218 -0
  60. package/dist/commands/init.js.map +1 -0
  61. package/dist/commands/kick.d.ts +12 -0
  62. package/dist/commands/kick.d.ts.map +1 -0
  63. package/dist/commands/kick.js +71 -0
  64. package/dist/commands/kick.js.map +1 -0
  65. package/dist/commands/migrate.d.ts +18 -0
  66. package/dist/commands/migrate.d.ts.map +1 -0
  67. package/dist/commands/migrate.js +470 -0
  68. package/dist/commands/migrate.js.map +1 -0
  69. package/dist/commands/mod.d.ts +19 -0
  70. package/dist/commands/mod.d.ts.map +1 -0
  71. package/dist/commands/mod.js +441 -0
  72. package/dist/commands/mod.js.map +1 -0
  73. package/dist/commands/msg.d.ts +12 -0
  74. package/dist/commands/msg.d.ts.map +1 -0
  75. package/dist/commands/msg.js +273 -0
  76. package/dist/commands/msg.js.map +1 -0
  77. package/dist/commands/op.d.ts +12 -0
  78. package/dist/commands/op.d.ts.map +1 -0
  79. package/dist/commands/op.js +220 -0
  80. package/dist/commands/op.js.map +1 -0
  81. package/dist/commands/player-online.d.ts +11 -0
  82. package/dist/commands/player-online.d.ts.map +1 -0
  83. package/dist/commands/player-online.js +153 -0
  84. package/dist/commands/player-online.js.map +1 -0
  85. package/dist/commands/player.d.ts +18 -0
  86. package/dist/commands/player.d.ts.map +1 -0
  87. package/dist/commands/player.js +352 -0
  88. package/dist/commands/player.js.map +1 -0
  89. package/dist/commands/server-backup.d.ts +36 -0
  90. package/dist/commands/server-backup.d.ts.map +1 -0
  91. package/dist/commands/server-backup.js +320 -0
  92. package/dist/commands/server-backup.js.map +1 -0
  93. package/dist/commands/server-restore.d.ts +13 -0
  94. package/dist/commands/server-restore.d.ts.map +1 -0
  95. package/dist/commands/server-restore.js +294 -0
  96. package/dist/commands/server-restore.js.map +1 -0
  97. package/dist/commands/status.d.ts +13 -0
  98. package/dist/commands/status.d.ts.map +1 -0
  99. package/dist/commands/status.js +325 -0
  100. package/dist/commands/status.js.map +1 -0
  101. package/dist/commands/whitelist.d.ts +12 -0
  102. package/dist/commands/whitelist.d.ts.map +1 -0
  103. package/dist/commands/whitelist.js +316 -0
  104. package/dist/commands/whitelist.js.map +1 -0
  105. package/dist/commands/world.d.ts +18 -0
  106. package/dist/commands/world.d.ts.map +1 -0
  107. package/dist/commands/world.js +238 -0
  108. package/dist/commands/world.js.map +1 -0
  109. package/dist/domain/index.d.ts +2 -0
  110. package/dist/domain/index.d.ts.map +1 -0
  111. package/dist/domain/index.js +7 -0
  112. package/dist/domain/index.js.map +1 -0
  113. package/dist/index.d.ts +3 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +766 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts +30 -0
  118. package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts.map +1 -0
  119. package/dist/infrastructure/adapters/ClackPromptAdapter.js +430 -0
  120. package/dist/infrastructure/adapters/ClackPromptAdapter.js.map +1 -0
  121. package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.d.ts +78 -0
  122. package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.d.ts.map +1 -0
  123. package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.js +391 -0
  124. package/dist/infrastructure/adapters/Pm2ServiceManagerAdapter.js.map +1 -0
  125. package/dist/infrastructure/adapters/index.d.ts +4 -0
  126. package/dist/infrastructure/adapters/index.d.ts.map +1 -0
  127. package/dist/infrastructure/adapters/index.js +6 -0
  128. package/dist/infrastructure/adapters/index.js.map +1 -0
  129. package/dist/infrastructure/di/container.d.ts +47 -0
  130. package/dist/infrastructure/di/container.d.ts.map +1 -0
  131. package/dist/infrastructure/di/container.js +140 -0
  132. package/dist/infrastructure/di/container.js.map +1 -0
  133. package/dist/infrastructure/di/index.d.ts +2 -0
  134. package/dist/infrastructure/di/index.d.ts.map +1 -0
  135. package/dist/infrastructure/di/index.js +2 -0
  136. package/dist/infrastructure/di/index.js.map +1 -0
  137. package/dist/infrastructure/index.d.ts +5 -0
  138. package/dist/infrastructure/index.d.ts.map +1 -0
  139. package/dist/infrastructure/index.js +8 -0
  140. package/dist/infrastructure/index.js.map +1 -0
  141. package/dist/lib/admin-config.d.ts +66 -0
  142. package/dist/lib/admin-config.d.ts.map +1 -0
  143. package/dist/lib/admin-config.js +130 -0
  144. package/dist/lib/admin-config.js.map +1 -0
  145. package/dist/lib/mojang-api.d.ts +51 -0
  146. package/dist/lib/mojang-api.d.ts.map +1 -0
  147. package/dist/lib/mojang-api.js +136 -0
  148. package/dist/lib/mojang-api.js.map +1 -0
  149. package/dist/lib/player-cache.d.ts +79 -0
  150. package/dist/lib/player-cache.d.ts.map +1 -0
  151. package/dist/lib/player-cache.js +302 -0
  152. package/dist/lib/player-cache.js.map +1 -0
  153. package/dist/lib/player-json.d.ts +69 -0
  154. package/dist/lib/player-json.d.ts.map +1 -0
  155. package/dist/lib/player-json.js +96 -0
  156. package/dist/lib/player-json.js.map +1 -0
  157. package/dist/lib/pm2-utils.d.ts +71 -0
  158. package/dist/lib/pm2-utils.d.ts.map +1 -0
  159. package/dist/lib/pm2-utils.js +155 -0
  160. package/dist/lib/pm2-utils.js.map +1 -0
  161. package/dist/lib/prompts/action-select.d.ts +23 -0
  162. package/dist/lib/prompts/action-select.d.ts.map +1 -0
  163. package/dist/lib/prompts/action-select.js +124 -0
  164. package/dist/lib/prompts/action-select.js.map +1 -0
  165. package/dist/lib/prompts/index.d.ts +7 -0
  166. package/dist/lib/prompts/index.d.ts.map +1 -0
  167. package/dist/lib/prompts/index.js +7 -0
  168. package/dist/lib/prompts/index.js.map +1 -0
  169. package/dist/lib/prompts/ip-select.d.ts +25 -0
  170. package/dist/lib/prompts/ip-select.d.ts.map +1 -0
  171. package/dist/lib/prompts/ip-select.js +255 -0
  172. package/dist/lib/prompts/ip-select.js.map +1 -0
  173. package/dist/lib/prompts/player-select.d.ts +25 -0
  174. package/dist/lib/prompts/player-select.d.ts.map +1 -0
  175. package/dist/lib/prompts/player-select.js +122 -0
  176. package/dist/lib/prompts/player-select.js.map +1 -0
  177. package/dist/lib/prompts/server-select.d.ts +26 -0
  178. package/dist/lib/prompts/server-select.d.ts.map +1 -0
  179. package/dist/lib/prompts/server-select.js +99 -0
  180. package/dist/lib/prompts/server-select.js.map +1 -0
  181. package/dist/lib/rcon.d.ts +53 -0
  182. package/dist/lib/rcon.d.ts.map +1 -0
  183. package/dist/lib/rcon.js +131 -0
  184. package/dist/lib/rcon.js.map +1 -0
  185. package/dist/lib/shell.d.ts +111 -0
  186. package/dist/lib/shell.d.ts.map +1 -0
  187. package/dist/lib/shell.js +321 -0
  188. package/dist/lib/shell.js.map +1 -0
  189. package/dist/lib/sudo-utils.d.ts +14 -0
  190. package/dist/lib/sudo-utils.d.ts.map +1 -0
  191. package/dist/lib/sudo-utils.js +53 -0
  192. package/dist/lib/sudo-utils.js.map +1 -0
  193. package/package.json +8 -2
@@ -0,0 +1,470 @@
1
+ import { Paths, log, colors } from '@minecraft-docker/shared';
2
+ import { getContainer } from '../infrastructure/index.js';
3
+ import { isContainerRunning } from '../lib/rcon.js';
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ /**
7
+ * Execute migrate command
8
+ */
9
+ export async function migrateCommand(options) {
10
+ const paths = new Paths(options.root);
11
+ // Check if initialized
12
+ if (!paths.isInitialized()) {
13
+ log.error('Platform not initialized. Run: mcctl init');
14
+ return 1;
15
+ }
16
+ const subCommand = options.subCommand ?? 'worlds';
17
+ switch (subCommand) {
18
+ case 'worlds':
19
+ return migrateWorlds(paths, options);
20
+ case 'status':
21
+ return migrationStatus(paths, options);
22
+ default:
23
+ log.error(`Unknown migrate subcommand: ${subCommand}`);
24
+ console.log('Usage: mcctl migrate [worlds|status]');
25
+ return 1;
26
+ }
27
+ }
28
+ /**
29
+ * Check migration status for all servers
30
+ */
31
+ async function migrationStatus(paths, options) {
32
+ const servers = await scanServers(paths);
33
+ if (servers.length === 0) {
34
+ console.log('No servers found.');
35
+ return 0;
36
+ }
37
+ const needsMigration = servers.filter(s => s.needsMigration);
38
+ if (options.json) {
39
+ console.log(JSON.stringify({ servers, needsMigration: needsMigration.length }, null, 2));
40
+ return 0;
41
+ }
42
+ console.log('');
43
+ console.log(colors.bold('Migration Status:'));
44
+ console.log('');
45
+ for (const server of servers) {
46
+ const status = server.needsMigration
47
+ ? colors.yellow('needs migration')
48
+ : colors.green('up to date');
49
+ console.log(` ${colors.cyan(server.name)}: ${status}`);
50
+ if (server.needsMigration && server.reason) {
51
+ console.log(` ${colors.dim(server.reason)}`);
52
+ }
53
+ }
54
+ console.log('');
55
+ if (needsMigration.length > 0) {
56
+ console.log(colors.yellow(`${needsMigration.length} server(s) need migration.`));
57
+ console.log(`Run: ${colors.bold('mcctl migrate worlds')} to migrate.`);
58
+ }
59
+ else {
60
+ console.log(colors.green('All servers are up to date.'));
61
+ }
62
+ console.log('');
63
+ return 0;
64
+ }
65
+ /**
66
+ * Migrate worlds to shared worlds/ directory
67
+ */
68
+ async function migrateWorlds(paths, options) {
69
+ const container = getContainer(options.root);
70
+ const prompt = container.promptPort;
71
+ try {
72
+ const servers = await scanServers(paths);
73
+ const needsMigration = servers.filter(s => s.needsMigration);
74
+ if (needsMigration.length === 0) {
75
+ console.log('');
76
+ console.log(colors.green('✓ All servers are already using the new world directory structure.'));
77
+ console.log('');
78
+ return 0;
79
+ }
80
+ // Show servers that need migration
81
+ console.log('');
82
+ console.log(colors.bold('Servers requiring migration:'));
83
+ console.log('');
84
+ for (const server of needsMigration) {
85
+ console.log(` ${colors.cyan(server.name)}`);
86
+ console.log(` ${colors.dim(server.reason || 'World stored in server directory')}`);
87
+ if (server.currentWorldPath) {
88
+ console.log(` Current: ${colors.dim(server.currentWorldPath)}`);
89
+ }
90
+ if (server.targetWorldPath) {
91
+ console.log(` Target: ${colors.dim(server.targetWorldPath)}`);
92
+ }
93
+ console.log('');
94
+ }
95
+ // Select servers to migrate
96
+ let serversToMigrate;
97
+ if (options.all) {
98
+ serversToMigrate = needsMigration;
99
+ }
100
+ else if (options.serverName) {
101
+ const server = needsMigration.find(s => s.name === options.serverName);
102
+ if (!server) {
103
+ log.error(`Server '${options.serverName}' not found or doesn't need migration`);
104
+ return 1;
105
+ }
106
+ serversToMigrate = [server];
107
+ }
108
+ else {
109
+ // Interactive selection - select one at a time
110
+ const serverOptions = needsMigration.map(s => ({
111
+ value: s.name,
112
+ label: s.name,
113
+ hint: s.reason,
114
+ }));
115
+ // Add "all" option
116
+ serverOptions.unshift({
117
+ value: '__all__',
118
+ label: 'All servers',
119
+ hint: `Migrate all ${needsMigration.length} servers`,
120
+ });
121
+ const selected = await prompt.select({
122
+ message: 'Select server to migrate:',
123
+ options: serverOptions,
124
+ });
125
+ if (prompt.isCancel(selected)) {
126
+ console.log('Migration cancelled.');
127
+ return 0;
128
+ }
129
+ if (selected === '__all__') {
130
+ serversToMigrate = needsMigration;
131
+ }
132
+ else {
133
+ const server = needsMigration.find(s => s.name === selected);
134
+ serversToMigrate = server ? [server] : [];
135
+ }
136
+ }
137
+ if (serversToMigrate.length === 0) {
138
+ console.log('No servers selected for migration.');
139
+ return 0;
140
+ }
141
+ // Dry run mode
142
+ if (options.dryRun) {
143
+ console.log('');
144
+ console.log(colors.yellow('DRY RUN - No changes will be made'));
145
+ console.log('');
146
+ for (const server of serversToMigrate) {
147
+ console.log(colors.bold(`Would migrate: ${server.name}`));
148
+ console.log(` 1. Stop server if running`);
149
+ if (options.backup) {
150
+ console.log(` 2. Backup world data`);
151
+ }
152
+ console.log(` ${options.backup ? '3' : '2'}. Move world: ${server.currentWorldPath} → ${server.targetWorldPath}`);
153
+ console.log(` ${options.backup ? '4' : '3'}. Update config.env:`);
154
+ console.log(` - Add: EXTRA_ARGS=--universe /worlds/`);
155
+ console.log(` - Set: LEVEL=${server.name}`);
156
+ console.log('');
157
+ }
158
+ return 0;
159
+ }
160
+ // Confirm migration
161
+ if (!options.force) {
162
+ const confirm = await prompt.confirm({
163
+ message: `Migrate ${serversToMigrate.length} server(s)? This will move world data.`,
164
+ initialValue: false,
165
+ });
166
+ if (prompt.isCancel(confirm) || !confirm) {
167
+ console.log('Migration cancelled.');
168
+ return 0;
169
+ }
170
+ }
171
+ // Check if servers are running
172
+ console.log('');
173
+ console.log('Checking server status...');
174
+ const runningServers = [];
175
+ for (const server of serversToMigrate) {
176
+ const containerName = `mc-${server.name}`;
177
+ const running = await isContainerRunning(containerName);
178
+ if (running) {
179
+ runningServers.push(server.name);
180
+ }
181
+ }
182
+ if (runningServers.length > 0) {
183
+ console.log('');
184
+ console.log(colors.yellow('The following servers are running:'));
185
+ for (const name of runningServers) {
186
+ console.log(` - ${name}`);
187
+ }
188
+ console.log('');
189
+ // Skip confirmation if --force is used
190
+ if (!options.force) {
191
+ const stopConfirm = await prompt.confirm({
192
+ message: 'Stop these servers to proceed with migration?',
193
+ initialValue: true,
194
+ });
195
+ if (prompt.isCancel(stopConfirm) || !stopConfirm) {
196
+ console.log('Migration cancelled. Please stop servers manually first.');
197
+ return 1;
198
+ }
199
+ }
200
+ else {
201
+ console.log(colors.dim('--force: Stopping servers automatically...'));
202
+ }
203
+ // Stop running servers
204
+ for (const name of runningServers) {
205
+ console.log(`Stopping ${name}...`);
206
+ await stopContainer(`mc-${name}`);
207
+ }
208
+ }
209
+ // Perform migration
210
+ console.log('');
211
+ let successCount = 0;
212
+ let failCount = 0;
213
+ for (const server of serversToMigrate) {
214
+ console.log(colors.bold(`Migrating: ${server.name}`));
215
+ try {
216
+ await migrateServer(paths, server, options.backup ?? false);
217
+ console.log(colors.green(` ✓ Migration complete`));
218
+ successCount++;
219
+ }
220
+ catch (error) {
221
+ const message = error instanceof Error ? error.message : String(error);
222
+ console.log(colors.red(` ✗ Migration failed: ${message}`));
223
+ failCount++;
224
+ }
225
+ console.log('');
226
+ }
227
+ // Summary
228
+ console.log(colors.bold('Migration Summary:'));
229
+ console.log(` Success: ${colors.green(String(successCount))}`);
230
+ if (failCount > 0) {
231
+ console.log(` Failed: ${colors.red(String(failCount))}`);
232
+ }
233
+ console.log('');
234
+ if (runningServers.length > 0 && successCount > 0) {
235
+ console.log(colors.dim('Servers were stopped for migration.'));
236
+ console.log(colors.dim(`Start them with: mcctl start --all`));
237
+ console.log('');
238
+ }
239
+ return failCount > 0 ? 1 : 0;
240
+ }
241
+ catch (error) {
242
+ if (prompt.isCancel(error)) {
243
+ console.log('Migration cancelled.');
244
+ return 0;
245
+ }
246
+ const message = error instanceof Error ? error.message : String(error);
247
+ log.error(message);
248
+ return 1;
249
+ }
250
+ }
251
+ /**
252
+ * Scan servers and check migration status
253
+ */
254
+ async function scanServers(paths) {
255
+ const serversDir = paths.servers;
256
+ const worldsDir = paths.worlds;
257
+ if (!fs.existsSync(serversDir)) {
258
+ return [];
259
+ }
260
+ const entries = fs.readdirSync(serversDir, { withFileTypes: true });
261
+ const servers = [];
262
+ for (const entry of entries) {
263
+ // Skip template and non-directories
264
+ if (!entry.isDirectory() || entry.name === '_template') {
265
+ continue;
266
+ }
267
+ const serverName = entry.name;
268
+ const serverDir = path.join(serversDir, serverName);
269
+ const configPath = path.join(serverDir, 'config.env');
270
+ const dataDir = path.join(serverDir, 'data');
271
+ const worldDir = path.join(dataDir, 'world');
272
+ // Check if config.env exists
273
+ if (!fs.existsSync(configPath)) {
274
+ continue;
275
+ }
276
+ // Read config.env
277
+ const configContent = fs.readFileSync(configPath, 'utf-8');
278
+ const hasExtraArgs = configContent.includes('EXTRA_ARGS=') &&
279
+ configContent.includes('--universe');
280
+ // Get LEVEL value
281
+ const levelMatch = configContent.match(/^LEVEL=(.*)$/m);
282
+ const levelValue = levelMatch ? levelMatch[1]?.trim() : 'world';
283
+ // Check if world exists in server's data directory
284
+ const worldExistsInData = fs.existsSync(worldDir) &&
285
+ fs.statSync(worldDir).isDirectory() &&
286
+ !fs.lstatSync(worldDir).isSymbolicLink();
287
+ // Determine if migration is needed
288
+ let needsMigration = false;
289
+ let reason;
290
+ if (!hasExtraArgs) {
291
+ needsMigration = true;
292
+ reason = 'Missing EXTRA_ARGS=--universe /worlds/';
293
+ }
294
+ else if (worldExistsInData) {
295
+ needsMigration = true;
296
+ reason = 'World data still in server directory';
297
+ }
298
+ const targetWorldPath = path.join(worldsDir, serverName);
299
+ servers.push({
300
+ name: serverName,
301
+ needsMigration,
302
+ reason,
303
+ currentWorldPath: worldExistsInData ? worldDir : undefined,
304
+ targetWorldPath,
305
+ hasExtraArgs,
306
+ levelValue,
307
+ });
308
+ }
309
+ return servers;
310
+ }
311
+ /**
312
+ * Migrate a single server
313
+ */
314
+ async function migrateServer(paths, server, createBackup) {
315
+ const serversDir = paths.servers;
316
+ const worldsDir = paths.worlds;
317
+ const serverDir = path.join(serversDir, server.name);
318
+ const configPath = path.join(serverDir, 'config.env');
319
+ const sourceWorldDir = path.join(serverDir, 'data', 'world');
320
+ const targetWorldDir = path.join(worldsDir, server.name);
321
+ // Ensure worlds directory exists
322
+ if (!fs.existsSync(worldsDir)) {
323
+ fs.mkdirSync(worldsDir, { recursive: true });
324
+ }
325
+ // Step 1: Backup if requested
326
+ if (createBackup && fs.existsSync(sourceWorldDir)) {
327
+ const backupDir = path.join(serverDir, 'data', `world_backup_${Date.now()}`);
328
+ console.log(` Creating backup: ${path.basename(backupDir)}`);
329
+ await copyDirectory(sourceWorldDir, backupDir);
330
+ }
331
+ // Step 2: Move world data if it exists in server directory
332
+ if (fs.existsSync(sourceWorldDir) && fs.statSync(sourceWorldDir).isDirectory()) {
333
+ // Check if it's a symlink
334
+ if (fs.lstatSync(sourceWorldDir).isSymbolicLink()) {
335
+ console.log(` World is already a symlink, removing...`);
336
+ fs.unlinkSync(sourceWorldDir);
337
+ }
338
+ else {
339
+ // Check if target already exists
340
+ if (fs.existsSync(targetWorldDir)) {
341
+ throw new Error(`Target world directory already exists: ${targetWorldDir}`);
342
+ }
343
+ console.log(` Moving world data to worlds/${server.name}`);
344
+ fs.renameSync(sourceWorldDir, targetWorldDir);
345
+ }
346
+ }
347
+ // Also move world_nether and world_the_end if they exist (Vanilla server)
348
+ const dimensionWorlds = ['world_nether', 'world_the_end'];
349
+ for (const dimWorld of dimensionWorlds) {
350
+ const sourceDimDir = path.join(serverDir, 'data', dimWorld);
351
+ const targetDimDir = path.join(worldsDir, `${server.name}_${dimWorld.replace('world_', '')}`);
352
+ if (fs.existsSync(sourceDimDir) &&
353
+ fs.statSync(sourceDimDir).isDirectory() &&
354
+ !fs.lstatSync(sourceDimDir).isSymbolicLink()) {
355
+ console.log(` Moving ${dimWorld} to worlds/`);
356
+ if (!fs.existsSync(targetDimDir)) {
357
+ fs.renameSync(sourceDimDir, targetDimDir);
358
+ }
359
+ }
360
+ }
361
+ // Step 3: Update config.env
362
+ console.log(` Updating config.env`);
363
+ let configContent = fs.readFileSync(configPath, 'utf-8');
364
+ // Add or update EXTRA_ARGS
365
+ if (!configContent.includes('EXTRA_ARGS=')) {
366
+ // Add EXTRA_ARGS after LEVEL line or at end of World section
367
+ const levelLineMatch = configContent.match(/^LEVEL=.*$/m);
368
+ if (levelLineMatch) {
369
+ configContent = configContent.replace(levelLineMatch[0], `${levelLineMatch[0]}\n\n# Store world in shared /worlds/ directory\nEXTRA_ARGS=--universe /worlds/`);
370
+ }
371
+ else {
372
+ configContent += '\n# Store world in shared /worlds/ directory\nEXTRA_ARGS=--universe /worlds/\n';
373
+ }
374
+ }
375
+ else if (!configContent.includes('--universe')) {
376
+ // EXTRA_ARGS exists but doesn't have --universe
377
+ configContent = configContent.replace(/^(EXTRA_ARGS=.*)$/m, '$1 --universe /worlds/');
378
+ }
379
+ // Determine the correct LEVEL value
380
+ const newLevelValue = findExistingWorldName(worldsDir, server.levelValue, server.name);
381
+ console.log(` Setting LEVEL=${newLevelValue}`);
382
+ // Update LEVEL
383
+ if (configContent.match(/^LEVEL=.*$/m)) {
384
+ configContent = configContent.replace(/^LEVEL=.*$/m, `LEVEL=${newLevelValue}`);
385
+ }
386
+ else {
387
+ configContent += `\nLEVEL=${newLevelValue}\n`;
388
+ }
389
+ fs.writeFileSync(configPath, configContent);
390
+ }
391
+ /**
392
+ * Find existing world name in worlds directory
393
+ * Checks: current LEVEL value, server name, case-insensitive matches
394
+ */
395
+ function findExistingWorldName(worldsDir, currentLevel, serverName) {
396
+ if (!fs.existsSync(worldsDir)) {
397
+ return serverName;
398
+ }
399
+ const worldDirs = fs.readdirSync(worldsDir, { withFileTypes: true })
400
+ .filter(d => d.isDirectory() && !d.name.startsWith('.'))
401
+ .map(d => d.name);
402
+ // 1. Check if current LEVEL value exists in worlds/
403
+ if (currentLevel && currentLevel !== 'world') {
404
+ const exactMatch = worldDirs.find(w => w === currentLevel);
405
+ if (exactMatch) {
406
+ return exactMatch;
407
+ }
408
+ }
409
+ // 2. Check if server name exists (exact match)
410
+ const serverMatch = worldDirs.find(w => w === serverName);
411
+ if (serverMatch) {
412
+ return serverMatch;
413
+ }
414
+ // 3. Check case-insensitive match for server name
415
+ const caseInsensitiveMatch = worldDirs.find(w => w.toLowerCase() === serverName.toLowerCase());
416
+ if (caseInsensitiveMatch) {
417
+ return caseInsensitiveMatch;
418
+ }
419
+ // 4. Check case-insensitive match for current LEVEL
420
+ if (currentLevel && currentLevel !== 'world') {
421
+ const levelCaseMatch = worldDirs.find(w => w.toLowerCase() === currentLevel.toLowerCase());
422
+ if (levelCaseMatch) {
423
+ return levelCaseMatch;
424
+ }
425
+ }
426
+ // 5. Default to server name
427
+ return serverName;
428
+ }
429
+ /**
430
+ * Stop a Docker container
431
+ */
432
+ async function stopContainer(containerName) {
433
+ const { spawn } = await import('node:child_process');
434
+ return new Promise((resolve, reject) => {
435
+ const child = spawn('docker', ['stop', containerName], {
436
+ stdio: ['pipe', 'pipe', 'pipe'],
437
+ });
438
+ child.on('close', (code) => {
439
+ if (code === 0) {
440
+ resolve();
441
+ }
442
+ else {
443
+ reject(new Error(`Failed to stop container ${containerName}`));
444
+ }
445
+ });
446
+ child.on('error', (err) => {
447
+ reject(err);
448
+ });
449
+ });
450
+ }
451
+ /**
452
+ * Copy directory recursively
453
+ */
454
+ async function copyDirectory(source, target) {
455
+ if (!fs.existsSync(target)) {
456
+ fs.mkdirSync(target, { recursive: true });
457
+ }
458
+ const entries = fs.readdirSync(source, { withFileTypes: true });
459
+ for (const entry of entries) {
460
+ const sourcePath = path.join(source, entry.name);
461
+ const targetPath = path.join(target, entry.name);
462
+ if (entry.isDirectory()) {
463
+ await copyDirectory(sourcePath, targetPath);
464
+ }
465
+ else {
466
+ fs.copyFileSync(sourcePath, targetPath);
467
+ }
468
+ }
469
+ }
470
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import '@minecraft-docker/mod-source-modrinth';
2
+ /**
3
+ * Mod command options
4
+ */
5
+ export interface ModCommandOptions {
6
+ root?: string;
7
+ subCommand?: string;
8
+ serverName?: string;
9
+ modNames?: string[];
10
+ query?: string;
11
+ source?: 'modrinth' | 'curseforge' | 'spiget' | 'url';
12
+ json?: boolean;
13
+ force?: boolean;
14
+ }
15
+ /**
16
+ * Execute mod management command
17
+ */
18
+ export declare function modCommand(options: ModCommandOptions): Promise<number>;
19
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/commands/mod.ts"],"names":[],"mappings":"AAQA,OAAO,uCAAuC,CAAC;AAK/C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC5E"}