- Выберите загрузчик игры
 - Vanilla
 
ss:
		
		
	
	
		
	
		
	
library:
util:
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
render:
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
модеры одобрите тему пжпжпжп
				
			library:
	Пожалуйста, авторизуйтесь для просмотра ссылки.
util:
			
				Java:
			
		
		
		package im.quantum.utils.spotify;
import de.labystudio.spotifyapi.SpotifyAPI;
import de.labystudio.spotifyapi.SpotifyAPIFactory;
import de.labystudio.spotifyapi.SpotifyListener;
import de.labystudio.spotifyapi.model.Track;
import lombok.Getter;
import java.time.Duration;
import quantumprotect.annotations.Native;
@Native
public class SpotifyUtil {
    private static final SpotifyAPI api = SpotifyAPIFactory.create();
    @Getter
    private static Track currentTrack;
    private static boolean isPlaying;
    @Getter
    private static int currentPosition;
    static {
        api.registerListener(new SpotifyListener() {
            @Override
            public void onConnect() {
//                System.out.println("Connected to Spotify!");
            }
            @Override
            public void onTrackChanged(Track track) {
                currentTrack = track;
//                System.out.printf("Track changed: %s (%s)\n", track.getArtist() + " - " + track.getName(), formatDuration(Duration.ofMillis(track.getLength())));
            }
            @Override
            public void onPositionChanged(int position) {
                if (!api.hasTrack()) {
                    return;
                }
                int length = api.getTrack().getLength();
                float percentage = 100.0F / length * position;
//                System.out.printf(
//                        "Position changed: %s of %s (%d%%)\n",
//                        formatDuration(Duration.ofSeconds(position)),
//                        formatDuration(Duration.ofSeconds(length)),
//                        (int) percentage
//                );
            }
            @Override
            public void onPlayBackChanged(boolean playing) {
                isPlaying = playing;
                System.out.println(playing ? "Song started playing" : "Song stopped playing");
            }
            @Override
            public void onSync() {}
            @Override
            public void onDisconnect(Exception exception) {
                System.out.println("Disconnected: " + exception.getMessage());
            }
        });
        api.initialize();
    }
    public static String getCurrentTrackInfo() {
        if (currentTrack == null) return "Трек не найден";
        return currentTrack.getArtist() + " - " + currentTrack.getName();
    }
    public static String getCurrentListeningTime() {
        return formatDuration(Duration.ofMillis(currentPosition));
    }
    public static boolean isPlaying() {
        return isPlaying;
    }
    public static String getCurrentTrackDuration() {
        if (currentTrack == null) return "Длительность: неизвестно";
        return formatDuration(Duration.ofMillis(currentTrack.getLength()));
    }
    public static String formatDuration(Duration duration) {
        long seconds = duration.getSeconds();
        long minutes = seconds / 60;
        seconds %= 60;
        return String.format("%02d:%02d", minutes, seconds);
    }
}
	render:
			
				Java:
			
		
		
		package im.quantum.ui.display.impl;
import com.mojang.blaze3d.matrix.MatrixStack;
import im.quantum.events.EventDisplay;
import im.quantum.functions.impl.Interface.HUD;
import im.quantum.ui.display.ElementRenderer;
import im.quantum.utils.animations.impl.DecelerateAnimation;
import im.quantum.utils.drag.Dragging;
import im.quantum.utils.render.DisplayUtils;
import im.quantum.utils.render.font.Fonts;
import im.quantum.utils.spotify.SpotifyUtil;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import net.minecraft.util.math.vector.Vector4f;
import ru.hogoshi.Animation;
import quantumprotect.annotations.Native;
@Native
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class SpotifyRenderer implements ElementRenderer {
    final Dragging dragging;
    float width;
    float height;
    @Override
    public void render(EventDisplay eventDisplay) {
        MatrixStack ms = eventDisplay.getMatrixStack();
        float posX = dragging.getX();
        float posY = dragging.getY();
        String duration = "Длительность: " + /*SpotifyUtil.getCurrentPosition() + " : " + */SpotifyUtil.getCurrentTrackDuration();
        String dNotFound = "Длительность: неизвестно";
        String notFound = "Трек не найден";
        float nameWidth = Fonts.sSB.getWidth(SpotifyUtil.getCurrentTrackInfo(), 8.5f);
        float nameNotFound = Fonts.sSB.getWidth("Трек не найден", 8.5f);
        float nameHeight = Fonts.sSB.getHeight(8.5f);
        float padding = 5;
        float durationWidth = Fonts.sSB.getWidth(duration, 8.5f);
        float durationNotFound = Fonts.sSB.getWidth("Длительность: неизвестно", 8.5f);
        DisplayUtils.newrect(posX, posY, width, height, new Vector4f(5, 5, 5, 5), 190);
        DisplayUtils.drawRoundedOutline(posX - 0.25f, posY, width, height, 5, 1, HUD.getColor(90, 1.5f));
        if(SpotifyUtil.isPlaying()) {
            if(nameWidth>durationWidth){
                width = padding*2 + nameWidth;
            }
            else{
                width = padding*2 + durationWidth;
            }
            height = padding*2 + nameHeight*2 + padding;
            Fonts.sSB.drawText(ms, SpotifyUtil.getCurrentTrackInfo(), posX + width/2 - nameWidth/2, posY + padding, -1, 8.5f);
            Fonts.sSB.drawText(ms, duration, posX + width/2 - durationWidth/2, posY + padding + nameHeight + padding, -1, 8.5f);
        }
        else {
            width = padding*2 + nameNotFound;
            height = padding*2 + nameHeight;
            Fonts.sSB.drawText(ms, notFound, posX + padding, posY + padding, -1, 8.5f);
        }
        dragging.setWidth(width);
        dragging.setHeight(height);
    }
}