aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/events/CommandEvent.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/events/CommandEvent.kt')
-rw-r--r--src/main/kotlin/events/CommandEvent.kt45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/main/kotlin/events/CommandEvent.kt b/src/main/kotlin/events/CommandEvent.kt
new file mode 100644
index 0000000..cc9cf45
--- /dev/null
+++ b/src/main/kotlin/events/CommandEvent.kt
@@ -0,0 +1,45 @@
+
+
+package moe.nea.firmament.events
+
+import com.mojang.brigadier.CommandDispatcher
+import com.mojang.brigadier.tree.LiteralCommandNode
+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>,
+ val ctx: CommandRegistryAccess,
+ val serverCommands: CommandDispatcher<*>?,
+) : 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) }
+ }
+
+ fun register(
+ name: String,
+ block: CaseInsensitiveLiteralCommandNode.Builder<DefaultSource>.() -> Unit
+ ): LiteralCommandNode<DefaultSource> {
+ return dispatcher.register(literal(name, block))
+ }
+}