-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathNeteaseCloudUserScreen.java
More file actions
94 lines (80 loc) · 3.96 KB
/
NeteaseCloudUserScreen.java
File metadata and controls
94 lines (80 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package top.gregtao.concerto.screen.netease;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;
import top.gregtao.concerto.api.WithMetaData;
import top.gregtao.concerto.http.netease.NeteaseCloudApiClient;
import top.gregtao.concerto.music.list.NeteaseCloudPlaylist;
import top.gregtao.concerto.music.list.Playlist;
import top.gregtao.concerto.player.MusicPlayer;
import top.gregtao.concerto.screen.PageScreen;
import top.gregtao.concerto.screen.PlaylistPreviewScreen;
import top.gregtao.concerto.screen.widget.ConcertoListWidget;
import top.gregtao.concerto.screen.widget.MetadataListWidget;
import java.util.concurrent.CompletableFuture;
public class NeteaseCloudUserScreen extends PageScreen {
private MetadataListWidget<NeteaseCloudPlaylist> playlistList;
private <T extends WithMetaData> MetadataListWidget<T> initWidget() {
return new MetadataListWidget<>(this.width, this.height - 55, 20, 18) {
@Override
public void onDoubleClicked(ConcertoListWidget<T>.Entry entry) {
MinecraftClient.getInstance().setScreen(new PlaylistPreviewScreen((Playlist) entry.item, NeteaseCloudUserScreen.this));
}
};
}
public NeteaseCloudUserScreen(Screen parent) {
super(Text.translatable("concerto.screen.user"), parent);
}
@Override
public void onPageTurned(int page) {
MusicPlayer.run(() -> {
if (NeteaseCloudApiClient.LOCAL_USER.updateLoginStatus()) {
this.playlistList.reset(NeteaseCloudApiClient.LOCAL_USER.getUserPlaylists(page), null);
}
});
}
private boolean loggedIn() {
return NeteaseCloudApiClient.LOCAL_USER.loggedIn;
}
@Override
protected void init() {
super.init();
if (!this.loggedIn()) {
MinecraftClient.getInstance().setScreen(new NeteaseCloudLoginScreens(null));
}
this.playlistList = this.initWidget();
this.onPageTurned(0);
this.addDrawableChild(this.playlistList);
this.addSelectableChild(this.playlistList);
this.addDrawableChild(ButtonWidget.builder(Text.translatable("concerto.screen.daily_recommendation"),
button -> CompletableFuture.supplyAsync(
() -> NeteaseCloudApiClient.INSTANCE.getDailyRecommendation()
).thenAccept(playlist -> MinecraftClient.getInstance().submitAndJoin(
() -> MinecraftClient.getInstance().setScreen(new PlaylistPreviewScreen(playlist, this)))
)).position(this.width / 2 + 10, this.height - 30).size(50, 20).build()
);
this.addDrawableChild(ButtonWidget.builder(Text.translatable("concerto.screen.play"), button -> {
ConcertoListWidget<NeteaseCloudPlaylist>.Entry entry = this.playlistList.getSelectedOrNull();
if (entry != null) {
MinecraftClient.getInstance().setScreen(new PlaylistPreviewScreen(entry.item, this));
}
}).position(this.width / 2 + 65, this.height - 30).size(50, 20).build());
this.addDrawableChild(ButtonWidget.builder(Text.translatable("concerto.screen.logout"), button -> {
if (this.loggedIn()) {
NeteaseCloudApiClient.LOCAL_USER.logout();
} else {
MinecraftClient.getInstance().setScreen(new NeteaseCloudLoginScreens(this));
}
}).position(this.width / 2 + 120, this.height - 30).size(50, 20).build());
}
@Override
public void render(DrawContext matrices, int mouseX, int mouseY, float delta) {
super.render(matrices, mouseX, mouseY, delta);
if (!this.loggedIn()) {
matrices.drawCenteredTextWithShadow(this.textRenderer, Text.translatable("concerto.screen.163.not_login"),
this.width / 2, this.height / 2, 0xffffffff);
}
}
}