summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt
diff options
context:
space:
mode:
authorDico200 <dico.karssiens@gmail.com>2018-07-27 18:29:00 +0100
committerDico200 <dico.karssiens@gmail.com>2018-07-27 18:29:00 +0100
commita9c19ff5cfbf6d99d46cc38d0e294275cdc7f61e (patch)
treef30590798caa58811210a60596b5c36a7356aa98 /src/main/kotlin/io/dico/parcels2/command/AbstractParcelCommands.kt
parentcb3fb4771a824ec13e3da1647e3278f3ebb9a5bc (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.kt43
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")
+ }
+ }
+
+}
+