mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
Fix prevent AntiCheat Block Breaking (In Scripts)
Fix prevent AntiCheat Block Breaking (In Scripts)
This commit is contained in:
commit
2409de2a2f
7 changed files with 100 additions and 16 deletions
|
|
@ -285,7 +285,7 @@ namespace MinecraftClient.ChatBots
|
||||||
if (Config.Mode == Configs.ModeType.lookat ||
|
if (Config.Mode == Configs.ModeType.lookat ||
|
||||||
(Config.Mode == Configs.ModeType.both && Config._Locations.Contains(blockLoc)))
|
(Config.Mode == Configs.ModeType.both && Config._Locations.Contains(blockLoc)))
|
||||||
{
|
{
|
||||||
if (DigBlock(blockLoc, lookAtBlock: false))
|
if (DigBlock(blockLoc, Direction.Down, lookAtBlock: false))
|
||||||
{
|
{
|
||||||
currentDig = blockLoc;
|
currentDig = blockLoc;
|
||||||
if (Config.Log_Block_Dig)
|
if (Config.Log_Block_Dig)
|
||||||
|
|
@ -346,7 +346,7 @@ namespace MinecraftClient.ChatBots
|
||||||
|
|
||||||
if (minDistance <= 6.0)
|
if (minDistance <= 6.0)
|
||||||
{
|
{
|
||||||
if (DigBlock(target, lookAtBlock: true))
|
if (DigBlock(target, Direction.Down, lookAtBlock: true))
|
||||||
{
|
{
|
||||||
currentDig = target;
|
currentDig = target;
|
||||||
if (Config.Log_Block_Dig)
|
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.whitelist && Config.Blocks.Contains(block.Type)) ||
|
||||||
(Config.List_Type == Configs.ListType.blacklist && !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;
|
currentDig = blockLoc;
|
||||||
if (Config.Log_Block_Dig)
|
if (Config.Log_Block_Dig)
|
||||||
|
|
|
||||||
|
|
@ -831,7 +831,7 @@ namespace MinecraftClient.ChatBots
|
||||||
// Yoinked from Daenges's Sugarcane Farmer
|
// Yoinked from Daenges's Sugarcane Farmer
|
||||||
private bool WaitForDigBlock(Location block, int digTimeout = 1000)
|
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.
|
short i = 0; // Maximum wait time of 10 sec.
|
||||||
while (GetWorld().GetBlock(block).Type != Material.Air && i <= digTimeout)
|
while (GetWorld().GetBlock(block).Type != Material.Air && i <= digTimeout)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -651,9 +651,10 @@ public class WebSocketBot : ChatBot
|
||||||
|
|
||||||
var result = cmd.Parameters.Length switch
|
var result = cmd.Parameters.Length switch
|
||||||
{
|
{
|
||||||
3 => DigBlock(location),
|
// TODO Get blockFace direction from arguments
|
||||||
4 => DigBlock(location, (bool)cmd.Parameters[3]),
|
3 => DigBlock(location, Direction.Down),
|
||||||
5 => DigBlock(location, (bool)cmd.Parameters[3], (bool)cmd.Parameters[4]),
|
4 => DigBlock(location, Direction.Down, (bool)cmd.Parameters[3]),
|
||||||
|
5 => DigBlock(location, Direction.Down, (bool)cmd.Parameters[3], (bool)cmd.Parameters[4]),
|
||||||
_ => false
|
_ => false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ namespace MinecraftClient.Commands
|
||||||
);
|
);
|
||||||
|
|
||||||
dispatcher.Register(l => l.Literal(CmdName)
|
dispatcher.Register(l => l.Literal(CmdName)
|
||||||
|
// TODO Get blockFace direction from arguments
|
||||||
.Executes(r => DigLookAt(r.Source))
|
.Executes(r => DigLookAt(r.Source))
|
||||||
.Then(l => l.Argument("Duration", Arguments.Double())
|
.Then(l => l.Argument("Duration", Arguments.Double())
|
||||||
.Executes(r => DigLookAt(r.Source, Arguments.GetDouble(r, "Duration"))))
|
.Executes(r => DigLookAt(r.Source, Arguments.GetDouble(r, "Duration"))))
|
||||||
|
|
@ -58,7 +59,7 @@ namespace MinecraftClient.Commands
|
||||||
Block block = handler.GetWorld().GetBlock(blockToBreak);
|
Block block = handler.GetWorld().GetBlock(blockToBreak);
|
||||||
if (block.Type == Material.Air)
|
if (block.Type == Material.Air)
|
||||||
return r.SetAndReturn(Status.Fail, Translations.cmd_dig_no_block);
|
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();
|
blockToBreak = blockToBreak.ToCenter();
|
||||||
return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_dig_dig, blockToBreak.X, blockToBreak.Y, blockToBreak.Z, block.GetTypeString()));
|
return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_dig_dig, blockToBreak.X, blockToBreak.Y, blockToBreak.Z, block.GetTypeString()));
|
||||||
|
|
@ -78,7 +79,7 @@ namespace MinecraftClient.Commands
|
||||||
return r.SetAndReturn(Status.Fail, Translations.cmd_dig_too_far);
|
return r.SetAndReturn(Status.Fail, Translations.cmd_dig_too_far);
|
||||||
else if (block.Type == Material.Air)
|
else if (block.Type == Material.Air)
|
||||||
return r.SetAndReturn(Status.Fail, Translations.cmd_dig_no_block);
|
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()));
|
return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_dig_dig, blockLoc.X, blockLoc.Y, blockLoc.Z, block.GetTypeString()));
|
||||||
else
|
else
|
||||||
return r.SetAndReturn(Status.Fail, Translations.cmd_dig_fail);
|
return r.SetAndReturn(Status.Fail, Translations.cmd_dig_fail);
|
||||||
|
|
|
||||||
63
MinecraftClient/Mapping/DirectionExtensions.cs
Normal file
63
MinecraftClient/Mapping/DirectionExtensions.cs
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace MinecraftClient.Mapping
|
||||||
|
{
|
||||||
|
public static class DirectionExtensions
|
||||||
|
{
|
||||||
|
public static Direction GetOpposite(this Direction direction)
|
||||||
|
{
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
case Direction.SouthEast:
|
||||||
|
return Direction.NorthEast;
|
||||||
|
case Direction.SouthWest:
|
||||||
|
return Direction.NorthWest;
|
||||||
|
|
||||||
|
case Direction.NorthEast:
|
||||||
|
return Direction.SouthEast;
|
||||||
|
case Direction.NorthWest:
|
||||||
|
return Direction.SouthWest;
|
||||||
|
|
||||||
|
case Direction.West:
|
||||||
|
return Direction.East;
|
||||||
|
case Direction.East:
|
||||||
|
return Direction.West;
|
||||||
|
|
||||||
|
case Direction.North:
|
||||||
|
return Direction.South;
|
||||||
|
case Direction.South:
|
||||||
|
return Direction.North;
|
||||||
|
|
||||||
|
case Direction.Down:
|
||||||
|
return Direction.Up;
|
||||||
|
case Direction.Up:
|
||||||
|
return Direction.Down;
|
||||||
|
default:
|
||||||
|
return Direction.Up;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static Direction[] HORIZONTAL =
|
||||||
|
{
|
||||||
|
Direction.South,
|
||||||
|
Direction.West,
|
||||||
|
Direction.North,
|
||||||
|
Direction.East
|
||||||
|
};
|
||||||
|
|
||||||
|
public static Direction FromRotation(double rotation)
|
||||||
|
{
|
||||||
|
double floor = Math.Floor((rotation / 90.0) + 0.5);
|
||||||
|
int value = (int)floor & 3;
|
||||||
|
|
||||||
|
return FromHorizontal(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Direction FromHorizontal(int value)
|
||||||
|
{
|
||||||
|
return HORIZONTAL[Math.Abs(value % HORIZONTAL.Length)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1087,6 +1087,15 @@ namespace MinecraftClient
|
||||||
|
|
||||||
#region Getters: Retrieve data for use in other methods or ChatBots
|
#region Getters: Retrieve data for use in other methods or ChatBots
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the horizontal direction of the takeoff.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Return direction of view</returns>
|
||||||
|
public Direction GetHorizontalFacing()
|
||||||
|
{
|
||||||
|
return DirectionExtensions.FromRotation(GetYaw());
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get max length for chat messages
|
/// Get max length for chat messages
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -2311,22 +2320,22 @@ namespace MinecraftClient
|
||||||
return InvokeOnMainThread(() => handler.SendPlayerBlockPlacement((int)hand, location, blockFace, sequenceId++));
|
return InvokeOnMainThread(() => handler.SendPlayerBlockPlacement((int)hand, location, blockFace, sequenceId++));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Attempt to dig a block at the specified location
|
/// Attempt to dig a block at the specified location
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="location">Location of block to dig</param>
|
/// <param name="location">Location of block to dig</param>
|
||||||
/// <param name="swingArms">Also perform the "arm swing" animation</param>
|
/// <param name="swingArms">Also perform the "arm swing" animation</param>
|
||||||
/// <param name="lookAtBlock">Also look at the block before digging</param>
|
/// <param name="lookAtBlock">Also look at the block before digging</param>
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
// TODO select best face from current player location
|
||||||
|
|
||||||
if (!GetTerrainEnabled())
|
if (!GetTerrainEnabled())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (InvokeRequired)
|
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)
|
lock (DigLock)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1075,11 +1075,12 @@ namespace MinecraftClient.Scripting
|
||||||
/// Attempt to dig a block at the specified location
|
/// Attempt to dig a block at the specified location
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="location">Location of block to dig</param>
|
/// <param name="location">Location of block to dig</param>
|
||||||
|
/// <param name="direction">Example: if your player is under a block that is being destroyed, use Down</param>
|
||||||
/// <param name="swingArms">Also perform the "arm swing" animation</param>
|
/// <param name="swingArms">Also perform the "arm swing" animation</param>
|
||||||
/// <param name="lookAtBlock">Also look at the block before digging</param>
|
/// <param name="lookAtBlock">Also look at the block before digging</param>
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -1633,6 +1634,15 @@ namespace MinecraftClient.Scripting
|
||||||
return Handler.GetProtocolVersion();
|
return Handler.GetProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the horizontal direction of the takeoff.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Return direction of view</returns>
|
||||||
|
protected Direction GetHorizontalFacing()
|
||||||
|
{
|
||||||
|
return Handler.GetHorizontalFacing();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Invoke a task on the main thread, wait for completion and retrieve return value.
|
/// Invoke a task on the main thread, wait for completion and retrieve return value.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue