Implement AutoHit
All checks were successful
/ Build BaseBand DSM & Broadway (push) Successful in 2m39s
All checks were successful
/ Build BaseBand DSM & Broadway (push) Successful in 2m39s
This commit is contained in:
parent
9052fb4a76
commit
fb0e2f5033
6 changed files with 162 additions and 27 deletions
|
@ -4,6 +4,7 @@ import de.com.baseband.client.feature.Feature;
|
|||
import de.com.baseband.client.feature.commands.*;
|
||||
import de.com.baseband.client.feature.modules.chat.*;
|
||||
import de.com.baseband.client.feature.modules.client.*;
|
||||
import de.com.baseband.client.feature.modules.combat.AutoKill;
|
||||
import de.com.baseband.client.feature.modules.combat.AutoTotem;
|
||||
import de.com.baseband.client.feature.modules.movement.ElytraBot;
|
||||
import de.com.baseband.client.feature.modules.movement.ElytraFly;
|
||||
|
@ -32,8 +33,8 @@ public class Setup {
|
|||
// OPTIONAL
|
||||
new AltControl(),
|
||||
new AutoEat(),
|
||||
//new AutoKill(),
|
||||
//AutoKill.INSTANCE.autoHit,
|
||||
new AutoKill(),
|
||||
AutoKill.INSTANCE.autoHit,
|
||||
//AutoKill.INSTANCE.autoCrystal,
|
||||
new AntiLevitation(),
|
||||
new AutoTotem(),
|
||||
|
|
|
@ -294,7 +294,7 @@ public abstract class Feature extends ToggleButton implements SetCommand {
|
|||
return true;
|
||||
}
|
||||
|
||||
public boolean renderInHUD() {
|
||||
public boolean displayOnHUD() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ public class Spotify extends Feature {
|
|||
public boolean renderInHUD;
|
||||
|
||||
@Override
|
||||
public boolean renderInHUD() {
|
||||
public boolean displayOnHUD() {
|
||||
return renderInHUD;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,23 +1,38 @@
|
|||
package de.com.baseband.client.feature.modules.combat;
|
||||
|
||||
import de.com.baseband.client.BaseBand;
|
||||
import de.com.baseband.client.feature.Feature;
|
||||
import de.com.baseband.client.feature.Features;
|
||||
import de.com.baseband.client.feature.category.Combat;
|
||||
import de.com.baseband.client.registry.PlayerDB;
|
||||
import de.com.baseband.client.registry.annotation.Config;
|
||||
import de.com.baseband.client.registry.annotation.Gate;
|
||||
import de.com.baseband.client.registry.annotation.Range;
|
||||
import de.com.baseband.client.util.adapt.Marker;
|
||||
import de.tudbut.parsing.TCN;
|
||||
import de.tudbut.tools.Lock;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.network.play.client.CPacketUseEntity;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Combat
|
||||
public class AutoKill extends Feature {
|
||||
|
||||
public enum TargetMode {
|
||||
Nearest,
|
||||
Random,
|
||||
Furthest,
|
||||
LowestHealth,
|
||||
HighestHealth,
|
||||
}
|
||||
|
||||
public final AutoHit autoHit = new AutoHit();
|
||||
public final AutoCrystal autoCrystal = new AutoCrystal();
|
||||
|
||||
|
@ -34,12 +49,28 @@ public class AutoKill extends Feature {
|
|||
@Gate(1)
|
||||
public boolean attackTargets = true;
|
||||
|
||||
@Config("TargetMode")
|
||||
public TargetMode targetMode = TargetMode.Nearest;
|
||||
|
||||
@Config("Retarget time (ms)")
|
||||
@Range("0..2000@100")
|
||||
public int retargetTime = 300;
|
||||
|
||||
@Config("Threaded")
|
||||
public boolean threaded = false;
|
||||
|
||||
@Config("PacketHit")
|
||||
public boolean packetHit = false;
|
||||
|
||||
ArrayList<EntityLivingBase> getAttackable() {
|
||||
ArrayList<EntityLivingBase> allowed = new ArrayList<>();
|
||||
for (Entity entity : mc.world.loadedEntityList) {
|
||||
if(!(entity instanceof EntityLivingBase))
|
||||
continue;
|
||||
if(entity instanceof EntityPlayer) {
|
||||
if(entity == mc.player || entity == mc.getRenderViewEntity())
|
||||
continue;
|
||||
|
||||
EntityPlayer player = (EntityPlayer) entity;
|
||||
TCN dbp = PlayerDB.player(player.getGameProfile().getId(), player.getGameProfile().getName());
|
||||
assert dbp != null;
|
||||
|
@ -67,16 +98,59 @@ public class AutoKill extends Feature {
|
|||
|
||||
@Override
|
||||
protected void setup() {
|
||||
subComponents.add(autoHit);
|
||||
subComponents.add(autoCrystal);
|
||||
Features.ifFeaturePresent(AutoHit.class, subComponents::add);
|
||||
Features.ifFeaturePresent(AutoCrystal.class, subComponents::add);
|
||||
}
|
||||
|
||||
@Combat
|
||||
public class AutoHit extends Feature {
|
||||
private EntityLivingBase currentTarget = null;
|
||||
|
||||
@Override
|
||||
public void onTick() {
|
||||
Vec3d eyePos = mc.player.getPositionEyes(1f);
|
||||
public EntityLivingBase getPreferred(List<EntityLivingBase> list) {
|
||||
if(targetMode == TargetMode.Random)
|
||||
return list.get(BaseBand.RANDOM.nextInt(list.size()));
|
||||
|
||||
EntityLivingBase best = list.get(0);
|
||||
for (EntityLivingBase entity : list) {
|
||||
switch (targetMode) {
|
||||
case Nearest:
|
||||
if(entity.getDistanceSq(mc.player) < best.getDistanceSq(mc.player))
|
||||
best = entity;
|
||||
break;
|
||||
case Furthest:
|
||||
if(entity.getDistanceSq(mc.player) > best.getDistanceSq(mc.player))
|
||||
best = entity;
|
||||
break;
|
||||
case LowestHealth:
|
||||
if(entity.getHealth() < best.getHealth())
|
||||
best = entity;
|
||||
break;
|
||||
case HighestHealth:
|
||||
if(entity.getHealth() > best.getHealth())
|
||||
best = entity;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
||||
public void hit(EntityLivingBase entity) {
|
||||
if(packetHit)
|
||||
mc.player.connection.sendPacket(new CPacketUseEntity(entity));
|
||||
else
|
||||
mc.playerController.attackEntity(mc.player, entity);
|
||||
|
||||
mc.player.swingArm(EnumHand.MAIN_HAND);
|
||||
}
|
||||
|
||||
private boolean retarget() {
|
||||
Vec3d eyePos = mc.player.getPositionEyes(1f);
|
||||
if(currentTarget != null) {
|
||||
AxisAlignedBB boundingBox = currentTarget.getEntityBoundingBox();
|
||||
double dminsq = getDminsq(boundingBox, eyePos);
|
||||
if (dminsq > 3 * 3) {
|
||||
currentTarget = null;
|
||||
}
|
||||
}
|
||||
if(currentTarget == null) {
|
||||
ArrayList<EntityLivingBase> attackable = getAttackable();
|
||||
for (int i = 0; i < attackable.size(); i++) {
|
||||
EntityLivingBase elb = attackable.get(i);
|
||||
|
@ -86,21 +160,12 @@ public class AutoKill extends Feature {
|
|||
attackable.remove(i--);
|
||||
}
|
||||
}
|
||||
if(attackable.isEmpty())
|
||||
return;
|
||||
|
||||
if (attackable.isEmpty())
|
||||
return false;
|
||||
|
||||
currentTarget = getPreferred(attackable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AutoHit";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean displayOnClickGUI() {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static double getDminsq(AxisAlignedBB boundingBox, Vec3d eyePos) {
|
||||
|
@ -116,6 +181,70 @@ public class AutoKill extends Feature {
|
|||
return dmx * dmx + dmy * dmy + dmz * dmz;
|
||||
}
|
||||
|
||||
@Combat
|
||||
public class AutoHit extends Feature {
|
||||
|
||||
@Config("Speed (ms)")
|
||||
@Range("10..500@5")
|
||||
public int speed = 100;
|
||||
private final Lock speedLock = new Lock();
|
||||
|
||||
private Thread thread;
|
||||
|
||||
@Override
|
||||
public void onTick() {
|
||||
if(!AutoKill.this.enabled)
|
||||
return;
|
||||
if(notIngame())
|
||||
return;
|
||||
if(threaded) {
|
||||
if(thread == null) {
|
||||
thread = new Thread(this::runThread, this + "Thread");
|
||||
thread.start();
|
||||
}
|
||||
if(!thread.isAlive())
|
||||
thread = null;
|
||||
return;
|
||||
}
|
||||
if(speedLock.isLocked())
|
||||
return;
|
||||
speedLock.lock(speed);
|
||||
run();
|
||||
}
|
||||
|
||||
private void runThread() {
|
||||
while (threaded) {
|
||||
if(notIngame())
|
||||
break;
|
||||
|
||||
speedLock.lock(speed);
|
||||
run();
|
||||
speedLock.waitHere();
|
||||
}
|
||||
}
|
||||
|
||||
private void run() {
|
||||
if (!retarget()) return;
|
||||
|
||||
hit(currentTarget);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AutoHit";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean displayOnClickGUI() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean displayOnHUD() {
|
||||
return AutoKill.this.enabled;
|
||||
}
|
||||
}
|
||||
|
||||
@Combat
|
||||
public class AutoCrystal extends Feature {
|
||||
|
||||
|
@ -133,5 +262,10 @@ public class AutoKill extends Feature {
|
|||
public boolean displayOnClickGUI() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean displayOnHUD() {
|
||||
return AutoKill.this.enabled;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ public class InteractionTweaks extends Feature {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean renderInHUD() {
|
||||
public boolean displayOnHUD() {
|
||||
return showOnHUD;
|
||||
}
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ public class InteractionTweaks extends Feature {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean renderInHUD() {
|
||||
public boolean displayOnHUD() {
|
||||
return showOnHUD;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -225,7 +225,7 @@ public class HUD extends Feature {
|
|||
}
|
||||
|
||||
int maxWidth = TextSplitter.getStringWidth(initString);
|
||||
Feature[] renderFeatures = Arrays.stream(Features.features).filter(m -> m.enabled && m.category != Category.COMMAND && m.getClass() != Client.class && m != this && m.renderInHUD()).sorted(Comparator.comparingDouble(value -> -Minecraft.getMinecraft().fontRenderer.getStringWidth(includeStatus ? value.text : value.toString()))).toArray(Feature[]::new);
|
||||
Feature[] renderFeatures = Arrays.stream(Features.features).filter(m -> m.enabled && m.category != Category.COMMAND && m.getClass() != Client.class && m != this && m.displayOnHUD()).sorted(Comparator.comparingDouble(value -> -Minecraft.getMinecraft().fontRenderer.getStringWidth(includeStatus ? value.text : value.toString()))).toArray(Feature[]::new);
|
||||
for (Feature f : renderFeatures) {
|
||||
maxWidth = Math.max(mc.fontRenderer.getStringWidth(f.getHUDText()), maxWidth);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue