diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandJobs.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandJobs.kt index ccb68db..9d9c815 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandJobs.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandJobs.kt @@ -7,6 +7,11 @@ import org.bukkit.command.CommandSender import org.bukkit.entity.Player class CommandJobs(plugin: EcoPlugin) : PluginCommand(plugin, "jobs", "ecojobs.command.jobs", true) { + init { + this.addSubcommand(CommandJoin(plugin)) + .addSubcommand(CommandLeave(plugin)) + } + override fun onExecute(player: CommandSender, args: List) { player as Player JobsGUI.open(player) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandJoin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandJoin.kt new file mode 100644 index 0000000..e059ab0 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandJoin.kt @@ -0,0 +1,65 @@ +package com.willfp.ecojobs.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.impl.Subcommand +import com.willfp.eco.util.StringUtils +import com.willfp.ecojobs.jobs.Jobs +import com.willfp.ecojobs.jobs.activeJob +import com.willfp.ecojobs.jobs.hasJob +import org.bukkit.command.CommandSender +import org.bukkit.entity.Player +import org.bukkit.util.StringUtil + +class CommandJoin(plugin: EcoPlugin) : Subcommand(plugin, "join", "ecojobs.command.join", true) { + override fun onExecute(player: CommandSender, args: List) { + player as Player + + if (args.isEmpty()) { + player.sendMessage(plugin.langYml.getMessage("needs-job")) + return + } + + val id = args[0] + + val job = Jobs.getByID(id) + + if (job == null || !player.hasJob(job)) { + player.sendMessage(plugin.langYml.getMessage("invalid-job")) + return + } + + if (player.activeJob == job) { + player.sendMessage(plugin.langYml.getMessage("job-already-joined")) + return + } + + player.sendMessage( + plugin.langYml.getMessage("joined-job", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS) + .replace("%job%", job.name) + ) + player.activeJob = job + } + + override fun tabComplete(sender: CommandSender, args: List): List { + if (sender !is Player) { + return emptyList() + } + + val completions = mutableListOf() + if (args.isEmpty()) { + // Currently, this case is not ever reached + return Jobs.values().filter { sender.hasJob(it) }.map { it.id } + } + + if (args.size == 1) { + StringUtil.copyPartialMatches( + args[1], + Jobs.values().filter { sender.hasJob(it) }.map { it.id }, + completions + ) + return completions + } + + return emptyList() + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandLeave.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandLeave.kt new file mode 100644 index 0000000..839215a --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecojobs/commands/CommandLeave.kt @@ -0,0 +1,26 @@ +package com.willfp.ecojobs.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.impl.Subcommand +import com.willfp.eco.util.StringUtils +import com.willfp.ecojobs.jobs.activeJob +import org.bukkit.command.CommandSender +import org.bukkit.entity.Player + +class CommandLeave(plugin: EcoPlugin) : Subcommand(plugin, "leave", "ecojobs.command.leave", true) { + override fun onExecute(player: CommandSender, args: List) { + player as Player + + if (player.activeJob == null) { + player.sendMessage(plugin.langYml.getMessage("no-job")) + return + } + + player.sendMessage( + plugin.langYml.getMessage("left-job", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS) + .replace("%job%", player.activeJob?.name ?: "") + ) + + player.activeJob = null + } +} diff --git a/eco-core/core-plugin/src/main/resources/lang.yml b/eco-core/core-plugin/src/main/resources/lang.yml index a7c0adf..2c1a1b4 100644 --- a/eco-core/core-plugin/src/main/resources/lang.yml +++ b/eco-core/core-plugin/src/main/resources/lang.yml @@ -20,6 +20,10 @@ messages: unlocked-job: "&fSuccessfully unlocked the %job%&f job for %player%!" cannot-spawn-job: "&cYou already have this job unlocked!" invalid-amount: "&cInvalid amount!" + no-job: "&cYou don't have a job!" + joined-job: "&fYou have joined the %job%&f job!" + left-job: "&fYou have left the %job%&f job!" + job-already-joined: "&cYou already have this job!" menu: title: "Jobs" diff --git a/eco-core/core-plugin/src/main/resources/plugin.yml b/eco-core/core-plugin/src/main/resources/plugin.yml index 2fa1a93..f963c9e 100644 --- a/eco-core/core-plugin/src/main/resources/plugin.yml +++ b/eco-core/core-plugin/src/main/resources/plugin.yml @@ -49,6 +49,8 @@ permissions: ecojobs.command.jobs: true ecojobs.command.unlock: true ecojobs.command.givexp: true + ecojobs.command.join: true + ecojobs.command.leave: true ecojobs.command.reset: true ecojobs.command.reload: @@ -69,6 +71,12 @@ permissions: ecojobs.command.reset: description: Allows the use of /ecojobs reset. default: op + ecojobs.command.join: + description: Allows the use of /jobs join. + default: true + ecojobs.command.leave: + description: Allows the use of /jobs leave. + default: true ecojobs.xpmultiplier.50percent: description: Gives the player 50% more job experience