Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-20 15:00:11 +01:00
remove debug, ensure we fully check failed packs, merge master
Dieser Commit ist enthalten in:
Ursprung
0ac91ebc25
Commit
626189fa25
@ -88,10 +88,6 @@ public final class GameProtocol {
|
|||||||
return session.getUpstream().getProtocolVersion() < Bedrock_v630.CODEC.getProtocolVersion();
|
return session.getUpstream().getProtocolVersion() < Bedrock_v630.CODEC.getProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPre1_20_30(GeyserSession session) {
|
|
||||||
return session.getUpstream().getProtocolVersion() < Bedrock_v618.CODEC.getProtocolVersion();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the {@link PacketCodec} for Minecraft: Java Edition.
|
* Gets the {@link PacketCodec} for Minecraft: Java Edition.
|
||||||
*
|
*
|
||||||
|
@ -44,13 +44,13 @@ import org.geysermc.geyser.event.type.SessionLoadResourcePacksEventImpl;
|
|||||||
import org.geysermc.geyser.pack.GeyserResourcePack;
|
import org.geysermc.geyser.pack.GeyserResourcePack;
|
||||||
import org.geysermc.geyser.registry.BlockRegistries;
|
import org.geysermc.geyser.registry.BlockRegistries;
|
||||||
import org.geysermc.geyser.registry.Registries;
|
import org.geysermc.geyser.registry.Registries;
|
||||||
|
import org.geysermc.geyser.registry.loader.ResourcePackLoader;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.geyser.session.PendingMicrosoftAuthentication;
|
import org.geysermc.geyser.session.PendingMicrosoftAuthentication;
|
||||||
import org.geysermc.geyser.text.GeyserLocale;
|
import org.geysermc.geyser.text.GeyserLocale;
|
||||||
import org.geysermc.geyser.util.LoginEncryptionUtils;
|
import org.geysermc.geyser.util.LoginEncryptionUtils;
|
||||||
import org.geysermc.geyser.util.MathUtils;
|
import org.geysermc.geyser.util.MathUtils;
|
||||||
import org.geysermc.geyser.util.VersionCheckUtils;
|
import org.geysermc.geyser.util.VersionCheckUtils;
|
||||||
import org.geysermc.geyser.util.WebUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
@ -61,7 +61,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
|||||||
|
|
||||||
private boolean networkSettingsRequested = false;
|
private boolean networkSettingsRequested = false;
|
||||||
private final Deque<String> packsToSent = new ArrayDeque<>();
|
private final Deque<String> packsToSent = new ArrayDeque<>();
|
||||||
private final List<UUID> brokenResourcePacks = new ArrayList<>();
|
private final Set<UUID> brokenResourcePacks = new HashSet<>();
|
||||||
|
|
||||||
private SessionLoadResourcePacksEventImpl resourcePackLoadEvent;
|
private SessionLoadResourcePacksEventImpl resourcePackLoadEvent;
|
||||||
|
|
||||||
@ -186,7 +186,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks());
|
resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks());
|
||||||
GeyserImpl.getInstance().getLogger().info(resourcePacksInfo.toString());
|
|
||||||
session.sendUpstreamPacket(resourcePacksInfo);
|
session.sendUpstreamPacket(resourcePacksInfo);
|
||||||
|
|
||||||
GeyserLocale.loadGeyserLocale(session.locale());
|
GeyserLocale.loadGeyserLocale(session.locale());
|
||||||
@ -280,16 +279,15 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
|||||||
ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(packet.getPackId().toString());
|
ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(packet.getPackId().toString());
|
||||||
PackCodec codec = pack.codec();
|
PackCodec codec = pack.codec();
|
||||||
|
|
||||||
// Check for packs that the client should normally download on its own. If the client cannot find the pack, we provide it instead.
|
// If a remote pack ends up here, that usually implies that a platform was not able to download the pack
|
||||||
if (codec instanceof UrlPackCodec urlPackCodec) {
|
if (codec instanceof UrlPackCodec urlPackCodec) {
|
||||||
if (!GameProtocol.isPre1_20_30(this.session)) {
|
// Ensure we don't a. spam console, and b. spam download/check requests
|
||||||
// Ensure we don't a. spam console, and b. spam download/check requests
|
if (!brokenResourcePacks.contains(packet.getPackId())) {
|
||||||
if (!brokenResourcePacks.contains(packet.getPackId())) {
|
brokenResourcePacks.add(packet.getPackId());
|
||||||
brokenResourcePacks.add(packet.getPackId());
|
GeyserImpl.getInstance().getLogger().warning("Received a request for a remote pack that the client should have already downloaded!" +
|
||||||
GeyserImpl.getInstance().getLogger().warning("Received a request for a remote pack that the client should have already downloaded!" +
|
"Is the pack at the URL " + urlPackCodec.url() + " still available?");
|
||||||
"Is the pack at the URL " + urlPackCodec.url() + " still available?");
|
// not actually interested in using the download, but this does all the checks we need
|
||||||
WebUtils.checkUrlAndDownloadRemotePack(urlPackCodec.url());
|
ResourcePackLoader.downloadPack(urlPackCodec.url());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,6 +100,8 @@ public class ResourcePackLoader implements RegistryLoader<Path, Map<String, Reso
|
|||||||
resourcePacks.add(skullResourcePack);
|
resourcePacks.add(skullResourcePack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
GeyserLoadResourcePacksEvent event = new GeyserLoadResourcePacksEvent(resourcePacks);
|
GeyserLoadResourcePacksEvent event = new GeyserLoadResourcePacksEvent(resourcePacks);
|
||||||
GeyserImpl.getInstance().eventBus().fire(event);
|
GeyserImpl.getInstance().eventBus().fire(event);
|
||||||
|
|
||||||
@ -230,8 +232,12 @@ public class ResourcePackLoader implements RegistryLoader<Path, Map<String, Reso
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static CompletableFuture<@Nullable Path> downloadPack(String url) throws IllegalArgumentException {
|
public static CompletableFuture<@Nullable Path> downloadPack(String url) throws IllegalArgumentException {
|
||||||
|
|
||||||
|
//TODO check if our cache pack is fine (size, url hash; head req)
|
||||||
|
|
||||||
return WebUtils.checkUrlAndDownloadRemotePack(url).whenCompleteAsync((cachedPath, throwable) -> {
|
return WebUtils.checkUrlAndDownloadRemotePack(url).whenCompleteAsync((cachedPath, throwable) -> {
|
||||||
if (cachedPath == null) {
|
if (cachedPath == null) {
|
||||||
|
// already warned about in WebUtils
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,12 +115,12 @@ public class WebUtils {
|
|||||||
|
|
||||||
if (size <= 0) {
|
if (size <= 0) {
|
||||||
GeyserImpl.getInstance().getLogger().error(String.format("Invalid size from remote pack URL: %s (size: %d)", url, size));
|
GeyserImpl.getInstance().getLogger().error(String.format("Invalid size from remote pack URL: %s (size: %d)", url, size));
|
||||||
//return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == null || !type.equals("application/zip")) {
|
if (type == null || !type.equals("application/zip")) {
|
||||||
GeyserImpl.getInstance().getLogger().error(String.format("Invalid application type from remote pack URL: %s (type: %s)", url, type));
|
GeyserImpl.getInstance().getLogger().error(String.format("Invalid application type from remote pack URL: %s (type: %s)", url, type));
|
||||||
//return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
InputStream in = con.getInputStream();
|
InputStream in = con.getInputStream();
|
||||||
@ -137,7 +137,7 @@ public class WebUtils {
|
|||||||
} catch (MalformedURLException e) {
|
} catch (MalformedURLException e) {
|
||||||
throw new IllegalArgumentException("Malformed URL: " + url);
|
throw new IllegalArgumentException("Malformed URL: " + url);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException("Unable to download and save file: " + url + ")");
|
throw new RuntimeException("Unable to download and save remote resource pack from: " + url + ")");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -174,6 +174,7 @@ force-resource-packs: true
|
|||||||
|
|
||||||
# A list of links to send to the client to download resource packs from.
|
# A list of links to send to the client to download resource packs from.
|
||||||
# These must be direct links to the resource pack, not a link to a page containing the resource pack.
|
# These must be direct links to the resource pack, not a link to a page containing the resource pack.
|
||||||
|
# If you enter a link here, Geyser will download the resource pack once to check if it's in a valid format.
|
||||||
resource-pack-urls:
|
resource-pack-urls:
|
||||||
# Example: GeyserOptionalPack
|
# Example: GeyserOptionalPack
|
||||||
- "https://ci.opencollab.dev/job/GeyserMC/job/GeyserOptionalPack/job/master/lastSuccessfulBuild/artifact/GeyserOptionalPack.mcpack"
|
- "https://ci.opencollab.dev/job/GeyserMC/job/GeyserOptionalPack/job/master/lastSuccessfulBuild/artifact/GeyserOptionalPack.mcpack"
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren