Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement client-side support of downloading RP from CDN #6064

Open
wants to merge 7 commits into
base: minor-next
Choose a base branch
from

Conversation

alvin0319
Copy link
Contributor

Introduction

Implement client-side support of downloading Resource Pack from CDN.

Relevant issues

Changes

API changes

  • Added ResourcePackManager::getPackURLs(): Returns a map of uuid_version => cdn url

Behavioural changes

The server does not send ResourcePackChunkDataPacket since the client downloads the resource pack from CDN.

Backwards compatibility

There are no known BC breaking changes.

Follow-up

Tests

Test CDN server used with this test: https://github.com/alvin-pm-pl/ResourcePackCDN

Test Pack used with this test: https://mcpedl.com/legendary-bedrock-rtx-texture-pack/

2023-09-22.00-02-22.mp4

Copy link
Member

@ShockedPlot7560 ShockedPlot7560 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks OK for me

src/resourcepacks/ResourcePackManager.php Outdated Show resolved Hide resolved
src/resourcepacks/ResourcePackManager.php Outdated Show resolved Hide resolved
@BrandPVP
Copy link
Contributor

BrandPVP commented Oct 2, 2023

«However, the resource packs still need to be loaded into PocketMine.»

It should automatically download the pack from the url and cache the metadata, shouldn’t it? Like, why do users need to put it manually when PM can automatize the job

@alvin0319
Copy link
Contributor Author

«However, the resource packs still need to be loaded into PocketMine.»

It should automatically download the pack from the url and cache the metadata, shouldn’t it? Like, why do users need to put it manually when PM can automatize the job

I don't think it should be a PM's job. We should consider a offline environment.

@ShockedPlot7560
Copy link
Member

In fact, I'm going back on my opinion because I hadn't realized the problem that has just been raised. Although you need to be in an offline environment, it can be interesting to enable automation.

@alvin0319
Copy link
Contributor Author

Well, the problem is that:

  1. We can't download the resource packs from CDN every time we turn on the server.
  2. If we cache the downloaded resource pack, we have no way to detect whether resource pack content changed unless CDN provides a checksum or sha1 hash of the file.

The reason for requiring Resource Packs to be loaded into PM is that the client also expects info of remote resource packs in ResourcePacksInfoPacket. (after that, this isn't necessary since they download from external)

As an alternative way, we could let users write the UUID and version of the resource pack and optionally content key (which is the least information the client expects) in resource_packs.yml so that we don't let users load the resource pack into PM.

@dktapps
Copy link
Member

dktapps commented Oct 5, 2023

General sentiment in the dev community so far is that this feature is pretty useless for anyone who doesn't have a perfect connection (i.e. anywhere that isn't the US or Europe).

@ShockedPlot7560 ShockedPlot7560 added Category: API Related to the plugin API Category: Core Related to internal functionality Type: Enhancement Contributes features or other improvements to PocketMine-MP labels Dec 16, 2023
Copy link
Collaborator

@jasonw4331 jasonw4331 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would like to see added support for URLs without the https:// header also.

src/resourcepacks/ResourcePackManager.php Outdated Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Category: API Related to the plugin API Category: Core Related to internal functionality Type: Enhancement Contributes features or other improvements to PocketMine-MP
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants