Часть функционала MediaPlayerRenderer | Exp Ready | Для всех аудио-потоков

Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2023
Сообщения
59
Реакции[?]
0
Поинты[?]
0
Выберите загрузчик игры
OptiFine

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

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

Спасибо!

Доброго времени суток читающие, ща покажу как сделать MediaPlayer который будет получать любой играющий поток будь то YouTube, Telegram, или даже браузер, и будет рендерить табличку с автором, названием и продолжительносью (фото обложки трека можете доделать сами)

И так начнем, для создания такого чуда нам понадобиться библиотека mediaplayer-info я прикрепляю её ниже:
Нам нужно засунуть её в папку lib или Libraries в нашей пасточке, и после чего нажать Shift+Ctrl+LAlt+S одновременно, далее выбрать в колонке "Artifacts" тобишь где мы собственно говоря билдим наш читикс, и жмем на 1741641534449.png для добавления нужной нам библиотеки, далее выбираем тут Extracted Directory: 1741641564478.png и после ищем Mediaplayer-info (наша библиотека которая нужна для работы таблички), после добавления создаем класс MediaPlayerRenderer (импорты поставьте сами плиз:


Код:
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class MediaplayerRenderer implements ElementRenderer {

    final Minecraft mc = Minecraft.getInstance();
    IMediaSession session = null;
    final Dragging drag;
    String title;
    String artist;
    int duration;
    int position;
    private final ExecutorService executorService = Executors.newSingleThreadExecutor();
    private static final List<String> ownerPriority = List.of("SPOTIFY", "CHROME");
    public float animationStep;
    float ez;

    private boolean isMediaPlayerInfoEnabled;

    @Override
    public void render(EventDisplay eventDisplay) {
        if (Expensive.getInstance().getFunctionRegistry() != null) {
            isMediaPlayerInfoEnabled = Expensive.getInstance().getFunctionRegistry().getHud().isState() && HUD.elements.getValueByName("Медиаплеер (мощные пк)").get();
        }
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = drag.getX();
        float posY = drag.getY();
        float headSize = 0;
        float spacing = 5;
        float width = 110;
        float height = 59 / 2f;
        drag.setWidth(width);
        drag.setHeight(height);
        GlStateManager.pushMatrix();
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        drawStyledRect(posX, posY, width, height, 6, 255);
        if (isMediaPlayerInfoEnabled) {
            executorService.submit(() -> {
                try {
                    List<IMediaSession> sessions = MediaPlayerInfo.Instance != null ? MediaPlayerInfo.Instance.getMediaSessions() : null;
                    if (sessions == null || sessions.isEmpty()) {
                        //throw new IllegalStateException("Не удалось получить сессии.");
                    }
                    sessions = sessions.stream()
                            .sorted((s1, s2) -> Integer.compare(getOwnerPriorityIndex(s1), getOwnerPriorityIndex(s2)))
                            .collect(Collectors.toList());
                    IMediaSession mediaSession = sessions.stream()
                            .filter(s -> s.getMedia() != null && (!s.getMedia().getArtist().isEmpty() || !s.getMedia().getTitle().isEmpty()))
                            .findFirst()
                            .orElse(null);
                    if (mediaSession != null && mediaSession.getMedia() != null) {
                        MediaInfo media = mediaSession.getMedia();
                        title = media.getTitle();
                        artist = media.getArtist();
                        duration = (int) media.getDuration();
                        position = (int) media.getPosition();
                    } else {
                        title = "No track";
                        artist = "Unknown artist";
                        duration = 0;
                        position = 0;
                    }
                } catch (Throwable e) {
                    title = "loading...";
                    artist = "loading...";
                    duration = 0;
                    position = 0;
                    e.printStackTrace();
                }
            });
        } else {
            title = "Media Info Disabled";
            artist = "N/A";
            duration = 0;
            position = 0;
        }

        String displayTitle = title != null ? (title.length() > 22 ? title.substring(0, 22) + "..." : title) : "No track";
        String displayArtist = artist != null ? (artist.length() > 18 ? artist.substring(0, 18) + "..." : artist) : "Unknown artist";
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayTitle, posX + spacing + spacing, posY + spacing + 1, -1, 7);
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayArtist, posX + spacing + spacing, posY + spacing + spacing + spacing - 1, ColorUtils.rgb(200, 200, 200), 7);
        if (duration > 0) {
            float adjustedWidth = width + 20;
            float progress = (float) position / duration;
            ez = 0;
            animationStep = MathUtil.fast(animationStep, progress, 6);
            Vector4i vector4i = new Vector4i(style.getFirstColor().getRGB(), style.getFirstColor().getRGB(), style.getSecondColor().getRGB(), style.getSecondColor().getRGB());
            Vector4i newvec = new Vector4i(ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42), 1f, new Vector4f(2,2,2,2), ColorUtils.rgb(32, 32, 32));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42) * animationStep, 1f, new Vector4f(2,2,2,2), newvec);
        }
        GlStateManager.popMatrix();
    }

    private void drawStyledRect(float x, float y, float width, float height, float radius, int alpha) {
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        DisplayUtils.drawRoundedRect(x, y, width + ez, height, radius, ColorUtils.rgba(21, 21, 21, alpha));
    }

    private int getOwnerPriorityIndex(IMediaSession session) {
        for (int i = 0; i < ownerPriority.size(); i++) {
            if (session.getOwner().toUpperCase().contains(ownerPriority.get(i))) {
                return i;
            }
        }
        return ownerPriority.size();
    }

    private String formatDuration(int duration) {
        int minutes = duration / 60;
        int seconds = duration % 60;
        return String.format("%02d:%02d", minutes, seconds);
    }
}
и уже регестрируем этот MediaPlayerRenderer в нашем классе HUD:

1 добавляем в элементы рендера
2 final MediaplayerRenderer mediaplayerRenderer; (ставим в любое место вне блоков ивентов)
3 в EventDisplay: if (elements.getValueByName("Медиаплеер").get()) mediaplayerRenderer.render(e);
4 в HUD создаем Dragging для него:
Dragging player = Expensive.getInstance().createDrag(this, "Player", 201, 5);
mediaplayerRenderer = new MediaplayerRenderer(player);


Всё радуемся рабочему плееру (Внимание!!! Слил, потому что довольно таки часто крашит, спустя 1 - 3 часа игры начнет тупо вылетать игра что дефаеться перезагрузкой пк но все равно медиаплеер стоящий)

Библиотека mediaplayerinfo:
а также прикрепляю SS:

1741641991096.png
MediaPlayerLib JAR - VirusTotal ->
Пожалуйста, авторизуйтесь для просмотра ссылки.

Всех благ ;)
 

Вложения

Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2023
Сообщения
59
Реакции[?]
0
Поинты[?]
0
Доброго времени суток читающие, ща покажу как сделать MediaPlayer который будет получать любой играющий поток будь то YouTube, Telegram, или даже браузер, и будет рендерить табличку с автором, названием и продолжительносью (фото обложки трека можете доделать сами)

И так начнем, для создания такого чуда нам понадобиться библиотека mediaplayer-info я прикрепляю её ниже:
Нам нужно засунуть её в папку lib или Libraries в нашей пасточке, и после чего нажать Shift+Ctrl+LAlt+S одновременно, далее выбрать в колонке "Artifacts" тобишь где мы собственно говоря билдим наш читикс, и жмем на Посмотреть вложение 300802 для добавления нужной нам библиотеки, далее выбираем тут Extracted Directory: Посмотреть вложение 300803 и после ищем Mediaplayer-info (наша библиотека которая нужна для работы таблички), после добавления создаем класс MediaPlayerRenderer (импорты поставьте сами плиз:


Код:
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class MediaplayerRenderer implements ElementRenderer {

    final Minecraft mc = Minecraft.getInstance();
    IMediaSession session = null;
    final Dragging drag;
    String title;
    String artist;
    int duration;
    int position;
    private final ExecutorService executorService = Executors.newSingleThreadExecutor();
    private static final List<String> ownerPriority = List.of("SPOTIFY", "CHROME");
    public float animationStep;
    float ez;

    private boolean isMediaPlayerInfoEnabled;

    @Override
    public void render(EventDisplay eventDisplay) {
        if (Expensive.getInstance().getFunctionRegistry() != null) {
            isMediaPlayerInfoEnabled = Expensive.getInstance().getFunctionRegistry().getHud().isState() && HUD.elements.getValueByName("Медиаплеер (мощные пк)").get();
        }
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = drag.getX();
        float posY = drag.getY();
        float headSize = 0;
        float spacing = 5;
        float width = 110;
        float height = 59 / 2f;
        drag.setWidth(width);
        drag.setHeight(height);
        GlStateManager.pushMatrix();
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        drawStyledRect(posX, posY, width, height, 6, 255);
        if (isMediaPlayerInfoEnabled) {
            executorService.submit(() -> {
                try {
                    List<IMediaSession> sessions = MediaPlayerInfo.Instance != null ? MediaPlayerInfo.Instance.getMediaSessions() : null;
                    if (sessions == null || sessions.isEmpty()) {
                        //throw new IllegalStateException("Не удалось получить сессии.");
                    }
                    sessions = sessions.stream()
                            .sorted((s1, s2) -> Integer.compare(getOwnerPriorityIndex(s1), getOwnerPriorityIndex(s2)))
                            .collect(Collectors.toList());
                    IMediaSession mediaSession = sessions.stream()
                            .filter(s -> s.getMedia() != null && (!s.getMedia().getArtist().isEmpty() || !s.getMedia().getTitle().isEmpty()))
                            .findFirst()
                            .orElse(null);
                    if (mediaSession != null && mediaSession.getMedia() != null) {
                        MediaInfo media = mediaSession.getMedia();
                        title = media.getTitle();
                        artist = media.getArtist();
                        duration = (int) media.getDuration();
                        position = (int) media.getPosition();
                    } else {
                        title = "No track";
                        artist = "Unknown artist";
                        duration = 0;
                        position = 0;
                    }
                } catch (Throwable e) {
                    title = "loading...";
                    artist = "loading...";
                    duration = 0;
                    position = 0;
                    e.printStackTrace();
                }
            });
        } else {
            title = "Media Info Disabled";
            artist = "N/A";
            duration = 0;
            position = 0;
        }

        String displayTitle = title != null ? (title.length() > 22 ? title.substring(0, 22) + "..." : title) : "No track";
        String displayArtist = artist != null ? (artist.length() > 18 ? artist.substring(0, 18) + "..." : artist) : "Unknown artist";
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayTitle, posX + spacing + spacing, posY + spacing + 1, -1, 7);
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayArtist, posX + spacing + spacing, posY + spacing + spacing + spacing - 1, ColorUtils.rgb(200, 200, 200), 7);
        if (duration > 0) {
            float adjustedWidth = width + 20;
            float progress = (float) position / duration;
            ez = 0;
            animationStep = MathUtil.fast(animationStep, progress, 6);
            Vector4i vector4i = new Vector4i(style.getFirstColor().getRGB(), style.getFirstColor().getRGB(), style.getSecondColor().getRGB(), style.getSecondColor().getRGB());
            Vector4i newvec = new Vector4i(ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42), 1f, new Vector4f(2,2,2,2), ColorUtils.rgb(32, 32, 32));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42) * animationStep, 1f, new Vector4f(2,2,2,2), newvec);
        }
        GlStateManager.popMatrix();
    }

    private void drawStyledRect(float x, float y, float width, float height, float radius, int alpha) {
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        DisplayUtils.drawRoundedRect(x, y, width + ez, height, radius, ColorUtils.rgba(21, 21, 21, alpha));
    }

    private int getOwnerPriorityIndex(IMediaSession session) {
        for (int i = 0; i < ownerPriority.size(); i++) {
            if (session.getOwner().toUpperCase().contains(ownerPriority.get(i))) {
                return i;
            }
        }
        return ownerPriority.size();
    }

    private String formatDuration(int duration) {
        int minutes = duration / 60;
        int seconds = duration % 60;
        return String.format("%02d:%02d", minutes, seconds);
    }
}
и уже регестрируем этот MediaPlayerRenderer в нашем классе HUD:

1 добавляем в элементы рендера
2 final MediaplayerRenderer mediaplayerRenderer; (ставим в любое место вне блоков ивентов)
3 в EventDisplay: if (elements.getValueByName("Медиаплеер").get()) mediaplayerRenderer.render(e);
4 в HUD создаем Dragging для него:
Dragging player = Expensive.getInstance().createDrag(this, "Player", 201, 5);
mediaplayerRenderer = new MediaplayerRenderer(player);


Всё радуемся рабочему плееру (Внимание!!! Слил, потому что довольно таки часто крашит, спустя 1 - 3 часа игры начнет тупо вылетать игра что дефаеться перезагрузкой пк но все равно медиаплеер стоящий)

Библиотека mediaplayerinfo:
а также прикрепляю SS:

Посмотреть вложение 300805

Всех благ ;)
Ещё забыл, в DisplayUtils.hud замените на свой рендер ректа как в других зубах

Когда уже одобрят суцко
 
Начинающий
Статус
Оффлайн
Регистрация
12 Дек 2022
Сообщения
183
Реакции[?]
0
Поинты[?]
0
Доброго времени суток читающие, ща покажу как сделать MediaPlayer который будет получать любой играющий поток будь то YouTube, Telegram, или даже браузер, и будет рендерить табличку с автором, названием и продолжительносью (фото обложки трека можете доделать сами)

И так начнем, для создания такого чуда нам понадобиться библиотека mediaplayer-info я прикрепляю её ниже:
Нам нужно засунуть её в папку lib или Libraries в нашей пасточке, и после чего нажать Shift+Ctrl+LAlt+S одновременно, далее выбрать в колонке "Artifacts" тобишь где мы собственно говоря билдим наш читикс, и жмем на Посмотреть вложение 300802 для добавления нужной нам библиотеки, далее выбираем тут Extracted Directory: Посмотреть вложение 300803 и после ищем Mediaplayer-info (наша библиотека которая нужна для работы таблички), после добавления создаем класс MediaPlayerRenderer (импорты поставьте сами плиз:


Код:
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class MediaplayerRenderer implements ElementRenderer {

    final Minecraft mc = Minecraft.getInstance();
    IMediaSession session = null;
    final Dragging drag;
    String title;
    String artist;
    int duration;
    int position;
    private final ExecutorService executorService = Executors.newSingleThreadExecutor();
    private static final List<String> ownerPriority = List.of("SPOTIFY", "CHROME");
    public float animationStep;
    float ez;

    private boolean isMediaPlayerInfoEnabled;

    @Override
    public void render(EventDisplay eventDisplay) {
        if (Expensive.getInstance().getFunctionRegistry() != null) {
            isMediaPlayerInfoEnabled = Expensive.getInstance().getFunctionRegistry().getHud().isState() && HUD.elements.getValueByName("Медиаплеер (мощные пк)").get();
        }
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = drag.getX();
        float posY = drag.getY();
        float headSize = 0;
        float spacing = 5;
        float width = 110;
        float height = 59 / 2f;
        drag.setWidth(width);
        drag.setHeight(height);
        GlStateManager.pushMatrix();
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        drawStyledRect(posX, posY, width, height, 6, 255);
        if (isMediaPlayerInfoEnabled) {
            executorService.submit(() -> {
                try {
                    List<IMediaSession> sessions = MediaPlayerInfo.Instance != null ? MediaPlayerInfo.Instance.getMediaSessions() : null;
                    if (sessions == null || sessions.isEmpty()) {
                        //throw new IllegalStateException("Не удалось получить сессии.");
                    }
                    sessions = sessions.stream()
                            .sorted((s1, s2) -> Integer.compare(getOwnerPriorityIndex(s1), getOwnerPriorityIndex(s2)))
                            .collect(Collectors.toList());
                    IMediaSession mediaSession = sessions.stream()
                            .filter(s -> s.getMedia() != null && (!s.getMedia().getArtist().isEmpty() || !s.getMedia().getTitle().isEmpty()))
                            .findFirst()
                            .orElse(null);
                    if (mediaSession != null && mediaSession.getMedia() != null) {
                        MediaInfo media = mediaSession.getMedia();
                        title = media.getTitle();
                        artist = media.getArtist();
                        duration = (int) media.getDuration();
                        position = (int) media.getPosition();
                    } else {
                        title = "No track";
                        artist = "Unknown artist";
                        duration = 0;
                        position = 0;
                    }
                } catch (Throwable e) {
                    title = "loading...";
                    artist = "loading...";
                    duration = 0;
                    position = 0;
                    e.printStackTrace();
                }
            });
        } else {
            title = "Media Info Disabled";
            artist = "N/A";
            duration = 0;
            position = 0;
        }

        String displayTitle = title != null ? (title.length() > 22 ? title.substring(0, 22) + "..." : title) : "No track";
        String displayArtist = artist != null ? (artist.length() > 18 ? artist.substring(0, 18) + "..." : artist) : "Unknown artist";
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayTitle, posX + spacing + spacing, posY + spacing + 1, -1, 7);
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayArtist, posX + spacing + spacing, posY + spacing + spacing + spacing - 1, ColorUtils.rgb(200, 200, 200), 7);
        if (duration > 0) {
            float adjustedWidth = width + 20;
            float progress = (float) position / duration;
            ez = 0;
            animationStep = MathUtil.fast(animationStep, progress, 6);
            Vector4i vector4i = new Vector4i(style.getFirstColor().getRGB(), style.getFirstColor().getRGB(), style.getSecondColor().getRGB(), style.getSecondColor().getRGB());
            Vector4i newvec = new Vector4i(ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42), 1f, new Vector4f(2,2,2,2), ColorUtils.rgb(32, 32, 32));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42) * animationStep, 1f, new Vector4f(2,2,2,2), newvec);
        }
        GlStateManager.popMatrix();
    }

    private void drawStyledRect(float x, float y, float width, float height, float radius, int alpha) {
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        DisplayUtils.drawRoundedRect(x, y, width + ez, height, radius, ColorUtils.rgba(21, 21, 21, alpha));
    }

    private int getOwnerPriorityIndex(IMediaSession session) {
        for (int i = 0; i < ownerPriority.size(); i++) {
            if (session.getOwner().toUpperCase().contains(ownerPriority.get(i))) {
                return i;
            }
        }
        return ownerPriority.size();
    }

    private String formatDuration(int duration) {
        int minutes = duration / 60;
        int seconds = duration % 60;
        return String.format("%02d:%02d", minutes, seconds);
    }
}
и уже регестрируем этот MediaPlayerRenderer в нашем классе HUD:

1 добавляем в элементы рендера
2 final MediaplayerRenderer mediaplayerRenderer; (ставим в любое место вне блоков ивентов)
3 в EventDisplay: if (elements.getValueByName("Медиаплеер").get()) mediaplayerRenderer.render(e);
4 в HUD создаем Dragging для него:
Dragging player = Expensive.getInstance().createDrag(this, "Player", 201, 5);
mediaplayerRenderer = new MediaplayerRenderer(player);


Всё радуемся рабочему плееру (Внимание!!! Слил, потому что довольно таки часто крашит, спустя 1 - 3 часа игры начнет тупо вылетать игра что дефаеться перезагрузкой пк но все равно медиаплеер стоящий)

Библиотека mediaplayerinfo:
а также прикрепляю SS:

Посмотреть вложение 300805
MediaPlayerLib JAR - VirusTotal ->
Пожалуйста, авторизуйтесь для просмотра ссылки.

Всех благ ;)
("Медиаплеер (мощные пк)").get() 👍
 
Начинающий
Статус
Оффлайн
Регистрация
3 Май 2023
Сообщения
682
Реакции[?]
4
Поинты[?]
4K
Доброго времени суток читающие, ща покажу как сделать MediaPlayer который будет получать любой играющий поток будь то YouTube, Telegram, или даже браузер, и будет рендерить табличку с автором, названием и продолжительносью (фото обложки трека можете доделать сами)

И так начнем, для создания такого чуда нам понадобиться библиотека mediaplayer-info я прикрепляю её ниже:
Нам нужно засунуть её в папку lib или Libraries в нашей пасточке, и после чего нажать Shift+Ctrl+LAlt+S одновременно, далее выбрать в колонке "Artifacts" тобишь где мы собственно говоря билдим наш читикс, и жмем на Посмотреть вложение 300802 для добавления нужной нам библиотеки, далее выбираем тут Extracted Directory: Посмотреть вложение 300803 и после ищем Mediaplayer-info (наша библиотека которая нужна для работы таблички), после добавления создаем класс MediaPlayerRenderer (импорты поставьте сами плиз:


Код:
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class MediaplayerRenderer implements ElementRenderer {

    final Minecraft mc = Minecraft.getInstance();
    IMediaSession session = null;
    final Dragging drag;
    String title;
    String artist;
    int duration;
    int position;
    private final ExecutorService executorService = Executors.newSingleThreadExecutor();
    private static final List<String> ownerPriority = List.of("SPOTIFY", "CHROME");
    public float animationStep;
    float ez;

    private boolean isMediaPlayerInfoEnabled;

    @Override
    public void render(EventDisplay eventDisplay) {
        if (Expensive.getInstance().getFunctionRegistry() != null) {
            isMediaPlayerInfoEnabled = Expensive.getInstance().getFunctionRegistry().getHud().isState() && HUD.elements.getValueByName("Медиаплеер (мощные пк)").get();
        }
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = drag.getX();
        float posY = drag.getY();
        float headSize = 0;
        float spacing = 5;
        float width = 110;
        float height = 59 / 2f;
        drag.setWidth(width);
        drag.setHeight(height);
        GlStateManager.pushMatrix();
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        drawStyledRect(posX, posY, width, height, 6, 255);
        if (isMediaPlayerInfoEnabled) {
            executorService.submit(() -> {
                try {
                    List<IMediaSession> sessions = MediaPlayerInfo.Instance != null ? MediaPlayerInfo.Instance.getMediaSessions() : null;
                    if (sessions == null || sessions.isEmpty()) {
                        //throw new IllegalStateException("Не удалось получить сессии.");
                    }
                    sessions = sessions.stream()
                            .sorted((s1, s2) -> Integer.compare(getOwnerPriorityIndex(s1), getOwnerPriorityIndex(s2)))
                            .collect(Collectors.toList());
                    IMediaSession mediaSession = sessions.stream()
                            .filter(s -> s.getMedia() != null && (!s.getMedia().getArtist().isEmpty() || !s.getMedia().getTitle().isEmpty()))
                            .findFirst()
                            .orElse(null);
                    if (mediaSession != null && mediaSession.getMedia() != null) {
                        MediaInfo media = mediaSession.getMedia();
                        title = media.getTitle();
                        artist = media.getArtist();
                        duration = (int) media.getDuration();
                        position = (int) media.getPosition();
                    } else {
                        title = "No track";
                        artist = "Unknown artist";
                        duration = 0;
                        position = 0;
                    }
                } catch (Throwable e) {
                    title = "loading...";
                    artist = "loading...";
                    duration = 0;
                    position = 0;
                    e.printStackTrace();
                }
            });
        } else {
            title = "Media Info Disabled";
            artist = "N/A";
            duration = 0;
            position = 0;
        }

        String displayTitle = title != null ? (title.length() > 22 ? title.substring(0, 22) + "..." : title) : "No track";
        String displayArtist = artist != null ? (artist.length() > 18 ? artist.substring(0, 18) + "..." : artist) : "Unknown artist";
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayTitle, posX + spacing + spacing, posY + spacing + 1, -1, 7);
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayArtist, posX + spacing + spacing, posY + spacing + spacing + spacing - 1, ColorUtils.rgb(200, 200, 200), 7);
        if (duration > 0) {
            float adjustedWidth = width + 20;
            float progress = (float) position / duration;
            ez = 0;
            animationStep = MathUtil.fast(animationStep, progress, 6);
            Vector4i vector4i = new Vector4i(style.getFirstColor().getRGB(), style.getFirstColor().getRGB(), style.getSecondColor().getRGB(), style.getSecondColor().getRGB());
            Vector4i newvec = new Vector4i(ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42), 1f, new Vector4f(2,2,2,2), ColorUtils.rgb(32, 32, 32));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42) * animationStep, 1f, new Vector4f(2,2,2,2), newvec);
        }
        GlStateManager.popMatrix();
    }

    private void drawStyledRect(float x, float y, float width, float height, float radius, int alpha) {
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        DisplayUtils.drawRoundedRect(x, y, width + ez, height, radius, ColorUtils.rgba(21, 21, 21, alpha));
    }

    private int getOwnerPriorityIndex(IMediaSession session) {
        for (int i = 0; i < ownerPriority.size(); i++) {
            if (session.getOwner().toUpperCase().contains(ownerPriority.get(i))) {
                return i;
            }
        }
        return ownerPriority.size();
    }

    private String formatDuration(int duration) {
        int minutes = duration / 60;
        int seconds = duration % 60;
        return String.format("%02d:%02d", minutes, seconds);
    }
}
и уже регестрируем этот MediaPlayerRenderer в нашем классе HUD:

1 добавляем в элементы рендера
2 final MediaplayerRenderer mediaplayerRenderer; (ставим в любое место вне блоков ивентов)
3 в EventDisplay: if (elements.getValueByName("Медиаплеер").get()) mediaplayerRenderer.render(e);
4 в HUD создаем Dragging для него:
Dragging player = Expensive.getInstance().createDrag(this, "Player", 201, 5);
mediaplayerRenderer = new MediaplayerRenderer(player);


Всё радуемся рабочему плееру (Внимание!!! Слил, потому что довольно таки часто крашит, спустя 1 - 3 часа игры начнет тупо вылетать игра что дефаеться перезагрузкой пк но все равно медиаплеер стоящий)

Библиотека mediaplayerinfo:
а также прикрепляю SS:

Посмотреть вложение 300805
MediaPlayerLib JAR - VirusTotal ->
Пожалуйста, авторизуйтесь для просмотра ссылки.

Всех благ ;)
Если бы добавить BufferedImage и надписи если выходит за лимит не ... а альфу для буквы плавную то ваще ахуенно
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2023
Сообщения
59
Реакции[?]
0
Поинты[?]
0
Если бы добавить BufferedImage и надписи если выходит за лимит не ... а альфу для буквы плавную то ваще ахуенно
Насчёт рендера картинки у меня он был в коде но решил вырезать, а что насчёт продления ректа то идея хорошая, но если трек (slowed remix + reversed + speed up + nightcore ) в названии то уже пиздец на пол экрана :)
 
Начинающий
Статус
Онлайн
Регистрация
6 Дек 2023
Сообщения
433
Реакции[?]
2
Поинты[?]
2K
Доброго времени суток читающие, ща покажу как сделать MediaPlayer который будет получать любой играющий поток будь то YouTube, Telegram, или даже браузер, и будет рендерить табличку с автором, названием и продолжительносью (фото обложки трека можете доделать сами)

И так начнем, для создания такого чуда нам понадобиться библиотека mediaplayer-info я прикрепляю её ниже:
Нам нужно засунуть её в папку lib или Libraries в нашей пасточке, и после чего нажать Shift+Ctrl+LAlt+S одновременно, далее выбрать в колонке "Artifacts" тобишь где мы собственно говоря билдим наш читикс, и жмем на Посмотреть вложение 300802 для добавления нужной нам библиотеки, далее выбираем тут Extracted Directory: Посмотреть вложение 300803 и после ищем Mediaplayer-info (наша библиотека которая нужна для работы таблички), после добавления создаем класс MediaPlayerRenderer (импорты поставьте сами плиз:


Код:
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class MediaplayerRenderer implements ElementRenderer {

    final Minecraft mc = Minecraft.getInstance();
    IMediaSession session = null;
    final Dragging drag;
    String title;
    String artist;
    int duration;
    int position;
    private final ExecutorService executorService = Executors.newSingleThreadExecutor();
    private static final List<String> ownerPriority = List.of("SPOTIFY", "CHROME");
    public float animationStep;
    float ez;

    private boolean isMediaPlayerInfoEnabled;

    @Override
    public void render(EventDisplay eventDisplay) {
        if (Expensive.getInstance().getFunctionRegistry() != null) {
            isMediaPlayerInfoEnabled = Expensive.getInstance().getFunctionRegistry().getHud().isState() && HUD.elements.getValueByName("Медиаплеер (мощные пк)").get();
        }
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = drag.getX();
        float posY = drag.getY();
        float headSize = 0;
        float spacing = 5;
        float width = 110;
        float height = 59 / 2f;
        drag.setWidth(width);
        drag.setHeight(height);
        GlStateManager.pushMatrix();
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        drawStyledRect(posX, posY, width, height, 6, 255);
        if (isMediaPlayerInfoEnabled) {
            executorService.submit(() -> {
                try {
                    List<IMediaSession> sessions = MediaPlayerInfo.Instance != null ? MediaPlayerInfo.Instance.getMediaSessions() : null;
                    if (sessions == null || sessions.isEmpty()) {
                        //throw new IllegalStateException("Не удалось получить сессии.");
                    }
                    sessions = sessions.stream()
                            .sorted((s1, s2) -> Integer.compare(getOwnerPriorityIndex(s1), getOwnerPriorityIndex(s2)))
                            .collect(Collectors.toList());
                    IMediaSession mediaSession = sessions.stream()
                            .filter(s -> s.getMedia() != null && (!s.getMedia().getArtist().isEmpty() || !s.getMedia().getTitle().isEmpty()))
                            .findFirst()
                            .orElse(null);
                    if (mediaSession != null && mediaSession.getMedia() != null) {
                        MediaInfo media = mediaSession.getMedia();
                        title = media.getTitle();
                        artist = media.getArtist();
                        duration = (int) media.getDuration();
                        position = (int) media.getPosition();
                    } else {
                        title = "No track";
                        artist = "Unknown artist";
                        duration = 0;
                        position = 0;
                    }
                } catch (Throwable e) {
                    title = "loading...";
                    artist = "loading...";
                    duration = 0;
                    position = 0;
                    e.printStackTrace();
                }
            });
        } else {
            title = "Media Info Disabled";
            artist = "N/A";
            duration = 0;
            position = 0;
        }

        String displayTitle = title != null ? (title.length() > 22 ? title.substring(0, 22) + "..." : title) : "No track";
        String displayArtist = artist != null ? (artist.length() > 18 ? artist.substring(0, 18) + "..." : artist) : "Unknown artist";
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayTitle, posX + spacing + spacing, posY + spacing + 1, -1, 7);
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayArtist, posX + spacing + spacing, posY + spacing + spacing + spacing - 1, ColorUtils.rgb(200, 200, 200), 7);
        if (duration > 0) {
            float adjustedWidth = width + 20;
            float progress = (float) position / duration;
            ez = 0;
            animationStep = MathUtil.fast(animationStep, progress, 6);
            Vector4i vector4i = new Vector4i(style.getFirstColor().getRGB(), style.getFirstColor().getRGB(), style.getSecondColor().getRGB(), style.getSecondColor().getRGB());
            Vector4i newvec = new Vector4i(ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42), 1f, new Vector4f(2,2,2,2), ColorUtils.rgb(32, 32, 32));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42) * animationStep, 1f, new Vector4f(2,2,2,2), newvec);
        }
        GlStateManager.popMatrix();
    }

    private void drawStyledRect(float x, float y, float width, float height, float radius, int alpha) {
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        DisplayUtils.drawRoundedRect(x, y, width + ez, height, radius, ColorUtils.rgba(21, 21, 21, alpha));
    }

    private int getOwnerPriorityIndex(IMediaSession session) {
        for (int i = 0; i < ownerPriority.size(); i++) {
            if (session.getOwner().toUpperCase().contains(ownerPriority.get(i))) {
                return i;
            }
        }
        return ownerPriority.size();
    }

    private String formatDuration(int duration) {
        int minutes = duration / 60;
        int seconds = duration % 60;
        return String.format("%02d:%02d", minutes, seconds);
    }
}
и уже регестрируем этот MediaPlayerRenderer в нашем классе HUD:

1 добавляем в элементы рендера
2 final MediaplayerRenderer mediaplayerRenderer; (ставим в любое место вне блоков ивентов)
3 в EventDisplay: if (elements.getValueByName("Медиаплеер").get()) mediaplayerRenderer.render(e);
4 в HUD создаем Dragging для него:
Dragging player = Expensive.getInstance().createDrag(this, "Player", 201, 5);
mediaplayerRenderer = new MediaplayerRenderer(player);


Всё радуемся рабочему плееру (Внимание!!! Слил, потому что довольно таки часто крашит, спустя 1 - 3 часа игры начнет тупо вылетать игра что дефаеться перезагрузкой пк но все равно медиаплеер стоящий)

Библиотека mediaplayerinfo:
а также прикрепляю SS:

Посмотреть вложение 300805
MediaPlayerLib JAR - VirusTotal ->
Пожалуйста, авторизуйтесь для просмотра ссылки.

Всех благ ;)
фу боже бизнес мне обрушил
 
Начинающий
Статус
Оффлайн
Регистрация
1 Авг 2024
Сообщения
162
Реакции[?]
0
Поинты[?]
0
Доброго времени суток читающие, ща покажу как сделать MediaPlayer который будет получать любой играющий поток будь то YouTube, Telegram, или даже браузер, и будет рендерить табличку с автором, названием и продолжительносью (фото обложки трека можете доделать сами)

И так начнем, для создания такого чуда нам понадобиться библиотека mediaplayer-info я прикрепляю её ниже:
Нам нужно засунуть её в папку lib или Libraries в нашей пасточке, и после чего нажать Shift+Ctrl+LAlt+S одновременно, далее выбрать в колонке "Artifacts" тобишь где мы собственно говоря билдим наш читикс, и жмем на Посмотреть вложение 300802 для добавления нужной нам библиотеки, далее выбираем тут Extracted Directory: Посмотреть вложение 300803 и после ищем Mediaplayer-info (наша библиотека которая нужна для работы таблички), после добавления создаем класс MediaPlayerRenderer (импорты поставьте сами плиз:


Код:
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class MediaplayerRenderer implements ElementRenderer {

    final Minecraft mc = Minecraft.getInstance();
    IMediaSession session = null;
    final Dragging drag;
    String title;
    String artist;
    int duration;
    int position;
    private final ExecutorService executorService = Executors.newSingleThreadExecutor();
    private static final List<String> ownerPriority = List.of("SPOTIFY", "CHROME");
    public float animationStep;
    float ez;

    private boolean isMediaPlayerInfoEnabled;

    @Override
    public void render(EventDisplay eventDisplay) {
        if (Expensive.getInstance().getFunctionRegistry() != null) {
            isMediaPlayerInfoEnabled = Expensive.getInstance().getFunctionRegistry().getHud().isState() && HUD.elements.getValueByName("Медиаплеер (мощные пк)").get();
        }
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = drag.getX();
        float posY = drag.getY();
        float headSize = 0;
        float spacing = 5;
        float width = 110;
        float height = 59 / 2f;
        drag.setWidth(width);
        drag.setHeight(height);
        GlStateManager.pushMatrix();
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        drawStyledRect(posX, posY, width, height, 6, 255);
        if (isMediaPlayerInfoEnabled) {
            executorService.submit(() -> {
                try {
                    List<IMediaSession> sessions = MediaPlayerInfo.Instance != null ? MediaPlayerInfo.Instance.getMediaSessions() : null;
                    if (sessions == null || sessions.isEmpty()) {
                        //throw new IllegalStateException("Не удалось получить сессии.");
                    }
                    sessions = sessions.stream()
                            .sorted((s1, s2) -> Integer.compare(getOwnerPriorityIndex(s1), getOwnerPriorityIndex(s2)))
                            .collect(Collectors.toList());
                    IMediaSession mediaSession = sessions.stream()
                            .filter(s -> s.getMedia() != null && (!s.getMedia().getArtist().isEmpty() || !s.getMedia().getTitle().isEmpty()))
                            .findFirst()
                            .orElse(null);
                    if (mediaSession != null && mediaSession.getMedia() != null) {
                        MediaInfo media = mediaSession.getMedia();
                        title = media.getTitle();
                        artist = media.getArtist();
                        duration = (int) media.getDuration();
                        position = (int) media.getPosition();
                    } else {
                        title = "No track";
                        artist = "Unknown artist";
                        duration = 0;
                        position = 0;
                    }
                } catch (Throwable e) {
                    title = "loading...";
                    artist = "loading...";
                    duration = 0;
                    position = 0;
                    e.printStackTrace();
                }
            });
        } else {
            title = "Media Info Disabled";
            artist = "N/A";
            duration = 0;
            position = 0;
        }

        String displayTitle = title != null ? (title.length() > 22 ? title.substring(0, 22) + "..." : title) : "No track";
        String displayArtist = artist != null ? (artist.length() > 18 ? artist.substring(0, 18) + "..." : artist) : "Unknown artist";
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayTitle, posX + spacing + spacing, posY + spacing + 1, -1, 7);
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayArtist, posX + spacing + spacing, posY + spacing + spacing + spacing - 1, ColorUtils.rgb(200, 200, 200), 7);
        if (duration > 0) {
            float adjustedWidth = width + 20;
            float progress = (float) position / duration;
            ez = 0;
            animationStep = MathUtil.fast(animationStep, progress, 6);
            Vector4i vector4i = new Vector4i(style.getFirstColor().getRGB(), style.getFirstColor().getRGB(), style.getSecondColor().getRGB(), style.getSecondColor().getRGB());
            Vector4i newvec = new Vector4i(ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42), 1f, new Vector4f(2,2,2,2), ColorUtils.rgb(32, 32, 32));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42) * animationStep, 1f, new Vector4f(2,2,2,2), newvec);
        }
        GlStateManager.popMatrix();
    }

    private void drawStyledRect(float x, float y, float width, float height, float radius, int alpha) {
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        DisplayUtils.drawRoundedRect(x, y, width + ez, height, radius, ColorUtils.rgba(21, 21, 21, alpha));
    }

    private int getOwnerPriorityIndex(IMediaSession session) {
        for (int i = 0; i < ownerPriority.size(); i++) {
            if (session.getOwner().toUpperCase().contains(ownerPriority.get(i))) {
                return i;
            }
        }
        return ownerPriority.size();
    }

    private String formatDuration(int duration) {
        int minutes = duration / 60;
        int seconds = duration % 60;
        return String.format("%02d:%02d", minutes, seconds);
    }
}
и уже регестрируем этот MediaPlayerRenderer в нашем классе HUD:

1 добавляем в элементы рендера
2 final MediaplayerRenderer mediaplayerRenderer; (ставим в любое место вне блоков ивентов)
3 в EventDisplay: if (elements.getValueByName("Медиаплеер").get()) mediaplayerRenderer.render(e);
4 в HUD создаем Dragging для него:
Dragging player = Expensive.getInstance().createDrag(this, "Player", 201, 5);
mediaplayerRenderer = new MediaplayerRenderer(player);


Всё радуемся рабочему плееру (Внимание!!! Слил, потому что довольно таки часто крашит, спустя 1 - 3 часа игры начнет тупо вылетать игра что дефаеться перезагрузкой пк но все равно медиаплеер стоящий)

Библиотека mediaplayerinfo:
а также прикрепляю SS:

Посмотреть вложение 300805
MediaPlayerLib JAR - VirusTotal ->
Пожалуйста, авторизуйтесь для просмотра ссылки.

Всех благ ;)
было до слива = сваг!
 
Начинающий
Статус
Оффлайн
Регистрация
20 Сен 2024
Сообщения
202
Реакции[?]
1
Поинты[?]
2K
Доброго времени суток читающие, ща покажу как сделать MediaPlayer который будет получать любой играющий поток будь то YouTube, Telegram, или даже браузер, и будет рендерить табличку с автором, названием и продолжительносью (фото обложки трека можете доделать сами)

И так начнем, для создания такого чуда нам понадобиться библиотека mediaplayer-info я прикрепляю её ниже:
Нам нужно засунуть её в папку lib или Libraries в нашей пасточке, и после чего нажать Shift+Ctrl+LAlt+S одновременно, далее выбрать в колонке "Artifacts" тобишь где мы собственно говоря билдим наш читикс, и жмем на Посмотреть вложение 300802 для добавления нужной нам библиотеки, далее выбираем тут Extracted Directory: Посмотреть вложение 300803 и после ищем Mediaplayer-info (наша библиотека которая нужна для работы таблички), после добавления создаем класс MediaPlayerRenderer (импорты поставьте сами плиз:


Код:
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class MediaplayerRenderer implements ElementRenderer {

    final Minecraft mc = Minecraft.getInstance();
    IMediaSession session = null;
    final Dragging drag;
    String title;
    String artist;
    int duration;
    int position;
    private final ExecutorService executorService = Executors.newSingleThreadExecutor();
    private static final List<String> ownerPriority = List.of("SPOTIFY", "CHROME");
    public float animationStep;
    float ez;

    private boolean isMediaPlayerInfoEnabled;

    @Override
    public void render(EventDisplay eventDisplay) {
        if (Expensive.getInstance().getFunctionRegistry() != null) {
            isMediaPlayerInfoEnabled = Expensive.getInstance().getFunctionRegistry().getHud().isState() && HUD.elements.getValueByName("Медиаплеер (мощные пк)").get();
        }
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = drag.getX();
        float posY = drag.getY();
        float headSize = 0;
        float spacing = 5;
        float width = 110;
        float height = 59 / 2f;
        drag.setWidth(width);
        drag.setHeight(height);
        GlStateManager.pushMatrix();
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        drawStyledRect(posX, posY, width, height, 6, 255);
        if (isMediaPlayerInfoEnabled) {
            executorService.submit(() -> {
                try {
                    List<IMediaSession> sessions = MediaPlayerInfo.Instance != null ? MediaPlayerInfo.Instance.getMediaSessions() : null;
                    if (sessions == null || sessions.isEmpty()) {
                        //throw new IllegalStateException("Не удалось получить сессии.");
                    }
                    sessions = sessions.stream()
                            .sorted((s1, s2) -> Integer.compare(getOwnerPriorityIndex(s1), getOwnerPriorityIndex(s2)))
                            .collect(Collectors.toList());
                    IMediaSession mediaSession = sessions.stream()
                            .filter(s -> s.getMedia() != null && (!s.getMedia().getArtist().isEmpty() || !s.getMedia().getTitle().isEmpty()))
                            .findFirst()
                            .orElse(null);
                    if (mediaSession != null && mediaSession.getMedia() != null) {
                        MediaInfo media = mediaSession.getMedia();
                        title = media.getTitle();
                        artist = media.getArtist();
                        duration = (int) media.getDuration();
                        position = (int) media.getPosition();
                    } else {
                        title = "No track";
                        artist = "Unknown artist";
                        duration = 0;
                        position = 0;
                    }
                } catch (Throwable e) {
                    title = "loading...";
                    artist = "loading...";
                    duration = 0;
                    position = 0;
                    e.printStackTrace();
                }
            });
        } else {
            title = "Media Info Disabled";
            artist = "N/A";
            duration = 0;
            position = 0;
        }

        String displayTitle = title != null ? (title.length() > 22 ? title.substring(0, 22) + "..." : title) : "No track";
        String displayArtist = artist != null ? (artist.length() > 18 ? artist.substring(0, 18) + "..." : artist) : "Unknown artist";
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayTitle, posX + spacing + spacing, posY + spacing + 1, -1, 7);
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayArtist, posX + spacing + spacing, posY + spacing + spacing + spacing - 1, ColorUtils.rgb(200, 200, 200), 7);
        if (duration > 0) {
            float adjustedWidth = width + 20;
            float progress = (float) position / duration;
            ez = 0;
            animationStep = MathUtil.fast(animationStep, progress, 6);
            Vector4i vector4i = new Vector4i(style.getFirstColor().getRGB(), style.getFirstColor().getRGB(), style.getSecondColor().getRGB(), style.getSecondColor().getRGB());
            Vector4i newvec = new Vector4i(ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42), 1f, new Vector4f(2,2,2,2), ColorUtils.rgb(32, 32, 32));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42) * animationStep, 1f, new Vector4f(2,2,2,2), newvec);
        }
        GlStateManager.popMatrix();
    }

    private void drawStyledRect(float x, float y, float width, float height, float radius, int alpha) {
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        DisplayUtils.drawRoundedRect(x, y, width + ez, height, radius, ColorUtils.rgba(21, 21, 21, alpha));
    }

    private int getOwnerPriorityIndex(IMediaSession session) {
        for (int i = 0; i < ownerPriority.size(); i++) {
            if (session.getOwner().toUpperCase().contains(ownerPriority.get(i))) {
                return i;
            }
        }
        return ownerPriority.size();
    }

    private String formatDuration(int duration) {
        int minutes = duration / 60;
        int seconds = duration % 60;
        return String.format("%02d:%02d", minutes, seconds);
    }
}
и уже регестрируем этот MediaPlayerRenderer в нашем классе HUD:

1 добавляем в элементы рендера
2 final MediaplayerRenderer mediaplayerRenderer; (ставим в любое место вне блоков ивентов)
3 в EventDisplay: if (elements.getValueByName("Медиаплеер").get()) mediaplayerRenderer.render(e);
4 в HUD создаем Dragging для него:
Dragging player = Expensive.getInstance().createDrag(this, "Player", 201, 5);
mediaplayerRenderer = new MediaplayerRenderer(player);


Всё радуемся рабочему плееру (Внимание!!! Слил, потому что довольно таки часто крашит, спустя 1 - 3 часа игры начнет тупо вылетать игра что дефаеться перезагрузкой пк но все равно медиаплеер стоящий)

Библиотека mediaplayerinfo:
а также прикрепляю SS:

Посмотреть вложение 300805
MediaPlayerLib JAR - VirusTotal ->
Пожалуйста, авторизуйтесь для просмотра ссылки.

Всех благ ;)
Солью вам свою , так уж и быть
 
Начинающий
Статус
Оффлайн
Регистрация
28 Июл 2020
Сообщения
166
Реакции[?]
9
Поинты[?]
6K
1741833842884.png
Либка полезная, но на котлине она нормально не работает, после переката ее на джаву все работает без проблем
 
Начинающий
Статус
Оффлайн
Регистрация
6 Сен 2024
Сообщения
57
Реакции[?]
1
Поинты[?]
0
Доброго времени суток читающие, ща покажу как сделать MediaPlayer который будет получать любой играющий поток будь то YouTube, Telegram, или даже браузер, и будет рендерить табличку с автором, названием и продолжительносью (фото обложки трека можете доделать сами)

И так начнем, для создания такого чуда нам понадобиться библиотека mediaplayer-info я прикрепляю её ниже:
Нам нужно засунуть её в папку lib или Libraries в нашей пасточке, и после чего нажать Shift+Ctrl+LAlt+S одновременно, далее выбрать в колонке "Artifacts" тобишь где мы собственно говоря билдим наш читикс, и жмем на Посмотреть вложение 300802 для добавления нужной нам библиотеки, далее выбираем тут Extracted Directory: Посмотреть вложение 300803 и после ищем Mediaplayer-info (наша библиотека которая нужна для работы таблички), после добавления создаем класс MediaPlayerRenderer (импорты поставьте сами плиз:


Код:
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class MediaplayerRenderer implements ElementRenderer {

    final Minecraft mc = Minecraft.getInstance();
    IMediaSession session = null;
    final Dragging drag;
    String title;
    String artist;
    int duration;
    int position;
    private final ExecutorService executorService = Executors.newSingleThreadExecutor();
    private static final List<String> ownerPriority = List.of("SPOTIFY", "CHROME");
    public float animationStep;
    float ez;

    private boolean isMediaPlayerInfoEnabled;

    @Override
    public void render(EventDisplay eventDisplay) {
        if (Expensive.getInstance().getFunctionRegistry() != null) {
            isMediaPlayerInfoEnabled = Expensive.getInstance().getFunctionRegistry().getHud().isState() && HUD.elements.getValueByName("Медиаплеер (мощные пк)").get();
        }
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = drag.getX();
        float posY = drag.getY();
        float headSize = 0;
        float spacing = 5;
        float width = 110;
        float height = 59 / 2f;
        drag.setWidth(width);
        drag.setHeight(height);
        GlStateManager.pushMatrix();
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        drawStyledRect(posX, posY, width, height, 6, 255);
        if (isMediaPlayerInfoEnabled) {
            executorService.submit(() -> {
                try {
                    List<IMediaSession> sessions = MediaPlayerInfo.Instance != null ? MediaPlayerInfo.Instance.getMediaSessions() : null;
                    if (sessions == null || sessions.isEmpty()) {
                        //throw new IllegalStateException("Не удалось получить сессии.");
                    }
                    sessions = sessions.stream()
                            .sorted((s1, s2) -> Integer.compare(getOwnerPriorityIndex(s1), getOwnerPriorityIndex(s2)))
                            .collect(Collectors.toList());
                    IMediaSession mediaSession = sessions.stream()
                            .filter(s -> s.getMedia() != null && (!s.getMedia().getArtist().isEmpty() || !s.getMedia().getTitle().isEmpty()))
                            .findFirst()
                            .orElse(null);
                    if (mediaSession != null && mediaSession.getMedia() != null) {
                        MediaInfo media = mediaSession.getMedia();
                        title = media.getTitle();
                        artist = media.getArtist();
                        duration = (int) media.getDuration();
                        position = (int) media.getPosition();
                    } else {
                        title = "No track";
                        artist = "Unknown artist";
                        duration = 0;
                        position = 0;
                    }
                } catch (Throwable e) {
                    title = "loading...";
                    artist = "loading...";
                    duration = 0;
                    position = 0;
                    e.printStackTrace();
                }
            });
        } else {
            title = "Media Info Disabled";
            artist = "N/A";
            duration = 0;
            position = 0;
        }

        String displayTitle = title != null ? (title.length() > 22 ? title.substring(0, 22) + "..." : title) : "No track";
        String displayArtist = artist != null ? (artist.length() > 18 ? artist.substring(0, 18) + "..." : artist) : "Unknown artist";
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayTitle, posX + spacing + spacing, posY + spacing + 1, -1, 7);
        Fonts.sfMedium2.drawText(eventDisplay.getMatrixStack(), displayArtist, posX + spacing + spacing, posY + spacing + spacing + spacing - 1, ColorUtils.rgb(200, 200, 200), 7);
        if (duration > 0) {
            float adjustedWidth = width + 20;
            float progress = (float) position / duration;
            ez = 0;
            animationStep = MathUtil.fast(animationStep, progress, 6);
            Vector4i vector4i = new Vector4i(style.getFirstColor().getRGB(), style.getFirstColor().getRGB(), style.getSecondColor().getRGB(), style.getSecondColor().getRGB());
            Vector4i newvec = new Vector4i(ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255),ColorUtils.rgb(255,255,255));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42), 1f, new Vector4f(2,2,2,2), ColorUtils.rgb(32, 32, 32));
            DisplayUtils.drawRoundedRect(posX + headSize + spacing + spacing, posY + height - spacing * 2 + 5, (adjustedWidth - 42) * animationStep, 1f, new Vector4f(2,2,2,2), newvec);
        }
        GlStateManager.popMatrix();
    }

    private void drawStyledRect(float x, float y, float width, float height, float radius, int alpha) {
        Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
        DisplayUtils.drawRoundedRect(x, y, width + ez, height, radius, ColorUtils.rgba(21, 21, 21, alpha));
    }

    private int getOwnerPriorityIndex(IMediaSession session) {
        for (int i = 0; i < ownerPriority.size(); i++) {
            if (session.getOwner().toUpperCase().contains(ownerPriority.get(i))) {
                return i;
            }
        }
        return ownerPriority.size();
    }

    private String formatDuration(int duration) {
        int minutes = duration / 60;
        int seconds = duration % 60;
        return String.format("%02d:%02d", minutes, seconds);
    }
}
и уже регестрируем этот MediaPlayerRenderer в нашем классе HUD:

1 добавляем в элементы рендера
2 final MediaplayerRenderer mediaplayerRenderer; (ставим в любое место вне блоков ивентов)
3 в EventDisplay: if (elements.getValueByName("Медиаплеер").get()) mediaplayerRenderer.render(e);
4 в HUD создаем Dragging для него:
Dragging player = Expensive.getInstance().createDrag(this, "Player", 201, 5);
mediaplayerRenderer = new MediaplayerRenderer(player);


Всё радуемся рабочему плееру (Внимание!!! Слил, потому что довольно таки часто крашит, спустя 1 - 3 часа игры начнет тупо вылетать игра что дефаеться перезагрузкой пк но все равно медиаплеер стоящий)

Библиотека mediaplayerinfo:
а также прикрепляю SS:

Посмотреть вложение 300805
MediaPlayerLib JAR - VirusTotal ->
Пожалуйста, авторизуйтесь для просмотра ссылки.

Всех благ ;)
/up, спастил годноту:seemsgood:
 
Сверху Снизу