Skip to content

Commit 7ec4657

Browse files
committed
feat: no more edging + fix resource pack loading
1 parent eb8a351 commit 7ec4657

4 files changed

Lines changed: 78 additions & 10 deletions

File tree

src/main/java/dev/emortal/velocity/lang/ChatMessages.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -463,10 +463,7 @@ public interface ChatMessages {
463463
Args0 ERROR_NO_OUTGOING_FRIEND_REQUESTS = () -> lightPurple("You have no outgoing friend requests");
464464

465465
Args0 RESOURCE_PACK_DOWNLOAD = () -> Component.text("We love you");
466-
Args0 RESOURCE_PACK_DECLINED = () -> Component.text().color(NamedTextColor.GRAY)
467-
.append(Component.text("Using the resource pack is heavily recommended. It isn't big and only has to be downloaded once.")).appendNewline()
468-
.append(Component.text("If the dialog is annoying, you can enable 'Server Resource Packs' when adding the server and the prompt will disappear."))
469-
.build();
466+
Args0 RESOURCE_PACK_DECLINED = () -> Component.text("Using the resource pack is required.", NamedTextColor.RED);
470467
Args0 RESOURCE_PACK_FAILED = () -> Component.text().color(NamedTextColor.RED)
471468
.append(Component.text("The resource pack download failed.")).appendNewline()
472469
.append(Component.text("If the issue persists, contact a staff member"))

src/main/java/dev/emortal/velocity/misc/listener/CoreListenersModule.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ public boolean onLoad() {
2222
EmortalScheduler scheduler = super.adapters().scheduler();
2323

2424
// transfer cookie verification
25-
eventManager.register(new LoginCookieVerification());
25+
// eventManager.register(new LoginCookieVerification()); no more edging
26+
27+
// server list ping
28+
eventManager.register(new ServerPingListener());
2629

2730
// tablist
2831
PlayerTrackerService playerTracker = GrpcStubCollection.getPlayerTrackerService().orElse(null);

src/main/java/dev/emortal/velocity/misc/listener/ResourcePackSender.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.emortal.velocity.misc.listener;
22

3+
import com.velocitypowered.api.event.Continuation;
34
import com.velocitypowered.api.event.Subscribe;
45
import com.velocitypowered.api.event.connection.DisconnectEvent;
56
import com.velocitypowered.api.event.player.PlayerResourcePackStatusEvent;
@@ -21,6 +22,7 @@
2122
import java.util.HashSet;
2223
import java.util.Set;
2324
import java.util.UUID;
25+
import java.util.concurrent.ConcurrentHashMap;
2426
import java.util.concurrent.TimeUnit;
2527

2628
final class ResourcePackSender {
@@ -31,6 +33,7 @@ final class ResourcePackSender {
3133
private ResourcePackInfo resourcePackInfo;
3234

3335
private final Set<UUID> rpAcceptedPlayers = new HashSet<>();
36+
private final ConcurrentHashMap<UUID, Continuation> pendingPack = new ConcurrentHashMap<>();
3437

3538
ResourcePackSender(@NotNull ResourcePackProvider resourcePackProvider, @NotNull EmortalScheduler scheduler) {
3639
this.updateResourcePackInfo(resourcePackProvider);
@@ -76,21 +79,35 @@ private byte[] fetchSha1() throws NoSuchAlgorithmException, IOException {
7679
}
7780

7881
@Subscribe
79-
void onPlayerConfiguration(PlayerConfigurationEvent event) {
80-
if (this.rpAcceptedPlayers.contains(event.player().getUniqueId())) return; // Don't send the resource pack if the player has already got it
82+
void onPlayerConfiguration(PlayerConfigurationEvent event, Continuation continuation) {
83+
if (this.rpAcceptedPlayers.contains(event.player().getUniqueId())) {
84+
continuation.resume();
85+
return; // Don't send the resource pack if the player has already got it
86+
}
8187

8288
event.player().sendResourcePackOffer(this.resourcePackInfo);
89+
pendingPack.put(event.player().getUniqueId(), continuation);
8390
}
8491

8592
@Subscribe
8693
void onPlayerResourceStatus(@NotNull PlayerResourcePackStatusEvent event) {
8794
LOGGER.info("Player {} resource pack status {}", event.getPlayer().getUsername(), event.getStatus());
8895
Player player = event.getPlayer();
8996
switch (event.getStatus()) {
90-
case SUCCESSFUL -> this.rpAcceptedPlayers.add(player.getUniqueId());
91-
case DECLINED -> ChatMessages.RESOURCE_PACK_DECLINED.send(player);
92-
case FAILED_DOWNLOAD -> ChatMessages.RESOURCE_PACK_FAILED.send(player);
97+
case ACCEPTED -> {
98+
this.rpAcceptedPlayers.add(event.getPlayer().getUniqueId());
99+
this.pendingPack.get(player.getUniqueId()).resume();
100+
}
101+
case DECLINED -> {
102+
player.disconnect(ChatMessages.RESOURCE_PACK_DECLINED.get());
103+
this.pendingPack.get(player.getUniqueId()).resume();
104+
}
105+
case FAILED_DOWNLOAD, INVALID_URL, DISCARDED -> {
106+
ChatMessages.RESOURCE_PACK_FAILED.send(player);
107+
this.pendingPack.get(player.getUniqueId()).resume();
108+
}
93109
}
110+
this.pendingPack.remove(player.getUniqueId());
94111
}
95112

96113
@Subscribe
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package dev.emortal.velocity.misc.listener;
2+
3+
import com.velocitypowered.api.event.Subscribe;
4+
import com.velocitypowered.api.event.proxy.ProxyPingEvent;
5+
import com.velocitypowered.api.proxy.server.ServerPing;
6+
import dev.emortal.velocity.lang.ChatMessages;
7+
import net.kyori.adventure.text.Component;
8+
import net.kyori.adventure.text.format.NamedTextColor;
9+
import org.jetbrains.annotations.NotNull;
10+
11+
import java.util.concurrent.ThreadLocalRandom;
12+
13+
public class ServerPingListener {
14+
15+
private static final String[] MOTDS = new String[] {
16+
"coolest server to ever exist",
17+
"better than hypixel",
18+
"you should join",
19+
"stop scrolling, click here!",
20+
"Lunar client users: Beware!",
21+
"using 3 server softwares!",
22+
"gradient lover",
23+
"emortal is watching",
24+
"emortal says 2 + 2 = 5",
25+
"Chuck Norris joined and said it was pretty good",
26+
"Chuck Norris doesn't join, the server joins him",
27+
"private lobbies when?",
28+
"I heard SunriseMC was releasing soon...",
29+
"This server is certified aladeen!",
30+
};
31+
32+
@Subscribe
33+
void onServerPing(@NotNull ProxyPingEvent event) {
34+
ServerPing ping = event.getPing().asBuilder().description(createMessage()).build();
35+
event.setPing(ping);
36+
}
37+
38+
private @NotNull Component createMessage() {
39+
String randomMessage = this.selectRandomMessage();
40+
return Component.text()
41+
.append(ChatMessages.PING_MOTD.get())
42+
.appendNewline()
43+
.append(Component.text(randomMessage, NamedTextColor.YELLOW))
44+
.build();
45+
}
46+
47+
private @NotNull String selectRandomMessage() {
48+
return MOTDS[ThreadLocalRandom.current().nextInt(MOTDS.length)];
49+
}
50+
51+
}

0 commit comments

Comments
 (0)