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

Вопрос Мувфикс помощ вайбкодеру

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
29 Ноя 2023
Сообщения
66
Реакции
0
как их сделать , иишка не может
Код:
Expand Collapse Copy
package fun.rokboll.grimbypasstest;

import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.projectile.ProjectileUtil;
import net.minecraft.text.Text;
import net.minecraft.util.hit.EntityHitResult;
import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import org.lwjgl.glfw.GLFW;

import java.util.Random;

public class Grimbypasstest implements ModInitializer {
    private static boolean initialized = false;
    public static boolean enabled = false;
    public static boolean isReturning = false;
    public static float[] rotations = new float[2];
    public static float serverYaw = 0.0F;  // ← ДОБАВЛЯЕМ ЭТО
    public static float clientYaw = 0.0F;

    private static final Random random = new Random();
    private static Vec3d lastOffset = Vec3d.ZERO;
    private static int offsetTicks = 0;
    private static KeyBinding keyBinding;
    public static float originalYaw = 0;

    public static boolean isLookingAtTarget(ClientPlayerEntity player, Entity target, float yaw, float pitch) {
        Vec3d eyePos = player.getEyePos();
        float f = pitch * ((float)Math.PI / 180F);
        float g = -yaw * ((float)Math.PI / 180F);
        float h = MathHelper.cos(g);
        float i = MathHelper.sin(g);
        float j = MathHelper.cos(f);
        float k = MathHelper.sin(f);
        Vec3d lookVec = new Vec3d(i * j, -k, h * j);

        Vec3d endVec = eyePos.add(lookVec.multiply(3.2));
        Box box = target.getBoundingBox().expand(0.1);

        EntityHitResult hitResult = ProjectileUtil.raycast(
                player,
                eyePos,
                endVec,
                box,
                (entity) -> entity == target,
                3.2 * 3.2
        );

        return hitResult != null && hitResult.getType() == HitResult.Type.ENTITY;
    }

    @Override
    public void onInitialize() {
        keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
                "key.grimbypasstest.toggle",
                InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_R, "category.grimbypasstest"
        ));

        ClientTickEvents.END_CLIENT_TICK.register(client -> {
            while (keyBinding.wasPressed()) {
                if (enabled) {
                    isReturning = true;
                    enabled = false;
                } else {
                    enabled = true;
                    isReturning = false;
                    if (client.player != null) {
                        rotations[0] = client.player.getYaw();
                        rotations[1] = client.player.getPitch();
                        serverYaw = rotations[0];
                        clientYaw = rotations[0];  // При включении синхронизируем
                    }
                }
                if (client.player != null) {
                    client.player.sendMessage(Text.of("§aKillaura: " + (enabled ? "§2ON" : "§4OFF")), true);
                }
            }
        });
    }
    public static boolean hasTarget() {
        return enabled && findTarget(MinecraftClient.getInstance().player) != null;
    }

    public static void smoothRotate(ClientPlayerEntity player, float targetYaw, float targetPitch) {
        float yawDiff = MathHelper.wrapDegrees(targetYaw - rotations[0]);
        float pitchDiff = targetPitch - rotations[1];
        if (isReturning && Math.abs(yawDiff) < 1f && Math.abs(pitchDiff) < 1f) {
            isReturning = false;
            return;
        }
        float speed = 15.0f + random.nextFloat() * 15.0f;
        float nextYaw = rotations[0] + MathHelper.clamp(yawDiff, -speed, speed);
        float nextPitch = rotations[1] + MathHelper.clamp(pitchDiff, -speed, speed);
        rotations = applyGCD(nextYaw, nextPitch);

        serverYaw = rotations[0];
    }

    public static void updateRotations(ClientPlayerEntity player, Entity target) {
        if (offsetTicks <= 0) {
            double randomX = (random.nextDouble() - 0.5) * target.getWidth() * 0.7;
            double randomY = (random.nextDouble() - 0.5) * target.getHeight() * 0.7;
            double randomZ = (random.nextDouble() - 0.5) * target.getWidth() * 0.7;
            lastOffset = new Vec3d(randomX, randomY + target.getStandingEyeHeight() * 0.5, randomZ);
            offsetTicks = 5 + random.nextInt(5);
        }
        offsetTicks--;
        Vec3d targetVec = target.getPos().add(lastOffset);
        double diffX = targetVec.x - player.getX();
        double diffZ = targetVec.z - player.getZ();
        double diffY = targetVec.y - (player.getY() + player.getStandingEyeHeight());
        double dist = Math.sqrt(diffX * diffX + diffZ * diffZ);
        float targetYaw = (float) (Math.toDegrees(Math.atan2(diffZ, diffX)) - 90.0);
        float targetPitch = (float) (-Math.toDegrees(Math.atan2(diffY, dist)));
        smoothRotate(player, targetYaw, targetPitch);
    }

    private static float[] applyGCD(float yaw, float pitch) {
        MinecraftClient mc = MinecraftClient.getInstance();
        double sensitivity = mc.options.getMouseSensitivity().getValue();
        double f = sensitivity * 0.6F + 0.2F;
        double gcd = f * f * f * 1.2;
        float fixedYaw = (float) (yaw - (yaw % gcd));
        float fixedPitch = (float) (pitch - (pitch % gcd));
        return new float[]{fixedYaw, MathHelper.clamp(fixedPitch, -90, 90)};
    }

    public static Entity findTarget(ClientPlayerEntity player) {
        if (player == null || player.getWorld() == null) return null;
        double range = 3.2;
        Entity closestTarget = null;
        float lowestHealth = Float.MAX_VALUE;
        for (PlayerEntity entity : player.getWorld().getPlayers()) {
            if (entity != player && entity.isAlive() && !entity.isInvisible()) {
                if (isBot(entity)) continue;
                float dist = player.distanceTo(entity);
                if (dist <= range) {
                    if (entity.getHealth() < lowestHealth) {
                        lowestHealth = entity.getHealth();
                        closestTarget = entity;
                    }
                }
            }
        }
        return closestTarget;
    }

    public static boolean isBot(PlayerEntity entity) {
        if (entity == null || MinecraftClient.getInstance().player == null || MinecraftClient.getInstance().world == null) return false;
        if (entity == MinecraftClient.getInstance().player) return false;
        String name = entity.getName().getString();
        String localPlayerName = MinecraftClient.getInstance().player.getName().getString();
        if (name.equals(localPlayerName)) return true;

        // Логика проверки ботов по UID (защита от NPC с таким же именем)
        for (PlayerEntity other : MinecraftClient.getInstance().world.getPlayers()) {
            if (other != entity && other.getName().getString().equals(name)) {
                if (entity.getId() > other.getId()) return true;
            }
        }
        return false;
    }
}
Код:
Expand Collapse Copy
package fun.rokboll.grimbypasstest.mixin;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import fun.rokboll.grimbypasstest.Grimbypasstest;
import net.minecraft.client.network.ClientPlayerEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

@Mixin(ClientPlayerEntity.class)
public abstract class MixinRotationSnooper {

    // Подменяем ТОЛЬКО внутри sendMovementPackets
    @ModifyExpressionValue(
            method = "sendMovementPackets",
            at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getYaw()F")
    )
    private float hookYaw(float original) {
        if (Grimbypasstest.enabled && Grimbypasstest.hasTarget()) {
            return Grimbypasstest.rotations[0];
        }
        return original;
    }

    @ModifyExpressionValue(
            method = "sendMovementPackets",
            at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getPitch()F")
    )
    private float hookPitch(float original) {
        if (Grimbypasstest.enabled && Grimbypasstest.hasTarget()) {
            return Grimbypasstest.rotations[1];
        }
        return original;
    }
}
Код:
Expand Collapse Copy
package fun.rokboll.grimbypasstest.mixin;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import fun.rokboll.grimbypasstest.Grimbypasstest;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.PlayerInput;
import net.minecraft.util.math.MathHelper;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

@Mixin(net.minecraft.client.input.KeyboardInput.class)
public class MixinKeyboardInput {

    @ModifyExpressionValue(
            method = "tick",
            at = @At(value = "NEW", target = "(ZZZZZZZ)Lnet/minecraft/util/PlayerInput;")
    )
    private PlayerInput tickHook(PlayerInput original) {
        MinecraftClient mc = MinecraftClient.getInstance();

        if (mc.player == null) {
            return original;
        }

        // ОБНОВЛЯЕМ clientYaw ДО того как getYaw() будет подменён
        // (это происходит в sendMovementPackets, а tick() вызывается до него)
        Grimbypasstest.clientYaw = mc.player.getYaw();

        if (!Grimbypasstest.enabled || !Grimbypasstest.hasTarget()) {
            return original;
        }

        float forward = (original.forward() == original.backward()) ? 0.0F : (original.forward() ? 1.0F : -1.0F);
        float strafe = (original.left() == original.right()) ? 0.0F : (original.left() ? 1.0F : -1.0F);

        if (forward == 0.0F && strafe == 0.0F) {
            return original;
        }

        // Считаем дельту между серверным и визуальным углом
        float deltaYaw = MathHelper.wrapDegrees(Grimbypasstest.rotations[0] - Grimbypasstest.clientYaw);
        float deltaRad = deltaYaw * 0.017453292F; // в радианы

        float cos = MathHelper.cos(deltaRad);
        float sin = MathHelper.sin(deltaRad);

        // Поворачиваем вектор движения
        float newStrafe  = strafe  * cos - forward * sin;
        float newForward = forward * cos + strafe  * sin;

        // Округляем в -1/0/1
        int roundedStrafe  = Math.round(newStrafe);
        int roundedForward = Math.round(newForward);

        return new PlayerInput(
                roundedForward > 0,   // forward
                roundedForward < 0,   // backward
                roundedStrafe  > 0,   // left
                roundedStrafe  < 0,   // right
                original.jump(),
                original.sneak(),
                original.sprint()
        );
    }
}
Код:
Expand Collapse Copy
package fun.rokboll.grimbypasstest.mixin;

import fun.rokboll.grimbypasstest.Grimbypasstest;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.entity.Entity;
import net.minecraft.util.Hand;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(ClientPlayerEntity.class)
public class MixinClientPlayerEntity {

    @Inject(method = "tick", at = @At("HEAD"))
    private void onTick(CallbackInfo ci) {
        ClientPlayerEntity player = (ClientPlayerEntity)(Object)this;

        if (Grimbypasstest.enabled) {
            Entity target = Grimbypasstest.findTarget(player);
            if (target != null) {
                Grimbypasstest.updateRotations(player, target);

                if (player.getAttackCooldownProgress(0.0f) >= 1.0f) {
                    if (Grimbypasstest.isLookingAtTarget(player, target, Grimbypasstest.rotations[0], Grimbypasstest.rotations[1])) {
                        MinecraftClient.getInstance().interactionManager.attackEntity(player, target);
                        player.swingHand(Hand.MAIN_HAND);
                    }
                }
            }
        }
    }
}
Код:
Expand Collapse Copy
package fun.rokboll.grimbypasstest.mixin;

import net.minecraft.client.input.Input;
import net.minecraft.util.PlayerInput;
import net.minecraft.util.math.Vec2f;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(Input.class)
public interface MixinInput {
    @Accessor("playerInput")
    PlayerInput getPlayerInput();

    @Accessor("playerInput")
    void setPlayerInput(PlayerInput input);

    @Accessor("movementVector")
    Vec2f getMovementVector();

    @Accessor("movementVector")
    void setMovementVector(Vec2f vec);
}
при заходе 10 сек работают , а потом перестают
 
Назад
Сверху Снизу