首次提交 AutoDig Mod
这个提交包含在:
@@ -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);
|
||||
}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户