mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
Moved Auto attack and auto fishing to ChatBots and added ChatBotAPI for entity handling
This commit is contained in:
parent
8b8f3a719b
commit
dbf5334758
16 changed files with 602 additions and 465 deletions
99
MinecraftClient/ChatBots/AutoAttack.cs
Normal file
99
MinecraftClient/ChatBots/AutoAttack.cs
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
using MinecraftClient.Mapping;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace MinecraftClient.ChatBots
|
||||
{
|
||||
class AutoAttack : ChatBot
|
||||
{
|
||||
private Dictionary<int, Entity> entitiesToAttack = new Dictionary<int, Entity>(); // mobs within attack range
|
||||
private Dictionary<int, Entity> entitiesToTrack = new Dictionary<int, Entity>(); // all mobs in view distance
|
||||
private int attackCooldown = 6;
|
||||
private int attackCooldownCounter = 6;
|
||||
private Double attackSpeed = 4;
|
||||
private Double attackCooldownSecond;
|
||||
private int attackRange = 4;
|
||||
private Double serverTPS;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
if (!GetEntityHandlingEnabled())
|
||||
{
|
||||
ConsoleIO.WriteLine("[AutoAttack] Entity Handling is not enabled in the config file!");
|
||||
ConsoleIO.WriteLine("Please enable it to use this bot.");
|
||||
UnloadBot();
|
||||
}
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
if (attackCooldownCounter == 0)
|
||||
{
|
||||
attackCooldownCounter = attackCooldown;
|
||||
if (entitiesToAttack.Count > 0)
|
||||
{
|
||||
foreach (KeyValuePair<int, Entity> a in entitiesToAttack)
|
||||
{
|
||||
InteractEntity(a.Key, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
attackCooldownCounter--;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnEntitySpawn(Entity entity)
|
||||
{
|
||||
if (entity.GetMobName() != "")
|
||||
{
|
||||
entitiesToTrack.Add(entity.ID, entity);
|
||||
}
|
||||
}
|
||||
public override void OnEntityDespawn(int EntityID)
|
||||
{
|
||||
if (entitiesToTrack.ContainsKey(EntityID))
|
||||
{
|
||||
entitiesToTrack.Remove(EntityID);
|
||||
}
|
||||
}
|
||||
public override void OnEntityMove(Entity entity)
|
||||
{
|
||||
if (entitiesToTrack.ContainsKey(entity.ID))
|
||||
{
|
||||
Double distance = Entity.CalculateDistance(GetCurrentLocation(), entity.Location);
|
||||
if(distance < attackRange)
|
||||
{
|
||||
if(!entitiesToAttack.ContainsKey(entity.ID))
|
||||
entitiesToAttack.Add(entity.ID, entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnPlayerProperty(Dictionary<string, double> prop)
|
||||
{
|
||||
// adjust auto attack cooldown for maximum attack damage
|
||||
if (prop.ContainsKey("generic.attackSpeed"))
|
||||
{
|
||||
if (attackSpeed != prop["generic.attackSpeed"])
|
||||
{
|
||||
GetServerTPS();
|
||||
attackSpeed = prop["generic.attackSpeed"];
|
||||
attackCooldownSecond = 1 / attackSpeed * (serverTPS / 20.0); // server tps will affect the cooldown
|
||||
attackCooldown = Convert.ToInt32(Math.Truncate(attackCooldownSecond / 0.1) + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnServerTpsUpdate(double tps)
|
||||
{
|
||||
serverTPS = tps;
|
||||
// re-calculate attack speed
|
||||
attackCooldownSecond = 1 / attackSpeed * (serverTPS / 20.0); // server tps will affect the cooldown
|
||||
attackCooldown = Convert.ToInt32(Math.Truncate(attackCooldownSecond / 0.1) + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue