- Выберите загрузчик игры
- Vanilla
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
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);
}
}