diff options
author | Linnea Gräf <nea@nea.moe> | 2024-05-28 00:04:44 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-05-28 00:04:44 +0200 |
commit | 8a5c5d45f87f38d9a7484b73c0505b95e63a21f1 (patch) | |
tree | b4408211d9ee9e9aea315316b1182462d7d1de2e /src/main/kotlin/commands/BrigadierPatchbay.kt | |
parent | fbd72e2a377a4711190307eed581b8b1d80e3406 (diff) | |
download | ultra-notifier-master.tar.gz ultra-notifier-master.tar.bz2 ultra-notifier-master.zip |
Diffstat (limited to 'src/main/kotlin/commands/BrigadierPatchbay.kt')
-rw-r--r-- | src/main/kotlin/commands/BrigadierPatchbay.kt | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/main/kotlin/commands/BrigadierPatchbay.kt b/src/main/kotlin/commands/BrigadierPatchbay.kt new file mode 100644 index 0000000..7396b6c --- /dev/null +++ b/src/main/kotlin/commands/BrigadierPatchbay.kt @@ -0,0 +1,117 @@ +package moe.nea.ultranotifier.commands + +//#if FORGE +//$$import com.mojang.brigadier.CommandDispatcher +//$$import com.mojang.brigadier.builder.LiteralArgumentBuilder +//$$import com.mojang.brigadier.tree.CommandNode +//$$import moe.nea.ultranotifier.event.CommandRegistrationEvent +//$$import moe.nea.ultranotifier.event.RegistrationFinishedEvent +//$$import moe.nea.ultranotifier.event.UltraNotifierEvents +//$$import moe.nea.ultranotifier.event.UltraSubscribe +//$$import moe.nea.ultranotifier.mixin.AccessorCommandHandler +//$$import net.minecraft.command.CommandBase +//$$import net.minecraft.command.CommandHandler +//$$import net.minecraft.command.ICommandSender +//$$import net.minecraft.util.BlockPos +//$$import net.minecraft.util.ChatComponentText +//$$import net.minecraft.util.text.ITextComponent +//$$import net.minecraftforge.client.ClientCommandHandler +//$$ +//$$fun CommandHandler.getCommandSet() = (this as AccessorCommandHandler).commandSet_ultraNotifier +//$$ +//$$class BridgedCommandSource( +//$$ val sender: ICommandSender +//$$) : UltraCommandSource { +//$$ override fun sendFeedback(text: ITextComponent) { +//$$ sender.addChatMessage(text) +//$$ } +//$$} +//$$ +//$$class BrigadierCommand( +//$$ val dispatcher: CommandDispatcher<UltraCommandSource>, +//$$ val node: CommandNode<UltraCommandSource> +//$$) : CommandBase() { +//$$ override fun addTabCompletionOptions( +//$$ sender: ICommandSender?, +//$$ args: Array<out String>?, +//$$ pos: BlockPos? +//$$ ): MutableList<String> { +//$$ return super.addTabCompletionOptions(sender, args, pos) +//$$ } +//$$ +//$$ override fun canCommandSenderUseCommand(sender: ICommandSender?): Boolean { +//$$ // TODO: proper check here maybe? +//$$ return true +//$$ } +//$$ +//$$ override fun getCommandName(): String { +//$$ return node.name +//$$ } +//$$ +//$$ override fun getCommandUsage(sender: ICommandSender?): String { +//$$ return "" +//$$ } +//$$ +//$$ private fun getCommandLineText(args: Array<out String>) = "${node.name} ${args.joinToString(" ")}".trim() +//$$ +//$$ override fun processCommand(sender: ICommandSender, args: Array<out String>) { +//$$ val source = BridgedCommandSource(sender) +//$$ val results = dispatcher.parse(getCommandLineText(args), source) +//$$ kotlin.runCatching { +//$$ dispatcher.execute(results) +//$$ Unit +//$$ }.recoverCatching { +//$$ source.sendFeedback(ChatComponentText("Could not execute ultra command: ${it.message}")) +//$$ } +//$$ } +//$$} +//$$ +//$$object BrigadierPatchbay { +//$$ +//$$ @UltraSubscribe +//$$ fun onAfterRegistration(event: RegistrationFinishedEvent) { +//$$ fullReload() +//$$ } +//$$ +//$$ @UltraSubscribe +//$$ fun onCommands(event: CommandRegistrationEvent) { +//$$ event.dispatcher +//$$ .register(LiteralArgumentBuilder.literal<UltraCommandSource>("reloadcommands") +//$$ .executes { +//$$ it.source.sendFeedback(literalText("Reloading commands")) +//$$ fullReload() +//$$ it.source.sendFeedback(literalText("Reload completed")) +//$$ 0 +//$$ }) +//$$ } +//$$ +//$$ fun fullReload() { +//$$ val handler = ClientCommandHandler.instance +//$$ unpatch(handler) +//$$ val dispatcher = createDispatcher() +//$$ UltraNotifierEvents.post(CommandRegistrationEvent(dispatcher)) +//$$ patch(handler, dispatcher) +//$$ } +//$$ +//$$ fun createDispatcher() = CommandDispatcher<UltraCommandSource>() +//$$ +//$$ fun unpatch(handler: CommandHandler) { +//$$ handler.getCommandSet() +//$$ .removeIf { +//$$ it is BrigadierCommand +//$$ } +//$$ handler.commands.entries +//$$ .removeIf { +//$$ it.value is BrigadierCommand +//$$ } +//$$ } +//$$ +//$$ fun patch(handler: CommandHandler, dispatcher: CommandDispatcher<UltraCommandSource>) { +//$$ dispatcher.root.children +//$$ .map { BrigadierCommand(dispatcher, it) } +//$$ .forEach(handler::registerCommand) +//$$ } +//$$} +//#endif + + |