Skip to content

Commit

Permalink
gravy dm
Browse files Browse the repository at this point in the history
Signed-off-by: J10a1n15 <[email protected]>
  • Loading branch information
j10a1n15 committed Oct 3, 2024
1 parent 3577eda commit afcb5d7
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 44 deletions.
Original file line number Diff line number Diff line change
@@ -1,35 +1,12 @@
package at.hannibal2.skyhanni.config.commands

import net.minecraft.command.ICommandSender
import net.minecraft.util.BlockPos

// TODO: Gravy's dm
class CommandBuilder(val name: String) {
var description: String = ""
var category: CommandCategory = CommandCategory.MAIN
var aliases: List<String> = emptyList()
var autoComplete: ((Array<String>) -> List<String>) = { listOf() }
var callback: (Array<String>) -> Unit = {}

fun toSimpleCommand() = SimpleCommand(
name.lowercase(),
aliases,
createCommand(callback),
object : SimpleCommand.TabCompleteRunnable {
override fun tabComplete(
sender: ICommandSender?,
args: Array<String>?,
pos: BlockPos?,
): List<String> {
return autoComplete(args ?: emptyArray())
}
},
)

private fun createCommand(function: (Array<String>) -> Unit) = object : SimpleCommand.ProcessCommandRunnable() {
override fun processCommand(sender: ICommandSender?, args: Array<String>?) {
if (args != null) function(args.asList().toTypedArray())
}
}
fun toSimpleCommand() = SimpleCommand(name.lowercase(), aliases, callback, autoComplete)
}

Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,25 @@ import net.minecraft.command.ICommandSender
import net.minecraft.util.BlockPos

class SimpleCommand(
private val commandName: String,
private var aliases: List<String>,
private val runnable: ProcessCommandRunnable,
private var tabRunnable: TabCompleteRunnable?,
private val name: String,
private val aliases: List<String>,
private val callback: (Array<String>) -> Unit,
private val tabCallback: ((Array<String>) -> List<String>) = { emptyList() },
) : CommandBase() {

abstract class ProcessCommandRunnable {
abstract fun processCommand(sender: ICommandSender?, args: Array<String>?)
}

interface TabCompleteRunnable {
fun tabComplete(sender: ICommandSender?, args: Array<String>?, pos: BlockPos?): List<String>
}

override fun canCommandSenderUseCommand(sender: ICommandSender) = true

override fun getCommandName() = commandName

override fun getCommandName() = name
override fun getCommandAliases() = aliases

override fun getCommandUsage(sender: ICommandSender) = "/$commandName"
override fun getCommandUsage(sender: ICommandSender) = "/$name"

override fun processCommand(sender: ICommandSender, args: Array<String>) {
try {
runnable.processCommand(sender, args)
callback(args)
} catch (e: Throwable) {
ErrorManager.logErrorWithData(e, "Error while running command /$commandName")
ErrorManager.logErrorWithData(e, "Error while running command /$name")
}
}

override fun addTabCompletionOptions(sender: ICommandSender, args: Array<String>, pos: BlockPos) =
if (tabRunnable != null) tabRunnable!!.tabComplete(sender, args, pos) else null
tabCallback(args).takeIf { it.isNotEmpty() }
}

0 comments on commit afcb5d7

Please sign in to comment.