Skip to content
This repository was archived by the owner on Nov 28, 2025. It is now read-only.

Commit a6fab5e

Browse files
committed
update privacy notice to also include ToS
tweak friends screen
1 parent 1881658 commit a6fab5e

File tree

24 files changed

+240
-117
lines changed

24 files changed

+240
-117
lines changed

1.16_combat-6/src/main/java/io/github/axolotlclient/api/FriendsScreen.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class FriendsScreen extends Screen {
4141
private UserListWidget widget;
4242

4343
private ButtonWidget chatButton, removeButton, onlineTab, allTab, pendingTab, blockedTab;
44-
private ButtonWidget denyButton, acceptButton;
44+
private ButtonWidget denyButton, acceptButton, unblockButton, cancelButton;
4545

4646
private Tab current = Tab.ONLINE;
4747

@@ -102,7 +102,7 @@ protected void init() {
102102
con.getLeft().stream().sorted((u1, u2) -> new AlphabeticalComparator().compare(u1.getName(), u2.getName()))
103103
.forEach(user -> widget.addEntry(new UserListWidget.UserListEntry(user, new TranslatableText("api.friends.pending.incoming"))));
104104
con.getRight().stream().sorted((u1, u2) -> new AlphabeticalComparator().compare(u1.getName(), u2.getName()))
105-
.forEach(user -> widget.addEntry(new UserListWidget.UserListEntry(user, new TranslatableText("api.friends.pending.outgoing"))));
105+
.forEach(user -> widget.addEntry(new UserListWidget.UserListEntry(user, new TranslatableText("api.friends.pending.outgoing")).outgoing()));
106106
});
107107
} else if (current == Tab.BLOCKED) {
108108
FriendRequest.getInstance().getBlocked().whenCompleteAsync((list, th) -> widget.setUsers(list.stream().sorted((u1, u2) ->
@@ -146,6 +146,16 @@ protected void init() {
146146
new TranslatableText("api.friends.request.accept"),
147147
button -> acceptRequest()));
148148

149+
unblockButton = addButton(new ButtonWidget(this.width / 2 - 50, this.height - 28, 100, 20, new TranslatableText("api.users.unblock"),
150+
b -> {
151+
b.active = false;
152+
FriendRequest.getInstance().unblockUser(widget.getSelected().getUser()).thenRun(() -> client.execute(this::refresh));
153+
}));
154+
cancelButton = addButton(new ButtonWidget(this.width / 2 - 50, this.height - 28, 100, 20, ScreenTexts.CANCEL, b -> {
155+
b.active = false;
156+
FriendRequest.getInstance().cancelFriendRequest(widget.getSelected().getUser()).thenRun(() -> client.execute(this::refresh));
157+
}));
158+
149159
this.addButton(chatButton = new ButtonWidget(this.width / 2 - 154, this.height - 28, 100, 20,
150160
new TranslatableText("api.friends.chat"), button -> openChat()));
151161

@@ -177,16 +187,12 @@ private void acceptRequest() {
177187

178188
private void updateButtonActivationStates() {
179189
UserListWidget.UserListEntry entry = widget.getSelected();
180-
if (entry != null && (current == Tab.ALL || current == Tab.ONLINE)) {
181-
chatButton.active = removeButton.active = true;
182-
} else {
183-
chatButton.active = false;
184-
removeButton.active = current == Tab.BLOCKED;
185-
}
190+
chatButton.active = entry != null && (current == Tab.ALL || current == Tab.ONLINE);
186191

187192
removeButton.visible = true;
193+
unblockButton.active = removeButton.active = entry != null;
188194
denyButton.visible = false;
189-
acceptButton.visible = false;
195+
acceptButton.visible = unblockButton.visible = cancelButton.visible = false;
190196
if (current == Tab.ONLINE) {
191197
onlineTab.active = false;
192198
allTab.active = pendingTab.active = blockedTab.active = true;
@@ -197,16 +203,26 @@ private void updateButtonActivationStates() {
197203
pendingTab.active = false;
198204
onlineTab.active = allTab.active = blockedTab.active = true;
199205
removeButton.visible = false;
200-
denyButton.visible = true;
201-
acceptButton.visible = true;
206+
207+
if (entry != null && entry.isOutgoingRequest()) {
208+
cancelButton.visible = true;
209+
} else {
210+
denyButton.visible = true;
211+
acceptButton.visible = true;
212+
}
202213
denyButton.active = acceptButton.active = entry != null;
203214
} else if (current == Tab.BLOCKED) {
204215
blockedTab.active = false;
205216
onlineTab.active = allTab.active = pendingTab.active = true;
217+
removeButton.visible = false;
218+
unblockButton.visible = true;
206219
}
207220
}
208221

209222
public void openChat() {
223+
if (!chatButton.active) {
224+
return;
225+
}
210226
UserListWidget.UserListEntry entry = widget.getSelected();
211227
if (entry != null) {
212228
chatButton.active = false;

1.16_combat-6/src/main/java/io/github/axolotlclient/api/PrivacyNoticeScreen.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
public class PrivacyNoticeScreen extends Screen {
3737

38-
private static final URI PRIVACY_POLICY_URL = URI.create(Constants.PRIVACY_POLICY);
38+
private static final URI TERMS_URI = URI.create(Constants.TERMS);
3939

4040
private final Screen parent;
4141
private final Consumer<Boolean> accepted;
@@ -85,7 +85,7 @@ private void addButtons(int y) {
8585
}));
8686
addButton(new ButtonWidget(width / 2 - 155, y, 100, 20,
8787
new TranslatableText("api.privacyNotice.openPolicy"), buttonWidget -> {
88-
OSUtil.getOS().open(PRIVACY_POLICY_URL);
88+
OSUtil.getOS().open(TERMS_URI);
8989
}));
9090
}
9191

1.16_combat-6/src/main/java/io/github/axolotlclient/api/UserListWidget.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ public static class UserListEntry extends AlwaysSelectedEntryListWidget.Entry<Us
7979
private Text note;
8080
private FriendsScreen screen;
8181

82+
@Getter
83+
private boolean outgoingRequest;
84+
8285
public UserListEntry(User user, MutableText note) {
8386
this(user);
8487
this.note = note.formatted(Formatting.ITALIC);
@@ -94,6 +97,11 @@ public UserListEntry init(FriendsScreen screen) {
9497
return this;
9598
}
9699

100+
public UserListEntry outgoing() {
101+
outgoingRequest = true;
102+
return this;
103+
}
104+
97105
@Override
98106
public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
99107
if (user.isSystem()) {
@@ -113,7 +121,7 @@ public void render(MatrixStack matrices, int index, int y, int x, int entryWidth
113121
}
114122

115123
if (note != null) {
116-
client.textRenderer.draw(matrices, note, x + entryWidth - client.textRenderer.getWidth(note) - 2, y + entryHeight - 10, 8421504);
124+
client.textRenderer.draw(matrices, note, x + entryWidth - client.textRenderer.getWidth(note) - 4, y + entryHeight - 10, 8421504);
117125
}
118126

119127
client.getTextureManager().bindTexture(Auth.getInstance().getSkinTexture(user.getUuid(), user.getName()));

1.16_combat-6/src/main/java/io/github/axolotlclient/api/chat/ChatUserListWidget.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,10 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
133133
}
134134
if (!FriendRequest.getInstance().isBlocked(user.getUuid())) {
135135
menu.entry(new TranslatableText("api.users.block"), buttonWidget ->
136-
FriendRequest.getInstance().blockUser(user.getUuid()));
136+
FriendRequest.getInstance().blockUser(user));
137137
} else {
138138
menu.entry(new TranslatableText("api.users.unblock"), buttonWidget ->
139-
FriendRequest.getInstance().unblockUser(user.getUuid()));
139+
FriendRequest.getInstance().unblockUser(user));
140140
}
141141
if (channel.getOwner().equals(API.getInstance().getSelf())) {
142142
menu.spacer().entry(new TranslatableText("api.channel.remove_user"), b -> ChannelRequest.removeUserFromChannel(channel, user));

1.20/src/main/java/io/github/axolotlclient/api/FriendsScreen.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class FriendsScreen extends Screen {
3939
private UserListWidget widget;
4040

4141
private ButtonWidget chatButton, removeButton, onlineTab, allTab, pendingTab, blockedTab;
42-
private ButtonWidget denyButton, acceptButton;
42+
private ButtonWidget denyButton, acceptButton, unblockButton, cancelButton;
4343

4444
private Tab current = Tab.ONLINE;
4545

@@ -99,7 +99,7 @@ protected void init() {
9999
con.getLeft().stream().sorted((u1, u2) -> new AlphabeticalComparator().compare(u1.getName(), u2.getName()))
100100
.forEach(user -> widget.addEntry(new UserListWidget.UserListEntry(user, Text.translatable("api.friends.pending.incoming"))));
101101
con.getRight().stream().sorted((u1, u2) -> new AlphabeticalComparator().compare(u1.getName(), u2.getName()))
102-
.forEach(user -> widget.addEntry(new UserListWidget.UserListEntry(user, Text.translatable("api.friends.pending.outgoing"))));
102+
.forEach(user -> widget.addEntry(new UserListWidget.UserListEntry(user, Text.translatable("api.friends.pending.outgoing")).outgoing()));
103103
});
104104
} else if (current == Tab.BLOCKED) {
105105
FriendRequest.getInstance().getBlocked().whenCompleteAsync((list, th) -> widget.setUsers(list.stream().sorted((u1, u2) ->
@@ -140,6 +140,16 @@ protected void init() {
140140
addDrawableChild(acceptButton = new ButtonWidget.Builder(Text.translatable("api.friends.request.accept"),
141141
button -> acceptRequest()).positionAndSize(this.width / 2 + 2, this.height - 28, 48, 20).build());
142142

143+
unblockButton = addDrawableChild(ButtonWidget.builder(Text.translatable("api.users.unblock"),
144+
b -> {
145+
b.active = false;
146+
FriendRequest.getInstance().unblockUser(widget.getSelectedOrNull().getUser()).thenRun(() -> client.execute(this::refresh));
147+
}).positionAndSize(this.width / 2 - 50, this.height - 28, 100, 20).build());
148+
cancelButton = addDrawableChild(ButtonWidget.builder(CommonTexts.CANCEL, b -> {
149+
b.active = false;
150+
FriendRequest.getInstance().cancelFriendRequest(widget.getSelectedOrNull().getUser()).thenRun(() -> client.execute(this::refresh));
151+
}).positionAndSize(this.width / 2 - 50, this.height - 28, 100, 20).build());
152+
143153
this.addDrawableChild(chatButton = ButtonWidget.builder(Text.translatable("api.friends.chat"), button -> openChat())
144154
.positionAndSize(this.width / 2 - 154, this.height - 28, 100, 20)
145155
.build()
@@ -175,16 +185,12 @@ private void acceptRequest() {
175185

176186
private void updateButtonActivationStates() {
177187
UserListWidget.UserListEntry entry = widget.getSelectedOrNull();
178-
if (entry != null && (current == Tab.ALL || current == Tab.ONLINE)) {
179-
chatButton.active = removeButton.active = true;
180-
} else {
181-
chatButton.active = false;
182-
removeButton.active = current == Tab.BLOCKED;
183-
}
188+
chatButton.active = entry != null && (current == Tab.ALL || current == Tab.ONLINE);
184189

185190
removeButton.visible = true;
191+
unblockButton.active = removeButton.active = entry != null;
186192
denyButton.visible = false;
187-
acceptButton.visible = false;
193+
acceptButton.visible = unblockButton.visible = cancelButton.visible = false;
188194
if (current == Tab.ONLINE) {
189195
onlineTab.active = false;
190196
allTab.active = pendingTab.active = blockedTab.active = true;
@@ -195,16 +201,26 @@ private void updateButtonActivationStates() {
195201
pendingTab.active = false;
196202
onlineTab.active = allTab.active = blockedTab.active = true;
197203
removeButton.visible = false;
198-
denyButton.visible = true;
199-
acceptButton.visible = true;
204+
205+
if (entry != null && entry.isOutgoingRequest()) {
206+
cancelButton.visible = true;
207+
} else {
208+
denyButton.visible = true;
209+
acceptButton.visible = true;
210+
}
200211
denyButton.active = acceptButton.active = entry != null;
201212
} else if (current == Tab.BLOCKED) {
202213
blockedTab.active = false;
203214
onlineTab.active = allTab.active = pendingTab.active = true;
215+
removeButton.visible = false;
216+
unblockButton.visible = true;
204217
}
205218
}
206219

207220
public void openChat() {
221+
if (!chatButton.active) {
222+
return;
223+
}
208224
UserListWidget.UserListEntry entry = widget.getSelectedOrNull();
209225
if (entry != null) {
210226
chatButton.active = false;

1.20/src/main/java/io/github/axolotlclient/api/PrivacyNoticeScreen.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
public class PrivacyNoticeScreen extends Screen {
3838

39-
private static final URI PRIVACY_POLICY_URL = URI.create(Constants.PRIVACY_POLICY);
39+
private static final URI TERMS_URI = URI.create(Constants.TERMS);
4040

4141
private final Screen parent;
4242
private final Consumer<Boolean> accepted;
@@ -84,7 +84,7 @@ private void addButtons(int y) {
8484
accepted.accept(false);
8585
}).positionAndSize(width / 2 - 50 + 105, y, 100, 20).build());
8686
addDrawableChild(ButtonWidget.builder(Text.translatable("api.privacyNotice.openPolicy"), buttonWidget -> {
87-
OSUtil.getOS().open(PRIVACY_POLICY_URL);
87+
OSUtil.getOS().open(TERMS_URI);
8888
}).positionAndSize(width / 2 - 50 - 105, y, 100, 20).build());
8989
}
9090

1.20/src/main/java/io/github/axolotlclient/api/UserListWidget.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ public static class UserListEntry extends AlwaysSelectedEntryListWidget.Entry<Us
8181
private Text note;
8282
private FriendsScreen screen;
8383

84+
@Getter
85+
private boolean outgoingRequest;
86+
8487
public UserListEntry(User user, MutableText note) {
8588
this(user);
8689
this.note = note.formatted(Formatting.ITALIC);
@@ -96,6 +99,10 @@ public UserListEntry init(FriendsScreen screen) {
9699
return this;
97100
}
98101

102+
public UserListEntry outgoing() {
103+
outgoingRequest = true;
104+
return this;
105+
}
99106

100107
@Override
101108
public Text getNarration() {
@@ -121,7 +128,7 @@ public void render(GuiGraphics graphics, int index, int y, int x, int entryWidth
121128
}
122129

123130
if (note != null) {
124-
graphics.drawText(client.textRenderer, note, x + entryWidth - client.textRenderer.getWidth(note) - 2, y + entryHeight - 10, 8421504, false);
131+
graphics.drawText(client.textRenderer, note, x + entryWidth - client.textRenderer.getWidth(note) - 4, y + entryHeight - 10, 8421504, false);
125132
}
126133

127134
Identifier texture = Auth.getInstance().getSkinTexture(user.getUuid(), user.getName());

1.20/src/main/java/io/github/axolotlclient/api/chat/ChatUserListWidget.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,10 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
156156
}
157157
if (!FriendRequest.getInstance().isBlocked(user.getUuid())) {
158158
menu.entry(Text.translatable("api.users.block"), buttonWidget ->
159-
FriendRequest.getInstance().blockUser(user.getUuid()));
159+
FriendRequest.getInstance().blockUser(user));
160160
} else {
161161
menu.entry(Text.translatable("api.users.unblock"), buttonWidget ->
162-
FriendRequest.getInstance().unblockUser(user.getUuid()));
162+
FriendRequest.getInstance().unblockUser(user));
163163
}
164164
if (channel.getOwner().equals(API.getInstance().getSelf())) {
165165
menu.spacer().entry(Text.translatable("api.channel.remove_user"), b -> ChannelRequest.removeUserFromChannel(channel, user));

0 commit comments

Comments
 (0)