diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandReset.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandReset.kt index a484c6f..6093d73 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandReset.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandReset.kt @@ -10,6 +10,7 @@ import com.willfp.ecojobs.api.resetJob import com.willfp.ecojobs.jobs.Jobs import org.bukkit.Bukkit import org.bukkit.command.CommandSender +import org.bukkit.util.StringUtil class CommandReset(plugin: EcoPlugin) : Subcommand(plugin, "reset", "ecojobs.command.reset", false) { override fun onExecute(sender: CommandSender, args: List) { @@ -24,16 +25,68 @@ class CommandReset(plugin: EcoPlugin) : Subcommand(plugin, "reset", "ecojobs.com } val playerName = args[0] + val jobName = args[1] + // Reset all jobs for all players + if (playerName.equals("all", ignoreCase = true) && jobName.equals("all", ignoreCase = true)) { + Bukkit.getOnlinePlayers().forEach { player -> + Jobs.values().forEach { job -> + if (player.hasJob(job)) { + player.forceLeaveJob(job) + player.resetJob(job) + } + } + } + sender.sendMessage(plugin.langYml.getMessage("reset-all-players-all-jobs")) + return + } + + // Reset a specific job for all players + if (playerName.equals("all", ignoreCase = true)) { + val job = Jobs.getByID(jobName) + if (job == null) { + sender.sendMessage(plugin.langYml.getMessage("invalid-job")) + return + } + + Bukkit.getOnlinePlayers().forEach { player -> + if (player.hasJob(job)) { + player.forceLeaveJob(job) + player.resetJob(job) + } + } + + sender.sendMessage( + plugin.langYml.getMessage("reset-all-players") + .replace("%job%", job.name) + ) + return + } + + // Reset all jobs for a specific player val player = Bukkit.getPlayer(playerName) - if (player == null) { sender.sendMessage(plugin.langYml.getMessage("invalid-player")) return } - val job = Jobs.getByID(args[1]) + if (jobName.equals("all", ignoreCase = true)) { + Jobs.values().forEach { job -> + if (player.hasJob(job)) { + player.forceLeaveJob(job) + player.resetJob(job) + } + } + sender.sendMessage( + plugin.langYml.getMessage("reset-all-jobs") + .replace("%player%", player.savedDisplayName) + ) + return + } + + // Reset a specific job for a specific player + val job = Jobs.getByID(jobName) if (job == null) { sender.sendMessage(plugin.langYml.getMessage("invalid-job")) return @@ -55,12 +108,23 @@ class CommandReset(plugin: EcoPlugin) : Subcommand(plugin, "reset", "ecojobs.com } override fun tabComplete(sender: CommandSender, args: List): List { + val completions = mutableListOf() if (args.size == 1) { - return Bukkit.getOnlinePlayers().map { it.name } + StringUtil.copyPartialMatches( + args[0], + listOf("all") union Bukkit.getOnlinePlayers().map { player -> player.name }, + completions + ) + return completions } if (args.size == 2) { - return Jobs.values().map { it.id } + StringUtil.copyPartialMatches( + args[1], + listOf("all") union Jobs.values().map { it.id }, + completions + ) + return completions } return emptyList() diff --git a/eco-core/core-plugin/src/main/resources/lang.yml b/eco-core/core-plugin/src/main/resources/lang.yml index 65a5e26..2b9d208 100644 --- a/eco-core/core-plugin/src/main/resources/lang.yml +++ b/eco-core/core-plugin/src/main/resources/lang.yml @@ -8,6 +8,9 @@ messages: needs-player: "&cYou must specify a player!" gave-xp: "&fYou have given &a%xp% &fXP to %player%&f's %job%&f!" reset-xp: "&fYou have reset %player%&f's %job%&f XP!" + reset-all-players: "&fYou have reset all players' %job%&f XP!" + reset-all-jobs: "&fYou have reset %player%&f's XP for all jobs!" + reset-all-players-all-jobs: "&fYou have reset all players' XP for all jobs!" needs-job: "&cYou must specify a job!" need-amount: "&cYou must specify a amount!" invalid-player: "&cInvalid player!"