просто ты криворукий, а на котлине все более чем прекрасно работаетПосмотреть вложение 300977
Либка полезная, но на котлине она нормально не работает, после переката ее на джаву все работает без проблем
просто ты криворукий, а на котлине все более чем прекрасно работаетПосмотреть вложение 300977
Либка полезная, но на котлине она нормально не работает, после переката ее на джаву все работает без проблем
ну ты бы хотя бы исходники оставил не? не думал что тут люди и с линуксом сидят? и с маком? а так смысл взял опен сурс либку и взял залил причем я уверен там были исходники от темы 0 смыслаДоброго времени суток читающие, ща покажу как сделать MediaPlayer который будет получать любой играющий поток будь то YouTube, Telegram, или даже браузер, и будет рендерить табличку с автором, названием и продолжительносью (фото обложки трека можете доделать сами)
И так начнем, для создания такого чуда нам понадобиться библиотека mediaplayer-info я прикрепляю её ниже:
Нам нужно засунуть её в папку lib или Libraries в нашей пасточке, и после чего нажать Shift+Ctrl+LAlt+S одновременно, далее выбрать в колонке "Artifacts" тобишь где мы собственно говоря билдим наш читикс, и жмем на Посмотреть вложение 300802 для добавления нужной нам библиотеки, далее выбираем тут Extracted Directory: Посмотреть вложение 300803 и после ищем Mediaplayer-info (наша библиотека которая нужна для работы таблички), после добавления создаем класс MediaPlayerRenderer (импорты поставьте сами плиз:
и уже регестрируем этот MediaPlayerRenderer в нашем классе HUD:Код:@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); } }
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 ->Пожалуйста, авторизуйтесь для просмотра ссылки.
Всех благ ;)
Ну да действительно, я криворукий, нативка написана криво и спустя время тебе тупо в моменте отдаст огромный массив данных который котлин не обработает и крашнет нахуй)просто ты криворукий, а на котлине все более чем прекрасно работает
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz