case "SpookyTime" -> {
Vector3d eyePos = mc.player.getEyePosition(mc.getRenderPartialTicks());
Vector3d targetPos;
targetPos = target.getPositionVec().add(0, target.getHeight() / 2.0F, 0);
Vector3d vecToTarget = targetPos.subtract(eyePos);
float targetYaw = (float) Math.toDegrees(Math.atan2(-vecToTarget.x, vecToTarget.z));
float targetPitch = (float) MathHelper.clamp(-Math.toDegrees(Math.atan2(vecToTarget.y, Math.hypot(vecToTarget.x, vecToTarget.z))), -90F, 90F);
float currentYaw = rotateVector.x;
float currentPitch = rotateVector.y;
float yawDeltaSpooky = MathHelper.wrapDegrees(targetYaw - currentYaw);
float pitchDeltaSpooky = targetPitch - currentPitch;
float yawAbs = Math.abs(yawDeltaSpooky);
float pitchAbs = Math.abs(pitchDeltaSpooky);
float yawFraction = MathHelper.clamp(yawAbs / 180.0F, 0.0F, 1.0F);
float pitchFraction = MathHelper.clamp(pitchAbs / 90.0F, 0.0F, 1.0F);
float yawSpeed = MathHelper.lerp(yawFraction, 42.2F, 55.03F);
float pitchSpeed = MathHelper.lerp(pitchFraction, 9.2F, 32.2F);
float cooldown = 1.0F - MathHelper.clamp(mc.player.getCooledAttackStrength(1.5F), 0.0F, 1.0F);
float slowdown = MathHelper.lerp(cooldown, 1.0F, 1.0F);
yawSpeed *= slowdown;
pitchSpeed *= slowdown;
float randomScaleYaw = 1.0F + ((random.nextFloat() * 2.0F - 1.0F) * 0.3F);
float randomScalePitch = 1.0F + ((random.nextFloat() * 2.0F - 1.0F) * 0.3F);
yawSpeed = MathHelper.clamp(yawSpeed * randomScaleYaw, 42.2F, 55.03F);
pitchSpeed = MathHelper.clamp(pitchSpeed * randomScalePitch, 9.2F, 32.2F);
float yawStep = MathHelper.clamp(yawDeltaSpooky, -yawSpeed, yawSpeed);
float pitchStep = MathHelper.clamp(pitchDeltaSpooky, -pitchSpeed, pitchSpeed);
lastYawJitter = randomJitter(3.0F, lastYawJitter);
lastPitchJitter = randomJitter(0.0F, lastPitchJitter);
float newYaw = currentYaw + yawStep + lastYawJitter;
float newPitch = MathHelper.clamp(currentPitch + pitchStep + lastPitchJitter, -89.0F, 90.0F);
rotateVector = new Vector2f(newYaw, newPitch);
float gcd = 0.125F;
rotateVector = new Vector2f(
rotateVector.x - (rotateVector.x - lastYaw) % gcd,
rotateVector.y - (rotateVector.y - lastPitch) % gcd
);
lastYaw = rotateVector.x;
lastPitch = rotateVector.y;
if (options.getValueByName("Коррекция движения").get()) {
mc.player.rotationYawOffset = lastYaw;
}
}