Начинающий
- Статус
- Оффлайн
- Регистрация
- 29 Ноя 2023
- Сообщения
- 66
- Реакции
- 0
как их сделать , иишка не может
при заходе 10 сек работают , а потом перестают
Код:
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;
}
}
Код:
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;
}
}
Код:
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()
);
}
}
Код:
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);
}
}
}
}
}
}
Код:
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);
}