• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Часть функционала Scaffold exp 3.1

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
17 Июл 2024
Сообщения
36
Реакции
1
Выберите загрузчик игры
  1. Vanilla
На байпасс не проверял, скорее всего сервера с фиговым АЧ обойдёт
Scaffold.java:
Expand Collapse Copy
package im.expensive.functions.impl.player;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import net.minecraft.block.Blocks;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.client.CPlayerPacket;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;

@FunctionRegister(name = "Scaffold", type = Category.Player)
public class Scaffold extends Function {
    private final ModeSetting mode = new ModeSetting("Режим", "Normal", "Normal", "Tower");
    private final BooleanSetting rotate = new BooleanSetting("Пакетная ротация", true);
    private final BooleanSetting swing = new BooleanSetting("Анимация руки", true);

    private BlockPos lastPos;
    private int blockSlot = -1;
    private boolean isPlacing;
    private float serverYaw, serverPitch;

    public Scaffold() {
        addSettings(mode, rotate, swing);
    }

    @Subscribe
    public void onUpdate(EventUpdate e) {
        if (mc.player == null || mc.world == null) return;

        Vector3d pos = mc.player.getPositionVec();
        BlockPos currentPos = new BlockPos(pos.x, pos.y + 0.5, pos.z);

        if (lastPos == null || !currentPos.equals(lastPos)) {
            findBlockSlot();

            if (blockSlot != -1) {
                BlockPos placePos = currentPos.offset(Direction.DOWN);
                if (rotate.get()) {
                    calculateServerRotation(placePos);
                    sendRotationPacket();
                    isPlacing = true;
                }
                placeBlock(placePos);
                isPlacing = false;
            }

            lastPos = currentPos;
        }

        if (mode.is("Tower") && mc.gameSettings.keyBindJump.isKeyDown()) {
            BlockPos placePos = currentPos.offset(Direction.DOWN);
            if (rotate.get()) {
                calculateServerRotation(placePos);
                sendRotationPacket();
                isPlacing = true;
            }
            placeBlock(placePos);
            isPlacing = false;
        }
    }

    private void calculateServerRotation(BlockPos pos) {
        Vector3d eyesPos = mc.player.getEyePosition(1.0F);
        Vector3d posVec = new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5);
        Vector3d diff = posVec.subtract(eyesPos);

        double diffXZ = Math.sqrt(diff.x * diff.x + diff.z * diff.z);
        float targetYaw = (float)Math.toDegrees(Math.atan2(diff.z, diff.x)) - 90F;
        float targetPitch = (float)-Math.toDegrees(Math.atan2(diff.y, diffXZ));

        this.serverYaw = MathHelper.wrapDegrees(targetYaw);
        this.serverPitch = MathHelper.clamp(targetPitch, -90, 90);
    }

    private void sendRotationPacket() {
        mc.player.connection.sendPacket(new CPlayerPacket.RotationPacket(
                serverYaw,
                serverPitch,
                mc.player.isOnGround()
        ));
    }

    private void findBlockSlot() {
        blockSlot = -1;
        for (int i = 0; i < 9; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() instanceof BlockItem && stack.getCount() > 0) {
                blockSlot = i;
                break;
            }
        }
    }

    private void placeBlock(BlockPos pos) {
        if (mc.world.getBlockState(pos).getBlock() != Blocks.AIR) return;

        int oldSlot = mc.player.inventory.currentItem;
        mc.player.inventory.currentItem = blockSlot;

        Vector3d hitVec = new Vector3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5);
        BlockRayTraceResult rayTrace = new BlockRayTraceResult(hitVec, Direction.UP, pos, false);

        mc.playerController.processRightClickBlock(
                mc.player,
                mc.world,
                Hand.MAIN_HAND,
                rayTrace
        );

        if (swing.get()) {
            mc.player.swingArm(Hand.MAIN_HAND);
        }

        mc.player.inventory.currentItem = oldSlot;
    }
}
 
Последнее редактирование:
Отстаньте от бедной экспы. Идите делайте на 1.21.4
 
оно даже старый матрикс не байпасит...
 

Похожие темы

Ответы
14
Просмотры
739
Ответы
1
Просмотры
378
Ответы
20
Просмотры
2K
Ответы
24
Просмотры
4K
Ответы
35
Просмотры
2K
Назад
Сверху Снизу