aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/firmament/events
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/events')
-rw-r--r--src/main/kotlin/moe/nea/firmament/events/CommandEvent.kt16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/events/CommandEvent.kt b/src/main/kotlin/moe/nea/firmament/events/CommandEvent.kt
index 5710245..1d1f8d3 100644
--- a/src/main/kotlin/moe/nea/firmament/events/CommandEvent.kt
+++ b/src/main/kotlin/moe/nea/firmament/events/CommandEvent.kt
@@ -1,5 +1,6 @@
/*
* SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
+ * SPDX-FileCopyrightText: 2024 Linnea Gräf <nea@nea.moe>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
@@ -12,6 +13,7 @@ import net.minecraft.command.CommandRegistryAccess
import moe.nea.firmament.commands.CaseInsensitiveLiteralCommandNode
import moe.nea.firmament.commands.DefaultSource
import moe.nea.firmament.commands.literal
+import moe.nea.firmament.commands.thenLiteral
data class CommandEvent(
val dispatcher: CommandDispatcher<DefaultSource>,
@@ -20,6 +22,20 @@ data class CommandEvent(
) : FirmamentEvent() {
companion object : FirmamentEventBus<CommandEvent>()
+ /**
+ * Register subcommands to `/firm`. For new top level commands use [CommandEvent]. Cannot be used to register
+ * subcommands to other commands.
+ */
+ data class SubCommand(
+ val builder: CaseInsensitiveLiteralCommandNode.Builder<DefaultSource>,
+ ) : FirmamentEvent() {
+ companion object : FirmamentEventBus<SubCommand>()
+
+ fun subcommand(name: String, block: CaseInsensitiveLiteralCommandNode.Builder<DefaultSource>.() -> Unit) {
+ builder.thenLiteral(name, block)
+ }
+ }
+
fun deleteCommand(name: String) {
dispatcher.root.children.removeIf { it.name.equals(name, ignoreCase = false) }
serverCommands?.root?.children?.removeIf { it.name.equals(name, ignoreCase = false) }