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

Обход античита NoClip (Phase) RW 1.21.4 Fabric

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
8 Фев 2024
Сообщения
82
Реакции
2
Выберите загрузчик игры
  1. Fabric
Мы с leva_pro aka (levin1337) сделали NoClip (Phase) под RW такой же как и в Minced/Monoton/Catlavan (no ad)

Если вы с Fabric 1.21.4 нужен ViaFabric на 1.17.1 ну мб и на других версиях будет работать

Phase:
Expand Collapse Copy
package ru.levin.modules.movement;

import net.minecraft.block.BlockState;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.common.CommonPongC2SPacket;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import ru.levin.events.Event;
import ru.levin.events.impl.EventPacket;
import ru.levin.events.impl.EventUpdate;
import ru.levin.events.impl.render.EventRender3D;
import ru.levin.modules.Function;
import ru.levin.modules.FunctionAnnotation;
import ru.levin.modules.Type;
import ru.levin.util.move.NetworkUtils;
import ru.levin.util.render.RenderUtil;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@FunctionAnnotation(name = "Phase", type = Type.Move)
public class Phase extends Function {
    private final List<Packet<?>> packets = new CopyOnWriteArrayList<>();

    private Box box;
    private int tickCounter = 0;

    @Override
    public void onEvent(Event event) {
        if (mc.player == null || mc.world == null) {
            toggle();
        }

        if (event instanceof EventPacket ep) {
            if (ep.isSendPacket()) {
                Packet<?> p = ep.getPacket();
              
                if (shouldPhase() && !(p instanceof KeepAliveC2SPacket) && !(p instanceof CommonPongC2SPacket)) {
                    packets.add(p);
                    ep.setCancel(true);
                }
            }

            if (ep.isReceivePacket() && ep.getPacket() instanceof PlayerPositionLookS2CPacket) {
                resumePackets();
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
        }

        if (event instanceof EventUpdate) {
            tickCounter++;
            if (tickCounter >= 10) {
                resumePackets();
                tickCounter = 0;
            }

            if (shouldPhase()) {
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
            mc.player.setVelocity(mc.player.getVelocity().x, 0.0, mc.player.getVelocity().z);
        }

        if (event instanceof EventRender3D) {
            if (box != null) {
                RenderUtil.render3D.drawHoleOutline(box, Color.WHITE, 2f);
            }
        }
    }

    private boolean shouldPhase() {
        if (mc.player == null || mc.world == null) return false;

        Box hitbox = mc.player.getBoundingBox();
        BlockPos min = new BlockPos((int) Math.floor(hitbox.minX), (int) Math.floor(hitbox.minY), (int) Math.floor(hitbox.minZ));
        BlockPos max = new BlockPos((int) Math.floor(hitbox.maxX), (int) Math.floor(hitbox.maxY), (int) Math.floor(hitbox.maxZ));

        for (int x = min.getX(); x <= max.getX(); x++) {
            for (int y = min.getY(); y <= max.getY(); y++) {
                for (int z = min.getZ(); z <= max.getZ(); z++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    BlockState state = mc.world.getBlockState(pos);
                    if (!state.isAir() && mc.world.getBlockState(pos).getCollisionShape(mc.world, pos).getBoundingBoxes().stream().anyMatch(box -> box.intersects(hitbox.offset(-pos.getX(), -pos.getY(), -pos.getZ())))) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

    private void resumePackets() {
        if (mc.player == null || mc.world == null) {
            toggle();
        }
        if (!packets.isEmpty()) {
            for (Packet<?> packet : new ArrayList<>(packets)) {
                NetworkUtils.sendSilentPacket(packet);
            }
            packets.clear();
            box = mc.player.getBoundingBox();
        }
    }

    @Override
    public void onDisable() {
        super.onDisable();
        resumePackets();
        box = null;
        tickCounter = 0;
    }
}

Mixin чтобы убрать коллизию от блоков


Mixin:
Expand Collapse Copy
package ru.levin.mixin.world;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.ShapeContext;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
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.CallbackInfoReturnable;
import ru.levin.manager.Manager;


import net.minecraft.block.AbstractBlock;
@Mixin(AbstractBlock.AbstractBlockState.class)
public abstract class MixinAbstractBlockState {

    @Inject(
            method = "getCollisionShape(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Lnet/minecraft/util/shape/VoxelShape;",
            at = @At("RETURN"),
            cancellable = true
    )
    private void removeXZCollision(BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable<VoxelShape> cir) {
        if (Manager.FUNCTION_MANAGER != null && Manager.FUNCTION_MANAGER.phase.state) {
            VoxelShape original = cir.getReturnValue();
            double minY = original.getMin(Direction.Axis.Y);
            double maxY = original.getMax(Direction.Axis.Y);

            if (minY >= maxY) {
                maxY = minY + 0.001;
            }

            VoxelShape newShape = VoxelShapes.cuboid(
                    0.0,   
                    minY,   
                    0.0,   
                    1.0,   
                    maxY,   
                    1.0     
            );

            VoxelShape finalShape = VoxelShapes.union(
                    VoxelShapes.cuboid(0.0, minY, 0.0, 0.0, maxY, 0.0)
            );

            cir.setReturnValue(finalShape);
        }
    }
}
 
Последнее редактирование:
Мы с leva_pro aka (levin1337) сделали NoClip (Phase) под RW такой же как и в Minced/Monoton/Catlavan (no ad)

Если вы с Fabric 1.21.4 нужен ViaFabric на 1.17.1 ну мб и на других версиях будет работать

Phase:
Expand Collapse Copy
package ru.levin.modules.movement;

import net.minecraft.block.BlockState;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.common.CommonPongC2SPacket;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import ru.levin.events.Event;
import ru.levin.events.impl.EventPacket;
import ru.levin.events.impl.EventUpdate;
import ru.levin.events.impl.render.EventRender3D;
import ru.levin.modules.Function;
import ru.levin.modules.FunctionAnnotation;
import ru.levin.modules.Type;
import ru.levin.util.move.NetworkUtils;
import ru.levin.util.render.RenderUtil;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@FunctionAnnotation(name = "Phase", type = Type.Move)
public class Phase extends Function {
    private final List<Packet<?>> packets = new CopyOnWriteArrayList<>();

    private Box box;
    private int tickCounter = 0;

    @Override
    public void onEvent(Event event) {
        if (mc.player == null || mc.world == null) {
            toggle();
        }

        if (event instanceof EventPacket ep) {
            if (ep.isSendPacket()) {
                Packet<?> p = ep.getPacket();
             
                if (shouldPhase() && !(p instanceof KeepAliveC2SPacket) && !(p instanceof CommonPongC2SPacket)) {
                    packets.add(p);
                    ep.setCancel(true);
                }
            }

            if (ep.isReceivePacket() && ep.getPacket() instanceof PlayerPositionLookS2CPacket) {
                resumePackets();
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
        }

        if (event instanceof EventUpdate) {
            tickCounter++;
            if (tickCounter >= 10) {
                resumePackets();
                tickCounter = 0;
            }

            if (shouldPhase()) {
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
            mc.player.setVelocity(mc.player.getVelocity().x, 0.0, mc.player.getVelocity().z);
        }

        if (event instanceof EventRender3D) {
            if (box != null) {
                RenderUtil.render3D.drawHoleOutline(box, Color.WHITE, 2f);
            }
        }
    }

    private boolean shouldPhase() {
        if (mc.player == null || mc.world == null) return false;

        Box hitbox = mc.player.getBoundingBox();
        BlockPos min = new BlockPos((int) Math.floor(hitbox.minX), (int) Math.floor(hitbox.minY), (int) Math.floor(hitbox.minZ));
        BlockPos max = new BlockPos((int) Math.floor(hitbox.maxX), (int) Math.floor(hitbox.maxY), (int) Math.floor(hitbox.maxZ));

        for (int x = min.getX(); x <= max.getX(); x++) {
            for (int y = min.getY(); y <= max.getY(); y++) {
                for (int z = min.getZ(); z <= max.getZ(); z++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    BlockState state = mc.world.getBlockState(pos);
                    if (!state.isAir() && mc.world.getBlockState(pos).getCollisionShape(mc.world, pos).getBoundingBoxes().stream().anyMatch(box -> box.intersects(hitbox.offset(-pos.getX(), -pos.getY(), -pos.getZ())))) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

    private void resumePackets() {
        if (mc.player == null || mc.world == null) {
            toggle();
        }
        if (!packets.isEmpty()) {
            for (Packet<?> packet : new ArrayList<>(packets)) {
                NetworkUtils.sendSilentPacket(packet);
            }
            packets.clear();
            box = mc.player.getBoundingBox();
        }
    }

    @Override
    public void onDisable() {
        super.onDisable();
        resumePackets();
        box = null;
        tickCounter = 0;
    }
}

Mixin чтобы убрать коллизию от блоков


Mixin:
Expand Collapse Copy
package ru.levin.mixin.world;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.ShapeContext;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
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.CallbackInfoReturnable;
import ru.levin.manager.Manager;


import net.minecraft.block.AbstractBlock;
@Mixin(AbstractBlock.AbstractBlockState.class)
public abstract class MixinAbstractBlockState {

    @Inject(
            method = "getCollisionShape(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Lnet/minecraft/util/shape/VoxelShape;",
            at = @At("RETURN"),
            cancellable = true
    )
    private void removeXZCollision(BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable<VoxelShape> cir) {
        if (Manager.FUNCTION_MANAGER != null && Manager.FUNCTION_MANAGER.phase.state) {
            VoxelShape original = cir.getReturnValue();
            double minY = original.getMin(Direction.Axis.Y);
            double maxY = original.getMax(Direction.Axis.Y);

            if (minY >= maxY) {
                maxY = minY + 0.001;
            }

            VoxelShape newShape = VoxelShapes.cuboid(
                    0.0,  
                    minY,  
                    0.0,  
                    1.0,  
                    maxY,  
                    1.0    
            );

            VoxelShape finalShape = VoxelShapes.union(
                    VoxelShapes.cuboid(0.0, minY, 0.0, 0.0, maxY, 0.0)
            );

            cir.setReturnValue(finalShape);
        }
    }
}
1 в 1 такой же брат, просто по коду 1 в 1 )😂
 
Говнокод ебанный. Не пости больше ничего
 
Ебанный нейроный код
 
Мы с leva_pro aka (levin1337) сделали NoClip (Phase) под RW такой же как и в Minced/Monoton/Catlavan (no ad)

Если вы с Fabric 1.21.4 нужен ViaFabric на 1.17.1 ну мб и на других версиях будет работать

Phase:
Expand Collapse Copy
package ru.levin.modules.movement;

import net.minecraft.block.BlockState;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.common.CommonPongC2SPacket;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import ru.levin.events.Event;
import ru.levin.events.impl.EventPacket;
import ru.levin.events.impl.EventUpdate;
import ru.levin.events.impl.render.EventRender3D;
import ru.levin.modules.Function;
import ru.levin.modules.FunctionAnnotation;
import ru.levin.modules.Type;
import ru.levin.util.move.NetworkUtils;
import ru.levin.util.render.RenderUtil;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@FunctionAnnotation(name = "Phase", type = Type.Move)
public class Phase extends Function {
    private final List<Packet<?>> packets = new CopyOnWriteArrayList<>();

    private Box box;
    private int tickCounter = 0;

    @Override
    public void onEvent(Event event) {
        if (mc.player == null || mc.world == null) {
            toggle();
        }

        if (event instanceof EventPacket ep) {
            if (ep.isSendPacket()) {
                Packet<?> p = ep.getPacket();
             
                if (shouldPhase() && !(p instanceof KeepAliveC2SPacket) && !(p instanceof CommonPongC2SPacket)) {
                    packets.add(p);
                    ep.setCancel(true);
                }
            }

            if (ep.isReceivePacket() && ep.getPacket() instanceof PlayerPositionLookS2CPacket) {
                resumePackets();
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
        }

        if (event instanceof EventUpdate) {
            tickCounter++;
            if (tickCounter >= 10) {
                resumePackets();
                tickCounter = 0;
            }

            if (shouldPhase()) {
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
            mc.player.setVelocity(mc.player.getVelocity().x, 0.0, mc.player.getVelocity().z);
        }

        if (event instanceof EventRender3D) {
            if (box != null) {
                RenderUtil.render3D.drawHoleOutline(box, Color.WHITE, 2f);
            }
        }
    }

    private boolean shouldPhase() {
        if (mc.player == null || mc.world == null) return false;

        Box hitbox = mc.player.getBoundingBox();
        BlockPos min = new BlockPos((int) Math.floor(hitbox.minX), (int) Math.floor(hitbox.minY), (int) Math.floor(hitbox.minZ));
        BlockPos max = new BlockPos((int) Math.floor(hitbox.maxX), (int) Math.floor(hitbox.maxY), (int) Math.floor(hitbox.maxZ));

        for (int x = min.getX(); x <= max.getX(); x++) {
            for (int y = min.getY(); y <= max.getY(); y++) {
                for (int z = min.getZ(); z <= max.getZ(); z++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    BlockState state = mc.world.getBlockState(pos);
                    if (!state.isAir() && mc.world.getBlockState(pos).getCollisionShape(mc.world, pos).getBoundingBoxes().stream().anyMatch(box -> box.intersects(hitbox.offset(-pos.getX(), -pos.getY(), -pos.getZ())))) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

    private void resumePackets() {
        if (mc.player == null || mc.world == null) {
            toggle();
        }
        if (!packets.isEmpty()) {
            for (Packet<?> packet : new ArrayList<>(packets)) {
                NetworkUtils.sendSilentPacket(packet);
            }
            packets.clear();
            box = mc.player.getBoundingBox();
        }
    }

    @Override
    public void onDisable() {
        super.onDisable();
        resumePackets();
        box = null;
        tickCounter = 0;
    }
}

Mixin чтобы убрать коллизию от блоков


Mixin:
Expand Collapse Copy
package ru.levin.mixin.world;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.ShapeContext;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
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.CallbackInfoReturnable;
import ru.levin.manager.Manager;


import net.minecraft.block.AbstractBlock;
@Mixin(AbstractBlock.AbstractBlockState.class)
public abstract class MixinAbstractBlockState {

    @Inject(
            method = "getCollisionShape(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Lnet/minecraft/util/shape/VoxelShape;",
            at = @At("RETURN"),
            cancellable = true
    )
    private void removeXZCollision(BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable<VoxelShape> cir) {
        if (Manager.FUNCTION_MANAGER != null && Manager.FUNCTION_MANAGER.phase.state) {
            VoxelShape original = cir.getReturnValue();
            double minY = original.getMin(Direction.Axis.Y);
            double maxY = original.getMax(Direction.Axis.Y);

            if (minY >= maxY) {
                maxY = minY + 0.001;
            }

            VoxelShape newShape = VoxelShapes.cuboid(
                    0.0,  
                    minY,  
                    0.0,  
                    1.0,  
                    maxY,  
                    1.0    
            );

            VoxelShape finalShape = VoxelShapes.union(
                    VoxelShapes.cuboid(0.0, minY, 0.0, 0.0, maxY, 0.0)
            );

            cir.setReturnValue(finalShape);
        }
    }
}
блять где хукать эвент в 1.16.5 не могу найти метод
 
Мы с leva_pro aka (levin1337) сделали NoClip (Phase) под RW такой же как и в Minced/Monoton/Catlavan (no ad)

Если вы с Fabric 1.21.4 нужен ViaFabric на 1.17.1 ну мб и на других версиях будет работать

Phase:
Expand Collapse Copy
package ru.levin.modules.movement;

import net.minecraft.block.BlockState;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.common.CommonPongC2SPacket;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import ru.levin.events.Event;
import ru.levin.events.impl.EventPacket;
import ru.levin.events.impl.EventUpdate;
import ru.levin.events.impl.render.EventRender3D;
import ru.levin.modules.Function;
import ru.levin.modules.FunctionAnnotation;
import ru.levin.modules.Type;
import ru.levin.util.move.NetworkUtils;
import ru.levin.util.render.RenderUtil;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@FunctionAnnotation(name = "Phase", type = Type.Move)
public class Phase extends Function {
    private final List<Packet<?>> packets = new CopyOnWriteArrayList<>();

    private Box box;
    private int tickCounter = 0;

    @Override
    public void onEvent(Event event) {
        if (mc.player == null || mc.world == null) {
            toggle();
        }

        if (event instanceof EventPacket ep) {
            if (ep.isSendPacket()) {
                Packet<?> p = ep.getPacket();
             
                if (shouldPhase() && !(p instanceof KeepAliveC2SPacket) && !(p instanceof CommonPongC2SPacket)) {
                    packets.add(p);
                    ep.setCancel(true);
                }
            }

            if (ep.isReceivePacket() && ep.getPacket() instanceof PlayerPositionLookS2CPacket) {
                resumePackets();
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
        }

        if (event instanceof EventUpdate) {
            tickCounter++;
            if (tickCounter >= 10) {
                resumePackets();
                tickCounter = 0;
            }

            if (shouldPhase()) {
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
            mc.player.setVelocity(mc.player.getVelocity().x, 0.0, mc.player.getVelocity().z);
        }

        if (event instanceof EventRender3D) {
            if (box != null) {
                RenderUtil.render3D.drawHoleOutline(box, Color.WHITE, 2f);
            }
        }
    }

    private boolean shouldPhase() {
        if (mc.player == null || mc.world == null) return false;

        Box hitbox = mc.player.getBoundingBox();
        BlockPos min = new BlockPos((int) Math.floor(hitbox.minX), (int) Math.floor(hitbox.minY), (int) Math.floor(hitbox.minZ));
        BlockPos max = new BlockPos((int) Math.floor(hitbox.maxX), (int) Math.floor(hitbox.maxY), (int) Math.floor(hitbox.maxZ));

        for (int x = min.getX(); x <= max.getX(); x++) {
            for (int y = min.getY(); y <= max.getY(); y++) {
                for (int z = min.getZ(); z <= max.getZ(); z++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    BlockState state = mc.world.getBlockState(pos);
                    if (!state.isAir() && mc.world.getBlockState(pos).getCollisionShape(mc.world, pos).getBoundingBoxes().stream().anyMatch(box -> box.intersects(hitbox.offset(-pos.getX(), -pos.getY(), -pos.getZ())))) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

    private void resumePackets() {
        if (mc.player == null || mc.world == null) {
            toggle();
        }
        if (!packets.isEmpty()) {
            for (Packet<?> packet : new ArrayList<>(packets)) {
                NetworkUtils.sendSilentPacket(packet);
            }
            packets.clear();
            box = mc.player.getBoundingBox();
        }
    }

    @Override
    public void onDisable() {
        super.onDisable();
        resumePackets();
        box = null;
        tickCounter = 0;
    }
}

Mixin чтобы убрать коллизию от блоков


Mixin:
Expand Collapse Copy
package ru.levin.mixin.world;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.ShapeContext;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
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.CallbackInfoReturnable;
import ru.levin.manager.Manager;


import net.minecraft.block.AbstractBlock;
@Mixin(AbstractBlock.AbstractBlockState.class)
public abstract class MixinAbstractBlockState {

    @Inject(
            method = "getCollisionShape(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Lnet/minecraft/util/shape/VoxelShape;",
            at = @At("RETURN"),
            cancellable = true
    )
    private void removeXZCollision(BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable<VoxelShape> cir) {
        if (Manager.FUNCTION_MANAGER != null && Manager.FUNCTION_MANAGER.phase.state) {
            VoxelShape original = cir.getReturnValue();
            double minY = original.getMin(Direction.Axis.Y);
            double maxY = original.getMax(Direction.Axis.Y);

            if (minY >= maxY) {
                maxY = minY + 0.001;
            }

            VoxelShape newShape = VoxelShapes.cuboid(
                    0.0,  
                    minY,  
                    0.0,  
                    1.0,  
                    maxY,  
                    1.0    
            );

            VoxelShape finalShape = VoxelShapes.union(
                    VoxelShapes.cuboid(0.0, minY, 0.0, 0.0, maxY, 0.0)
            );

            cir.setReturnValue(finalShape);
        }
    }
}
Кс 3 пофиксят
 
Мы с leva_pro aka (levin1337) сделали NoClip (Phase) под RW такой же как и в Minced/Monoton/Catlavan (no ad)

Если вы с Fabric 1.21.4 нужен ViaFabric на 1.17.1 ну мб и на других версиях будет работать

Phase:
Expand Collapse Copy
package ru.levin.modules.movement;

import net.minecraft.block.BlockState;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.common.CommonPongC2SPacket;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import ru.levin.events.Event;
import ru.levin.events.impl.EventPacket;
import ru.levin.events.impl.EventUpdate;
import ru.levin.events.impl.render.EventRender3D;
import ru.levin.modules.Function;
import ru.levin.modules.FunctionAnnotation;
import ru.levin.modules.Type;
import ru.levin.util.move.NetworkUtils;
import ru.levin.util.render.RenderUtil;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@FunctionAnnotation(name = "Phase", type = Type.Move)
public class Phase extends Function {
    private final List<Packet<?>> packets = new CopyOnWriteArrayList<>();

    private Box box;
    private int tickCounter = 0;

    @Override
    public void onEvent(Event event) {
        if (mc.player == null || mc.world == null) {
            toggle();
        }

        if (event instanceof EventPacket ep) {
            if (ep.isSendPacket()) {
                Packet<?> p = ep.getPacket();
           
                if (shouldPhase() && !(p instanceof KeepAliveC2SPacket) && !(p instanceof CommonPongC2SPacket)) {
                    packets.add(p);
                    ep.setCancel(true);
                }
            }

            if (ep.isReceivePacket() && ep.getPacket() instanceof PlayerPositionLookS2CPacket) {
                resumePackets();
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
        }

        if (event instanceof EventUpdate) {
            tickCounter++;
            if (tickCounter >= 10) {
                resumePackets();
                tickCounter = 0;
            }

            if (shouldPhase()) {
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
            mc.player.setVelocity(mc.player.getVelocity().x, 0.0, mc.player.getVelocity().z);
        }

        if (event instanceof EventRender3D) {
            if (box != null) {
                RenderUtil.render3D.drawHoleOutline(box, Color.WHITE, 2f);
            }
        }
    }

    private boolean shouldPhase() {
        if (mc.player == null || mc.world == null) return false;

        Box hitbox = mc.player.getBoundingBox();
        BlockPos min = new BlockPos((int) Math.floor(hitbox.minX), (int) Math.floor(hitbox.minY), (int) Math.floor(hitbox.minZ));
        BlockPos max = new BlockPos((int) Math.floor(hitbox.maxX), (int) Math.floor(hitbox.maxY), (int) Math.floor(hitbox.maxZ));

        for (int x = min.getX(); x <= max.getX(); x++) {
            for (int y = min.getY(); y <= max.getY(); y++) {
                for (int z = min.getZ(); z <= max.getZ(); z++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    BlockState state = mc.world.getBlockState(pos);
                    if (!state.isAir() && mc.world.getBlockState(pos).getCollisionShape(mc.world, pos).getBoundingBoxes().stream().anyMatch(box -> box.intersects(hitbox.offset(-pos.getX(), -pos.getY(), -pos.getZ())))) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

    private void resumePackets() {
        if (mc.player == null || mc.world == null) {
            toggle();
        }
        if (!packets.isEmpty()) {
            for (Packet<?> packet : new ArrayList<>(packets)) {
                NetworkUtils.sendSilentPacket(packet);
            }
            packets.clear();
            box = mc.player.getBoundingBox();
        }
    }

    @Override
    public void onDisable() {
        super.onDisable();
        resumePackets();
        box = null;
        tickCounter = 0;
    }
}

Mixin чтобы убрать коллизию от блоков


Mixin:
Expand Collapse Copy
package ru.levin.mixin.world;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.ShapeContext;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
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.CallbackInfoReturnable;
import ru.levin.manager.Manager;


import net.minecraft.block.AbstractBlock;
@Mixin(AbstractBlock.AbstractBlockState.class)
public abstract class MixinAbstractBlockState {

    @Inject(
            method = "getCollisionShape(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Lnet/minecraft/util/shape/VoxelShape;",
            at = @At("RETURN"),
            cancellable = true
    )
    private void removeXZCollision(BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable<VoxelShape> cir) {
        if (Manager.FUNCTION_MANAGER != null && Manager.FUNCTION_MANAGER.phase.state) {
            VoxelShape original = cir.getReturnValue();
            double minY = original.getMin(Direction.Axis.Y);
            double maxY = original.getMax(Direction.Axis.Y);

            if (minY >= maxY) {
                maxY = minY + 0.001;
            }

            VoxelShape newShape = VoxelShapes.cuboid(
                    0.0,
                    minY,
                    0.0,
                    1.0,
                    maxY,
                    1.0  
            );

            VoxelShape finalShape = VoxelShapes.union(
                    VoxelShapes.cuboid(0.0, minY, 0.0, 0.0, maxY, 0.0)
            );

            cir.setReturnValue(finalShape);
        }
    }
}
Привет, легендарный кодер Лёва! Посмотрев ваш код, я удивился — иначе это никак не назвать. Почему-то вы не добавили к этому коду blink, который вы успешно украли.

На данном видеоролике (noad)
Пожалуйста, авторизуйтесь для просмотра ссылки.
вы можете увидеть "пасту" за 180 рублей, авторы которой пишут, что сделали noclip под (noad) RW. К сожалению, если вы присмотритесь в правый нижний угол, увидите красивые уведомления от прекрасного автора Pan4ur с проекта (noad) ThunderHack. Там будет написано, что включается не только данный как всегда дристня код, который очень пугает своим содержанием, но и ещё одна удивительная функция — так называемый blink (жаль, ты его сюда не смог приложить).

Далее (noad screenshot)
1756146354315.png

мы видим, что ROSTYANRO (администратор данного канала) пишет о том, что его функцию украли, но, к сожалению, он оказался балаболом. Информацию проверить про первоисточник можно здесь: (noad)
Пожалуйста, авторизуйтесь для просмотра ссылки.


А потом уже вышел из моих каналов впервые в СНГ в (noad) Minced — возможно, ошибаюсь, и это было где-то ещё давно, но первоисточником был (noad) LiquidBounce. 8 мая вышел коммит.
Так что если хотите данный крутой до ужаса phase, то ссылка выше. Хорошей ночи, Лёве! Хорошего лечения и быстрого выздоровления!
Итог: Лёва, мои слова тебе лично — легенда, жаль, что жив...
 
Последнее редактирование:
Привет, легендарный кодер Лёва! Посмотрев ваш код, я удивился — иначе это никак не назвать. Почему-то вы не добавили к этому коду blink, который вы успешно украли.

На данном видеоролике вы можете увидеть "пасту" за 180 рублей, авторы которой пишут, что сделали noclip под (noad) RW. К сожалению, если вы присмотритесь в правый нижний угол, увидите красивые уведомления от прекрасного автора Pan4ur с проекта (noad) ThunderHack. Там будет написано, что включается не только данный как всегда дристня код, который очень пугает своим содержанием, но и ещё одна удивительная функция — так называемый blink (жаль, ты его сюда не смог приложить).

Далее (noad screenshot)
Посмотреть вложение 314150
мы видим, что ROSTYANRO (администратор данного канала) пишет о том, что его функцию украли, но, к сожалению, он оказался балаболом. Информацию проверить про первоисточник можно здесь: (noad)
Пожалуйста, авторизуйтесь для просмотра ссылки.


А потом уже вышел из моих каналов впервые в СНГ в (noad) Minced — возможно, ошибаюсь, и это было где-то ещё давно, но первоисточником был (noad) LiquidBounce. 8 мая вышел коммит.
Так что если хотите данный крутой до ужаса phase, то ссылка выше. Хорошей ночи, Лёве! Хорошего лечения и быстрого выздоровления!
Итог: Лёва, мои слова тебе лично — легенда, жаль, что жив...
я не лева и код не мой а левы
 
Мы с leva_pro aka (levin1337) сделали NoClip (Phase) под RW такой же как и в Minced/Monoton/Catlavan (no ad)

Если вы с Fabric 1.21.4 нужен ViaFabric на 1.17.1 ну мб и на других версиях будет работать

Phase:
Expand Collapse Copy
package ru.levin.modules.movement;

import net.minecraft.block.BlockState;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.common.CommonPongC2SPacket;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import ru.levin.events.Event;
import ru.levin.events.impl.EventPacket;
import ru.levin.events.impl.EventUpdate;
import ru.levin.events.impl.render.EventRender3D;
import ru.levin.modules.Function;
import ru.levin.modules.FunctionAnnotation;
import ru.levin.modules.Type;
import ru.levin.util.move.NetworkUtils;
import ru.levin.util.render.RenderUtil;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@FunctionAnnotation(name = "Phase", type = Type.Move)
public class Phase extends Function {
    private final List<Packet<?>> packets = new CopyOnWriteArrayList<>();

    private Box box;
    private int tickCounter = 0;

    @Override
    public void onEvent(Event event) {
        if (mc.player == null || mc.world == null) {
            toggle();
        }

        if (event instanceof EventPacket ep) {
            if (ep.isSendPacket()) {
                Packet<?> p = ep.getPacket();
             
                if (shouldPhase() && !(p instanceof KeepAliveC2SPacket) && !(p instanceof CommonPongC2SPacket)) {
                    packets.add(p);
                    ep.setCancel(true);
                }
            }

            if (ep.isReceivePacket() && ep.getPacket() instanceof PlayerPositionLookS2CPacket) {
                resumePackets();
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
        }

        if (event instanceof EventUpdate) {
            tickCounter++;
            if (tickCounter >= 10) {
                resumePackets();
                tickCounter = 0;
            }

            if (shouldPhase()) {
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
            mc.player.setVelocity(mc.player.getVelocity().x, 0.0, mc.player.getVelocity().z);
        }

        if (event instanceof EventRender3D) {
            if (box != null) {
                RenderUtil.render3D.drawHoleOutline(box, Color.WHITE, 2f);
            }
        }
    }

    private boolean shouldPhase() {
        if (mc.player == null || mc.world == null) return false;

        Box hitbox = mc.player.getBoundingBox();
        BlockPos min = new BlockPos((int) Math.floor(hitbox.minX), (int) Math.floor(hitbox.minY), (int) Math.floor(hitbox.minZ));
        BlockPos max = new BlockPos((int) Math.floor(hitbox.maxX), (int) Math.floor(hitbox.maxY), (int) Math.floor(hitbox.maxZ));

        for (int x = min.getX(); x <= max.getX(); x++) {
            for (int y = min.getY(); y <= max.getY(); y++) {
                for (int z = min.getZ(); z <= max.getZ(); z++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    BlockState state = mc.world.getBlockState(pos);
                    if (!state.isAir() && mc.world.getBlockState(pos).getCollisionShape(mc.world, pos).getBoundingBoxes().stream().anyMatch(box -> box.intersects(hitbox.offset(-pos.getX(), -pos.getY(), -pos.getZ())))) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

    private void resumePackets() {
        if (mc.player == null || mc.world == null) {
            toggle();
        }
        if (!packets.isEmpty()) {
            for (Packet<?> packet : new ArrayList<>(packets)) {
                NetworkUtils.sendSilentPacket(packet);
            }
            packets.clear();
            box = mc.player.getBoundingBox();
        }
    }

    @Override
    public void onDisable() {
        super.onDisable();
        resumePackets();
        box = null;
        tickCounter = 0;
    }
}

Mixin чтобы убрать коллизию от блоков


Mixin:
Expand Collapse Copy
package ru.levin.mixin.world;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.ShapeContext;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
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.CallbackInfoReturnable;
import ru.levin.manager.Manager;


import net.minecraft.block.AbstractBlock;
@Mixin(AbstractBlock.AbstractBlockState.class)
public abstract class MixinAbstractBlockState {

    @Inject(
            method = "getCollisionShape(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Lnet/minecraft/util/shape/VoxelShape;",
            at = @At("RETURN"),
            cancellable = true
    )
    private void removeXZCollision(BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable<VoxelShape> cir) {
        if (Manager.FUNCTION_MANAGER != null && Manager.FUNCTION_MANAGER.phase.state) {
            VoxelShape original = cir.getReturnValue();
            double minY = original.getMin(Direction.Axis.Y);
            double maxY = original.getMax(Direction.Axis.Y);

            if (minY >= maxY) {
                maxY = minY + 0.001;
            }

            VoxelShape newShape = VoxelShapes.cuboid(
                    0.0,  
                    minY,  
                    0.0,  
                    1.0,  
                    maxY,  
                    1.0    
            );

            VoxelShape finalShape = VoxelShapes.union(
                    VoxelShapes.cuboid(0.0, minY, 0.0, 0.0, maxY, 0.0)
            );

            cir.setReturnValue(finalShape);
        }
    }
}
спасибо вам фнаф секьюрити брич
 
Мы с leva_pro aka (levin1337) сделали NoClip (Phase) под RW такой же как и в Minced/Monoton/Catlavan (no ad)

Если вы с Fabric 1.21.4 нужен ViaFabric на 1.17.1 ну мб и на других версиях будет работать

Phase:
Expand Collapse Copy
package ru.levin.modules.movement;

import net.minecraft.block.BlockState;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.common.CommonPongC2SPacket;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import ru.levin.events.Event;
import ru.levin.events.impl.EventPacket;
import ru.levin.events.impl.EventUpdate;
import ru.levin.events.impl.render.EventRender3D;
import ru.levin.modules.Function;
import ru.levin.modules.FunctionAnnotation;
import ru.levin.modules.Type;
import ru.levin.util.move.NetworkUtils;
import ru.levin.util.render.RenderUtil;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@FunctionAnnotation(name = "Phase", type = Type.Move)
public class Phase extends Function {
    private final List<Packet<?>> packets = new CopyOnWriteArrayList<>();

    private Box box;
    private int tickCounter = 0;

    @Override
    public void onEvent(Event event) {
        if (mc.player == null || mc.world == null) {
            toggle();
        }

        if (event instanceof EventPacket ep) {
            if (ep.isSendPacket()) {
                Packet<?> p = ep.getPacket();
             
                if (shouldPhase() && !(p instanceof KeepAliveC2SPacket) && !(p instanceof CommonPongC2SPacket)) {
                    packets.add(p);
                    ep.setCancel(true);
                }
            }

            if (ep.isReceivePacket() && ep.getPacket() instanceof PlayerPositionLookS2CPacket) {
                resumePackets();
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
        }

        if (event instanceof EventUpdate) {
            tickCounter++;
            if (tickCounter >= 10) {
                resumePackets();
                tickCounter = 0;
            }

            if (shouldPhase()) {
                mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(
                        mc.player.getX(),
                        mc.player.getY(),
                        mc.player.getZ(),
                        mc.player.getYaw(),
                        mc.player.getPitch(),
                        mc.player.isOnGround(),
                        false
                ));
            }
            mc.player.setVelocity(mc.player.getVelocity().x, 0.0, mc.player.getVelocity().z);
        }

        if (event instanceof EventRender3D) {
            if (box != null) {
                RenderUtil.render3D.drawHoleOutline(box, Color.WHITE, 2f);
            }
        }
    }

    private boolean shouldPhase() {
        if (mc.player == null || mc.world == null) return false;

        Box hitbox = mc.player.getBoundingBox();
        BlockPos min = new BlockPos((int) Math.floor(hitbox.minX), (int) Math.floor(hitbox.minY), (int) Math.floor(hitbox.minZ));
        BlockPos max = new BlockPos((int) Math.floor(hitbox.maxX), (int) Math.floor(hitbox.maxY), (int) Math.floor(hitbox.maxZ));

        for (int x = min.getX(); x <= max.getX(); x++) {
            for (int y = min.getY(); y <= max.getY(); y++) {
                for (int z = min.getZ(); z <= max.getZ(); z++) {
                    BlockPos pos = new BlockPos(x, y, z);
                    BlockState state = mc.world.getBlockState(pos);
                    if (!state.isAir() && mc.world.getBlockState(pos).getCollisionShape(mc.world, pos).getBoundingBoxes().stream().anyMatch(box -> box.intersects(hitbox.offset(-pos.getX(), -pos.getY(), -pos.getZ())))) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

    private void resumePackets() {
        if (mc.player == null || mc.world == null) {
            toggle();
        }
        if (!packets.isEmpty()) {
            for (Packet<?> packet : new ArrayList<>(packets)) {
                NetworkUtils.sendSilentPacket(packet);
            }
            packets.clear();
            box = mc.player.getBoundingBox();
        }
    }

    @Override
    public void onDisable() {
        super.onDisable();
        resumePackets();
        box = null;
        tickCounter = 0;
    }
}

Mixin чтобы убрать коллизию от блоков


Mixin:
Expand Collapse Copy
package ru.levin.mixin.world;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.ShapeContext;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
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.CallbackInfoReturnable;
import ru.levin.manager.Manager;


import net.minecraft.block.AbstractBlock;
@Mixin(AbstractBlock.AbstractBlockState.class)
public abstract class MixinAbstractBlockState {

    @Inject(
            method = "getCollisionShape(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Lnet/minecraft/util/shape/VoxelShape;",
            at = @At("RETURN"),
            cancellable = true
    )
    private void removeXZCollision(BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable<VoxelShape> cir) {
        if (Manager.FUNCTION_MANAGER != null && Manager.FUNCTION_MANAGER.phase.state) {
            VoxelShape original = cir.getReturnValue();
            double minY = original.getMin(Direction.Axis.Y);
            double maxY = original.getMax(Direction.Axis.Y);

            if (minY >= maxY) {
                maxY = minY + 0.001;
            }

            VoxelShape newShape = VoxelShapes.cuboid(
                    0.0,  
                    minY,  
                    0.0,  
                    1.0,  
                    maxY,  
                    1.0    
            );

            VoxelShape finalShape = VoxelShapes.union(
                    VoxelShapes.cuboid(0.0, minY, 0.0, 0.0, maxY, 0.0)
            );

            cir.setReturnValue(finalShape);
        }
    }
}
перенес под 1.16.5 mcp,не робит:pepecry:
 
Java:
Expand Collapse Copy
    @Deprecated
    public VoxelShape getCollisionShape(BlockState state, IBlockReader reader, BlockPos pos) {
        VoxelShape originalShape = this.getCollisionShape(state, reader, pos, ISelectionContext.dummy());
        EventBlockCollision event = new EventBlockCollision(reader, pos, originalShape);
        EventManager.call(event);
        return event.getCollisionShape();
    }


хукнул вроде правильно
у меня тож:pepecry:
ки

у меня колизия не отключается
AbstractBlock.getCollisionShape там все о коллизии
Код:
Expand Collapse Copy
    @Deprecated
    public VoxelShape getCollisionShape(BlockState state, IBlockReader reader, BlockPos pos) {
        VoxelShape originalShape = this.getCollisionShape(state, reader, pos, ISelectionContext.dummy());
        EventBlockCollision event = new EventBlockCollision(reader, pos, originalShape);
        EventManager.call(event);
        return event.getCollisionShape();
    }
вот что тут не так скажи
 
Назад
Сверху Снизу