From 09677853c4307a38d83fe409572a2052a0c82608 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Thu, 14 Dec 2023 16:25:16 +0000 Subject: [PATCH] brainwaves --- .../proxy/connection/client/ConnectedPlayer.java | 11 +++++++++++ .../player/LegacyResourcePackManager.java | 11 +++++++++++ .../player/ModernResourcePackManager.java | 11 +++++++++++ .../connection/player/ResourcePackManager.java | 11 +++++++++++ .../player/VelocityResourcePackInfo.java | 16 +++++----------- 5 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 proxy/src/main/java/com/velocitypowered/proxy/connection/player/LegacyResourcePackManager.java create mode 100644 proxy/src/main/java/com/velocitypowered/proxy/connection/player/ModernResourcePackManager.java create mode 100644 proxy/src/main/java/com/velocitypowered/proxy/connection/player/ResourcePackManager.java diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java index 5bd49bd9e..d87147da3 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java @@ -53,6 +53,9 @@ import com.velocitypowered.proxy.VelocityServer; import com.velocitypowered.proxy.connection.MinecraftConnection; import com.velocitypowered.proxy.connection.MinecraftConnectionAssociation; import com.velocitypowered.proxy.connection.backend.VelocityServerConnection; +import com.velocitypowered.proxy.connection.player.LegacyResourcePackManager; +import com.velocitypowered.proxy.connection.player.ModernResourcePackManager; +import com.velocitypowered.proxy.connection.player.ResourcePackManager; import com.velocitypowered.proxy.connection.player.VelocityResourcePackInfo; import com.velocitypowered.proxy.connection.util.ConnectionMessages; import com.velocitypowered.proxy.connection.util.ConnectionRequestResults.Impl; @@ -150,6 +153,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player, private ClientConnectionPhase connectionPhase; private final CompletableFuture teardownFuture = new CompletableFuture<>(); private @MonotonicNonNull List serversToTry = null; + private ResourcePackManager resourcePackManager; private @MonotonicNonNull Boolean previousResourceResponse; private final Queue outstandingResourcePacks = new ArrayDeque<>(); private @Nullable ResourcePackInfo pendingResourcePack; @@ -186,6 +190,13 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player, } else { this.tabList = new VelocityTabListLegacy(this, server); } + + if (connection.getProtocolVersion().getProtocol() >= ProtocolVersion.MINECRAFT_1_20_2.getProtocol()) { + this.resourcePackManager = new ModernResourcePackManager(this); + } else { + this.resourcePackManager = new LegacyResourcePackManager(this); + } + this.playerKey = playerKey; this.chatQueue = new ChatQueue(this); this.chatBuilderFactory = new ChatBuilderFactory(this.getProtocolVersion()); diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/player/LegacyResourcePackManager.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/player/LegacyResourcePackManager.java new file mode 100644 index 000000000..7ad928cf3 --- /dev/null +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/player/LegacyResourcePackManager.java @@ -0,0 +1,11 @@ +package com.velocitypowered.proxy.connection.player; + +import com.velocitypowered.proxy.connection.client.ConnectedPlayer; + +public class LegacyResourcePackManager implements ResourcePackManager { + private final ConnectedPlayer connectedPlayer; + + public LegacyResourcePackManager(ConnectedPlayer connectedPlayer) { + this.connectedPlayer = connectedPlayer; + } +} diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/player/ModernResourcePackManager.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/player/ModernResourcePackManager.java new file mode 100644 index 000000000..49ac7590b --- /dev/null +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/player/ModernResourcePackManager.java @@ -0,0 +1,11 @@ +package com.velocitypowered.proxy.connection.player; + +import com.velocitypowered.proxy.connection.client.ConnectedPlayer; + +public class ModernResourcePackManager implements ResourcePackManager { + private final ConnectedPlayer connectedPlayer; + + public ModernResourcePackManager(ConnectedPlayer connectedPlayer) { + this.connectedPlayer = connectedPlayer; + } +} diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/player/ResourcePackManager.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/player/ResourcePackManager.java new file mode 100644 index 000000000..4563b79b2 --- /dev/null +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/player/ResourcePackManager.java @@ -0,0 +1,11 @@ +package com.velocitypowered.proxy.connection.player; + +import com.velocitypowered.proxy.protocol.packet.ResourcePackRequest; +import com.velocitypowered.proxy.protocol.packet.ResourcePackResponse; + +public interface ResourcePackManager { + + void processResponse(ResourcePackResponse response); + + void sendRequest(ResourcePackRequest request); +} diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/player/VelocityResourcePackInfo.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/player/VelocityResourcePackInfo.java index 26a46c1b4..ba205efd6 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/player/VelocityResourcePackInfo.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/player/VelocityResourcePackInfo.java @@ -31,7 +31,7 @@ public final class VelocityResourcePackInfo implements ResourcePackInfo { private final UUID id; private final String url; - private final @Nullable byte[] hash; + private final byte @Nullable [] hash; private final boolean shouldForce; private final @Nullable Component prompt; // 1.17+ only private final Origin origin; @@ -89,19 +89,13 @@ public final class VelocityResourcePackInfo implements ResourcePackInfo { @Override public Builder asBuilder() { - return new BuilderImpl(url) - .setId(id) - .setShouldForce(shouldForce) - .setHash(hash) + return new BuilderImpl(url).setId(id).setShouldForce(shouldForce).setHash(hash) .setPrompt(prompt); } @Override public Builder asBuilder(String newUrl) { - return new BuilderImpl(newUrl) - .setId(id) - .setShouldForce(shouldForce) - .setHash(hash) + return new BuilderImpl(newUrl).setId(id).setShouldForce(shouldForce).setHash(hash) .setPrompt(prompt); } @@ -113,7 +107,7 @@ public final class VelocityResourcePackInfo implements ResourcePackInfo { private UUID id; private final String url; private boolean shouldForce; - private @Nullable byte[] hash; + private byte @Nullable [] hash; private @Nullable Component prompt; private Origin origin = Origin.PLUGIN_ON_PROXY; @@ -135,7 +129,7 @@ public final class VelocityResourcePackInfo implements ResourcePackInfo { } @Override - public BuilderImpl setHash(@Nullable byte[] hash) { + public BuilderImpl setHash(byte @Nullable [] hash) { if (hash != null) { Preconditions.checkArgument(hash.length == 20, "Hash length is not 20"); this.hash = hash.clone(); // Thanks spotbugs, very helpful.