/
TeamPlayersScreen.java
114 lines (101 loc) · 4.83 KB
/
TeamPlayersScreen.java
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package de.melanx.skyguis.client.screen.edit;
import com.mojang.authlib.GameProfile;
import de.melanx.skyblockbuilder.data.Team;
import de.melanx.skyguis.SkyGUIs;
import de.melanx.skyguis.client.screen.BaseScreen;
import de.melanx.skyguis.client.screen.base.LoadingResultHandler;
import de.melanx.skyguis.client.screen.base.list.PlayerListScreen;
import de.melanx.skyguis.client.screen.info.AllTeamsScreen;
import de.melanx.skyguis.client.screen.notification.InformationScreen;
import de.melanx.skyguis.client.screen.notification.YouSureScreen;
import de.melanx.skyguis.client.widget.sizable.SizeableCheckbox;
import de.melanx.skyguis.util.ComponentBuilder;
import de.melanx.skyguis.util.LoadingResult;
import de.melanx.skyguis.util.TextHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.Checkbox;
import net.minecraft.network.chat.Component;
import javax.annotation.Nonnull;
import java.awt.Color;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
public class TeamPlayersScreen extends PlayerListScreen implements LoadingResultHandler {
private final Team team;
private final BaseScreen prev;
private Button kickButton;
private Checkbox selectAll;
private int selectedAmount = 0;
private Runnable onSuccess;
public TeamPlayersScreen(Team team, BaseScreen prev) {
super(Component.literal(team.getName()), team.getPlayers(), 200, 230,
new PlayerListScreen.ScrollbarInfo(180, 10, 210),
new PlayerListScreen.RenderAreaInfo(10, 50, 160));
this.team = team;
this.prev = prev;
}
@Override
protected void init() {
this.kickButton = this.addRenderableWidget(Button.builder(ComponentBuilder.text("kick"), (button -> {
Set<UUID> removalIds = this.getSelectedValues().stream().map(GameProfile::getId).collect(Collectors.toSet());
Minecraft.getInstance().pushGuiLayer(new YouSureScreen(this, ComponentBuilder.text("you_sure_kick"), () -> {
SkyGUIs.getNetwork().handleKickPlayers(this.team.getName(), removalIds);
this.onSuccess = () -> {
//noinspection DataFlowIssue
if (removalIds.contains(Minecraft.getInstance().player.getGameProfile().getId())) {
Minecraft.getInstance().setScreen(new AllTeamsScreen());
} else {
Minecraft.getInstance().setScreen(new TeamPlayersScreen(this.team, this.prev));
}
};
}));
}))
.bounds(this.x(10), this.y(200), 40, 20)
.build());
this.addRenderableWidget(Button.builder(PREV_SCREEN_COMPONENT, button -> Minecraft.getInstance().setScreen(this.prev))
.bounds(this.x(57), this.y(200), 115, 20)
.build());
this.selectAll = this.addRenderableWidget(new SizeableCheckbox(this.x(9), this.y(32), 14, false, this.allSelected() ? UNSELECT_ALL : SELECT_ALL) {
@Override
public void onPress() {
super.onPress();
if (this.selected) {
TeamPlayersScreen.this.selectAll();
} else {
TeamPlayersScreen.this.unselectAll();
}
}
});
super.init();
this.updateButtons();
}
@Override
public void render_(@Nonnull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) {
super.render_(guiGraphics, mouseX, mouseY, partialTick);
guiGraphics.drawString(this.font, ComponentBuilder.text("selected_amount", this.selectedAmount), this.x(28), this.y(35), Color.DARK_GRAY.getRGB(), false);
}
public void updateButtons() {
Set<UUID> selectedIds = this.getSelectedValues().stream().map(GameProfile::getId).collect(Collectors.toSet());
this.kickButton.active = selectedIds.size() > 0;
this.selectAll.selected = this.allSelected();
this.selectedAmount = selectedIds.size();
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
boolean ret = super.mouseClicked(mouseX, mouseY, button);
this.updateButtons();
return ret;
}
@Override
public void onLoadingResult(LoadingResult result) {
switch (result.status()) {
case SUCCESS -> this.onSuccess.run();
case FAIL -> {
Minecraft minecraft = Minecraft.getInstance();
minecraft.pushGuiLayer(new InformationScreen(result.reason(), TextHelper.stringLength(result.reason()) + 30, 100, minecraft::popGuiLayer));
}
}
}
}