Add quick /join command for catacombs and kuudra
This commit is contained in:
@@ -10,6 +10,7 @@ import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.serializer
|
||||
import moe.nea.firmament.Firmament
|
||||
import moe.nea.firmament.features.chat.ChatLinks
|
||||
import moe.nea.firmament.features.chat.QuickCommands
|
||||
import moe.nea.firmament.features.debug.DebugView
|
||||
import moe.nea.firmament.features.debug.DeveloperFeatures
|
||||
import moe.nea.firmament.features.debug.MinorTrolling
|
||||
@@ -53,6 +54,7 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature
|
||||
loadFeature(PowerUserTools)
|
||||
loadFeature(ChatLinks)
|
||||
loadFeature(CompatibliltyFeatures)
|
||||
loadFeature(QuickCommands)
|
||||
loadFeature(SaveCursorPosition)
|
||||
loadFeature(CustomSkyBlockTextures)
|
||||
loadFeature(PriceData)
|
||||
|
||||
100
src/main/kotlin/moe/nea/firmament/features/chat/QuickCommands.kt
Normal file
100
src/main/kotlin/moe/nea/firmament/features/chat/QuickCommands.kt
Normal file
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package moe.nea.firmament.features.chat
|
||||
|
||||
import com.mojang.brigadier.context.CommandContext
|
||||
import net.minecraft.text.Text
|
||||
import moe.nea.firmament.commands.DefaultSource
|
||||
import moe.nea.firmament.commands.RestArgumentType
|
||||
import moe.nea.firmament.commands.get
|
||||
import moe.nea.firmament.commands.thenArgument
|
||||
import moe.nea.firmament.commands.thenExecute
|
||||
import moe.nea.firmament.events.CommandEvent
|
||||
import moe.nea.firmament.features.FirmamentFeature
|
||||
import moe.nea.firmament.util.MC
|
||||
import moe.nea.firmament.util.SBData
|
||||
|
||||
object QuickCommands : FirmamentFeature {
|
||||
override val identifier: String
|
||||
get() = "quick-commands"
|
||||
|
||||
fun removePartialPrefix(text: String, prefix: String): String? {
|
||||
var lf: String? = null
|
||||
for (i in 1..prefix.length) {
|
||||
if (text.startsWith(prefix.substring(0, i))) {
|
||||
lf = text.substring(i)
|
||||
}
|
||||
}
|
||||
return lf
|
||||
}
|
||||
|
||||
val kuudraLevelNames = listOf("NORMAL", "HOT", "BURNING", "FIERY", "INFERNAL")
|
||||
val dungeonLevelNames = listOf("ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN")
|
||||
override fun onLoad() {
|
||||
CommandEvent.subscribe {
|
||||
it.register("join") {
|
||||
thenArgument("what", RestArgumentType) { what ->
|
||||
thenExecute {
|
||||
val what = this[what]
|
||||
if (!SBData.isOnSkyblock) {
|
||||
MC.sendCommand("join $what")
|
||||
return@thenExecute
|
||||
}
|
||||
val joinName = getNameForFloor(what.replace(" ", "").lowercase())
|
||||
if (joinName == null) {
|
||||
source.sendFeedback(Text.translatable("firmament.quick-commands.join.unknown",what))
|
||||
} else {
|
||||
source.sendFeedback(Text.translatable("firmament.quick-commands.join.success", joinName))
|
||||
MC.sendCommand("joininstance $joinName")
|
||||
}
|
||||
}
|
||||
}
|
||||
thenExecute {
|
||||
source.sendFeedback(Text.translatable("firmament.quick-commands.join.explain"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun CommandContext<DefaultSource>.getNameForFloor(w: String): String? {
|
||||
val kuudraLevel = removePartialPrefix(w, "kuudratier") ?: removePartialPrefix(w, "tier")
|
||||
if (kuudraLevel != null) {
|
||||
val l = kuudraLevel.toIntOrNull()?.let { it - 1 } ?: kuudraLevelNames.indexOfFirst {
|
||||
it.startsWith(
|
||||
kuudraLevel,
|
||||
true
|
||||
)
|
||||
}
|
||||
if (l !in kuudraLevelNames.indices) {
|
||||
source.sendFeedback(Text.translatable("firmament.quick-commands.join.unknown-kuudra", kuudraLevel))
|
||||
return null
|
||||
}
|
||||
return "KUUDRA_${kuudraLevelNames[l]}"
|
||||
}
|
||||
val masterLevel = removePartialPrefix(w, "master")
|
||||
val normalLevel =
|
||||
removePartialPrefix(w, "floor") ?: removePartialPrefix(w, "catacombs") ?: removePartialPrefix(w, "dungeons")
|
||||
val dungeonLevel = masterLevel ?: normalLevel
|
||||
if (dungeonLevel != null) {
|
||||
val l = dungeonLevel.toIntOrNull()?.let { it - 1 } ?: dungeonLevelNames.indexOfFirst {
|
||||
it.startsWith(
|
||||
dungeonLevel,
|
||||
true
|
||||
)
|
||||
}
|
||||
if (masterLevel == null && (l == -1 || null != removePartialPrefix(w, "entrance"))) {
|
||||
return "CATACOMBS_ENTRANCE"
|
||||
}
|
||||
if (l !in dungeonLevelNames.indices) {
|
||||
source.sendFeedback(Text.translatable("firmament.quick-commands.join.unknown-catacombs", kuudraLevel))
|
||||
return null
|
||||
}
|
||||
return "${if (masterLevel != null) "MASTER_" else ""}CATACOMBS_FLOOR_${dungeonLevelNames[l]}"
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user