Skip to content
This repository has been archived by the owner on Jan 28, 2020. It is now read-only.

Epic #1

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions src/main/kotlin/com/qrakn/honcho/Honcho.kt
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
package com.qrakn.honcho

import com.qrakn.honcho.command.adapter.CommandTypeAdapter
import com.qrakn.honcho.command.adapter.impl.PlayerTypeAdapter
import com.qrakn.honcho.command.adapter.impl.StringTypeAdapter
import com.qrakn.honcho.command.adapter.impl.*
import org.bukkit.ChatColor
import org.bukkit.GameMode
import org.bukkit.OfflinePlayer
import org.bukkit.World
import org.bukkit.entity.Player
import org.bukkit.plugin.java.JavaPlugin

class Honcho(val plugin: JavaPlugin) {

private val executor: HonchoExecutor = HonchoExecutor(this)
var permissionMessage: String = "&cYou don't have permission to use this command"

init {
registerTypeAdapter(Boolean::class.java, BooleanTypeAdapter())
registerTypeAdapter(GameMode::class.java, GameModeTypeAdapter())
registerTypeAdapter(Integer::class.java, IntegerTypeAdapter())
registerTypeAdapter(OfflinePlayer::class.java, OfflinePlayerTypeAdapter())
registerTypeAdapter(String::class.java, StringTypeAdapter())
registerTypeAdapter(Player::class.java, PlayerTypeAdapter())
registerTypeAdapter(World::class.java, WorldTypeAdapter())
}

fun registerCommand(command: Any) {
Expand Down
2 changes: 0 additions & 2 deletions src/main/kotlin/com/qrakn/honcho/HonchoCommand.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package com.qrakn.honcho

import com.qrakn.honcho.command.CommandMeta
import org.apache.commons.lang.StringUtils
import org.apache.commons.lang.mutable.Mutable
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender
import org.bukkit.command.defaults.BukkitCommand
import java.util.*
Expand Down
20 changes: 16 additions & 4 deletions src/main/kotlin/com/qrakn/honcho/HonchoExecutor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@ import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import org.bukkit.plugin.PluginManager
import org.bukkit.plugin.SimplePluginManager
import java.lang.NullPointerException
import org.bukkit.scheduler.BukkitRunnable
import java.lang.reflect.Method
import java.util.HashMap
import kotlin.collections.ArrayList
import kotlin.collections.set

internal class HonchoExecutor(private val honcho: Honcho) : CommandExecutor {

Expand Down Expand Up @@ -59,8 +61,8 @@ internal class HonchoExecutor(private val honcho: Honcho) : CommandExecutor {
val meta = binding.command.javaClass.getAnnotation(CommandMeta::class.java)
val instance = binding.command

if (meta.permission.isNotEmpty() && !sender.hasPermission(meta.permission)) {
sender.sendMessage("Nope.") // TODO send configurable no permission message (make command specific or impl specific?)
if (!sender.hasPermission(meta.permission)) {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', honcho.permissionMessage))
return true
}

Expand Down Expand Up @@ -112,7 +114,17 @@ internal class HonchoExecutor(private val honcho: Honcho) : CommandExecutor {
}

if (arguments.size == parameters.size) {
method.invoke(instance, *arguments.toTypedArray())
if (meta.async) {
object : BukkitRunnable() {

override fun run() {
method.invoke(instance, *arguments.toTypedArray())
}

}.runTaskAsynchronously(honcho.plugin)
} else {
method.invoke(instance, *arguments.toTypedArray())
}
}

return true
Expand Down
5 changes: 4 additions & 1 deletion src/main/kotlin/com/qrakn/honcho/command/CommandMeta.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ package com.qrakn.honcho.command
* @param label the command's label(s)
* @param permission the command's permission node
* @param description the command's description
* @param subcommands the command's subcommands
* @param async executes the command asynchronously
*/
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class CommandMeta(
vararg val label: String,
val permission: String = "",
val description: String = "",
val subcommands: Boolean = false)
val subcommands: Boolean = false,
val async: Boolean = false)
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.qrakn.honcho.command.adapter

interface CommandTypeAdapter {

fun <T> convert(string: String, type: Class<T>): T

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.qrakn.honcho.command.adapter.impl

import com.qrakn.honcho.command.adapter.CommandTypeAdapter
import java.util.*

class BooleanTypeAdapter : CommandTypeAdapter {
override fun <T> convert(string: String, type: Class<T>): T {
return type.cast(MAP[string.toLowerCase()])
}

companion object {
private val MAP = HashMap<String, Boolean>()

init {
MAP["true"] = true
MAP["on"] = true
MAP["yes"] = true

MAP["false"] = false
MAP["off"] = false
MAP["no"] = false
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.qrakn.honcho.command.adapter.impl

import com.qrakn.honcho.command.adapter.CommandTypeAdapter
import org.bukkit.GameMode
import java.util.*

class GameModeTypeAdapter : CommandTypeAdapter {
override fun <T> convert(string: String, type: Class<T>): T {
return type.cast(MAP[string.toLowerCase()])
}

companion object {
private val MAP = HashMap<String, GameMode>()

init {
MAP["c"] = GameMode.CREATIVE
MAP["creative"] = GameMode.CREATIVE
MAP["1"] = GameMode.CREATIVE

MAP["s"] = GameMode.SURVIVAL
MAP["survival"] = GameMode.SURVIVAL
MAP["0"] = GameMode.SURVIVAL

MAP["a"] = GameMode.ADVENTURE
MAP["adventure"] = GameMode.ADVENTURE
MAP["2"] = GameMode.ADVENTURE
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.qrakn.honcho.command.adapter.impl

import com.qrakn.honcho.command.adapter.CommandTypeAdapter

class IntegerTypeAdapter : CommandTypeAdapter {
override fun <T> convert(string: String, type: Class<T>): T {
return type.cast(Integer.parseInt(string))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.qrakn.honcho.command.adapter.impl

import com.qrakn.honcho.command.adapter.CommandTypeAdapter
import org.bukkit.Bukkit

class OfflinePlayerTypeAdapter : CommandTypeAdapter {
override fun <T> convert(string: String, type: Class<T>): T {
return type.cast(Bukkit.getOfflinePlayer(string))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.qrakn.honcho.command.adapter.impl

import com.qrakn.honcho.command.adapter.CommandTypeAdapter
import org.bukkit.Bukkit

class WorldTypeAdapter : CommandTypeAdapter {
override fun <T> convert(string: String, type: Class<T>): T {
return type.cast(Bukkit.getWorld(string))
}
}