From e887067b7ecfa9d8e040008cca8d26c194f8c1a5 Mon Sep 17 00:00:00 2001 From: nea Date: Sat, 21 Oct 2023 17:28:00 +0200 Subject: Add tab completion to /warp --- .../moe/nea/firmament/features/FeatureManager.kt | 2 + .../nea/firmament/features/chat/AutoCompletions.kt | 60 ++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/main/kotlin/moe/nea/firmament/features/chat/AutoCompletions.kt (limited to 'src/main/kotlin/moe/nea/firmament/features') diff --git a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt index b9d343c..2683775 100644 --- a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt +++ b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt @@ -9,6 +9,7 @@ package moe.nea.firmament.features import kotlinx.serialization.Serializable import kotlinx.serialization.serializer import moe.nea.firmament.Firmament +import moe.nea.firmament.features.chat.AutoCompletions import moe.nea.firmament.features.chat.ChatLinks import moe.nea.firmament.features.chat.QuickCommands import moe.nea.firmament.features.debug.DebugView @@ -48,6 +49,7 @@ object FeatureManager : DataHolder(serializer(), "feature if (hasAutoloaded) return loadFeature(MinorTrolling) loadFeature(FairySouls) + loadFeature(AutoCompletions) // TODO: loadFeature(FishingWarning) loadFeature(SlotLocking) loadFeature(StorageOverlay) diff --git a/src/main/kotlin/moe/nea/firmament/features/chat/AutoCompletions.kt b/src/main/kotlin/moe/nea/firmament/features/chat/AutoCompletions.kt new file mode 100644 index 0000000..9912321 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/features/chat/AutoCompletions.kt @@ -0,0 +1,60 @@ +/* + * SPDX-FileCopyrightText: 2023 Linnea Gräf + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package moe.nea.firmament.features.chat + +import com.mojang.brigadier.arguments.StringArgumentType.string +import moe.nea.firmament.commands.get +import moe.nea.firmament.commands.suggestsList +import moe.nea.firmament.commands.thenArgument +import moe.nea.firmament.commands.thenExecute +import moe.nea.firmament.events.CommandEvent +import moe.nea.firmament.events.MaskCommands +import moe.nea.firmament.features.FirmamentFeature +import moe.nea.firmament.gui.config.ManagedConfig +import moe.nea.firmament.repo.RepoManager +import moe.nea.firmament.util.MC + +object AutoCompletions : FirmamentFeature { + + object TConfig : ManagedConfig(identifier) { + val provideWarpTabCompletion by toggle("warp-complete") { true } + val replaceWarpIsByWarpIsland by toggle("warp-is") { true } + } + + override val config: ManagedConfig? + get() = TConfig + override val identifier: String + get() = "auto-completions" + + override fun onLoad() { + MaskCommands.subscribe { + if (TConfig.provideWarpTabCompletion) { + it.mask("warp") + } + } + CommandEvent.subscribe { + if (TConfig.provideWarpTabCompletion) { + it.deleteCommand("warp") + it.register("warp") { + thenArgument("to", string()) { toArg -> + suggestsList { + RepoManager.neuRepo.constants?.islands?.warps?.flatMap { listOf(it.warp) + it.aliases } ?: listOf() + } + thenExecute { + val warpName = get(toArg) + if (warpName == "is" && TConfig.replaceWarpIsByWarpIsland) { + MC.sendServerCommand("warp island") + } else { + MC.sendServerCommand("warp ${warpName}") + } + } + } + } + } + } + } +} -- cgit