Skip to content
This repository was archived by the owner on Apr 23, 2025. It is now read-only.

Commit d0d9b16

Browse files
committed
feat(commands): use ListSubCommandInfo in deserialize instead of just String
1 parent 256f8c9 commit d0d9b16

File tree

10 files changed

+42
-44
lines changed

10 files changed

+42
-44
lines changed

common/src/main/java/com/undefined/api/UndefinedAPI.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import com.undefined.api.nms.NMSManager
88
import net.kyori.adventure.platform.bukkit.BukkitAudiences
99
import org.bukkit.plugin.java.JavaPlugin
1010

11-
1211
/**
1312
* Represents a class that provides an undefined API.
1413
*

common/src/main/java/com/undefined/api/command/BaseUndefinedCommand.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.undefined.api.command
22

33
import com.undefined.api.command.info.AllCommand
4+
import com.undefined.api.command.info.ListSubCommandInfo
45
import com.undefined.api.command.sub.*
56
import org.bukkit.command.CommandSender
67
import org.bukkit.command.ConsoleCommandSender
@@ -99,12 +100,18 @@ abstract class BaseUndefinedCommand {
99100
return subCommand
100101
}
101102

102-
fun <T> addListSubCommand(list: CommandSender.() -> List<T>, serialize: T.() -> String = { this.toString() }, deserialize: String.() -> T = { this as T }): ListSubCommand<T> {
103+
fun <T> addListSubCommand(list: CommandSender.() -> List<T>, serialize: T.() -> String = { this.toString() }, deserialize: ListSubCommandInfo<String>.() -> T = { this.value as T }): ListSubCommand<T> {
103104
val subCommand = ListSubCommand(list, serialize, deserialize)
104105
subCommandList.add(subCommand)
105106
return subCommand
106107
}
107108

109+
fun <T> addListSubCommand(list: List<T>, serialize: T.() -> String = { this.toString() }, deserialize: ListSubCommandInfo<String>.() -> T = { this.value as T }): ListSubCommand<T> {
110+
val subCommand = ListSubCommand({ list }, serialize, deserialize)
111+
subCommandList.add(subCommand)
112+
return subCommand
113+
}
114+
108115
fun clearExecute() = genExecute.clear()
109116
fun clearPlayerExecute() = playerExecute.clear()
110117
fun clearConsoleExecute() = consoleExecute.clear()
@@ -120,6 +127,6 @@ abstract class BaseUndefinedCommand {
120127

121128
internal fun getSubCommand(name: String): UndefinedSubCommand? = subCommandList.filter { it.name == name }.getOrNull(0) ?: subCommandList.filter { list.contains(it::class.java) }.getOrNull(0)
122129
abstract fun getNames(sender: CommandSender): List<String>
123-
abstract fun runSpecialExecute(arg: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean
130+
abstract fun runSpecialExecute(args: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean
124131

125132
}

common/src/main/java/com/undefined/api/command/UndefinedCommand.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,14 @@ class UndefinedCommand(name: String, permission: String? = null, description: St
9999
}
100100

101101
override fun getNames(sender: CommandSender): List<String> = listOf()
102-
override fun runSpecialExecute(arg: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean = true
102+
override fun runSpecialExecute(args: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean = true
103103

104104
}
105105

106-
class UndefinedCoreCommand(name: String, permission: String? = null, description: String = "", aliases: List<String> = emptyList(), private val c1: AllCommand.() -> Boolean, private val c2: Pair<CommandSender, Array<out String>?>.() -> MutableList<String> ): BukkitCommand(name) {
106+
class UndefinedCoreCommand(name: String, permission: String? = null, description: String = "", aliases: List<String> = emptyList(), private val execution: AllCommand.() -> Boolean, private val tabCompletion: Pair<CommandSender, Array<out String>?>.() -> MutableList<String>) : BukkitCommand(name) {
107107

108-
override fun execute(p0: CommandSender, p1: String, p2: Array<out String>?): Boolean = c1.invoke(AllCommand(p0, p2))
109-
override fun tabComplete(sender: CommandSender, alias: String, args: Array<out String>?): MutableList<String> = c2.invoke(Pair(sender, args))
108+
override fun execute(sender: CommandSender, alias: String, args: Array<out String>?): Boolean = execution.invoke(AllCommand(sender, args))
109+
override fun tabComplete(sender: CommandSender, alias: String, args: Array<out String>?): MutableList<String> = tabCompletion.invoke(Pair(sender, args))
110110

111111
init {
112112
setDescription(description)

common/src/main/java/com/undefined/api/command/info/CommandInfo.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ data class BooleanSubCommandInfo(val sender: CommandSender, val boolean: Boolean
1616

1717
class EnumSubCommandInfo<T: Enum<T>>(val sender: CommandSender, val value: T)
1818

19-
class ListSubCommandInfo<T>(val sender: CommandSender, val value: T)
19+
data class ListSubCommandInfo<T>(val sender: CommandSender, val value: T)

common/src/main/java/com/undefined/api/command/sub/EnumSubCommand.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ class EnumSubCommand<T: Enum<T>>(
1818

1919
fun clearEnumExecute() = enumExe.clear()
2020

21-
override fun runSpecialExecute(arg: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
22-
if (arg.isEmpty()) return false
23-
val string = arg[indexOf]
21+
override fun runSpecialExecute(args: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
22+
if (args.isEmpty()) return false
23+
val string = args[indexOf]
2424
val enumV = getEnumValue(string)
2525

2626
enumExe.forEach { execution ->

common/src/main/java/com/undefined/api/command/sub/ListSubCommand.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import org.bukkit.command.CommandSender
66
class ListSubCommand<T>(
77
private val subList: CommandSender.() -> List<T>,
88
private val serialize: T.() -> String = { this.toString() },
9-
private val deserialize: String.() -> T = { this as T }
9+
private val deserialize: ListSubCommandInfo<String>.() -> T = { this.value as T }
1010
): UndefinedSubCommand("undefined_api_list") {
1111

1212
private val listExe: MutableList<ListSubCommandInfo<T>.() -> Boolean> = mutableListOf()
@@ -18,13 +18,13 @@ class ListSubCommand<T>(
1818

1919
override fun getNames(sender: CommandSender): List<String> = subList.invoke(sender).map { serialize.invoke(it) }
2020

21-
override fun runSpecialExecute(arg: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
22-
if (arg.isEmpty()) return false
23-
val stringValue = arg[indexOf]
21+
override fun runSpecialExecute(args: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
22+
if (args.isEmpty()) return false
23+
val stringValue = args[indexOf]
2424

2525
try {
26-
val t = deserialize.invoke(stringValue)
27-
listExe.forEach { it.invoke(ListSubCommandInfo(commandSender, t)) }
26+
val value = deserialize.invoke(ListSubCommandInfo(commandSender, stringValue))
27+
listExe.forEach { it.invoke(ListSubCommandInfo(commandSender, value)) }
2828
} catch (_: Exception) {
2929
}
3030

common/src/main/java/com/undefined/api/command/sub/PlayerSubCommand.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ class PlayerSubCommand: UndefinedSubCommand("undefined_api_players") {
1717

1818
override fun getNames(sender: CommandSender): List<String> = Bukkit.getOnlinePlayers().map { it.name }
1919

20-
override fun runSpecialExecute(arg: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
21-
if (arg.isEmpty()) return false
22-
val offinePlayer = Bukkit.getOfflinePlayer(arg[indexOf])
20+
override fun runSpecialExecute(args: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
21+
if (args.isEmpty()) return false
22+
val offinePlayer = Bukkit.getOfflinePlayer(args[indexOf])
2323
if (!offinePlayer.isOnline) return false
2424

2525
targetExe.forEach { execution ->

common/src/main/java/com/undefined/api/command/sub/UndefinedSubCommand.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ import org.bukkit.command.CommandSender
55

66
open class UndefinedSubCommand(val name: String): BaseUndefinedCommand() {
77
override fun getNames(sender: CommandSender): List<String> = listOf(name)
8-
override fun runSpecialExecute(arg: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean = true
8+
override fun runSpecialExecute(args: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean = true
99
}

common/src/main/java/com/undefined/api/command/sub/ValueSubCommand.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ class StringSubCommand: UndefinedSubCommand("undefined_api_value") {
1818

1919
override fun getNames(sender: CommandSender): List<String> = listOf("<text>")
2020

21-
override fun runSpecialExecute(arg: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
22-
if (arg.isEmpty()) return false
23-
val string = arg[indexOf]
21+
override fun runSpecialExecute(args: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
22+
if (args.isEmpty()) return false
23+
val string = args[indexOf]
2424

2525
stringExe.forEach { execution ->
2626
if (!execution.invoke(StringSubCommandInfo(commandSender, string))) return false
@@ -42,9 +42,9 @@ class NumberSubCommand: UndefinedSubCommand("undefined_api_number") {
4242

4343
override fun getNames(sender: CommandSender): List<String> = listOf("<number>")
4444

45-
override fun runSpecialExecute(arg: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
46-
if (arg.isEmpty()) return false
47-
val stringN = arg[indexOf]
45+
override fun runSpecialExecute(args: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
46+
if (args.isEmpty()) return false
47+
val stringN = args[indexOf]
4848

4949
try {
5050
numberExe.forEach { execution ->
@@ -69,9 +69,9 @@ class BooleanSubCommand: UndefinedSubCommand("undefined_api_boolean") {
6969

7070
override fun getNames(sender: CommandSender): List<String> = listOf("true", "false")
7171

72-
override fun runSpecialExecute(arg: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
73-
if (arg.isEmpty()) return false
74-
val stringN = arg[indexOf]
72+
override fun runSpecialExecute(args: Array<out String>, commandSender: CommandSender, indexOf: Int): Boolean {
73+
if (args.isEmpty()) return false
74+
val stringN = args[indexOf]
7575

7676
stringN.toBoolean().let {
7777
booleanExe.forEach { execution ->

server/src/main/java/com/undefined/api/Main.kt

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,12 @@ class Main: JavaPlugin() {
1313
override fun onEnable() {
1414
api = UndefinedAPI(this)
1515

16-
17-
UndefinedCommand("Items")
18-
.addExecutePlayer {
19-
val player = player!!
20-
val text = api.createFakeEntity(EntityType.INTERACTION)!! as NMSInteractionEntity
21-
22-
text.addViewer(player)
23-
text.spawn(player.location)
24-
text.height = 0.5f
25-
text.width = 2f
26-
text.interact { println("Interact") }
27-
28-
return@addExecutePlayer false
29-
}
16+
val list: List<String> = listOf("String", "OtherString", "YetAnotherString")
17+
UndefinedCommand("test")
18+
.addListSubCommand({ list }, deserialize = {
19+
println(this.value)
20+
println(this.sender.name)
21+
})
3022

3123
}
3224
}

0 commit comments

Comments
 (0)