Визуальная часть Vulcan Esp Britva - Delta skid mcp base

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2024
Сообщения
109
Реакции
0
Выберите загрузчик игры
  1. Vanilla
  2. Прочие моды

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Пожалуйста, авторизуйтесь для просмотра ссылки.


Код:
Expand Collapse Copy
@FunctionAnot(name = "ItemESP", description = "Отображает названия предметов над ними в мире", category = Category.RENDER)
public class ItemESP extends Function {
    private final SliderSetting renderDistanceSetting = new SliderSetting("Дистанция рендера", 30, 10, 100, 1);
    private final BooleanSetting colorNameSetting = new BooleanSetting("Цветное название", true);
    private final BooleanSetting showCountSetting = new BooleanSetting("Показывать количество", true);
    private final BooleanSetting animatedTextSetting = new BooleanSetting("Анимированный текст", false);
    private final BooleanSetting showTrajectory = new BooleanSetting("Показывать траекторию", true);
    private final BooleanSetting showItemIconSetting = new BooleanSetting("Показывать иконку предмета", true);
    private final BooleanSetting playSoundSetting = new BooleanSetting("Звук при обнаружении предмета", true);

    private final ModeListSetting targetItemsSetting = new ModeListSetting("Целевые предметы",
            new BooleanSetting("Голова игрока", true),
            new BooleanSetting("Крюк", true),
            new BooleanSetting("Взрывное зелье", true),
            new BooleanSetting("Слиток незерита", true),
            new BooleanSetting("Меч незерита", true),
            new BooleanSetting("Шлем незерита", true),
            new BooleanSetting("Нагрудник незерита", true),
            new BooleanSetting("Поножи незерита", true),
            new BooleanSetting("Ботинки незерита", true),
            new BooleanSetting("Тотем бессмертия", true),
            new BooleanSetting("Бессмертие", true),
            new BooleanSetting("Восстановление", true),
            new BooleanSetting("Бутылочка с опытом", true)
    );

    private static final Minecraft mc = Minecraft.getInstance();

    private final Set<UUID> detectedItems = new HashSet<>();

    private final Map<String, Item> itemMap = new HashMap<>() {{
        put("Голова игрока", Items.PLAYER_HEAD);
        put("Крюк", Items.TRIPWIRE_HOOK);
        put("Взрывное зелье", Items.SPLASH_POTION);
        put("Слиток незерита", Items.NETHERITE_INGOT);
        put("Меч незерита", Items.NETHERITE_SWORD);
        put("Шлем незерита", Items.NETHERITE_HELMET);
        put("Нагрудник незерита", Items.NETHERITE_CHESTPLATE);
        put("Поножи незерита", Items.NETHERITE_LEGGINGS);
        put("Ботинки незерита", Items.NETHERITE_BOOTS);
        put("Тотем бессмертия", Items.TOTEM_OF_UNDYING);
    }};

    public ItemESP() {
        addSetting(renderDistanceSetting);
        addSetting(colorNameSetting);
        addSetting(showCountSetting);
        addSetting(animatedTextSetting);
        addSetting(showTrajectory);
        addSetting(showItemIconSetting);
        addSetting(playSoundSetting);
        addSetting(targetItemsSetting);
    }

    [USER=1367676]@override[/USER]
    protected void onEnable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    protected void onDisable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    public void onBindPress() {
    }

    private String getFormattedItemName(ItemStack itemStack) {
        String baseName = itemStack.getDisplayName().getString();

        if (showCountSetting.isValue()) {
            baseName += " x" + itemStack.getCount();
        }

        if (animatedTextSetting.isValue()) {
            return RenderUtils.AnimatedText.rainbowText(baseName);
        }
        if (colorNameSetting.isValue()) {
            return TextFormatting.RED + baseName;
        }

        return baseName;
    }

    [USER=1474073]@Subscribe[/USER]
    public void onRenderWorldLast(RenderEvent event) {
        if (mc.player == null || mc.world == null || !enabled) return;

        MatrixStack matrixStack = event.getMatrixStack();
        float partialTicks = event.getPartialTicks();

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity) {
                ItemEntity itemEntity = (ItemEntity) entity;
                ItemStack itemStack = itemEntity.getItem();

                if (!isItemEnabled(itemStack.getItem(), itemStack)) continue;

                double distance = mc.player.getPositionVec().distanceTo(itemEntity.getPositionVec());
                if (distance > renderDistanceSetting.getOut()) continue;


                if (playSoundSetting.isValue() && !detectedItems.contains(itemEntity.getUniqueID())) {
                    playItemDetectionSound(itemEntity);
                    detectedItems.add(itemEntity.getUniqueID());
                }

                String itemName = getFormattedItemName(itemStack);
                Vector3d entityPos = itemEntity.getPositionVec();
                Vector2f screenPos = ProjectionUtil.project(entityPos.x, entityPos.y, entityPos.z);

                renderItemName(matrixStack, itemEntity, itemStack, itemName, screenPos.x, screenPos.y);
                renderItemHitbox(itemEntity);

                if (showTrajectory.isValue()) {
                    renderTrajectory(matrixStack, itemEntity, partialTicks);
                }
            }
        }
    }

    private void playItemDetectionSound(ItemEntity itemEntity) {
        mc.getSoundHandler().play(
                SimpleSound.master(
                        SoundEvents.ENTITY_ENDERMAN_TELEPORT,
                        1.0F,
                        1.2F
                )
        );
    }

    private boolean isItemEnabled(Item item, ItemStack itemStack) {
        String displayName = itemStack.getDisplayName().getString().toLowerCase();

        for (Object settingObj : targetItemsSetting.getList()) {
            if (settingObj instanceof BooleanSetting) {
                BooleanSetting setting = (BooleanSetting) settingObj;
                if (setting.getName().equals("Талисман Крушителя") && setting.isValue()) {
                    if (!displayName.contains("круш")) {
                        return false;
                    }
                }
            }
        }

        for (Map.Entry<String, Item> entry : itemMap.entrySet()) {
            if (entry.getValue() == item) {
                for (Object settingObj : targetItemsSetting.getList()) {
                    if (settingObj instanceof BooleanSetting) {
                        BooleanSetting setting = (BooleanSetting) settingObj;
                        if (setting.getName().equals(entry.getKey())) {
                            return setting.isValue();
                        }
                    }
                }
            }
        }
        return false;
    }

    private void renderItemName(MatrixStack matrixStack, ItemEntity itemEntity, ItemStack itemStack, String itemName, float x, float y) {
        int itemNameColor = new Color(128, 0, 128).getRGB();

        boolean canPickup = canPickupItem(itemEntity);

        Vector3d itemPos = itemEntity.getPositionVec();
        Vector2f screenPos = ProjectionUtil.project(itemPos.x, itemPos.y + 0.5, itemPos.z);

        if (showItemIconSetting.isValue()) {
            RenderSystem.pushMatrix();
            RenderSystem.enableBlend();
            RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);

            mc.getItemRenderer().renderItemIntoGUI(itemStack, (int)(screenPos.x - 8), (int)(screenPos.y - 40));

            RenderSystem.disableBlend();
            RenderSystem.popMatrix();
        }

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                itemName,
                screenPos.x,
                screenPos.y - 10,
                new Color(itemNameColor),
                17,
                matrixStack
        );

        String takeText = canPickup ? "Можно Взять" : "Нельзя Взять";
        int takeColor = canPickup ? new Color(123, 210, 202).getRGB() : new Color(86, 43, 43).getRGB();

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                takeText,
                screenPos.x,
                screenPos.y,
                new Color(takeColor),
                18,
                matrixStack
        );
    }
    private boolean canPickupItem(ItemEntity itemEntity) {
        BlockPos blockUnder = new BlockPos(
                itemEntity.getPosX(),
                itemEntity.getPosY() - 0.1,
                itemEntity.getPosZ()
        );

        boolean isOnSolidBlock = mc.world.getBlockState(blockUnder).getMaterial().isSolid();

        boolean isStationary = Math.abs(itemEntity.getMotion().x) < 0.01 &&
                Math.abs(itemEntity.getMotion().y) < 0.01 &&
                Math.abs(itemEntity.getMotion().z) < 0.01;

        int itemAge = itemEntity.getAge();


        return (isOnSolidBlock || isStationary) && itemAge > 20;
    }

    private void renderItemHitbox(ItemEntity itemEntity) {
        net.minecraft.util.math.AxisAlignedBB bbox = itemEntity.getBoundingBox();
        String displayName = itemEntity.getItem().getDisplayName().getString();

        Color hitboxColor = getColorFromName(displayName);

        double minX = bbox.minX;
        double minY = bbox.minY;
        double minZ = bbox.minZ;
        double maxX = bbox.maxX;
        double maxY = bbox.maxY;
        double maxZ = bbox.maxZ;

        renderLine(minX, minY, minZ, maxX, minY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, maxY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, maxY, minZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, minY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, minY, maxZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, maxY, minZ, maxX, maxY, maxZ, hitboxColor);
    }

    private Color getColorFromName(String displayName) {
        Pattern colorPattern = Pattern.compile("\\[([^]]+)\\]|«([^»]+)»|\\(([^)]+)\\)");
        Matcher matcher = colorPattern.matcher(displayName);

        if (matcher.find()) {
            String colorText = matcher.group(1) != null ? matcher.group(1) :
                    matcher.group(2) != null ? matcher.group(2) :
                            matcher.group(3);

            try {
                Field colorField = Color.class.getField(colorText.toLowerCase());
                return (Color) colorField.get(null);
            } catch (Exception e) {
                try {
                    if (colorText.startsWith("#")) {
                        return Color.decode(colorText);
                    }

                    String[] rgb = colorText.split(",");
                    if (rgb.length == 3) {
                        return new Color(
                                Integer.parseInt(rgb[0].trim()),
                                Integer.parseInt(rgb[1].trim()),
                                Integer.parseInt(rgb[2].trim())
                        );
                    }
                } catch (Exception ex) {

                    return Color.RED;
                }
            }
        }

        return Color.RED;
    }

    private void renderTrajectory(MatrixStack matrixStack, ItemEntity itemEntity, float partialTicks) {
        Vector3d startPos = itemEntity.getPositionVec();
        Vector3d velocity = itemEntity.getMotion();
        Vector3d endPos = findLandingPosition(itemEntity, startPos, velocity);
        Vector2f startScreen = ProjectionUtil.project(startPos.x, startPos.y, startPos.z);
        Vector2f endScreen = ProjectionUtil.project(endPos.x, endPos.y, endPos.z);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(1.0F, 0.0F, 0.0F, 1.0F);
        RenderSystem.lineWidth(7.8F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(startScreen.x, startScreen.y, 0).endVertex();
        bufferBuilder.pos(endScreen.x, endScreen.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();

        BlockPos landingBlock = new BlockPos(endPos);
        ItemStack blockItemStack = new ItemStack(mc.world.getBlockState(landingBlock).getBlock());
        ItemStack flyingItemStack = itemEntity.getItem();


        int verticalDistance = (int)Math.abs(startPos.y - endPos.y);



        RenderSystem.pushMatrix();
        RenderSystem.enableBlend();
        mc.getItemRenderer().renderItemIntoGUI(flyingItemStack, (int)(endScreen.x + 10), (int)(endScreen.y - 8));
        RenderSystem.disableBlend();
        RenderSystem.popMatrix();

        String distanceText = verticalDistance + " блоков";
        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                distanceText,
                endScreen.x,
                endScreen.y + 10,
                new Color(128, 128, 128),
                14,
                matrixStack
        );
    }
    private void renderLine(double x1, double y1, double z1, double x2, double y2, double z2, Color color) {
        Vector2f start = ProjectionUtil.project(x1, y1, z1);
        Vector2f end = ProjectionUtil.project(x2, y2, z2);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
        RenderSystem.lineWidth(15.0F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(start.x, start.y, 0).endVertex();
        bufferBuilder.pos(end.x, end.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();
    }

    private Vector3d findLandingPosition(ItemEntity itemEntity, Vector3d startPos, Vector3d initialVelocity) {
        Vector3d currentPos = startPos;
        Vector3d currentVelocity = initialVelocity;
        double gravity = 0.03999999910593033D;

        while (true) {
            currentVelocity = currentVelocity.subtract(0, gravity, 0);
            currentPos = currentPos.add(currentVelocity);

            currentPos = currentPos.add(currentVelocity);

            if (mc.world.getBlockState(new BlockPos(currentPos)).getMaterial().isSolid()) {
                return currentPos;
            }

            if (Math.abs(currentPos.y - startPos.y) > 50) {
                return currentPos;
}}}}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пожалуйста, авторизуйтесь для просмотра ссылки.


Код:
Expand Collapse Copy
@FunctionAnot(name = "ItemESP", description = "Отображает названия предметов над ними в мире", category = Category.RENDER)
public class ItemESP extends Function {
    private final SliderSetting renderDistanceSetting = new SliderSetting("Дистанция рендера", 30, 10, 100, 1);
    private final BooleanSetting colorNameSetting = new BooleanSetting("Цветное название", true);
    private final BooleanSetting showCountSetting = new BooleanSetting("Показывать количество", true);
    private final BooleanSetting animatedTextSetting = new BooleanSetting("Анимированный текст", false);
    private final BooleanSetting showTrajectory = new BooleanSetting("Показывать траекторию", true);
    private final BooleanSetting showItemIconSetting = new BooleanSetting("Показывать иконку предмета", true);
    private final BooleanSetting playSoundSetting = new BooleanSetting("Звук при обнаружении предмета", true);

    private final ModeListSetting targetItemsSetting = new ModeListSetting("Целевые предметы",
            new BooleanSetting("Голова игрока", true),
            new BooleanSetting("Крюк", true),
            new BooleanSetting("Взрывное зелье", true),
            new BooleanSetting("Слиток незерита", true),
            new BooleanSetting("Меч незерита", true),
            new BooleanSetting("Шлем незерита", true),
            new BooleanSetting("Нагрудник незерита", true),
            new BooleanSetting("Поножи незерита", true),
            new BooleanSetting("Ботинки незерита", true),
            new BooleanSetting("Тотем бессмертия", true),
            new BooleanSetting("Бессмертие", true),
            new BooleanSetting("Восстановление", true),
            new BooleanSetting("Бутылочка с опытом", true)
    );

    private static final Minecraft mc = Minecraft.getInstance();

    private final Set<UUID> detectedItems = new HashSet<>();

    private final Map<String, Item> itemMap = new HashMap<>() {{
        put("Голова игрока", Items.PLAYER_HEAD);
        put("Крюк", Items.TRIPWIRE_HOOK);
        put("Взрывное зелье", Items.SPLASH_POTION);
        put("Слиток незерита", Items.NETHERITE_INGOT);
        put("Меч незерита", Items.NETHERITE_SWORD);
        put("Шлем незерита", Items.NETHERITE_HELMET);
        put("Нагрудник незерита", Items.NETHERITE_CHESTPLATE);
        put("Поножи незерита", Items.NETHERITE_LEGGINGS);
        put("Ботинки незерита", Items.NETHERITE_BOOTS);
        put("Тотем бессмертия", Items.TOTEM_OF_UNDYING);
    }};

    public ItemESP() {
        addSetting(renderDistanceSetting);
        addSetting(colorNameSetting);
        addSetting(showCountSetting);
        addSetting(animatedTextSetting);
        addSetting(showTrajectory);
        addSetting(showItemIconSetting);
        addSetting(playSoundSetting);
        addSetting(targetItemsSetting);
    }

    [USER=1367676]@override[/USER]
    protected void onEnable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    protected void onDisable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    public void onBindPress() {
    }

    private String getFormattedItemName(ItemStack itemStack) {
        String baseName = itemStack.getDisplayName().getString();

        if (showCountSetting.isValue()) {
            baseName += " x" + itemStack.getCount();
        }

        if (animatedTextSetting.isValue()) {
            return RenderUtils.AnimatedText.rainbowText(baseName);
        }
        if (colorNameSetting.isValue()) {
            return TextFormatting.RED + baseName;
        }

        return baseName;
    }

    [USER=1474073]@Subscribe[/USER]
    public void onRenderWorldLast(RenderEvent event) {
        if (mc.player == null || mc.world == null || !enabled) return;

        MatrixStack matrixStack = event.getMatrixStack();
        float partialTicks = event.getPartialTicks();

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity) {
                ItemEntity itemEntity = (ItemEntity) entity;
                ItemStack itemStack = itemEntity.getItem();

                if (!isItemEnabled(itemStack.getItem(), itemStack)) continue;

                double distance = mc.player.getPositionVec().distanceTo(itemEntity.getPositionVec());
                if (distance > renderDistanceSetting.getOut()) continue;


                if (playSoundSetting.isValue() && !detectedItems.contains(itemEntity.getUniqueID())) {
                    playItemDetectionSound(itemEntity);
                    detectedItems.add(itemEntity.getUniqueID());
                }

                String itemName = getFormattedItemName(itemStack);
                Vector3d entityPos = itemEntity.getPositionVec();
                Vector2f screenPos = ProjectionUtil.project(entityPos.x, entityPos.y, entityPos.z);

                renderItemName(matrixStack, itemEntity, itemStack, itemName, screenPos.x, screenPos.y);
                renderItemHitbox(itemEntity);

                if (showTrajectory.isValue()) {
                    renderTrajectory(matrixStack, itemEntity, partialTicks);
                }
            }
        }
    }

    private void playItemDetectionSound(ItemEntity itemEntity) {
        mc.getSoundHandler().play(
                SimpleSound.master(
                        SoundEvents.ENTITY_ENDERMAN_TELEPORT,
                        1.0F,
                        1.2F
                )
        );
    }

    private boolean isItemEnabled(Item item, ItemStack itemStack) {
        String displayName = itemStack.getDisplayName().getString().toLowerCase();

        for (Object settingObj : targetItemsSetting.getList()) {
            if (settingObj instanceof BooleanSetting) {
                BooleanSetting setting = (BooleanSetting) settingObj;
                if (setting.getName().equals("Талисман Крушителя") && setting.isValue()) {
                    if (!displayName.contains("круш")) {
                        return false;
                    }
                }
            }
        }

        for (Map.Entry<String, Item> entry : itemMap.entrySet()) {
            if (entry.getValue() == item) {
                for (Object settingObj : targetItemsSetting.getList()) {
                    if (settingObj instanceof BooleanSetting) {
                        BooleanSetting setting = (BooleanSetting) settingObj;
                        if (setting.getName().equals(entry.getKey())) {
                            return setting.isValue();
                        }
                    }
                }
            }
        }
        return false;
    }

    private void renderItemName(MatrixStack matrixStack, ItemEntity itemEntity, ItemStack itemStack, String itemName, float x, float y) {
        int itemNameColor = new Color(128, 0, 128).getRGB();

        boolean canPickup = canPickupItem(itemEntity);

        Vector3d itemPos = itemEntity.getPositionVec();
        Vector2f screenPos = ProjectionUtil.project(itemPos.x, itemPos.y + 0.5, itemPos.z);

        if (showItemIconSetting.isValue()) {
            RenderSystem.pushMatrix();
            RenderSystem.enableBlend();
            RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);

            mc.getItemRenderer().renderItemIntoGUI(itemStack, (int)(screenPos.x - 8), (int)(screenPos.y - 40));

            RenderSystem.disableBlend();
            RenderSystem.popMatrix();
        }

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                itemName,
                screenPos.x,
                screenPos.y - 10,
                new Color(itemNameColor),
                17,
                matrixStack
        );

        String takeText = canPickup ? "Можно Взять" : "Нельзя Взять";
        int takeColor = canPickup ? new Color(123, 210, 202).getRGB() : new Color(86, 43, 43).getRGB();

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                takeText,
                screenPos.x,
                screenPos.y,
                new Color(takeColor),
                18,
                matrixStack
        );
    }
    private boolean canPickupItem(ItemEntity itemEntity) {
        BlockPos blockUnder = new BlockPos(
                itemEntity.getPosX(),
                itemEntity.getPosY() - 0.1,
                itemEntity.getPosZ()
        );

        boolean isOnSolidBlock = mc.world.getBlockState(blockUnder).getMaterial().isSolid();

        boolean isStationary = Math.abs(itemEntity.getMotion().x) < 0.01 &&
                Math.abs(itemEntity.getMotion().y) < 0.01 &&
                Math.abs(itemEntity.getMotion().z) < 0.01;

        int itemAge = itemEntity.getAge();


        return (isOnSolidBlock || isStationary) && itemAge > 20;
    }

    private void renderItemHitbox(ItemEntity itemEntity) {
        net.minecraft.util.math.AxisAlignedBB bbox = itemEntity.getBoundingBox();
        String displayName = itemEntity.getItem().getDisplayName().getString();

        Color hitboxColor = getColorFromName(displayName);

        double minX = bbox.minX;
        double minY = bbox.minY;
        double minZ = bbox.minZ;
        double maxX = bbox.maxX;
        double maxY = bbox.maxY;
        double maxZ = bbox.maxZ;

        renderLine(minX, minY, minZ, maxX, minY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, maxY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, maxY, minZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, minY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, minY, maxZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, maxY, minZ, maxX, maxY, maxZ, hitboxColor);
    }

    private Color getColorFromName(String displayName) {
        Pattern colorPattern = Pattern.compile("\\[([^]]+)\\]|«([^»]+)»|\\(([^)]+)\\)");
        Matcher matcher = colorPattern.matcher(displayName);

        if (matcher.find()) {
            String colorText = matcher.group(1) != null ? matcher.group(1) :
                    matcher.group(2) != null ? matcher.group(2) :
                            matcher.group(3);

            try {
                Field colorField = Color.class.getField(colorText.toLowerCase());
                return (Color) colorField.get(null);
            } catch (Exception e) {
                try {
                    if (colorText.startsWith("#")) {
                        return Color.decode(colorText);
                    }

                    String[] rgb = colorText.split(",");
                    if (rgb.length == 3) {
                        return new Color(
                                Integer.parseInt(rgb[0].trim()),
                                Integer.parseInt(rgb[1].trim()),
                                Integer.parseInt(rgb[2].trim())
                        );
                    }
                } catch (Exception ex) {

                    return Color.RED;
                }
            }
        }

        return Color.RED;
    }

    private void renderTrajectory(MatrixStack matrixStack, ItemEntity itemEntity, float partialTicks) {
        Vector3d startPos = itemEntity.getPositionVec();
        Vector3d velocity = itemEntity.getMotion();
        Vector3d endPos = findLandingPosition(itemEntity, startPos, velocity);
        Vector2f startScreen = ProjectionUtil.project(startPos.x, startPos.y, startPos.z);
        Vector2f endScreen = ProjectionUtil.project(endPos.x, endPos.y, endPos.z);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(1.0F, 0.0F, 0.0F, 1.0F);
        RenderSystem.lineWidth(7.8F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(startScreen.x, startScreen.y, 0).endVertex();
        bufferBuilder.pos(endScreen.x, endScreen.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();

        BlockPos landingBlock = new BlockPos(endPos);
        ItemStack blockItemStack = new ItemStack(mc.world.getBlockState(landingBlock).getBlock());
        ItemStack flyingItemStack = itemEntity.getItem();


        int verticalDistance = (int)Math.abs(startPos.y - endPos.y);



        RenderSystem.pushMatrix();
        RenderSystem.enableBlend();
        mc.getItemRenderer().renderItemIntoGUI(flyingItemStack, (int)(endScreen.x + 10), (int)(endScreen.y - 8));
        RenderSystem.disableBlend();
        RenderSystem.popMatrix();

        String distanceText = verticalDistance + " блоков";
        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                distanceText,
                endScreen.x,
                endScreen.y + 10,
                new Color(128, 128, 128),
                14,
                matrixStack
        );
    }
    private void renderLine(double x1, double y1, double z1, double x2, double y2, double z2, Color color) {
        Vector2f start = ProjectionUtil.project(x1, y1, z1);
        Vector2f end = ProjectionUtil.project(x2, y2, z2);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
        RenderSystem.lineWidth(15.0F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(start.x, start.y, 0).endVertex();
        bufferBuilder.pos(end.x, end.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();
    }

    private Vector3d findLandingPosition(ItemEntity itemEntity, Vector3d startPos, Vector3d initialVelocity) {
        Vector3d currentPos = startPos;
        Vector3d currentVelocity = initialVelocity;
        double gravity = 0.03999999910593033D;

        while (true) {
            currentVelocity = currentVelocity.subtract(0, gravity, 0);
            currentPos = currentPos.add(currentVelocity);

            currentPos = currentPos.add(currentVelocity);

            if (mc.world.getBlockState(new BlockPos(currentPos)).getMaterial().isSolid()) {
                return currentPos;
            }

            if (Math.abs(currentPos.y - startPos.y) > 50) {
                return currentPos;
}}}}
Это пиздец
 
худшее что я видел на форуме
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пожалуйста, авторизуйтесь для просмотра ссылки.


Код:
Expand Collapse Copy
@FunctionAnot(name = "ItemESP", description = "Отображает названия предметов над ними в мире", category = Category.RENDER)
public class ItemESP extends Function {
    private final SliderSetting renderDistanceSetting = new SliderSetting("Дистанция рендера", 30, 10, 100, 1);
    private final BooleanSetting colorNameSetting = new BooleanSetting("Цветное название", true);
    private final BooleanSetting showCountSetting = new BooleanSetting("Показывать количество", true);
    private final BooleanSetting animatedTextSetting = new BooleanSetting("Анимированный текст", false);
    private final BooleanSetting showTrajectory = new BooleanSetting("Показывать траекторию", true);
    private final BooleanSetting showItemIconSetting = new BooleanSetting("Показывать иконку предмета", true);
    private final BooleanSetting playSoundSetting = new BooleanSetting("Звук при обнаружении предмета", true);

    private final ModeListSetting targetItemsSetting = new ModeListSetting("Целевые предметы",
            new BooleanSetting("Голова игрока", true),
            new BooleanSetting("Крюк", true),
            new BooleanSetting("Взрывное зелье", true),
            new BooleanSetting("Слиток незерита", true),
            new BooleanSetting("Меч незерита", true),
            new BooleanSetting("Шлем незерита", true),
            new BooleanSetting("Нагрудник незерита", true),
            new BooleanSetting("Поножи незерита", true),
            new BooleanSetting("Ботинки незерита", true),
            new BooleanSetting("Тотем бессмертия", true),
            new BooleanSetting("Бессмертие", true),
            new BooleanSetting("Восстановление", true),
            new BooleanSetting("Бутылочка с опытом", true)
    );

    private static final Minecraft mc = Minecraft.getInstance();

    private final Set<UUID> detectedItems = new HashSet<>();

    private final Map<String, Item> itemMap = new HashMap<>() {{
        put("Голова игрока", Items.PLAYER_HEAD);
        put("Крюк", Items.TRIPWIRE_HOOK);
        put("Взрывное зелье", Items.SPLASH_POTION);
        put("Слиток незерита", Items.NETHERITE_INGOT);
        put("Меч незерита", Items.NETHERITE_SWORD);
        put("Шлем незерита", Items.NETHERITE_HELMET);
        put("Нагрудник незерита", Items.NETHERITE_CHESTPLATE);
        put("Поножи незерита", Items.NETHERITE_LEGGINGS);
        put("Ботинки незерита", Items.NETHERITE_BOOTS);
        put("Тотем бессмертия", Items.TOTEM_OF_UNDYING);
    }};

    public ItemESP() {
        addSetting(renderDistanceSetting);
        addSetting(colorNameSetting);
        addSetting(showCountSetting);
        addSetting(animatedTextSetting);
        addSetting(showTrajectory);
        addSetting(showItemIconSetting);
        addSetting(playSoundSetting);
        addSetting(targetItemsSetting);
    }

    [USER=1367676]@override[/USER]
    protected void onEnable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    protected void onDisable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    public void onBindPress() {
    }

    private String getFormattedItemName(ItemStack itemStack) {
        String baseName = itemStack.getDisplayName().getString();

        if (showCountSetting.isValue()) {
            baseName += " x" + itemStack.getCount();
        }

        if (animatedTextSetting.isValue()) {
            return RenderUtils.AnimatedText.rainbowText(baseName);
        }
        if (colorNameSetting.isValue()) {
            return TextFormatting.RED + baseName;
        }

        return baseName;
    }

    [USER=1474073]@Subscribe[/USER]
    public void onRenderWorldLast(RenderEvent event) {
        if (mc.player == null || mc.world == null || !enabled) return;

        MatrixStack matrixStack = event.getMatrixStack();
        float partialTicks = event.getPartialTicks();

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity) {
                ItemEntity itemEntity = (ItemEntity) entity;
                ItemStack itemStack = itemEntity.getItem();

                if (!isItemEnabled(itemStack.getItem(), itemStack)) continue;

                double distance = mc.player.getPositionVec().distanceTo(itemEntity.getPositionVec());
                if (distance > renderDistanceSetting.getOut()) continue;


                if (playSoundSetting.isValue() && !detectedItems.contains(itemEntity.getUniqueID())) {
                    playItemDetectionSound(itemEntity);
                    detectedItems.add(itemEntity.getUniqueID());
                }

                String itemName = getFormattedItemName(itemStack);
                Vector3d entityPos = itemEntity.getPositionVec();
                Vector2f screenPos = ProjectionUtil.project(entityPos.x, entityPos.y, entityPos.z);

                renderItemName(matrixStack, itemEntity, itemStack, itemName, screenPos.x, screenPos.y);
                renderItemHitbox(itemEntity);

                if (showTrajectory.isValue()) {
                    renderTrajectory(matrixStack, itemEntity, partialTicks);
                }
            }
        }
    }

    private void playItemDetectionSound(ItemEntity itemEntity) {
        mc.getSoundHandler().play(
                SimpleSound.master(
                        SoundEvents.ENTITY_ENDERMAN_TELEPORT,
                        1.0F,
                        1.2F
                )
        );
    }

    private boolean isItemEnabled(Item item, ItemStack itemStack) {
        String displayName = itemStack.getDisplayName().getString().toLowerCase();

        for (Object settingObj : targetItemsSetting.getList()) {
            if (settingObj instanceof BooleanSetting) {
                BooleanSetting setting = (BooleanSetting) settingObj;
                if (setting.getName().equals("Талисман Крушителя") && setting.isValue()) {
                    if (!displayName.contains("круш")) {
                        return false;
                    }
                }
            }
        }

        for (Map.Entry<String, Item> entry : itemMap.entrySet()) {
            if (entry.getValue() == item) {
                for (Object settingObj : targetItemsSetting.getList()) {
                    if (settingObj instanceof BooleanSetting) {
                        BooleanSetting setting = (BooleanSetting) settingObj;
                        if (setting.getName().equals(entry.getKey())) {
                            return setting.isValue();
                        }
                    }
                }
            }
        }
        return false;
    }

    private void renderItemName(MatrixStack matrixStack, ItemEntity itemEntity, ItemStack itemStack, String itemName, float x, float y) {
        int itemNameColor = new Color(128, 0, 128).getRGB();

        boolean canPickup = canPickupItem(itemEntity);

        Vector3d itemPos = itemEntity.getPositionVec();
        Vector2f screenPos = ProjectionUtil.project(itemPos.x, itemPos.y + 0.5, itemPos.z);

        if (showItemIconSetting.isValue()) {
            RenderSystem.pushMatrix();
            RenderSystem.enableBlend();
            RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);

            mc.getItemRenderer().renderItemIntoGUI(itemStack, (int)(screenPos.x - 8), (int)(screenPos.y - 40));

            RenderSystem.disableBlend();
            RenderSystem.popMatrix();
        }

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                itemName,
                screenPos.x,
                screenPos.y - 10,
                new Color(itemNameColor),
                17,
                matrixStack
        );

        String takeText = canPickup ? "Можно Взять" : "Нельзя Взять";
        int takeColor = canPickup ? new Color(123, 210, 202).getRGB() : new Color(86, 43, 43).getRGB();

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                takeText,
                screenPos.x,
                screenPos.y,
                new Color(takeColor),
                18,
                matrixStack
        );
    }
    private boolean canPickupItem(ItemEntity itemEntity) {
        BlockPos blockUnder = new BlockPos(
                itemEntity.getPosX(),
                itemEntity.getPosY() - 0.1,
                itemEntity.getPosZ()
        );

        boolean isOnSolidBlock = mc.world.getBlockState(blockUnder).getMaterial().isSolid();

        boolean isStationary = Math.abs(itemEntity.getMotion().x) < 0.01 &&
                Math.abs(itemEntity.getMotion().y) < 0.01 &&
                Math.abs(itemEntity.getMotion().z) < 0.01;

        int itemAge = itemEntity.getAge();


        return (isOnSolidBlock || isStationary) && itemAge > 20;
    }

    private void renderItemHitbox(ItemEntity itemEntity) {
        net.minecraft.util.math.AxisAlignedBB bbox = itemEntity.getBoundingBox();
        String displayName = itemEntity.getItem().getDisplayName().getString();

        Color hitboxColor = getColorFromName(displayName);

        double minX = bbox.minX;
        double minY = bbox.minY;
        double minZ = bbox.minZ;
        double maxX = bbox.maxX;
        double maxY = bbox.maxY;
        double maxZ = bbox.maxZ;

        renderLine(minX, minY, minZ, maxX, minY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, maxY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, maxY, minZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, minY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, minY, maxZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, maxY, minZ, maxX, maxY, maxZ, hitboxColor);
    }

    private Color getColorFromName(String displayName) {
        Pattern colorPattern = Pattern.compile("\\[([^]]+)\\]|«([^»]+)»|\\(([^)]+)\\)");
        Matcher matcher = colorPattern.matcher(displayName);

        if (matcher.find()) {
            String colorText = matcher.group(1) != null ? matcher.group(1) :
                    matcher.group(2) != null ? matcher.group(2) :
                            matcher.group(3);

            try {
                Field colorField = Color.class.getField(colorText.toLowerCase());
                return (Color) colorField.get(null);
            } catch (Exception e) {
                try {
                    if (colorText.startsWith("#")) {
                        return Color.decode(colorText);
                    }

                    String[] rgb = colorText.split(",");
                    if (rgb.length == 3) {
                        return new Color(
                                Integer.parseInt(rgb[0].trim()),
                                Integer.parseInt(rgb[1].trim()),
                                Integer.parseInt(rgb[2].trim())
                        );
                    }
                } catch (Exception ex) {

                    return Color.RED;
                }
            }
        }

        return Color.RED;
    }

    private void renderTrajectory(MatrixStack matrixStack, ItemEntity itemEntity, float partialTicks) {
        Vector3d startPos = itemEntity.getPositionVec();
        Vector3d velocity = itemEntity.getMotion();
        Vector3d endPos = findLandingPosition(itemEntity, startPos, velocity);
        Vector2f startScreen = ProjectionUtil.project(startPos.x, startPos.y, startPos.z);
        Vector2f endScreen = ProjectionUtil.project(endPos.x, endPos.y, endPos.z);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(1.0F, 0.0F, 0.0F, 1.0F);
        RenderSystem.lineWidth(7.8F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(startScreen.x, startScreen.y, 0).endVertex();
        bufferBuilder.pos(endScreen.x, endScreen.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();

        BlockPos landingBlock = new BlockPos(endPos);
        ItemStack blockItemStack = new ItemStack(mc.world.getBlockState(landingBlock).getBlock());
        ItemStack flyingItemStack = itemEntity.getItem();


        int verticalDistance = (int)Math.abs(startPos.y - endPos.y);



        RenderSystem.pushMatrix();
        RenderSystem.enableBlend();
        mc.getItemRenderer().renderItemIntoGUI(flyingItemStack, (int)(endScreen.x + 10), (int)(endScreen.y - 8));
        RenderSystem.disableBlend();
        RenderSystem.popMatrix();

        String distanceText = verticalDistance + " блоков";
        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                distanceText,
                endScreen.x,
                endScreen.y + 10,
                new Color(128, 128, 128),
                14,
                matrixStack
        );
    }
    private void renderLine(double x1, double y1, double z1, double x2, double y2, double z2, Color color) {
        Vector2f start = ProjectionUtil.project(x1, y1, z1);
        Vector2f end = ProjectionUtil.project(x2, y2, z2);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
        RenderSystem.lineWidth(15.0F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(start.x, start.y, 0).endVertex();
        bufferBuilder.pos(end.x, end.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();
    }

    private Vector3d findLandingPosition(ItemEntity itemEntity, Vector3d startPos, Vector3d initialVelocity) {
        Vector3d currentPos = startPos;
        Vector3d currentVelocity = initialVelocity;
        double gravity = 0.03999999910593033D;

        while (true) {
            currentVelocity = currentVelocity.subtract(0, gravity, 0);
            currentPos = currentPos.add(currentVelocity);

            currentPos = currentPos.add(currentVelocity);

            if (mc.world.getBlockState(new BlockPos(currentPos)).getMaterial().isSolid()) {
                return currentPos;
            }

            if (Math.abs(currentPos.y - startPos.y) > 50) {
                return currentPos;
}}}}
по моему это немножечко нихуя не mcp, а экспенис?
 
Пожалуйста, авторизуйтесь для просмотра ссылки.


Код:
Expand Collapse Copy
@FunctionAnot(name = "ItemESP", description = "Отображает названия предметов над ними в мире", category = Category.RENDER)
public class ItemESP extends Function {
    private final SliderSetting renderDistanceSetting = new SliderSetting("Дистанция рендера", 30, 10, 100, 1);
    private final BooleanSetting colorNameSetting = new BooleanSetting("Цветное название", true);
    private final BooleanSetting showCountSetting = new BooleanSetting("Показывать количество", true);
    private final BooleanSetting animatedTextSetting = new BooleanSetting("Анимированный текст", false);
    private final BooleanSetting showTrajectory = new BooleanSetting("Показывать траекторию", true);
    private final BooleanSetting showItemIconSetting = new BooleanSetting("Показывать иконку предмета", true);
    private final BooleanSetting playSoundSetting = new BooleanSetting("Звук при обнаружении предмета", true);

    private final ModeListSetting targetItemsSetting = new ModeListSetting("Целевые предметы",
            new BooleanSetting("Голова игрока", true),
            new BooleanSetting("Крюк", true),
            new BooleanSetting("Взрывное зелье", true),
            new BooleanSetting("Слиток незерита", true),
            new BooleanSetting("Меч незерита", true),
            new BooleanSetting("Шлем незерита", true),
            new BooleanSetting("Нагрудник незерита", true),
            new BooleanSetting("Поножи незерита", true),
            new BooleanSetting("Ботинки незерита", true),
            new BooleanSetting("Тотем бессмертия", true),
            new BooleanSetting("Бессмертие", true),
            new BooleanSetting("Восстановление", true),
            new BooleanSetting("Бутылочка с опытом", true)
    );

    private static final Minecraft mc = Minecraft.getInstance();

    private final Set<UUID> detectedItems = new HashSet<>();

    private final Map<String, Item> itemMap = new HashMap<>() {{
        put("Голова игрока", Items.PLAYER_HEAD);
        put("Крюк", Items.TRIPWIRE_HOOK);
        put("Взрывное зелье", Items.SPLASH_POTION);
        put("Слиток незерита", Items.NETHERITE_INGOT);
        put("Меч незерита", Items.NETHERITE_SWORD);
        put("Шлем незерита", Items.NETHERITE_HELMET);
        put("Нагрудник незерита", Items.NETHERITE_CHESTPLATE);
        put("Поножи незерита", Items.NETHERITE_LEGGINGS);
        put("Ботинки незерита", Items.NETHERITE_BOOTS);
        put("Тотем бессмертия", Items.TOTEM_OF_UNDYING);
    }};

    public ItemESP() {
        addSetting(renderDistanceSetting);
        addSetting(colorNameSetting);
        addSetting(showCountSetting);
        addSetting(animatedTextSetting);
        addSetting(showTrajectory);
        addSetting(showItemIconSetting);
        addSetting(playSoundSetting);
        addSetting(targetItemsSetting);
    }

    [USER=1367676]@override[/USER]
    protected void onEnable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    protected void onDisable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    public void onBindPress() {
    }

    private String getFormattedItemName(ItemStack itemStack) {
        String baseName = itemStack.getDisplayName().getString();

        if (showCountSetting.isValue()) {
            baseName += " x" + itemStack.getCount();
        }

        if (animatedTextSetting.isValue()) {
            return RenderUtils.AnimatedText.rainbowText(baseName);
        }
        if (colorNameSetting.isValue()) {
            return TextFormatting.RED + baseName;
        }

        return baseName;
    }

    [USER=1474073]@Subscribe[/USER]
    public void onRenderWorldLast(RenderEvent event) {
        if (mc.player == null || mc.world == null || !enabled) return;

        MatrixStack matrixStack = event.getMatrixStack();
        float partialTicks = event.getPartialTicks();

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity) {
                ItemEntity itemEntity = (ItemEntity) entity;
                ItemStack itemStack = itemEntity.getItem();

                if (!isItemEnabled(itemStack.getItem(), itemStack)) continue;

                double distance = mc.player.getPositionVec().distanceTo(itemEntity.getPositionVec());
                if (distance > renderDistanceSetting.getOut()) continue;


                if (playSoundSetting.isValue() && !detectedItems.contains(itemEntity.getUniqueID())) {
                    playItemDetectionSound(itemEntity);
                    detectedItems.add(itemEntity.getUniqueID());
                }

                String itemName = getFormattedItemName(itemStack);
                Vector3d entityPos = itemEntity.getPositionVec();
                Vector2f screenPos = ProjectionUtil.project(entityPos.x, entityPos.y, entityPos.z);

                renderItemName(matrixStack, itemEntity, itemStack, itemName, screenPos.x, screenPos.y);
                renderItemHitbox(itemEntity);

                if (showTrajectory.isValue()) {
                    renderTrajectory(matrixStack, itemEntity, partialTicks);
                }
            }
        }
    }

    private void playItemDetectionSound(ItemEntity itemEntity) {
        mc.getSoundHandler().play(
                SimpleSound.master(
                        SoundEvents.ENTITY_ENDERMAN_TELEPORT,
                        1.0F,
                        1.2F
                )
        );
    }

    private boolean isItemEnabled(Item item, ItemStack itemStack) {
        String displayName = itemStack.getDisplayName().getString().toLowerCase();

        for (Object settingObj : targetItemsSetting.getList()) {
            if (settingObj instanceof BooleanSetting) {
                BooleanSetting setting = (BooleanSetting) settingObj;
                if (setting.getName().equals("Талисман Крушителя") && setting.isValue()) {
                    if (!displayName.contains("круш")) {
                        return false;
                    }
                }
            }
        }

        for (Map.Entry<String, Item> entry : itemMap.entrySet()) {
            if (entry.getValue() == item) {
                for (Object settingObj : targetItemsSetting.getList()) {
                    if (settingObj instanceof BooleanSetting) {
                        BooleanSetting setting = (BooleanSetting) settingObj;
                        if (setting.getName().equals(entry.getKey())) {
                            return setting.isValue();
                        }
                    }
                }
            }
        }
        return false;
    }

    private void renderItemName(MatrixStack matrixStack, ItemEntity itemEntity, ItemStack itemStack, String itemName, float x, float y) {
        int itemNameColor = new Color(128, 0, 128).getRGB();

        boolean canPickup = canPickupItem(itemEntity);

        Vector3d itemPos = itemEntity.getPositionVec();
        Vector2f screenPos = ProjectionUtil.project(itemPos.x, itemPos.y + 0.5, itemPos.z);

        if (showItemIconSetting.isValue()) {
            RenderSystem.pushMatrix();
            RenderSystem.enableBlend();
            RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);

            mc.getItemRenderer().renderItemIntoGUI(itemStack, (int)(screenPos.x - 8), (int)(screenPos.y - 40));

            RenderSystem.disableBlend();
            RenderSystem.popMatrix();
        }

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                itemName,
                screenPos.x,
                screenPos.y - 10,
                new Color(itemNameColor),
                17,
                matrixStack
        );

        String takeText = canPickup ? "Можно Взять" : "Нельзя Взять";
        int takeColor = canPickup ? new Color(123, 210, 202).getRGB() : new Color(86, 43, 43).getRGB();

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                takeText,
                screenPos.x,
                screenPos.y,
                new Color(takeColor),
                18,
                matrixStack
        );
    }
    private boolean canPickupItem(ItemEntity itemEntity) {
        BlockPos blockUnder = new BlockPos(
                itemEntity.getPosX(),
                itemEntity.getPosY() - 0.1,
                itemEntity.getPosZ()
        );

        boolean isOnSolidBlock = mc.world.getBlockState(blockUnder).getMaterial().isSolid();

        boolean isStationary = Math.abs(itemEntity.getMotion().x) < 0.01 &&
                Math.abs(itemEntity.getMotion().y) < 0.01 &&
                Math.abs(itemEntity.getMotion().z) < 0.01;

        int itemAge = itemEntity.getAge();


        return (isOnSolidBlock || isStationary) && itemAge > 20;
    }

    private void renderItemHitbox(ItemEntity itemEntity) {
        net.minecraft.util.math.AxisAlignedBB bbox = itemEntity.getBoundingBox();
        String displayName = itemEntity.getItem().getDisplayName().getString();

        Color hitboxColor = getColorFromName(displayName);

        double minX = bbox.minX;
        double minY = bbox.minY;
        double minZ = bbox.minZ;
        double maxX = bbox.maxX;
        double maxY = bbox.maxY;
        double maxZ = bbox.maxZ;

        renderLine(minX, minY, minZ, maxX, minY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, maxY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, maxY, minZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, minY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, minY, maxZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, maxY, minZ, maxX, maxY, maxZ, hitboxColor);
    }

    private Color getColorFromName(String displayName) {
        Pattern colorPattern = Pattern.compile("\\[([^]]+)\\]|«([^»]+)»|\\(([^)]+)\\)");
        Matcher matcher = colorPattern.matcher(displayName);

        if (matcher.find()) {
            String colorText = matcher.group(1) != null ? matcher.group(1) :
                    matcher.group(2) != null ? matcher.group(2) :
                            matcher.group(3);

            try {
                Field colorField = Color.class.getField(colorText.toLowerCase());
                return (Color) colorField.get(null);
            } catch (Exception e) {
                try {
                    if (colorText.startsWith("#")) {
                        return Color.decode(colorText);
                    }

                    String[] rgb = colorText.split(",");
                    if (rgb.length == 3) {
                        return new Color(
                                Integer.parseInt(rgb[0].trim()),
                                Integer.parseInt(rgb[1].trim()),
                                Integer.parseInt(rgb[2].trim())
                        );
                    }
                } catch (Exception ex) {

                    return Color.RED;
                }
            }
        }

        return Color.RED;
    }

    private void renderTrajectory(MatrixStack matrixStack, ItemEntity itemEntity, float partialTicks) {
        Vector3d startPos = itemEntity.getPositionVec();
        Vector3d velocity = itemEntity.getMotion();
        Vector3d endPos = findLandingPosition(itemEntity, startPos, velocity);
        Vector2f startScreen = ProjectionUtil.project(startPos.x, startPos.y, startPos.z);
        Vector2f endScreen = ProjectionUtil.project(endPos.x, endPos.y, endPos.z);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(1.0F, 0.0F, 0.0F, 1.0F);
        RenderSystem.lineWidth(7.8F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(startScreen.x, startScreen.y, 0).endVertex();
        bufferBuilder.pos(endScreen.x, endScreen.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();

        BlockPos landingBlock = new BlockPos(endPos);
        ItemStack blockItemStack = new ItemStack(mc.world.getBlockState(landingBlock).getBlock());
        ItemStack flyingItemStack = itemEntity.getItem();


        int verticalDistance = (int)Math.abs(startPos.y - endPos.y);



        RenderSystem.pushMatrix();
        RenderSystem.enableBlend();
        mc.getItemRenderer().renderItemIntoGUI(flyingItemStack, (int)(endScreen.x + 10), (int)(endScreen.y - 8));
        RenderSystem.disableBlend();
        RenderSystem.popMatrix();

        String distanceText = verticalDistance + " блоков";
        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                distanceText,
                endScreen.x,
                endScreen.y + 10,
                new Color(128, 128, 128),
                14,
                matrixStack
        );
    }
    private void renderLine(double x1, double y1, double z1, double x2, double y2, double z2, Color color) {
        Vector2f start = ProjectionUtil.project(x1, y1, z1);
        Vector2f end = ProjectionUtil.project(x2, y2, z2);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
        RenderSystem.lineWidth(15.0F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(start.x, start.y, 0).endVertex();
        bufferBuilder.pos(end.x, end.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();
    }

    private Vector3d findLandingPosition(ItemEntity itemEntity, Vector3d startPos, Vector3d initialVelocity) {
        Vector3d currentPos = startPos;
        Vector3d currentVelocity = initialVelocity;
        double gravity = 0.03999999910593033D;

        while (true) {
            currentVelocity = currentVelocity.subtract(0, gravity, 0);
            currentPos = currentPos.add(currentVelocity);

            currentPos = currentPos.add(currentVelocity);

            if (mc.world.getBlockState(new BlockPos(currentPos)).getMaterial().isSolid()) {
                return currentPos;
            }

            if (Math.abs(currentPos.y - startPos.y) > 50) {
                return currentPos;
}}}}
Уже не актуально
 
Пожалуйста, авторизуйтесь для просмотра ссылки.


Код:
Expand Collapse Copy
@FunctionAnot(name = "ItemESP", description = "Отображает названия предметов над ними в мире", category = Category.RENDER)
public class ItemESP extends Function {
    private final SliderSetting renderDistanceSetting = new SliderSetting("Дистанция рендера", 30, 10, 100, 1);
    private final BooleanSetting colorNameSetting = new BooleanSetting("Цветное название", true);
    private final BooleanSetting showCountSetting = new BooleanSetting("Показывать количество", true);
    private final BooleanSetting animatedTextSetting = new BooleanSetting("Анимированный текст", false);
    private final BooleanSetting showTrajectory = new BooleanSetting("Показывать траекторию", true);
    private final BooleanSetting showItemIconSetting = new BooleanSetting("Показывать иконку предмета", true);
    private final BooleanSetting playSoundSetting = new BooleanSetting("Звук при обнаружении предмета", true);

    private final ModeListSetting targetItemsSetting = new ModeListSetting("Целевые предметы",
            new BooleanSetting("Голова игрока", true),
            new BooleanSetting("Крюк", true),
            new BooleanSetting("Взрывное зелье", true),
            new BooleanSetting("Слиток незерита", true),
            new BooleanSetting("Меч незерита", true),
            new BooleanSetting("Шлем незерита", true),
            new BooleanSetting("Нагрудник незерита", true),
            new BooleanSetting("Поножи незерита", true),
            new BooleanSetting("Ботинки незерита", true),
            new BooleanSetting("Тотем бессмертия", true),
            new BooleanSetting("Бессмертие", true),
            new BooleanSetting("Восстановление", true),
            new BooleanSetting("Бутылочка с опытом", true)
    );

    private static final Minecraft mc = Minecraft.getInstance();

    private final Set<UUID> detectedItems = new HashSet<>();

    private final Map<String, Item> itemMap = new HashMap<>() {{
        put("Голова игрока", Items.PLAYER_HEAD);
        put("Крюк", Items.TRIPWIRE_HOOK);
        put("Взрывное зелье", Items.SPLASH_POTION);
        put("Слиток незерита", Items.NETHERITE_INGOT);
        put("Меч незерита", Items.NETHERITE_SWORD);
        put("Шлем незерита", Items.NETHERITE_HELMET);
        put("Нагрудник незерита", Items.NETHERITE_CHESTPLATE);
        put("Поножи незерита", Items.NETHERITE_LEGGINGS);
        put("Ботинки незерита", Items.NETHERITE_BOOTS);
        put("Тотем бессмертия", Items.TOTEM_OF_UNDYING);
    }};

    public ItemESP() {
        addSetting(renderDistanceSetting);
        addSetting(colorNameSetting);
        addSetting(showCountSetting);
        addSetting(animatedTextSetting);
        addSetting(showTrajectory);
        addSetting(showItemIconSetting);
        addSetting(playSoundSetting);
        addSetting(targetItemsSetting);
    }

    [USER=1367676]@override[/USER]
    protected void onEnable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    protected void onDisable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    public void onBindPress() {
    }

    private String getFormattedItemName(ItemStack itemStack) {
        String baseName = itemStack.getDisplayName().getString();

        if (showCountSetting.isValue()) {
            baseName += " x" + itemStack.getCount();
        }

        if (animatedTextSetting.isValue()) {
            return RenderUtils.AnimatedText.rainbowText(baseName);
        }
        if (colorNameSetting.isValue()) {
            return TextFormatting.RED + baseName;
        }

        return baseName;
    }

    [USER=1474073]@Subscribe[/USER]
    public void onRenderWorldLast(RenderEvent event) {
        if (mc.player == null || mc.world == null || !enabled) return;

        MatrixStack matrixStack = event.getMatrixStack();
        float partialTicks = event.getPartialTicks();

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity) {
                ItemEntity itemEntity = (ItemEntity) entity;
                ItemStack itemStack = itemEntity.getItem();

                if (!isItemEnabled(itemStack.getItem(), itemStack)) continue;

                double distance = mc.player.getPositionVec().distanceTo(itemEntity.getPositionVec());
                if (distance > renderDistanceSetting.getOut()) continue;


                if (playSoundSetting.isValue() && !detectedItems.contains(itemEntity.getUniqueID())) {
                    playItemDetectionSound(itemEntity);
                    detectedItems.add(itemEntity.getUniqueID());
                }

                String itemName = getFormattedItemName(itemStack);
                Vector3d entityPos = itemEntity.getPositionVec();
                Vector2f screenPos = ProjectionUtil.project(entityPos.x, entityPos.y, entityPos.z);

                renderItemName(matrixStack, itemEntity, itemStack, itemName, screenPos.x, screenPos.y);
                renderItemHitbox(itemEntity);

                if (showTrajectory.isValue()) {
                    renderTrajectory(matrixStack, itemEntity, partialTicks);
                }
            }
        }
    }

    private void playItemDetectionSound(ItemEntity itemEntity) {
        mc.getSoundHandler().play(
                SimpleSound.master(
                        SoundEvents.ENTITY_ENDERMAN_TELEPORT,
                        1.0F,
                        1.2F
                )
        );
    }

    private boolean isItemEnabled(Item item, ItemStack itemStack) {
        String displayName = itemStack.getDisplayName().getString().toLowerCase();

        for (Object settingObj : targetItemsSetting.getList()) {
            if (settingObj instanceof BooleanSetting) {
                BooleanSetting setting = (BooleanSetting) settingObj;
                if (setting.getName().equals("Талисман Крушителя") && setting.isValue()) {
                    if (!displayName.contains("круш")) {
                        return false;
                    }
                }
            }
        }

        for (Map.Entry<String, Item> entry : itemMap.entrySet()) {
            if (entry.getValue() == item) {
                for (Object settingObj : targetItemsSetting.getList()) {
                    if (settingObj instanceof BooleanSetting) {
                        BooleanSetting setting = (BooleanSetting) settingObj;
                        if (setting.getName().equals(entry.getKey())) {
                            return setting.isValue();
                        }
                    }
                }
            }
        }
        return false;
    }

    private void renderItemName(MatrixStack matrixStack, ItemEntity itemEntity, ItemStack itemStack, String itemName, float x, float y) {
        int itemNameColor = new Color(128, 0, 128).getRGB();

        boolean canPickup = canPickupItem(itemEntity);

        Vector3d itemPos = itemEntity.getPositionVec();
        Vector2f screenPos = ProjectionUtil.project(itemPos.x, itemPos.y + 0.5, itemPos.z);

        if (showItemIconSetting.isValue()) {
            RenderSystem.pushMatrix();
            RenderSystem.enableBlend();
            RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);

            mc.getItemRenderer().renderItemIntoGUI(itemStack, (int)(screenPos.x - 8), (int)(screenPos.y - 40));

            RenderSystem.disableBlend();
            RenderSystem.popMatrix();
        }

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                itemName,
                screenPos.x,
                screenPos.y - 10,
                new Color(itemNameColor),
                17,
                matrixStack
        );

        String takeText = canPickup ? "Можно Взять" : "Нельзя Взять";
        int takeColor = canPickup ? new Color(123, 210, 202).getRGB() : new Color(86, 43, 43).getRGB();

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                takeText,
                screenPos.x,
                screenPos.y,
                new Color(takeColor),
                18,
                matrixStack
        );
    }
    private boolean canPickupItem(ItemEntity itemEntity) {
        BlockPos blockUnder = new BlockPos(
                itemEntity.getPosX(),
                itemEntity.getPosY() - 0.1,
                itemEntity.getPosZ()
        );

        boolean isOnSolidBlock = mc.world.getBlockState(blockUnder).getMaterial().isSolid();

        boolean isStationary = Math.abs(itemEntity.getMotion().x) < 0.01 &&
                Math.abs(itemEntity.getMotion().y) < 0.01 &&
                Math.abs(itemEntity.getMotion().z) < 0.01;

        int itemAge = itemEntity.getAge();


        return (isOnSolidBlock || isStationary) && itemAge > 20;
    }

    private void renderItemHitbox(ItemEntity itemEntity) {
        net.minecraft.util.math.AxisAlignedBB bbox = itemEntity.getBoundingBox();
        String displayName = itemEntity.getItem().getDisplayName().getString();

        Color hitboxColor = getColorFromName(displayName);

        double minX = bbox.minX;
        double minY = bbox.minY;
        double minZ = bbox.minZ;
        double maxX = bbox.maxX;
        double maxY = bbox.maxY;
        double maxZ = bbox.maxZ;

        renderLine(minX, minY, minZ, maxX, minY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, maxY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, maxY, minZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, minY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, minY, maxZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, maxY, minZ, maxX, maxY, maxZ, hitboxColor);
    }

    private Color getColorFromName(String displayName) {
        Pattern colorPattern = Pattern.compile("\\[([^]]+)\\]|«([^»]+)»|\\(([^)]+)\\)");
        Matcher matcher = colorPattern.matcher(displayName);

        if (matcher.find()) {
            String colorText = matcher.group(1) != null ? matcher.group(1) :
                    matcher.group(2) != null ? matcher.group(2) :
                            matcher.group(3);

            try {
                Field colorField = Color.class.getField(colorText.toLowerCase());
                return (Color) colorField.get(null);
            } catch (Exception e) {
                try {
                    if (colorText.startsWith("#")) {
                        return Color.decode(colorText);
                    }

                    String[] rgb = colorText.split(",");
                    if (rgb.length == 3) {
                        return new Color(
                                Integer.parseInt(rgb[0].trim()),
                                Integer.parseInt(rgb[1].trim()),
                                Integer.parseInt(rgb[2].trim())
                        );
                    }
                } catch (Exception ex) {

                    return Color.RED;
                }
            }
        }

        return Color.RED;
    }

    private void renderTrajectory(MatrixStack matrixStack, ItemEntity itemEntity, float partialTicks) {
        Vector3d startPos = itemEntity.getPositionVec();
        Vector3d velocity = itemEntity.getMotion();
        Vector3d endPos = findLandingPosition(itemEntity, startPos, velocity);
        Vector2f startScreen = ProjectionUtil.project(startPos.x, startPos.y, startPos.z);
        Vector2f endScreen = ProjectionUtil.project(endPos.x, endPos.y, endPos.z);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(1.0F, 0.0F, 0.0F, 1.0F);
        RenderSystem.lineWidth(7.8F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(startScreen.x, startScreen.y, 0).endVertex();
        bufferBuilder.pos(endScreen.x, endScreen.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();

        BlockPos landingBlock = new BlockPos(endPos);
        ItemStack blockItemStack = new ItemStack(mc.world.getBlockState(landingBlock).getBlock());
        ItemStack flyingItemStack = itemEntity.getItem();


        int verticalDistance = (int)Math.abs(startPos.y - endPos.y);



        RenderSystem.pushMatrix();
        RenderSystem.enableBlend();
        mc.getItemRenderer().renderItemIntoGUI(flyingItemStack, (int)(endScreen.x + 10), (int)(endScreen.y - 8));
        RenderSystem.disableBlend();
        RenderSystem.popMatrix();

        String distanceText = verticalDistance + " блоков";
        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                distanceText,
                endScreen.x,
                endScreen.y + 10,
                new Color(128, 128, 128),
                14,
                matrixStack
        );
    }
    private void renderLine(double x1, double y1, double z1, double x2, double y2, double z2, Color color) {
        Vector2f start = ProjectionUtil.project(x1, y1, z1);
        Vector2f end = ProjectionUtil.project(x2, y2, z2);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
        RenderSystem.lineWidth(15.0F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(start.x, start.y, 0).endVertex();
        bufferBuilder.pos(end.x, end.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();
    }

    private Vector3d findLandingPosition(ItemEntity itemEntity, Vector3d startPos, Vector3d initialVelocity) {
        Vector3d currentPos = startPos;
        Vector3d currentVelocity = initialVelocity;
        double gravity = 0.03999999910593033D;

        while (true) {
            currentVelocity = currentVelocity.subtract(0, gravity, 0);
            currentPos = currentPos.add(currentVelocity);

            currentPos = currentPos.add(currentVelocity);

            if (mc.world.getBlockState(new BlockPos(currentPos)).getMaterial().isSolid()) {
                return currentPos;
            }

            if (Math.abs(currentPos.y - startPos.y) > 50) {
                return currentPos;
}}}}
бесполезно, на фт вайп завтра с шифрованием предметов с вулкана
 
Пожалуйста, авторизуйтесь для просмотра ссылки.


Код:
Expand Collapse Copy
@FunctionAnot(name = "ItemESP", description = "Отображает названия предметов над ними в мире", category = Category.RENDER)
public class ItemESP extends Function {
    private final SliderSetting renderDistanceSetting = new SliderSetting("Дистанция рендера", 30, 10, 100, 1);
    private final BooleanSetting colorNameSetting = new BooleanSetting("Цветное название", true);
    private final BooleanSetting showCountSetting = new BooleanSetting("Показывать количество", true);
    private final BooleanSetting animatedTextSetting = new BooleanSetting("Анимированный текст", false);
    private final BooleanSetting showTrajectory = new BooleanSetting("Показывать траекторию", true);
    private final BooleanSetting showItemIconSetting = new BooleanSetting("Показывать иконку предмета", true);
    private final BooleanSetting playSoundSetting = new BooleanSetting("Звук при обнаружении предмета", true);

    private final ModeListSetting targetItemsSetting = new ModeListSetting("Целевые предметы",
            new BooleanSetting("Голова игрока", true),
            new BooleanSetting("Крюк", true),
            new BooleanSetting("Взрывное зелье", true),
            new BooleanSetting("Слиток незерита", true),
            new BooleanSetting("Меч незерита", true),
            new BooleanSetting("Шлем незерита", true),
            new BooleanSetting("Нагрудник незерита", true),
            new BooleanSetting("Поножи незерита", true),
            new BooleanSetting("Ботинки незерита", true),
            new BooleanSetting("Тотем бессмертия", true),
            new BooleanSetting("Бессмертие", true),
            new BooleanSetting("Восстановление", true),
            new BooleanSetting("Бутылочка с опытом", true)
    );

    private static final Minecraft mc = Minecraft.getInstance();

    private final Set<UUID> detectedItems = new HashSet<>();

    private final Map<String, Item> itemMap = new HashMap<>() {{
        put("Голова игрока", Items.PLAYER_HEAD);
        put("Крюк", Items.TRIPWIRE_HOOK);
        put("Взрывное зелье", Items.SPLASH_POTION);
        put("Слиток незерита", Items.NETHERITE_INGOT);
        put("Меч незерита", Items.NETHERITE_SWORD);
        put("Шлем незерита", Items.NETHERITE_HELMET);
        put("Нагрудник незерита", Items.NETHERITE_CHESTPLATE);
        put("Поножи незерита", Items.NETHERITE_LEGGINGS);
        put("Ботинки незерита", Items.NETHERITE_BOOTS);
        put("Тотем бессмертия", Items.TOTEM_OF_UNDYING);
    }};

    public ItemESP() {
        addSetting(renderDistanceSetting);
        addSetting(colorNameSetting);
        addSetting(showCountSetting);
        addSetting(animatedTextSetting);
        addSetting(showTrajectory);
        addSetting(showItemIconSetting);
        addSetting(playSoundSetting);
        addSetting(targetItemsSetting);
    }

    [USER=1367676]@override[/USER]
    protected void onEnable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    protected void onDisable() {
        detectedItems.clear();
    }

    [USER=1367676]@override[/USER]
    public void onBindPress() {
    }

    private String getFormattedItemName(ItemStack itemStack) {
        String baseName = itemStack.getDisplayName().getString();

        if (showCountSetting.isValue()) {
            baseName += " x" + itemStack.getCount();
        }

        if (animatedTextSetting.isValue()) {
            return RenderUtils.AnimatedText.rainbowText(baseName);
        }
        if (colorNameSetting.isValue()) {
            return TextFormatting.RED + baseName;
        }

        return baseName;
    }

    [USER=1474073]@Subscribe[/USER]
    public void onRenderWorldLast(RenderEvent event) {
        if (mc.player == null || mc.world == null || !enabled) return;

        MatrixStack matrixStack = event.getMatrixStack();
        float partialTicks = event.getPartialTicks();

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity) {
                ItemEntity itemEntity = (ItemEntity) entity;
                ItemStack itemStack = itemEntity.getItem();

                if (!isItemEnabled(itemStack.getItem(), itemStack)) continue;

                double distance = mc.player.getPositionVec().distanceTo(itemEntity.getPositionVec());
                if (distance > renderDistanceSetting.getOut()) continue;


                if (playSoundSetting.isValue() && !detectedItems.contains(itemEntity.getUniqueID())) {
                    playItemDetectionSound(itemEntity);
                    detectedItems.add(itemEntity.getUniqueID());
                }

                String itemName = getFormattedItemName(itemStack);
                Vector3d entityPos = itemEntity.getPositionVec();
                Vector2f screenPos = ProjectionUtil.project(entityPos.x, entityPos.y, entityPos.z);

                renderItemName(matrixStack, itemEntity, itemStack, itemName, screenPos.x, screenPos.y);
                renderItemHitbox(itemEntity);

                if (showTrajectory.isValue()) {
                    renderTrajectory(matrixStack, itemEntity, partialTicks);
                }
            }
        }
    }

    private void playItemDetectionSound(ItemEntity itemEntity) {
        mc.getSoundHandler().play(
                SimpleSound.master(
                        SoundEvents.ENTITY_ENDERMAN_TELEPORT,
                        1.0F,
                        1.2F
                )
        );
    }

    private boolean isItemEnabled(Item item, ItemStack itemStack) {
        String displayName = itemStack.getDisplayName().getString().toLowerCase();

        for (Object settingObj : targetItemsSetting.getList()) {
            if (settingObj instanceof BooleanSetting) {
                BooleanSetting setting = (BooleanSetting) settingObj;
                if (setting.getName().equals("Талисман Крушителя") && setting.isValue()) {
                    if (!displayName.contains("круш")) {
                        return false;
                    }
                }
            }
        }

        for (Map.Entry<String, Item> entry : itemMap.entrySet()) {
            if (entry.getValue() == item) {
                for (Object settingObj : targetItemsSetting.getList()) {
                    if (settingObj instanceof BooleanSetting) {
                        BooleanSetting setting = (BooleanSetting) settingObj;
                        if (setting.getName().equals(entry.getKey())) {
                            return setting.isValue();
                        }
                    }
                }
            }
        }
        return false;
    }

    private void renderItemName(MatrixStack matrixStack, ItemEntity itemEntity, ItemStack itemStack, String itemName, float x, float y) {
        int itemNameColor = new Color(128, 0, 128).getRGB();

        boolean canPickup = canPickupItem(itemEntity);

        Vector3d itemPos = itemEntity.getPositionVec();
        Vector2f screenPos = ProjectionUtil.project(itemPos.x, itemPos.y + 0.5, itemPos.z);

        if (showItemIconSetting.isValue()) {
            RenderSystem.pushMatrix();
            RenderSystem.enableBlend();
            RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);

            mc.getItemRenderer().renderItemIntoGUI(itemStack, (int)(screenPos.x - 8), (int)(screenPos.y - 40));

            RenderSystem.disableBlend();
            RenderSystem.popMatrix();
        }

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                itemName,
                screenPos.x,
                screenPos.y - 10,
                new Color(itemNameColor),
                17,
                matrixStack
        );

        String takeText = canPickup ? "Можно Взять" : "Нельзя Взять";
        int takeColor = canPickup ? new Color(123, 210, 202).getRGB() : new Color(86, 43, 43).getRGB();

        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                takeText,
                screenPos.x,
                screenPos.y,
                new Color(takeColor),
                18,
                matrixStack
        );
    }
    private boolean canPickupItem(ItemEntity itemEntity) {
        BlockPos blockUnder = new BlockPos(
                itemEntity.getPosX(),
                itemEntity.getPosY() - 0.1,
                itemEntity.getPosZ()
        );

        boolean isOnSolidBlock = mc.world.getBlockState(blockUnder).getMaterial().isSolid();

        boolean isStationary = Math.abs(itemEntity.getMotion().x) < 0.01 &&
                Math.abs(itemEntity.getMotion().y) < 0.01 &&
                Math.abs(itemEntity.getMotion().z) < 0.01;

        int itemAge = itemEntity.getAge();


        return (isOnSolidBlock || isStationary) && itemAge > 20;
    }

    private void renderItemHitbox(ItemEntity itemEntity) {
        net.minecraft.util.math.AxisAlignedBB bbox = itemEntity.getBoundingBox();
        String displayName = itemEntity.getItem().getDisplayName().getString();

        Color hitboxColor = getColorFromName(displayName);

        double minX = bbox.minX;
        double minY = bbox.minY;
        double minZ = bbox.minZ;
        double maxX = bbox.maxX;
        double maxY = bbox.maxY;
        double maxZ = bbox.maxZ;

        renderLine(minX, minY, minZ, maxX, minY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, maxY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, maxY, minZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, maxY, minZ, hitboxColor);
        renderLine(minX, minY, maxZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, minY, maxZ, maxX, maxY, maxZ, hitboxColor);

        renderLine(minX, minY, minZ, minX, minY, maxZ, hitboxColor);
        renderLine(maxX, minY, minZ, maxX, minY, maxZ, hitboxColor);
        renderLine(minX, maxY, minZ, minX, maxY, maxZ, hitboxColor);
        renderLine(maxX, maxY, minZ, maxX, maxY, maxZ, hitboxColor);
    }

    private Color getColorFromName(String displayName) {
        Pattern colorPattern = Pattern.compile("\\[([^]]+)\\]|«([^»]+)»|\\(([^)]+)\\)");
        Matcher matcher = colorPattern.matcher(displayName);

        if (matcher.find()) {
            String colorText = matcher.group(1) != null ? matcher.group(1) :
                    matcher.group(2) != null ? matcher.group(2) :
                            matcher.group(3);

            try {
                Field colorField = Color.class.getField(colorText.toLowerCase());
                return (Color) colorField.get(null);
            } catch (Exception e) {
                try {
                    if (colorText.startsWith("#")) {
                        return Color.decode(colorText);
                    }

                    String[] rgb = colorText.split(",");
                    if (rgb.length == 3) {
                        return new Color(
                                Integer.parseInt(rgb[0].trim()),
                                Integer.parseInt(rgb[1].trim()),
                                Integer.parseInt(rgb[2].trim())
                        );
                    }
                } catch (Exception ex) {

                    return Color.RED;
                }
            }
        }

        return Color.RED;
    }

    private void renderTrajectory(MatrixStack matrixStack, ItemEntity itemEntity, float partialTicks) {
        Vector3d startPos = itemEntity.getPositionVec();
        Vector3d velocity = itemEntity.getMotion();
        Vector3d endPos = findLandingPosition(itemEntity, startPos, velocity);
        Vector2f startScreen = ProjectionUtil.project(startPos.x, startPos.y, startPos.z);
        Vector2f endScreen = ProjectionUtil.project(endPos.x, endPos.y, endPos.z);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(1.0F, 0.0F, 0.0F, 1.0F);
        RenderSystem.lineWidth(7.8F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(startScreen.x, startScreen.y, 0).endVertex();
        bufferBuilder.pos(endScreen.x, endScreen.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();

        BlockPos landingBlock = new BlockPos(endPos);
        ItemStack blockItemStack = new ItemStack(mc.world.getBlockState(landingBlock).getBlock());
        ItemStack flyingItemStack = itemEntity.getItem();


        int verticalDistance = (int)Math.abs(startPos.y - endPos.y);



        RenderSystem.pushMatrix();
        RenderSystem.enableBlend();
        mc.getItemRenderer().renderItemIntoGUI(flyingItemStack, (int)(endScreen.x + 10), (int)(endScreen.y - 8));
        RenderSystem.disableBlend();
        RenderSystem.popMatrix();

        String distanceText = verticalDistance + " блоков";
        IFont.drawWithShadowCenteredX(
                IFont.MONTSERRAT_BOLD,
                distanceText,
                endScreen.x,
                endScreen.y + 10,
                new Color(128, 128, 128),
                14,
                matrixStack
        );
    }
    private void renderLine(double x1, double y1, double z1, double x2, double y2, double z2, Color color) {
        Vector2f start = ProjectionUtil.project(x1, y1, z1);
        Vector2f end = ProjectionUtil.project(x2, y2, z2);

        RenderSystem.disableDepthTest();
        RenderSystem.disableTexture();
        RenderSystem.disableAlphaTest();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f);
        RenderSystem.lineWidth(15.0F);

        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferBuilder = tessellator.getBuffer();
        bufferBuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
        bufferBuilder.pos(start.x, start.y, 0).endVertex();
        bufferBuilder.pos(end.x, end.y, 0).endVertex();
        tessellator.draw();

        RenderSystem.enableAlphaTest();
        RenderSystem.enableTexture();
        RenderSystem.enableDepthTest();
    }

    private Vector3d findLandingPosition(ItemEntity itemEntity, Vector3d startPos, Vector3d initialVelocity) {
        Vector3d currentPos = startPos;
        Vector3d currentVelocity = initialVelocity;
        double gravity = 0.03999999910593033D;

        while (true) {
            currentVelocity = currentVelocity.subtract(0, gravity, 0);
            currentPos = currentPos.add(currentVelocity);

            currentPos = currentPos.add(currentVelocity);

            if (mc.world.getBlockState(new BlockPos(currentPos)).getMaterial().isSolid()) {
                return currentPos;
            }

            if (Math.abs(currentPos.y - startPos.y) > 50) {
                return currentPos;
}}}}
вроде норм
 
Назад
Сверху Снизу