3
0
Mirror von https://github.com/PaperMC/Velocity.git synchronisiert 2024-12-24 15:20:35 +01:00

Fixed duplicate sending of resource packs responses to backend server (#1249)

Also fixes the sending of SUCCESSFUL responses to the backend server that will apply a resource pack in case Velocity has already applied one or more resource packs to the player
Dieser Commit ist enthalten in:
Adrian 2024-02-22 12:48:36 -05:00 committet von GitHub
Ursprung fc3bc1f3fe
Commit 7ca0689989
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: B5690EEEBB952194
3 geänderte Dateien mit 19 neuen und 8 gelöschten Zeilen

Datei anzeigen

@ -95,9 +95,6 @@ public class ClientConfigSessionHandler implements MinecraftSessionHandler {
@Override
public boolean handle(ResourcePackResponsePacket packet) {
if (player.getConnectionInFlight() != null) {
player.getConnectionInFlight().ensureConnected().write(packet);
}
return player.resourcePackHandler().onResourcePackResponse(
new ResourcePackResponseBundle(packet.getId(),
packet.getHash(),

Datei anzeigen

@ -146,10 +146,20 @@ public final class ModernResourcePackHandler extends ResourcePackHandler {
}
// The resource pack has been applied correctly.
case SUCCESSFUL -> {
pendingResourcePacks.remove(uuid);
if (queued != null) {
appliedResourcePacks.put(uuid, queued);
} else {
// When transitioning to another server that has a resource pack to apply,
// if one or more resource packs have already been applied from Velocity,
// the player sends more than 1 SUCCESSFUL response to the backend server,
// which results in the server receiving more resource pack responses
// than the server has sent requests to the player
final ResourcePackInfo appliedPack = appliedResourcePacks.get(uuid);
if (appliedPack != null) {
return handleResponseResult(appliedPack, bundle);
}
}
pendingResourcePacks.remove(uuid);
}
// An error occurred while trying to download the resource pack to the client,
// so the resource pack cannot be applied.

Datei anzeigen

@ -20,6 +20,7 @@ package com.velocitypowered.proxy.connection.player.resourcepack;
import com.velocitypowered.api.network.ProtocolVersion;
import com.velocitypowered.api.proxy.player.ResourcePackInfo;
import com.velocitypowered.proxy.VelocityServer;
import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
import com.velocitypowered.proxy.connection.player.VelocityResourcePackInfo;
import com.velocitypowered.proxy.protocol.packet.ResourcePackRequestPacket;
@ -147,12 +148,15 @@ public abstract sealed class ResourcePackHandler
final @Nullable ResourcePackInfo queued,
final @NotNull ResourcePackResponseBundle bundle
) {
// If Velocity, through a plugin, has sent a resource pack to the client,
// there is no need to report the status of the response to the server
// since it has no information that a resource pack has been sent
final boolean handled = queued != null
&& queued.getOriginalOrigin() != ResourcePackInfo.Origin.DOWNSTREAM_SERVER;
&& queued.getOriginalOrigin() == ResourcePackInfo.Origin.PLUGIN_ON_PROXY;
if (!handled) {
if (player.getConnectionInFlight() != null
&& player.getConnectionInFlight().getConnection() != null) {
player.getConnectionInFlight().getConnection().write(new ResourcePackResponsePacket(
final VelocityServerConnection connectionInFlight = player.getConnectionInFlight();
if (connectionInFlight != null && connectionInFlight.getConnection() != null) {
connectionInFlight.getConnection().write(new ResourcePackResponsePacket(
bundle.uuid(), bundle.hash(), bundle.status()));
}
}