feat: Allow opening config with just /firm
This commit is contained in:
@@ -0,0 +1,42 @@
|
|||||||
|
package moe.nea.firmament.mixins;
|
||||||
|
|
||||||
|
import com.llamalad7.mixinextras.sugar.Local;
|
||||||
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
|
import com.mojang.brigadier.ParseResults;
|
||||||
|
import com.mojang.brigadier.StringReader;
|
||||||
|
import com.mojang.brigadier.context.CommandContextBuilder;
|
||||||
|
import com.mojang.brigadier.tree.CommandNode;
|
||||||
|
import moe.nea.firmament.util.ErrorUtil;
|
||||||
|
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.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
@Mixin(CommandDispatcher.class)
|
||||||
|
public class RedirectWithoutSubCommands<S> {
|
||||||
|
@Inject(
|
||||||
|
method = "parseNodes",
|
||||||
|
at = @At(
|
||||||
|
value = "INVOKE",
|
||||||
|
target = "Lcom/mojang/brigadier/context/CommandContextBuilder;withCommand(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/context/CommandContextBuilder;",
|
||||||
|
shift = At.Shift.AFTER
|
||||||
|
)
|
||||||
|
)
|
||||||
|
private void injectCommandForRedirects(
|
||||||
|
CommandNode<S> node, StringReader originalReader, CommandContextBuilder<S> contextSoFar, CallbackInfoReturnable<ParseResults<S>> cir,
|
||||||
|
@Local(index = 10) CommandContextBuilder<S> context,
|
||||||
|
@Local(index = 9) CommandNode<S> child
|
||||||
|
) {
|
||||||
|
var p = child;
|
||||||
|
var set = new HashSet<>();
|
||||||
|
if (context.getCommand() == null && p.getRedirect() != null) {
|
||||||
|
p = p.getRedirect();
|
||||||
|
context.withCommand(p.getCommand());
|
||||||
|
if (!set.add(p)) {
|
||||||
|
ErrorUtil.INSTANCE.softError("Redirect circle detected in " + p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,14 +3,7 @@ package moe.nea.firmament.commands
|
|||||||
import com.mojang.brigadier.CommandDispatcher
|
import com.mojang.brigadier.CommandDispatcher
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType.string
|
import com.mojang.brigadier.arguments.StringArgumentType.string
|
||||||
import io.ktor.client.statement.bodyAsText
|
import io.ktor.client.statement.bodyAsText
|
||||||
import java.nio.file.Path
|
|
||||||
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource
|
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource
|
||||||
import kotlin.io.path.exists
|
|
||||||
import kotlin.io.path.fileSize
|
|
||||||
import kotlin.io.path.isDirectory
|
|
||||||
import kotlin.io.path.isReadable
|
|
||||||
import kotlin.io.path.isRegularFile
|
|
||||||
import kotlin.io.path.listDirectoryEntries
|
|
||||||
import net.minecraft.nbt.NbtOps
|
import net.minecraft.nbt.NbtOps
|
||||||
import net.minecraft.text.Text
|
import net.minecraft.text.Text
|
||||||
import net.minecraft.text.TextCodecs
|
import net.minecraft.text.TextCodecs
|
||||||
@@ -41,11 +34,7 @@ import moe.nea.firmament.util.SkyblockId
|
|||||||
import moe.nea.firmament.util.accessors.messages
|
import moe.nea.firmament.util.accessors.messages
|
||||||
import moe.nea.firmament.util.collections.InstanceList
|
import moe.nea.firmament.util.collections.InstanceList
|
||||||
import moe.nea.firmament.util.collections.WeakCache
|
import moe.nea.firmament.util.collections.WeakCache
|
||||||
import moe.nea.firmament.util.darkGreen
|
|
||||||
import moe.nea.firmament.util.lime
|
|
||||||
import moe.nea.firmament.util.mc.SNbtFormatter
|
import moe.nea.firmament.util.mc.SNbtFormatter
|
||||||
import moe.nea.firmament.util.purple
|
|
||||||
import moe.nea.firmament.util.red
|
|
||||||
import moe.nea.firmament.util.tr
|
import moe.nea.firmament.util.tr
|
||||||
import moe.nea.firmament.util.unformattedString
|
import moe.nea.firmament.util.unformattedString
|
||||||
|
|
||||||
@@ -323,7 +312,10 @@ fun firmamentCommand() = literal("firmament") {
|
|||||||
source.sendFeedback(tr("firmament.repo.info.location",
|
source.sendFeedback(tr("firmament.repo.info.location",
|
||||||
"Saved location: ${debugPath(RepoDownloadManager.repoSavedLocation)}"))
|
"Saved location: ${debugPath(RepoDownloadManager.repoSavedLocation)}"))
|
||||||
source.sendFeedback(tr("firmament.repo.info.reloadstatus",
|
source.sendFeedback(tr("firmament.repo.info.reloadstatus",
|
||||||
"Incomplete: ${formatBool(RepoManager.neuRepo.isIncomplete, trueIsGood = false)}, Unstable ${formatBool(RepoManager.neuRepo.isUnstable, trueIsGood = false)}"))
|
"Incomplete: ${
|
||||||
|
formatBool(RepoManager.neuRepo.isIncomplete,
|
||||||
|
trueIsGood = false)
|
||||||
|
}, Unstable ${formatBool(RepoManager.neuRepo.isUnstable, trueIsGood = false)}"))
|
||||||
source.sendFeedback(tr("firmament.repo.info.items",
|
source.sendFeedback(tr("firmament.repo.info.items",
|
||||||
"Loaded items: ${RepoManager.neuRepo.items?.items?.size}"))
|
"Loaded items: ${RepoManager.neuRepo.items?.items?.size}"))
|
||||||
source.sendFeedback(tr("firmament.repo.info.itemcache",
|
source.sendFeedback(tr("firmament.repo.info.itemcache",
|
||||||
@@ -333,6 +325,9 @@ fun firmamentCommand() = literal("firmament") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
thenExecute {
|
||||||
|
AllConfigsGui.showAllGuis()
|
||||||
|
}
|
||||||
CommandEvent.SubCommand.publish(CommandEvent.SubCommand(this@literal))
|
CommandEvent.SubCommand.publish(CommandEvent.SubCommand(this@literal))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user