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

Commit fafabfd

Browse files
committed
prevent spamming of buttons
- specifically on the friends screen
1 parent 2aca43a commit fafabfd

File tree

31 files changed

+168
-105
lines changed

31 files changed

+168
-105
lines changed

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ protected void init() {
133133
new TranslatableText("api.friends.remove"), button -> {
134134
UserListWidget.UserListEntry entry = this.widget.getSelected();
135135
if (entry != null) {
136-
FriendRequest.getInstance().removeFriend(entry.getUser());
137-
refresh();
136+
removeButton.active = false;
137+
FriendRequest.getInstance().removeFriend(entry.getUser()).thenRun(() -> client.execute(this::refresh));
138138
}
139139
}));
140140

@@ -162,25 +162,26 @@ private void refresh() {
162162
private void denyRequest() {
163163
UserListWidget.UserListEntry entry = widget.getSelected();
164164
if (entry != null) {
165-
FriendRequest.getInstance().denyFriendRequest(entry.getUser());
165+
denyButton.active = false;
166+
FriendRequest.getInstance().denyFriendRequest(entry.getUser()).thenRun(() -> client.execute(this::refresh));
166167
}
167-
refresh();
168168
}
169169

170170
private void acceptRequest() {
171171
UserListWidget.UserListEntry entry = widget.getSelected();
172172
if (entry != null) {
173-
FriendRequest.getInstance().acceptFriendRequest(entry.getUser());
173+
acceptButton.active = false;
174+
FriendRequest.getInstance().acceptFriendRequest(entry.getUser()).thenRun(() -> client.execute(this::refresh));
174175
}
175-
refresh();
176176
}
177177

178178
private void updateButtonActivationStates() {
179179
UserListWidget.UserListEntry entry = widget.getSelected();
180-
if (entry != null) {
180+
if (entry != null && (current == Tab.ALL || current == Tab.ONLINE)) {
181181
chatButton.active = removeButton.active = true;
182182
} else {
183-
chatButton.active = removeButton.active = false;
183+
chatButton.active = false;
184+
removeButton.active = current == Tab.BLOCKED;
184185
}
185186

186187
removeButton.visible = true;
@@ -208,8 +209,9 @@ private void updateButtonActivationStates() {
208209
public void openChat() {
209210
UserListWidget.UserListEntry entry = widget.getSelected();
210211
if (entry != null) {
212+
chatButton.active = false;
211213
ChannelRequest.getOrCreateDM(entry.getUser())
212-
.whenCompleteAsync((c, t) -> client.execute(() -> client.openScreen(new ChatScreen(this, c))));
214+
.thenAccept(c -> client.execute(() -> client.openScreen(new ChatScreen(this, c))));
213215
}
214216
}
215217

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,10 @@ public void init() {
5353
ScreenTexts.CANCEL, button -> client.openScreen(parent)));
5454
addButton(new ButtonWidget(width / 2 + 5, height - 50, 150, 20,
5555
ScreenTexts.DONE, button -> {
56-
consumer.accept(input.getText());
57-
client.openScreen(parent);
56+
if (!input.getText().isEmpty()) {
57+
consumer.accept(input.getText());
58+
client.openScreen(parent);
59+
}
5860
}));
5961
}
6062

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,14 @@ protected void init() {
5757

5858
acceptButton = addButton(new ButtonWidget(width / 2 - 75, height - 55 / 2 - 2 - 20, 73, 20, new TranslatableText("api.channels.invite.accept"), w -> {
5959
if (invites.getSelected() != null) {
60-
ChannelRequest.acceptChannelInvite(invites.getSelected().invite);
61-
init(client, width, height);
60+
w.active = false;
61+
ChannelRequest.acceptChannelInvite(invites.getSelected().invite).thenRun(() -> client.execute(() -> init(client, width, height)));
6262
}
6363
}));
6464
denyButton = addButton(new ButtonWidget(width / 2 + 2, height - 55 / 2 - 2 - 20, 73, 20, new TranslatableText("api.channels.invite.ignore"), w -> {
6565
if (invites.getSelected() != null) {
66-
ChannelRequest.ignoreChannelInvite(invites.getSelected().invite);
67-
init(client, width, height);
66+
w.active = false;
67+
ChannelRequest.ignoreChannelInvite(invites.getSelected().invite).thenRun(() -> client.execute(() -> init(client, width, height)));
6868
}
6969
}));
7070
addButton(new ButtonWidget(width / 2 - 75, height - 55 / 2 + 2, 150, 20, ScreenTexts.BACK, w -> onClose()));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public Persistence.Type getValue() {
149149
ChannelRequest.createChannel(nameField.getText(),
150150
Persistence.of(persistence.getValue(), count.get().get(), duration.get().get()),
151151
Arrays.stream(namesInput.getText().split(",")).filter(s -> !s.isEmpty()).map(UUIDHelper::ensureUuid).toArray(String[]::new))
152-
.thenRun(() -> client.submit(() -> client.openScreen(parent)));;
152+
.thenRun(() -> client.execute(() -> client.openScreen(parent)));;
153153
}));
154154
}
155155

1.16_combat-6/src/main/java/io/github/axolotlclient/modules/auth/AccountsListWidget.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,10 @@ public void render(MatrixStack matrices, int index, int y, int x, int entryWidth
103103
public boolean mouseClicked(double mouseX, double mouseY, int button) {
104104
this.screen.select(this);
105105
if (Util.getMeasuringTimeMs() - this.time < 250L && client.world == null) {
106-
Auth.getInstance().login(account);
106+
if (!getAccount().equals(Auth.getInstance().getCurrent())) {
107+
screen.select(null);
108+
Auth.getInstance().login(account);
109+
}
107110
}
108111

109112
this.time = Util.getMeasuringTimeMs();

1.16_combat-6/src/main/java/io/github/axolotlclient/modules/auth/AccountsScreen.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public void init() {
9999
this.deleteButton = this.addButton(new ButtonWidget(this.width / 2 - 50, this.height - 28, 100, 20, new TranslatableText("selectServer.delete"), button -> {
100100
AccountsListWidget.Entry entry = this.accountsListWidget.getSelected();
101101
if (entry != null) {
102+
button.active = false;
102103
Auth.getInstance().removeAccount(entry.getAccount());
103104
refresh();
104105
}
@@ -123,6 +124,7 @@ private void initMSAuth() {
123124
}
124125

125126
private void refreshAccount() {
127+
refreshButton.active = false;
126128
AccountsListWidget.Entry entry = accountsListWidget.getSelected();
127129
if (entry != null) {
128130
entry.getAccount().refresh(Auth.getInstance().getAuth(), () -> client.execute(() -> {
@@ -135,7 +137,8 @@ private void refreshAccount() {
135137
private void updateButtonActivationStates() {
136138
AccountsListWidget.Entry entry = accountsListWidget.getSelected();
137139
if (client.world == null && entry != null) {
138-
loginButton.active = deleteButton.active = refreshButton.active = true;
140+
loginButton.active = !entry.getAccount().equals(Auth.getInstance().getCurrent());
141+
deleteButton.active = refreshButton.active = true;
139142
} else {
140143
loginButton.active = deleteButton.active = refreshButton.active = false;
141144
}
@@ -146,6 +149,7 @@ private void refresh() {
146149
}
147150

148151
private void login() {
152+
loginButton.active = false;
149153
AccountsListWidget.Entry entry = accountsListWidget.getSelected();
150154
if (entry != null) {
151155
Auth.getInstance().login(entry.getAccount());

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ protected void init() {
129129
this.removeButton = this.addDrawableChild(ButtonWidget.builder(Text.translatable("api.friends.remove"), button -> {
130130
UserListWidget.UserListEntry entry = this.widget.getSelectedOrNull();
131131
if (entry != null) {
132-
FriendRequest.getInstance().removeFriend(entry.getUser());
133-
refresh();
132+
removeButton.active = false;
133+
FriendRequest.getInstance().removeFriend(entry.getUser()).thenRun(() -> client.submit(this::refresh));
134134
}
135135
}).positionAndSize(this.width / 2 - 50, this.height - 28, 100, 20).build());
136136

@@ -160,25 +160,26 @@ private void refresh() {
160160
private void denyRequest() {
161161
UserListWidget.UserListEntry entry = widget.getSelectedOrNull();
162162
if (entry != null) {
163-
FriendRequest.getInstance().denyFriendRequest(entry.getUser());
163+
denyButton.active = false;
164+
FriendRequest.getInstance().denyFriendRequest(entry.getUser()).thenRun(() -> client.submit(this::refresh));
164165
}
165-
refresh();
166166
}
167167

168168
private void acceptRequest() {
169169
UserListWidget.UserListEntry entry = widget.getSelectedOrNull();
170170
if (entry != null) {
171-
FriendRequest.getInstance().acceptFriendRequest(entry.getUser());
171+
acceptButton.active = false;
172+
FriendRequest.getInstance().acceptFriendRequest(entry.getUser()).thenRun(() -> client.submit(this::refresh));
172173
}
173-
refresh();
174174
}
175175

176176
private void updateButtonActivationStates() {
177177
UserListWidget.UserListEntry entry = widget.getSelectedOrNull();
178-
if (entry != null) {
178+
if (entry != null && (current == Tab.ALL || current == Tab.ONLINE)) {
179179
chatButton.active = removeButton.active = true;
180180
} else {
181-
chatButton.active = removeButton.active = false;
181+
chatButton.active = false;
182+
removeButton.active = current == Tab.BLOCKED;
182183
}
183184

184185
removeButton.visible = true;
@@ -206,8 +207,9 @@ private void updateButtonActivationStates() {
206207
public void openChat() {
207208
UserListWidget.UserListEntry entry = widget.getSelectedOrNull();
208209
if (entry != null) {
210+
chatButton.active = false;
209211
ChannelRequest.getOrCreateDM(entry.getUser())
210-
.whenCompleteAsync((c, t) -> client.execute(() -> client.setScreen(new ChatScreen(this, c))));
212+
.thenAccept(c -> client.execute(() -> client.setScreen(new ChatScreen(this, c))));
211213
}
212214
}
213215

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,10 @@ public void init() {
5252
addDrawableChild(new ButtonWidget.Builder(CommonTexts.CANCEL, button -> client.setScreen(parent))
5353
.positionAndSize(width / 2 - 155, height - 50, 150, 20).build());
5454
addDrawableChild(new ButtonWidget.Builder(CommonTexts.DONE, button -> {
55-
consumer.accept(input.getText());
56-
client.setScreen(parent);
55+
if (!input.getText().isEmpty()) {
56+
consumer.accept(input.getText());
57+
client.setScreen(parent);
58+
}
5759
}).positionAndSize(width / 2 + 5, height - 50, 150, 20).build());
5860
}
5961

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import net.minecraft.client.gui.screen.Screen;
3131
import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget;
3232
import net.minecraft.client.gui.widget.ButtonWidget;
33-
import net.minecraft.client.gui.widget.HeaderAndFooterWidget;
3433
import net.minecraft.client.gui.widget.TextWidget;
3534
import net.minecraft.text.CommonTexts;
3635
import net.minecraft.text.Style;
@@ -58,14 +57,14 @@ protected void init() {
5857

5958
acceptButton = addDrawableChild(ButtonWidget.builder(Text.translatable("api.channels.invite.accept"), w -> {
6059
if (invites.getSelectedOrNull() != null) {
61-
ChannelRequest.acceptChannelInvite(invites.getSelectedOrNull().invite);
62-
clearAndInit();
60+
w.active = false;
61+
ChannelRequest.acceptChannelInvite(invites.getSelectedOrNull().invite).thenRun(() -> client.submit(this::clearAndInit));
6362
}
6463
}).positionAndSize(width/2-75, height-55/2 - 2 - 20, 73, 20).build());
6564
denyButton = addDrawableChild(ButtonWidget.builder(Text.translatable("api.channels.invite.ignore"), w -> {
6665
if (invites.getSelectedOrNull() != null) {
67-
ChannelRequest.ignoreChannelInvite(invites.getSelectedOrNull().invite);
68-
clearAndInit();
66+
w.active = false;
67+
ChannelRequest.ignoreChannelInvite(invites.getSelectedOrNull().invite).thenRun(() -> client.submit(this::clearAndInit));
6968
}
7069
}).positionAndSize(width/2 + 2, height-55/2 - 2 - 20, 73, 20).build());
7170
addDrawableChild(ButtonWidget.builder(CommonTexts.BACK, w -> closeScreen()).positionAndSize(width/2-75, height-55/2 + 2, 150, 20).build());

1.20/src/main/java/io/github/axolotlclient/modules/auth/AccountsListWidget.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@ public void render(GuiGraphics graphics, int index, int y, int x, int entryWidth
104104
public boolean mouseClicked(double mouseX, double mouseY, int button) {
105105
this.screen.select(this);
106106
if (Util.getMeasuringTimeMs() - this.time < 250L && client.world == null) {
107-
Auth.getInstance().login(account);
107+
if (!getAccount().equals(Auth.getInstance().getCurrent())) {
108+
screen.select(null);
109+
Auth.getInstance().login(account);
110+
}
108111
}
109112

110113
this.time = Util.getMeasuringTimeMs();

0 commit comments

Comments
 (0)