From 3e76baeeb1541f5e36465c6687d69f4741a3d32d Mon Sep 17 00:00:00 2001 From: ReinforceZwei <39955851+ReinforceZwei@users.noreply.github.com> Date: Sat, 11 Apr 2020 14:33:22 +0800 Subject: [PATCH] Fix AutoAttack stop working with AutoEat enabled and no food on hotbar #934 --- MinecraftClient/ChatBot.cs | 5 +++++ MinecraftClient/ChatBots/AutoEat.cs | 26 ++++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/MinecraftClient/ChatBot.cs b/MinecraftClient/ChatBot.cs index 48ce77c0..fbb35bf2 100644 --- a/MinecraftClient/ChatBot.cs +++ b/MinecraftClient/ChatBot.cs @@ -868,5 +868,10 @@ namespace MinecraftClient { return Handler.ChangeSlot(slot); } + + protected byte GetCurrentSlot() + { + return Handler.GetCurrentSlot(); + } } } diff --git a/MinecraftClient/ChatBots/AutoEat.cs b/MinecraftClient/ChatBots/AutoEat.cs index 8c7c58f5..0da8e024 100644 --- a/MinecraftClient/ChatBots/AutoEat.cs +++ b/MinecraftClient/ChatBots/AutoEat.cs @@ -3,13 +3,14 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; +using System.Threading.Tasks; namespace MinecraftClient.ChatBots { class AutoEat : ChatBot { byte LastSlot = 0; - byte CurrentSlot; public static bool Eating = false; private int HungerThreshold = 6; @@ -20,15 +21,22 @@ namespace MinecraftClient.ChatBots public override void OnHealthUpdate(float health, int food) { - if (food <= HungerThreshold || (food < 20 && health < 20)) + if (((food <= HungerThreshold) || (food < 20 && health < 20)) && !Eating) { - Eating = true; - FindFoodAndEat(); + Eating = FindFoodAndEat(); + if (!Eating) + ChangeSlot(LastSlot); } // keep eating until full if (food < 20 && Eating) { - FindFoodAndEat(); + Task.Factory.StartNew(delegate + { + Thread.Sleep(200); + Eating = FindFoodAndEat(); + if (!Eating) + ChangeSlot(LastSlot); + }); } if (food >= 20 && Eating) { @@ -37,10 +45,6 @@ namespace MinecraftClient.ChatBots } } - public override void OnHeldItemChange(byte slot) - { - CurrentSlot = slot; - } /// /// Try to find food in the hotbar and eat it /// @@ -49,7 +53,9 @@ namespace MinecraftClient.ChatBots { Container inventory = GetPlayerInventory(); bool found = false; - LastSlot = CurrentSlot; + byte CurrentSlot = GetCurrentSlot(); + if (!Eating) + LastSlot = CurrentSlot; if (inventory.Items.ContainsKey(CurrentSlot + 36) && inventory.Items[CurrentSlot + 36].Type.IsFood()) { // no need to change slot