diff options
author | Dico200 <dico.karssiens@gmail.com> | 2018-07-27 18:29:00 +0100 |
---|---|---|
committer | Dico200 <dico.karssiens@gmail.com> | 2018-07-27 18:29:00 +0100 |
commit | a9c19ff5cfbf6d99d46cc38d0e294275cdc7f61e (patch) | |
tree | f30590798caa58811210a60596b5c36a7356aa98 /src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt | |
parent | cb3fb4771a824ec13e3da1647e3278f3ebb9a5bc (diff) |
Work on some commands
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt b/src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt new file mode 100644 index 0000000..21ff1d7 --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt @@ -0,0 +1,43 @@ +package io.dico.parcels2.command + +import io.dico.dicore.command.CommandException +import io.dico.dicore.command.ExecutionContext +import io.dico.dicore.command.ICommandReceiver +import io.dico.parcels2.ParcelOwner +import io.dico.parcels2.ParcelsPlugin +import io.dico.parcels2.util.hasAdminManage +import io.dico.parcels2.util.parcelLimit +import io.dico.parcels2.util.uuid +import org.bukkit.entity.Player +import org.bukkit.plugin.Plugin +import java.lang.reflect.Method + +abstract class AbstractParcelCommands(val plugin: ParcelsPlugin): ICommandReceiver.Factory { + + override fun getPlugin(): Plugin = plugin + override fun getReceiver(context: ExecutionContext, target: Method, cmdName: String): ICommandReceiver { + return getParcelCommandReceiver(plugin.worlds, context, target, cmdName) + } + + protected inline val worlds get() = plugin.worlds + + protected fun error(message: String): Nothing { + throw CommandException(message) + } + + protected fun checkConnected(action: String) { + if (!plugin.storage.isConnected) error("Parcels cannot $action right now because of a database error") + } + + protected suspend fun checkParcelLimit(player: Player) { + if (player.hasAdminManage) return + val numOwnedParcels = plugin.storage.getNumParcels(ParcelOwner(uuid = player.uuid)).await() + + val limit = player.parcelLimit + if (numOwnedParcels >= limit) { + error("You have enough plots for now") + } + } + +} + |