Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Помощь со сбросом спринта | Fabric 1.21.4

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
17 Дек 2023
Сообщения
12
Реакции
0
Здравствуйте форум. Помогите сделать сброс спринта :). Под ReallyWorld, там темка теперь есть которая за

resetSprintRage:
Expand Collapse Copy
public void resetSprintRage() {
        mc.player.setSprinting(false);
        mc.player.sendSprintingPacket();
    }

Уже как бы флагает игрока. Кто реально поможет, оплачу работу монеткой.


AttackUtil:
Expand Collapse Copy
package ru.zov_corporation.common.util.entity;

import lombok.Setter;
import lombok.Getter;
import lombok.experimental.UtilityClass;
import net.minecraft.block.Blocks;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityPose;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.util.Hand;
import ru.zov_corporation.common.QuickImports;

@Setter
@Getter
@UtilityClass
public class AttackUtil implements QuickImports {

    private boolean legitBackStop = false;

    public void attackEntity(Entity entity) {
        mc.interactionManager.attackEntity(mc.player, entity);
        mc.player.swingHand(Hand.MAIN_HAND);
    }

    public boolean hasMovementRestrictions() {
        return mc.player.hasStatusEffect(StatusEffects.BLINDNESS)
                || mc.player.hasStatusEffect(StatusEffects.LEVITATION)
                || PlayerIntersectionUtil.isPlayerInBlock(Blocks.COBWEB)
                || mc.player.isSubmergedInWater()
                || mc.player.isInLava()
                || mc.player.isClimbing()
                || !PlayerIntersectionUtil.canChangeIntoPose(EntityPose.STANDING, mc.player.getPos()) && mc.player.isInSneakingPose()
                || mc.player.getAbilities().flying;
    }

    public static boolean isPlayerInCriticalState() {
        boolean crit = mc.player.fallDistance > 0 && (mc.player.fallDistance < 0.08 || !SimulatedPlayer.simulateLocalPlayer(1).onGround);
        return !mc.player.isOnGround() && (crit);
    }

    public void resetSprintLegit() {
        if (mc.player.isSprinting()) {
            boolean sprint = mc.options.sprintKey.isPressed();
            boolean forward = mc.options.forwardKey.isPressed();

                sprint = false;
                if (mc.player.isSprinting()) {
                    forward = false;
                    legitBackStop = true;
                }
            }
    }

    public void resetSprintRage() {
        mc.player.setSprinting(false);
        mc.player.sendSprintingPacket();
    }

    public void resetSprintNone() {

    }


    public void resetSprint(String mode) {
        switch (mode) {
            case "Legit":
                resetSprintLegit();
                break;
            case "Rage":
                resetSprintRage();
                break;
            case "None":
                resetSprintNone();
                break;
        }
    }
}
 
перед ударом ставишь
sprintKey и setSprinting на false , через 3 мс делаешь удар, а после ставишь всё как раньше
update Attack:
Expand Collapse Copy
    private final StopWatch rageAttackTimer = new StopWatch();
    private boolean isRageAttackScheduled = false;
    private LivingEntity rageAttackTarget = null;
    private boolean wasSprinting = false;
    private boolean sprintKeyState = false;


private void updateAttack() {
        if (target == null) return;

        preAttack = updatePreAttack();
        isCanAttack = isAttack();

        double dist = mc.player.distanceTo(target);
        if (dist > maxDistance) return;

        if (!attackSetting.isSelected("Ignore The Walls") && !canSee(target)) {
            return;
        }

        if (isCanAttack) {
            if (sprintReset.isValue() && !mc.player.isSwimming()) {
                if (sprintResetMode.isSelected("Rage")) {
                    if (!isRageAttackScheduled) {
                        wasSprinting = mc.player.isSprinting();
                        sprintKeyState = mc.options.sprintKey.isPressed();
                        rageAttackTarget = target;

                        mc.options.sprintKey.setPressed(false);
                        mc.player.setSprinting(false);

                        rageAttackTimer.reset();
                        isRageAttackScheduled = true;
                    }

                    if (isRageAttackScheduled && rageAttackTimer.elapsedTime() >= MathUtil.getRandom(1,2)) {
                        AttackUtil.attackEntity(rageAttackTarget);

                        mc.options.sprintKey.setPressed(sprintKeyState);
                        if (wasSprinting) {
                            mc.player.setSprinting(true);
                        }

                        isRageAttackScheduled = false;
                        rageAttackTarget = null;
                    }
                    return;
                } else {
                    AttackUtil.resetSprint(sprintResetMode.getSelected());
                }
            }

            AttackUtil.attackEntity(target);
        }
    }


все равно вот сплеши бывают
 
update Attack:
Expand Collapse Copy
    private final StopWatch rageAttackTimer = new StopWatch();
    private boolean isRageAttackScheduled = false;
    private LivingEntity rageAttackTarget = null;
    private boolean wasSprinting = false;
    private boolean sprintKeyState = false;


private void updateAttack() {
        if (target == null) return;

        preAttack = updatePreAttack();
        isCanAttack = isAttack();

        double dist = mc.player.distanceTo(target);
        if (dist > maxDistance) return;

        if (!attackSetting.isSelected("Ignore The Walls") && !canSee(target)) {
            return;
        }

        if (isCanAttack) {
            if (sprintReset.isValue() && !mc.player.isSwimming()) {
                if (sprintResetMode.isSelected("Rage")) {
                    if (!isRageAttackScheduled) {
                        wasSprinting = mc.player.isSprinting();
                        sprintKeyState = mc.options.sprintKey.isPressed();
                        rageAttackTarget = target;

                        mc.options.sprintKey.setPressed(false);
                        mc.player.setSprinting(false);

                        rageAttackTimer.reset();
                        isRageAttackScheduled = true;
                    }

                    if (isRageAttackScheduled && rageAttackTimer.elapsedTime() >= MathUtil.getRandom(1,2)) {
                        AttackUtil.attackEntity(rageAttackTarget);

                        mc.options.sprintKey.setPressed(sprintKeyState);
                        if (wasSprinting) {
                            mc.player.setSprinting(true);
                        }

                        isRageAttackScheduled = false;
                        rageAttackTarget = null;
                    }
                    return;
                } else {
                    AttackUtil.resetSprint(sprintResetMode.getSelected());
                }
            }

            AttackUtil.attackEntity(target);
        }
    }


все равно вот сплеши бывают
так сплеши в какой момент? При движении или как? Может у тебя не в тайминг бьёт просто
 
Назад
Сверху Снизу