No Jump Delay
Влияние на механику Minecraft
В ванильном Minecraft при каждом прыжке сущности переменная LivingEntity.jumpingCooldown устанавливается в значение 10 тиков (0.5 секунды). Пока таймер больше нуля, игрок не может совершить следующий прыжок сразу после приземления. Модификации с функцией No Jump Delay сбрасывают jumpingCooldown в 0 на каждом тике, что убирает паузу между прыжками, позволяет непрерывно распрыгиваться (BunnyHop) и сохранять максимальную скорость спринт-прыжков.
Анализируемые функции и API
LivingEntity.jumpingCooldown
Внутренний счетчик тиков (field_6228), запрещающий повторные прыжки каждый тик.
LivingEntity.tickMovement
Метод обработки физики и движения сущности (method_6007).
Реализация в моде (Исходный код)
// Developer Source (Fabric / Yarn mappings)
@Mixin(LivingEntity.class)
public abstract class LivingEntityMixin {
@Shadow
private int jumpingCooldown;
@Inject(method = "tickMovement", at = @At("HEAD"))
private void removeJumpDelay(CallbackInfo ci) {
if ((Object) this instanceof ClientPlayerEntity) {
this.jumpingCooldown = 0;
}
}
}
Декомпилированный вид (Vineflower)
// Decompiled with Vineflower 1.12 (Intermediary mappings)
@Mixin(class_1309.class)
public abstract class LivingEntityMixin {
@Shadow
private int field_6228;
@Inject(method = "method_6007()V", at = @At("HEAD"))
private void removeJumpDelay(CallbackInfo ci) {
if (this instanceof class_746) {
this.field_6228 = 0;
}
}
}
Сигнатура байткода и статический детект
Совпадение обращений к LivingEntity.jumpingCooldown (class_1309.field_6228 / field_70773_bE / m_21168_) совместно с Mixin-аннотациями (@Inject, @Shadow, @Accessor).