Skip to content

Commit 7108d12

Browse files
finreinhardclaude
andcommitted
Add max limit functionality to prepare world command
- Support '/prepare [count] max' syntax to limit total prepared worlds - Smart calculation to only generate needed worlds to reach limit - Early exit when max limit already reached - Enhanced messaging for max limit operations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent a1973a8 commit 7108d12

File tree

2 files changed

+43
-8
lines changed

2 files changed

+43
-8
lines changed

src/main/kotlin/li/angu/challengeplugin/commands/PrepareWorldCommand.kt

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,67 @@ class PrepareWorldCommand(private val plugin: ChallengePluginPlugin) : CommandEx
2929
return true
3030
}
3131

32-
// Parse the count argument
32+
// Parse arguments: /prepare [count] [max]
3333
var count = 1
34+
var maxLimit: Int? = null
35+
3436
try {
3537
count = args[0].toInt()
3638
if (count <= 0) {
3739
sender.sendMessage("${ChatColor.RED}Count must be a positive number.")
3840
return true
3941
}
42+
43+
// Check for 'max' parameter
44+
if (args.size > 1 && args[1].lowercase() == "max") {
45+
maxLimit = count
46+
count = count - currentCount // Only generate what's needed to reach the limit
47+
48+
if (count <= 0) {
49+
sender.sendMessage("${ChatColor.GREEN}Already have $currentCount worlds, which meets or exceeds the max limit of $maxLimit.")
50+
return true
51+
}
52+
53+
sender.sendMessage("${ChatColor.YELLOW}Will generate $count world(s) to reach max limit of $maxLimit (currently have $currentCount).")
54+
}
4055
} catch (e: NumberFormatException) {
41-
sender.sendMessage("${ChatColor.RED}Invalid number format. Usage: /prepare [count]")
56+
sender.sendMessage("${ChatColor.RED}Invalid number format. Usage: /prepare [count] [max]")
4257
return true
4358
}
4459

4560
// Start generation
46-
sender.sendMessage("${ChatColor.YELLOW}Starting generation of $count world(s)...")
61+
val message = if (maxLimit != null) {
62+
"Starting generation of $count world(s) to reach max limit of $maxLimit..."
63+
} else {
64+
"Starting generation of $count world(s)..."
65+
}
66+
sender.sendMessage("${ChatColor.YELLOW}$message")
4767

48-
generateNextWorld(sender, worldManager, 0, count)
68+
generateNextWorld(sender, worldManager, 0, count, maxLimit)
4969

5070
return true
5171
}
5272

53-
private fun generateNextWorld(sender: CommandSender, worldManager: WorldPreparationManager, generated: Int, total: Int) {
73+
private fun generateNextWorld(sender: CommandSender, worldManager: WorldPreparationManager, generated: Int, total: Int, maxLimit: Int? = null) {
74+
// Check if we've reached the max limit before generating more
75+
if (maxLimit != null) {
76+
val currentCount = worldManager.countAvailableWorlds()
77+
if (currentCount >= maxLimit) {
78+
sender.sendMessage("${ChatColor.GREEN}Reached max limit of $maxLimit prepared worlds. Stopping generation.")
79+
sender.sendMessage("${ChatColor.GREEN}Currently have $currentCount pregenerated worlds available.")
80+
return
81+
}
82+
}
83+
5484
if (generated >= total) {
5585
// After finishing, show updated count
5686
val currentCount = worldManager.countAvailableWorlds()
57-
sender.sendMessage("${ChatColor.GREEN}All $total worlds have been prepared successfully!")
87+
val completionMessage = if (maxLimit != null) {
88+
"Generated $total worlds and reached max limit of $maxLimit!"
89+
} else {
90+
"All $total worlds have been prepared successfully!"
91+
}
92+
sender.sendMessage("${ChatColor.GREEN}$completionMessage")
5893
sender.sendMessage("${ChatColor.GREEN}Now have $currentCount pregenerated worlds available.")
5994
return
6095
}
@@ -67,7 +102,7 @@ class PrepareWorldCommand(private val plugin: ChallengePluginPlugin) : CommandEx
67102
if (success) {
68103
sender.sendMessage("${ChatColor.GREEN}World $currentNum/$total generated successfully.")
69104
// Generate the next world
70-
generateNextWorld(sender, worldManager, currentNum, total)
105+
generateNextWorld(sender, worldManager, currentNum, total, maxLimit)
71106
} else {
72107
sender.sendMessage("${ChatColor.RED}Failed to generate world $currentNum/$total. Stopping generation.")
73108
// Show current count after failure

src/main/resources/plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ commands:
5555
permission: challengeplugin.debug
5656
prepare:
5757
description: Pre-generate worlds for challenges or show available pre-generated worlds
58-
usage: /prepare [count]
58+
usage: /prepare [count] [max]
5959
permission: challengeplugin.prepare
6060
pause:
6161
description: Pause or resume the current challenge

0 commit comments

Comments
 (0)