Начинающий
- Статус
- Оффлайн
- Регистрация
- 17 Апр 2025
- Сообщения
- 8
- Реакции
- 0
Проблема с базой Zenith(до рекода) с AttackHandler
суть: при мануальном нажатии кнопку спринта аура не бьёт(почему то считает что спринт не офнут из-за EventListener.serverSprint) так же при изменении EventListener.serverSprint на mc.player.isSprinting() оно бьёт, но нихуя не критами и не в тайминг(ещё и спринт не офается)
если найду ответ напишу в теме
код:
суть: при мануальном нажатии кнопку спринта аура не бьёт(почему то считает что спринт не офнут из-за EventListener.serverSprint) так же при изменении EventListener.serverSprint на mc.player.isSprinting() оно бьёт, но нихуя не критами и не в тайминг(ещё и спринт не офается)
если найду ответ напишу в теме
код:
Java:
@Setter
@Getter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class AttackHandler implements QuickImports {
private final StopWatch attackTimer = new StopWatch(), shieldWatch = new StopWatch();
private final ClickScheduler clickScheduler = new ClickScheduler();
private int count = 0;
void tick() {}
void onPacket(PacketEvent e) {
Packet<?> packet = e.getPacket();
if (packet instanceof HandSwingC2SPacket || packet instanceof UpdateSelectedSlotC2SPacket) {
clickScheduler.recalculate();
}
}
void onUsingItem(UsingItemEvent e) {
if (e.getType() == EventType.START && !shieldWatch.finished(50)) {
e.cancel();
}
}
void handleAttack(AttackPerpetrator.AttackPerpetratorConfigurable config) {
if (canAttack(config, 1)) preAttackEntity(config);
if (RaytracingUtil.rayTrace(config) && canAttack(config, 0) && !isSprinting()) {
attackEntity(config);
}
}
void preAttackEntity(AttackPerpetrator.AttackPerpetratorConfigurable config) {
if (config.isShouldUnPressShield() && mc.player.isUsingItem() && mc.player.getActiveItem().getItem().equals(Items.SHIELD)) {
mc.interactionManager.stopUsingItem(mc.player);
shieldWatch.reset();
}
if (!mc.player.isSwimming()) {
AutoSprint.getInstance().tickStop = MathUtil.getRandom(1, 2);
mc.player.setSprinting(false);
}
}
void attackEntity(AttackPerpetrator.AttackPerpetratorConfigurable config) {
attack(config);
breakShield(config);
attackTimer.reset();
count++;
}
private void breakShield(AttackPerpetrator.AttackPerpetratorConfigurable config) {
LivingEntity target = config.getTarget();
Angle angleToPlayer = AngleUtil.fromVec3d(mc.player.getBoundingBox().getCenter().subtract(target.getEyePos()));
boolean targetOnShield = target.isUsingItem() && target.getActiveItem().getItem().equals(Items.SHIELD);
boolean angle = Math.abs(RotationController.computeAngleDifference(target.getYaw(), angleToPlayer.getYaw())) < 90;
Slot axe = PlayerInventoryUtil.getSlot(s -> s.getStack().getItem() instanceof AxeItem);
if (config.isShouldBreakShield() && targetOnShield && axe != null && angle && PlayerInventoryComponent.script.isFinished()) {
PlayerInventoryUtil.swapHand(axe, Hand.MAIN_HAND, false);
PlayerInventoryUtil.closeScreen(true);
attack(config);
PlayerInventoryUtil.swapHand(axe, Hand.MAIN_HAND, false, true);
PlayerInventoryUtil.closeScreen(true);
}
}
private void attack(AttackPerpetrator.AttackPerpetratorConfigurable config) {
mc.interactionManager.attackEntity(mc.player, config.getTarget());
mc.player.swingHand(Hand.MAIN_HAND);
}
private boolean isSprinting() {
return EventListener.serverSprint && !mc.player.isGliding() && !mc.player.isTouchingWater();
}
public boolean canAttack(AttackPerpetrator.AttackPerpetratorConfigurable config, int ticks) {
for (int i = 0; i <= ticks; i++) {
if (canCrit(config, i)) {
return true;
}
}
return false;
}
public boolean canCrit(AttackPerpetrator.AttackPerpetratorConfigurable config, int ticks) {
if (mc.player.isUsingItem() && !mc.player.getActiveItem().getItem().equals(Items.SHIELD) && config.isEatAndAttack()) {
return false;
}
if (!clickScheduler.isCooldownComplete(config.isUseDynamicCooldown(), ticks)) {
return false;
}
SimulatedPlayer simulated = SimulatedPlayer.simulateLocalPlayer(ticks);
if (config.isOnlyCritical() && !hasMovementRestrictions(simulated)) {
return isPlayerInCriticalState(simulated, ticks);
}
return true;
}
private boolean hasMovementRestrictions(SimulatedPlayer simulated) {
return simulated.hasStatusEffect(StatusEffects.BLINDNESS)
|| simulated.hasStatusEffect(StatusEffects.LEVITATION)
|| PlayerIntersectionUtil.isBoxInBlock(simulated.boundingBox.expand(-1e-3), Blocks.COBWEB)
|| simulated.isSubmergedInWater()
|| simulated.isInLava()
|| simulated.isClimbing()
|| !PlayerIntersectionUtil.canChangeIntoPose(EntityPose.STANDING, simulated.pos)
|| simulated.player.getAbilities().flying;
}
private boolean isPlayerInCriticalState(SimulatedPlayer simulated, int ticks) {
boolean fall = simulated.fallDistance > 0 && (simulated.fallDistance < 0.08 || !SimulatedPlayer.simulateLocalPlayer(ticks + 1).onGround);
return !simulated.onGround && (fall || Criticals.getInstance().isState());
}
}