feat: 智能升级 v2.2.0 - HUD/AutoTorch/AutoEat 智能食物/提前丢垃圾/剔除中立生物

核心改进:
- 实时状态 HUD(左上角面板:任务/状态/时长/血量/饥饿/背包/进度)
- 自动插火把(黑暗隧道自动防灾,可开关)
- 自动进食跳过金苹果/附魔金苹果/紫颂果等特殊食物
- 背包接近满(≥30格)即提前丢垃圾,防误判满包返回
- 杀戮光环排除 Angerable 中立生物(僵尸猪灵/末影人/狼等)
- 新增 /autodig status 命令
- GUI 补全设置:自动插火把、进食阈值、保命血量、攻击范围
- 会话统计(时长/死亡次数)联动 HUD 与命令
- 补全 README.md 文档
- 版本升至 2.2.0
这个提交包含在:
lyizai
2026-08-30 22:36:35 +08:00
父节点 a297d2714d
当前提交 4135cdd117
共修改 15 个文件,包含 492 行新增和 28 行删除
@@ -19,18 +19,20 @@ import net.minecraft.screen.slot.SlotActionType;
/**
* 背包垃圾自动清理服务。
*
* <p>背包满时,把 {@code trashItems} 清单里的垃圾物品丢出背包(圆石、凝灰岩、
* 深板岩等挖掘副产物)。方块类垃圾保留 {@code trashReserve} 个供 Baritone
* 搭路/垫脚使用;若满背时额度之外没有别的垃圾可丢,则只丢一组腾出空间,
* 尽量保住搭路方块。丢弃通过 {@code clickSlot(THROW)} 走正规网络包,
* 单人/多人均可用。</p>
* <p>背包接近满(已用格数达到阈值)时就主动把 {@code trashItems} 清单里的
* 垃圾物品丢出背包(圆石、凝灰岩、深板岩等挖掘副产物),为挖到的矿物提前
* 腾出空间,避免背包彻底满后触发"背包已满需返回"而中断挖矿。方块类垃圾
* 保留 {@code trashReserve} 个供 Baritone 搭路/垫脚使用。丢弃通过
* {@code clickSlot(THROW)} 走正规网络包,单人/多人均可用。</p>
*/
public final class AutoTrash {
/** 每 tick 最多丢弃的物品组数,避免一次产生过多数据包 */
private static final int MAX_DROPS_PER_TICK = 4;
/** 背包已用格数达到该值(共 36 格)即开始丢垃圾,留出余量防误判满包 */
private static final int NEARLY_FULL_SLOTS = 30;
/** 每帧调用:背包满时自动丢弃垃圾物品。 */
/** 每帧调用:背包接近满时提前丢弃垃圾物品。 */
public void tick(DigConfig config) {
MinecraftClient client = MinecraftClient.getInstance();
if (client.player == null || client.world == null || client.interactionManager == null) {
@@ -50,7 +52,8 @@ public final class AutoTrash {
if (!handler.getCursorStack().isEmpty()) {
return;
}
if (!this.inventoryFull(player)) {
// 背包接近满才开始丢,避免背包还没满就误丢
if (this.usedSlots(player) < NEARLY_FULL_SLOTS) {
return;
}
Set<String> trash = new HashSet<>(config.getTrashItemList());
@@ -115,13 +118,15 @@ public final class AutoTrash {
}
}
private boolean inventoryFull(PlayerEntity player) {
/** 统计背包已用格数(快捷栏 + 主背包 0-35,共 36 格)。 */
private int usedSlots(PlayerEntity player) {
int used = 0;
for (int i = 0; i < 36; i++) {
if (player.getInventory().main.get(i).isEmpty()) {
return false;
if (!player.getInventory().main.get(i).isEmpty()) {
used++;
}
}
return true;
return used;
}
/** 按对象引用在 ScreenHandler 里找槽位下标。 */