From fde50c17288727b5b237f461dd9b471410691536 Mon Sep 17 00:00:00 2001 From: Roman Danilov Date: Tue, 5 Mar 2024 18:54:29 +0500 Subject: [PATCH] AntiCheat fix prevent Block Breaking --- MinecraftClient/ChatBots/AutoDig.cs | 6 +++--- MinecraftClient/ChatBots/Farmer.cs | 2 +- MinecraftClient/ChatBots/WebSocketBot.cs | 7 ++++--- MinecraftClient/Commands/Dig.cs | 4 ++-- MinecraftClient/McClient.cs | 5 ++--- MinecraftClient/Scripting/ChatBot.cs | 5 +++-- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/MinecraftClient/ChatBots/AutoDig.cs b/MinecraftClient/ChatBots/AutoDig.cs index cddb6ffd..17c27895 100644 --- a/MinecraftClient/ChatBots/AutoDig.cs +++ b/MinecraftClient/ChatBots/AutoDig.cs @@ -285,7 +285,7 @@ namespace MinecraftClient.ChatBots if (Config.Mode == Configs.ModeType.lookat || (Config.Mode == Configs.ModeType.both && Config._Locations.Contains(blockLoc))) { - if (DigBlock(blockLoc, lookAtBlock: false)) + if (DigBlock(blockLoc, Direction.Down, lookAtBlock: false)) { currentDig = blockLoc; if (Config.Log_Block_Dig) @@ -346,7 +346,7 @@ namespace MinecraftClient.ChatBots if (minDistance <= 6.0) { - if (DigBlock(target, lookAtBlock: true)) + if (DigBlock(target, Direction.Down, lookAtBlock: true)) { currentDig = target; if (Config.Log_Block_Dig) @@ -380,7 +380,7 @@ namespace MinecraftClient.ChatBots ((Config.List_Type == Configs.ListType.whitelist && Config.Blocks.Contains(block.Type)) || (Config.List_Type == Configs.ListType.blacklist && !Config.Blocks.Contains(block.Type)))) { - if (DigBlock(blockLoc, lookAtBlock: true)) + if (DigBlock(blockLoc, Direction.Down, lookAtBlock: true)) { currentDig = blockLoc; if (Config.Log_Block_Dig) diff --git a/MinecraftClient/ChatBots/Farmer.cs b/MinecraftClient/ChatBots/Farmer.cs index f072ba2e..7c15791c 100644 --- a/MinecraftClient/ChatBots/Farmer.cs +++ b/MinecraftClient/ChatBots/Farmer.cs @@ -831,7 +831,7 @@ namespace MinecraftClient.ChatBots // Yoinked from Daenges's Sugarcane Farmer private bool WaitForDigBlock(Location block, int digTimeout = 1000) { - if (!DigBlock(block.ToFloor())) return false; + if (!DigBlock(block.ToFloor(), Direction.Down)) return false; short i = 0; // Maximum wait time of 10 sec. while (GetWorld().GetBlock(block).Type != Material.Air && i <= digTimeout) { diff --git a/MinecraftClient/ChatBots/WebSocketBot.cs b/MinecraftClient/ChatBots/WebSocketBot.cs index 1aa6caa9..d4fc6842 100644 --- a/MinecraftClient/ChatBots/WebSocketBot.cs +++ b/MinecraftClient/ChatBots/WebSocketBot.cs @@ -651,9 +651,10 @@ public class WebSocketBot : ChatBot var result = cmd.Parameters.Length switch { - 3 => DigBlock(location), - 4 => DigBlock(location, (bool)cmd.Parameters[3]), - 5 => DigBlock(location, (bool)cmd.Parameters[3], (bool)cmd.Parameters[4]), + // TODO Get Direction from the arguments + 3 => DigBlock(location, Direction.Down), + 4 => DigBlock(location, Direction.Down, (bool)cmd.Parameters[3]), + 5 => DigBlock(location, Direction.Down, (bool)cmd.Parameters[3], (bool)cmd.Parameters[4]), _ => false }; diff --git a/MinecraftClient/Commands/Dig.cs b/MinecraftClient/Commands/Dig.cs index 3a00c44b..b6ff9420 100644 --- a/MinecraftClient/Commands/Dig.cs +++ b/MinecraftClient/Commands/Dig.cs @@ -58,7 +58,7 @@ namespace MinecraftClient.Commands Block block = handler.GetWorld().GetBlock(blockToBreak); if (block.Type == Material.Air) return r.SetAndReturn(Status.Fail, Translations.cmd_dig_no_block); - else if (handler.DigBlock(blockToBreak, duration: duration)) + else if (handler.DigBlock(blockToBreak, Direction.Down, duration: duration)) { blockToBreak = blockToBreak.ToCenter(); return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_dig_dig, blockToBreak.X, blockToBreak.Y, blockToBreak.Z, block.GetTypeString())); @@ -78,7 +78,7 @@ namespace MinecraftClient.Commands return r.SetAndReturn(Status.Fail, Translations.cmd_dig_too_far); else if (block.Type == Material.Air) return r.SetAndReturn(Status.Fail, Translations.cmd_dig_no_block); - else if (handler.DigBlock(blockLoc, lookAtBlock: false, duration: duration)) + else if (handler.DigBlock(blockLoc, Direction.Down, lookAtBlock: false, duration: duration)) return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_dig_dig, blockLoc.X, blockLoc.Y, blockLoc.Z, block.GetTypeString())); else return r.SetAndReturn(Status.Fail, Translations.cmd_dig_fail); diff --git a/MinecraftClient/McClient.cs b/MinecraftClient/McClient.cs index c7296d52..786f35e1 100644 --- a/MinecraftClient/McClient.cs +++ b/MinecraftClient/McClient.cs @@ -2266,16 +2266,15 @@ namespace MinecraftClient /// Location of block to dig /// Also perform the "arm swing" animation /// Also look at the block before digging - public bool DigBlock(Location location, bool swingArms = true, bool lookAtBlock = true, double duration = 0) + public bool DigBlock(Location location, Direction blockFace, bool swingArms = true, bool lookAtBlock = true, double duration = 0) { if (!GetTerrainEnabled()) return false; if (InvokeRequired) - return InvokeOnMainThread(() => DigBlock(location, swingArms, lookAtBlock, duration)); + return InvokeOnMainThread(() => DigBlock(location, blockFace, swingArms, lookAtBlock, duration)); // TODO select best face from current player location - Direction blockFace = Direction.Down; lock (DigLock) { diff --git a/MinecraftClient/Scripting/ChatBot.cs b/MinecraftClient/Scripting/ChatBot.cs index 36c365be..ac77d935 100644 --- a/MinecraftClient/Scripting/ChatBot.cs +++ b/MinecraftClient/Scripting/ChatBot.cs @@ -1072,11 +1072,12 @@ namespace MinecraftClient.Scripting /// Attempt to dig a block at the specified location /// /// Location of block to dig + /// Example: if your player is under a block that is being destroyed, use Down /// Also perform the "arm swing" animation /// Also look at the block before digging - protected bool DigBlock(Location location, bool swingArms = true, bool lookAtBlock = true) + protected bool DigBlock(Location location, Direction direction, bool swingArms = true, bool lookAtBlock = true) { - return Handler.DigBlock(location, swingArms, lookAtBlock); + return Handler.DigBlock(location, direction, swingArms, lookAtBlock); } ///