Critical Hit Sprint Reset
Влияние на механику Minecraft
В ванильной боевке Minecraft критический удар наносит +50% базового урона, но требует, чтобы игрок находился в падении и строго НЕ бежал на спринте. Этот чит сбрасывает флаг спринта (setSprinting(false)) ровно на тик перед отправкой пакета атаки, обеспечивая 100% гарантированные криты на полной скорости бега без замедления.
Анализируемые функции и API
ClientPlayerInteractionManager.attackEntity
Метод атаки сущности (method_2918), отправляющий серверу PlayerInteractEntityC2SPacket.
Entity.setSprinting
Управляет состоянием спринта (method_5728) и отправляет пакет остановки бега.
ClientPlayerEntity.swingHand
Анимация взмаха руки (method_6104) с отправкой HandSwingC2SPacket.
Реализация в моде (Исходный код)
// Developer Source (Fabric / Yarn mappings)
public class AutoCrit {
public static void performCriticalHit(MinecraftClient client, Entity target) {
if (client.player == null || target == null) return;
boolean wasSprinting = client.player.isSprinting();
if (wasSprinting) {
client.player.setSprinting(false);
}
client.interactionManager.attackEntity(client.player, target);
client.player.swingHand(Hand.MAIN_HAND);
if (wasSprinting) {
client.player.setSprinting(true);
}
}
}
Декомпилированный вид (Vineflower)
// Decompiled with Vineflower 1.12 (Intermediary mappings)
public class AutoCrit {
public static void performCriticalHit(class_310 client, class_1297 target) {
if (client.field_1724 != null && target != null) {
boolean wasSprinting = client.field_1724.method_5624();
if (wasSprinting) {
client.field_1724.method_5728(false);
}
client.field_1761.method_2918(client.field_1724, target);
client.field_1724.method_6104(class_1268.field_5808);
if (wasSprinting) {
client.field_1724.method_5728(true);
}
}
}
}
Сигнатура байткода и статический детект
Совпадение обращений к ClientPlayerInteractionManager.attackEntity (method_2918), Entity.setSprinting (method_5728) и ClientPlayerEntity.swingHand (method_6104) в одном классе.