feat: Add /dh command
This commit is contained in:
@@ -51,7 +51,7 @@ public class FirmKeybindsInVanillaControlsPatch {
|
|||||||
var config = FirmamentKeyBindings.INSTANCE.getKeyBindings().get(binding);
|
var config = FirmamentKeyBindings.INSTANCE.getKeyBindings().get(binding);
|
||||||
if (config == null) return;
|
if (config == null) return;
|
||||||
resetButton.active = false;
|
resetButton.active = false;
|
||||||
editButton.setMessage(Text.translatable("firmament.keybinding.external", config.value.format()));
|
editButton.setMessage(Text.translatable("firmament.keybinding.external", config.getValue().format()));
|
||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package moe.nea.firmament.mixins;
|
||||||
|
|
||||||
|
import moe.nea.firmament.features.chat.QuickCommands;
|
||||||
|
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||||
|
import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(ClientPlayNetworkHandler.class)
|
||||||
|
public class SaveOriginalCommandTreePacket {
|
||||||
|
@Inject(method = "onCommandTree", at = @At(value = "RETURN"))
|
||||||
|
private void saveUnmodifiedCommandTree(CommandTreeS2CPacket packet, CallbackInfo ci) {
|
||||||
|
QuickCommands.INSTANCE.setLastReceivedTreePacket(packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
|
|
||||||
|
|
||||||
package moe.nea.firmament.features.chat
|
package moe.nea.firmament.features.chat
|
||||||
|
|
||||||
|
import com.mojang.brigadier.CommandDispatcher
|
||||||
import com.mojang.brigadier.context.CommandContext
|
import com.mojang.brigadier.context.CommandContext
|
||||||
|
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback
|
||||||
|
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource
|
||||||
|
import net.fabricmc.fabric.impl.command.client.ClientCommandInternals
|
||||||
|
import net.minecraft.command.CommandRegistryAccess
|
||||||
|
import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket
|
||||||
import net.minecraft.text.Text
|
import net.minecraft.text.Text
|
||||||
import moe.nea.firmament.annotations.Subscribe
|
import moe.nea.firmament.annotations.Subscribe
|
||||||
import moe.nea.firmament.commands.DefaultSource
|
import moe.nea.firmament.commands.DefaultSource
|
||||||
@@ -12,13 +16,44 @@ import moe.nea.firmament.commands.thenArgument
|
|||||||
import moe.nea.firmament.commands.thenExecute
|
import moe.nea.firmament.commands.thenExecute
|
||||||
import moe.nea.firmament.events.CommandEvent
|
import moe.nea.firmament.events.CommandEvent
|
||||||
import moe.nea.firmament.features.FirmamentFeature
|
import moe.nea.firmament.features.FirmamentFeature
|
||||||
|
import moe.nea.firmament.gui.config.ManagedConfig
|
||||||
|
import moe.nea.firmament.gui.config.ManagedOption
|
||||||
import moe.nea.firmament.util.MC
|
import moe.nea.firmament.util.MC
|
||||||
import moe.nea.firmament.util.SBData
|
import moe.nea.firmament.util.SBData
|
||||||
|
import moe.nea.firmament.util.grey
|
||||||
|
import moe.nea.firmament.util.tr
|
||||||
|
|
||||||
object QuickCommands : FirmamentFeature {
|
object QuickCommands : FirmamentFeature {
|
||||||
override val identifier: String
|
override val identifier: String
|
||||||
get() = "quick-commands"
|
get() = "quick-commands"
|
||||||
|
|
||||||
|
object TConfig : ManagedConfig("quick-commands", Category.CHAT) {
|
||||||
|
val enableJoin by toggle("join") { true }
|
||||||
|
val enableDh by toggle("dh") { true }
|
||||||
|
override fun onChange(option: ManagedOption<*>) {
|
||||||
|
reloadCommands()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun reloadCommands() {
|
||||||
|
val lastPacket = lastReceivedTreePacket ?: return
|
||||||
|
val network = MC.networkHandler ?: return
|
||||||
|
val fallback = ClientCommandInternals.getActiveDispatcher()
|
||||||
|
try {
|
||||||
|
val dispatcher = CommandDispatcher<FabricClientCommandSource>()
|
||||||
|
ClientCommandInternals.setActiveDispatcher(dispatcher)
|
||||||
|
ClientCommandRegistrationCallback.EVENT.invoker()
|
||||||
|
.register(dispatcher, CommandRegistryAccess.of(network.combinedDynamicRegistries,
|
||||||
|
network.enabledFeatures))
|
||||||
|
ClientCommandInternals.finalizeInit()
|
||||||
|
network.onCommandTree(lastPacket)
|
||||||
|
} catch (ex: Exception) {
|
||||||
|
ClientCommandInternals.setActiveDispatcher(fallback)
|
||||||
|
throw ex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun removePartialPrefix(text: String, prefix: String): String? {
|
fun removePartialPrefix(text: String, prefix: String): String? {
|
||||||
var lf: String? = null
|
var lf: String? = null
|
||||||
for (i in 1..prefix.length) {
|
for (i in 1..prefix.length) {
|
||||||
@@ -29,11 +64,30 @@ object QuickCommands : FirmamentFeature {
|
|||||||
return lf
|
return lf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var lastReceivedTreePacket: CommandTreeS2CPacket? = null
|
||||||
|
|
||||||
val kuudraLevelNames = listOf("NORMAL", "HOT", "BURNING", "FIERY", "INFERNAL")
|
val kuudraLevelNames = listOf("NORMAL", "HOT", "BURNING", "FIERY", "INFERNAL")
|
||||||
val dungeonLevelNames = listOf("ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN")
|
val dungeonLevelNames = listOf("ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN")
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
fun onCommands(it: CommandEvent) {
|
fun registerDh(event: CommandEvent) {
|
||||||
|
if (!TConfig.enableDh) return
|
||||||
|
event.register("dh") {
|
||||||
|
thenExecute {
|
||||||
|
MC.sendCommand("warp dhub")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
event.register("dn") {
|
||||||
|
thenExecute {
|
||||||
|
MC.sendChat(tr("firmament.quickwarp.deez-nutz", "Warping to... Deez Nuts!").grey())
|
||||||
|
MC.sendCommand("warp dhub")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
fun registerJoin(it: CommandEvent) {
|
||||||
|
if (!TConfig.enableJoin) return
|
||||||
it.register("join") {
|
it.register("join") {
|
||||||
thenArgument("what", RestArgumentType) { what ->
|
thenArgument("what", RestArgumentType) { what ->
|
||||||
thenExecute {
|
thenExecute {
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import org.lwjgl.glfw.GLFW
|
|||||||
import kotlinx.serialization.encodeToString
|
import kotlinx.serialization.encodeToString
|
||||||
import kotlinx.serialization.json.JsonElement
|
import kotlinx.serialization.json.JsonElement
|
||||||
import kotlinx.serialization.json.JsonObject
|
import kotlinx.serialization.json.JsonObject
|
||||||
import kotlin.enums.enumEntries
|
|
||||||
import kotlin.io.path.createDirectories
|
import kotlin.io.path.createDirectories
|
||||||
import kotlin.io.path.readText
|
import kotlin.io.path.readText
|
||||||
import kotlin.io.path.writeText
|
import kotlin.io.path.writeText
|
||||||
@@ -135,7 +134,7 @@ abstract class ManagedConfig(
|
|||||||
return StringIdentifiable.createCodec { x() }
|
return StringIdentifiable.createCodec { x() }
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: wait on https://youtrack.jetbrains.com/issue/KT-73434
|
// TODO: wait on https://youtrack.jetbrains.com/issue/KT-73434
|
||||||
// protected inline fun <reified E> choice(
|
// protected inline fun <reified E> choice(
|
||||||
// propertyName: String,
|
// propertyName: String,
|
||||||
// noinline default: () -> E
|
// noinline default: () -> E
|
||||||
@@ -148,6 +147,8 @@ abstract class ManagedConfig(
|
|||||||
// default
|
// default
|
||||||
// )
|
// )
|
||||||
// }
|
// }
|
||||||
|
open fun onChange(option: ManagedOption<*>) {
|
||||||
|
}
|
||||||
|
|
||||||
protected fun duration(
|
protected fun duration(
|
||||||
propertyName: String,
|
propertyName: String,
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import kotlinx.serialization.json.JsonObject
|
|||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
import net.minecraft.text.Text
|
import net.minecraft.text.Text
|
||||||
import moe.nea.firmament.Firmament
|
|
||||||
import moe.nea.firmament.util.ErrorUtil
|
import moe.nea.firmament.util.ErrorUtil
|
||||||
|
|
||||||
class ManagedOption<T : Any>(
|
class ManagedOption<T : Any>(
|
||||||
@@ -28,7 +27,13 @@ class ManagedOption<T : Any>(
|
|||||||
val descriptionTranslationKey = "firmament.config.${element.name}.${propertyName}.description"
|
val descriptionTranslationKey = "firmament.config.${element.name}.${propertyName}.description"
|
||||||
val labelDescription: Text = Text.translatable(descriptionTranslationKey)
|
val labelDescription: Text = Text.translatable(descriptionTranslationKey)
|
||||||
|
|
||||||
lateinit var value: T
|
private var actualValue: T? = null
|
||||||
|
var value: T
|
||||||
|
get() = actualValue ?: error("Lateinit variable not initialized")
|
||||||
|
set(value) {
|
||||||
|
actualValue = value
|
||||||
|
element.onChange(this)
|
||||||
|
}
|
||||||
|
|
||||||
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
|
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
|
||||||
this.value = value
|
this.value = value
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ accessible class net/minecraft/client/render/RenderLayer$MultiPhase
|
|||||||
accessible class net/minecraft/client/render/RenderLayer$MultiPhaseParameters
|
accessible class net/minecraft/client/render/RenderLayer$MultiPhaseParameters
|
||||||
accessible class net/minecraft/client/font/TextRenderer$Drawer
|
accessible class net/minecraft/client/font/TextRenderer$Drawer
|
||||||
accessible field net/minecraft/client/gui/hud/InGameHud SCOREBOARD_ENTRY_COMPARATOR Ljava/util/Comparator;
|
accessible field net/minecraft/client/gui/hud/InGameHud SCOREBOARD_ENTRY_COMPARATOR Ljava/util/Comparator;
|
||||||
|
accessible field net/minecraft/client/network/ClientPlayNetworkHandler combinedDynamicRegistries Lnet/minecraft/registry/DynamicRegistryManager$Immutable;
|
||||||
|
|
||||||
accessible field net/minecraft/client/render/item/HeldItemRenderer itemRenderer Lnet/minecraft/client/render/item/ItemRenderer;
|
accessible field net/minecraft/client/render/item/HeldItemRenderer itemRenderer Lnet/minecraft/client/render/item/ItemRenderer;
|
||||||
accessible field net/minecraft/client/render/item/ItemModels missingModelSupplier Ljava/util/function/Supplier;
|
accessible field net/minecraft/client/render/item/ItemModels missingModelSupplier Ljava/util/function/Supplier;
|
||||||
|
|||||||
@@ -180,6 +180,11 @@
|
|||||||
"firmament.config.pristine-profit.position.description": "Edit the pristine profit hud location.",
|
"firmament.config.pristine-profit.position.description": "Edit the pristine profit hud location.",
|
||||||
"firmament.config.pristine-profit.timeout": "Timeout (0 = disabled)",
|
"firmament.config.pristine-profit.timeout": "Timeout (0 = disabled)",
|
||||||
"firmament.config.pristine-profit.timeout.description": "Track the profit you make from pristine gemstones while mining. Set to 0 seconds to disable the HUD.",
|
"firmament.config.pristine-profit.timeout.description": "Track the profit you make from pristine gemstones while mining. Set to 0 seconds to disable the HUD.",
|
||||||
|
"firmament.config.quick-commands": "Quick Commands",
|
||||||
|
"firmament.config.quick-commands.dh": "Enable /dh",
|
||||||
|
"firmament.config.quick-commands.dh.description": "Warps you to the dungeon hub.",
|
||||||
|
"firmament.config.quick-commands.join": "Enable /join",
|
||||||
|
"firmament.config.quick-commands.join.description": "Join various types of instances like dungeons using short hands like /join f1, /join k1, /join m7",
|
||||||
"firmament.config.repo": "Firmament Repo Settings",
|
"firmament.config.repo": "Firmament Repo Settings",
|
||||||
"firmament.config.repo.autoUpdate": "Auto Update",
|
"firmament.config.repo.autoUpdate": "Auto Update",
|
||||||
"firmament.config.repo.autoUpdate.description": "Automatically download new items for the item list on every startup.",
|
"firmament.config.repo.autoUpdate.description": "Automatically download new items for the item list on every startup.",
|
||||||
|
|||||||
Reference in New Issue
Block a user