首次提交 AutoDig Mod

这个提交包含在:
lyizai
2026-08-20 21:04:27 +08:00
当前提交 95c4e97db0
共修改 26 个文件,包含 1851 行新增和 0 行删除
@@ -0,0 +1,65 @@
package autodig.client.command;
import autodig.client.AutoDigModClient;
import autodig.client.config.MineTask;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.StringArgumentType;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import net.minecraft.text.Text;
/**
* AutoDig 客户端命令。
*
* <p>提供 {@code /autodig gui}(打开界面)、{@code /autodig start <任务>}
* (直接启动)、{@code /autodig stop}(停止当前任务)三个快捷入口,
* 方便在未绑定的快捷键场景下使用。</p>
*/
public final class AutoDigCommands {
private AutoDigCommands() {
}
public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher) {
dispatcher.register(com.mojang.brigadier.builder.LiteralArgumentBuilder
.<FabricClientCommandSource>literal("autodig")
.then(com.mojang.brigadier.builder.LiteralArgumentBuilder.<FabricClientCommandSource>literal("gui")
.executes(ctx -> {
AutoDigModClient.instance().openGui();
return 1;
}))
.then(com.mojang.brigadier.builder.LiteralArgumentBuilder.<FabricClientCommandSource>literal("start")
.then(com.mojang.brigadier.builder.RequiredArgumentBuilder
.<FabricClientCommandSource, String>argument("task", StringArgumentType.word())
.executes(ctx -> {
String name = StringArgumentType.getString(ctx, "task");
MineTask task = parseTask(name);
if (task == null) {
ctx.getSource().sendFeedback(Text.literal("未知任务: " + name + "(可用 diamond / debris)"));
return 0;
}
AutoDigModClient mod = AutoDigModClient.instance();
mod.config().task = task;
mod.saveConfig();
mod.sendToast("AutoDig: 已选择任务 " + task.label());
return 1;
})))
.then(com.mojang.brigadier.builder.LiteralArgumentBuilder.<FabricClientCommandSource>literal("stop")
.executes(ctx -> {
AutoDigModClient mod = AutoDigModClient.instance();
mod.config().task = MineTask.NONE;
mod.saveConfig();
mod.bridge().cancelAll();
mod.sendToast("AutoDig: 已停止");
return 1;
})));
}
private static MineTask parseTask(String name) {
return switch (name.toLowerCase()) {
case "diamond", "钻石" -> MineTask.DIAMOND;
case "debris", "ancient_debris", "远古残骸" -> MineTask.ANCIENT_DEBRIS;
case "none", "stop", "空闲" -> MineTask.NONE;
default -> null;
};
}
}