首次提交 AutoDig Mod

这个提交包含在:
lyizai
2026-08-20 21:04:27 +08:00
当前提交 95c4e97db0
共修改 26 个文件,包含 1851 行新增和 0 行删除
@@ -0,0 +1,111 @@
package autodig.client;
import autodig.client.bridge.BaritoneBridge;
import autodig.client.command.AutoDigCommands;
import autodig.client.config.ConfigStore;
import autodig.client.config.DigConfig;
import autodig.client.controller.DigController;
import autodig.client.gui.AutoDigGui;
import com.mojang.brigadier.CommandDispatcher;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import net.minecraft.text.Text;
/**
* AutoDig 客户端主入口(Fabric ClientModInitializer)。
*
* <p>负责:加载配置、注册一键唤出 GUI 的快捷键、每帧把配置同步给 Baritone 并
* 驱动挖矿控制器、注册命令。通过单例 {@link #instance()} 向其他模块提供入口。</p>
*/
@Environment(EnvType.CLIENT)
public final class AutoDigModClient implements ClientModInitializer {
private static AutoDigModClient instance;
private final ConfigStore configStore = new ConfigStore();
private final DigController controller = new DigController();
private DigConfig config;
private boolean openGuiRequested;
private KeyBinding guiKey;
private static final int KEY_R = 82;
private static final int KEY_LEFT_CTRL = 341;
private static final int KEY_RIGHT_CTRL = 345;
@Override
public void onInitializeClient() {
instance = this;
this.config = this.configStore.load();
this.guiKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
"key.autodig.open", KEY_R, "category.autodig"));
ClientTickEvents.END_CLIENT_TICK.register(client -> {
// 同步模组配置到 Baritone(工具切换 / 避岩浆 / 避怪/保命)
this.bridge().applyConfig(this.config);
this.controller.tick(this.config);
while (this.guiKey.wasPressed()) {
if (this.isCtrlDown(client)) {
this.openGui();
}
}
if (this.openGuiRequested) {
this.openGuiRequested = false;
try {
client.setScreen(new AutoDigGui(this));
} catch (Throwable t) {
if (client.player != null) {
client.player.sendMessage(Text.literal("AutoDig GUI \u6253\u5f00\u5931\u8d25: " + t), false);
}
}
}
});
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess)
-> AutoDigCommands.register(dispatcher));
}
public static AutoDigModClient instance() {
return instance;
}
public DigController controller() {
return this.controller;
}
public DigConfig config() {
return this.config;
}
public BaritoneBridge bridge() {
return this.controller.bridge();
}
public void saveConfig() {
this.configStore.save(this.config);
}
/** 请求打开 AutoDig GUI(下一帧安全执行)。 */
public void openGui() {
this.openGuiRequested = true;
}
/** 向玩家聊天栏发送一条提示。 */
public void sendToast(String message) {
MinecraftClient client = MinecraftClient.getInstance();
if (client.player != null) {
client.player.sendMessage(Text.literal(message), false);
}
}
private boolean isCtrlDown(MinecraftClient client) {
long handle = client.getWindow().getHandle();
return InputUtil.isKeyPressed(handle, KEY_LEFT_CTRL)
|| InputUtil.isKeyPressed(handle, KEY_RIGHT_CTRL);
}
}