feat: 智能升级 v2.2.0 - HUD/AutoTorch/AutoEat 智能食物/提前丢垃圾/剔除中立生物
核心改进: - 实时状态 HUD(左上角面板:任务/状态/时长/血量/饥饿/背包/进度) - 自动插火把(黑暗隧道自动防灾,可开关) - 自动进食跳过金苹果/附魔金苹果/紫颂果等特殊食物 - 背包接近满(≥30格)即提前丢垃圾,防误判满包返回 - 杀戮光环排除 Angerable 中立生物(僵尸猪灵/末影人/狼等) - 新增 /autodig status 命令 - GUI 补全设置:自动插火把、进食阈值、保命血量、攻击范围 - 会话统计(时长/死亡次数)联动 HUD 与命令 - 补全 README.md 文档 - 版本升至 2.2.0
这个提交包含在:
@@ -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 里找槽位下标。 */
|
||||
|
||||
在新工单中引用
屏蔽一个用户