Skip to main content

Configuration

Self-hosting

info

Skip this section if you don't want to self-host the resource pack.

Your hosting service must let you assign additional ports to your server.

This method requires you to have an open port for ForcePack to host the webserver on.

ForcePack is able to host your resource pack itself by starting a web server. Find the following section in your config:

web-server:
enabled: false
server-ip: localhost
port: 8080

Change enabled to true. The server-ip can be left as localhost, as ForcePack will try to resolve your servers IP itself, however if you experience issues you will need to update it manually.

Obtaining an open port

Parts of this guide are taken from ItemsAdder

This guide assumes you are using Pterodactyl Panel, the most popular panel hosts use. However, the instructions should be similar for all hosting panels.

info

You should first check your hosting panel to see if you are able to assign an additional port. If not, it may be possible to ask their support channels to assign one.

pterodactyl-port-allocate pterodactyl-port-assignment

Set port to the new port you assigned in the panel.

Configuring the self-hosted resource pack

Move down to the section where you want to set your resource pack URL.

A self-hosted resource pack is always placed in the plugins/ForcePack folder (you can use a subfolder in there as well).

You'll want to prefix your resource pack URL with forcepack:// then the path to the resource pack zip file. For example, if I had pack.zip in plugins/ForcePack/packs/, I would set it to:

urls: ["forcepack://packs/pack.zip"]

Getting the SHA-1 hash of a resource pack

tip

Dropbox changes something in the file (likely metadata) when it's uploaded to Dropbox. You will want to download your resource pack off Dropbox if you uploaded it there and use that to check the hash.

You can skip this section if you are going to use the generate-hash option.

Use the following command in powershell: Get-FileHash {file-path}.zip -Algorithm SHA1 | Format-List

Maximum resource pack sizes

Here is a helpful table to show the maximum resource pack sizes across versions.

VersionMaximum Resource Pack Size
1.8-1.1550 MB
1.16-1.17100 MB
1.18+250 MB

Configuring the resource pack on Spigot/Paper

tip

This section is for Spigot only. See the proxy section for Velocity.

Find the following section in your config.yml:

  packs:
all:
# The ResourcePack URL. This must be a direct URL, ending with .zip. For Dropbox URLs, add ?dl=1 to the end.
# To host a local file on the embedded webserver, change this to the relative path of the force pack folder prefixed by "forcepack://".
# For example, placing your resource pack as "plugins/ForcePack/pack.zip", the url will just be "forcepack://pack.zip".
# ONLY PLAYERS ON 1.20.3+ CAN RECEIVE MULTIPLE RESOURCE PACKS. The first URL/Hash pair will be taken for older client versions.
# URLs list and hashes list MUST BE THE SAME SIZE.
urls: ["https://www.convallyria.com/files/BlankPack.zip"]
# Whether to automatically generate the SHA-1 hash.
# The hash setting will be ignored if this is true, however it will fall back to that if the generation fails.
generate-hash: false
# See https://fortitude.islandearth.net/forcepack/configuration#getting-the-sha-1-hash-of-a-resource-pack
hashes: ["118AFFFC54CDCD308702F81BA24E03223F15FE5F"]
# Here you can specify a pack format version-specific resource pack. You would copy the section above, replacing "all" with the number.
# Note that the "all" section must be kept as a fallback.
# See https://minecraft.fandom.com/wiki/Pack_format.
# Requires ViaVersion, to resolve client version.

The comments should be quite explanatory enough. For the URL, you need to make sure it is a direct link (no redirects).

You can enable generate-hash. This allows the plugin to automatically retrieve the SHA-1 hash from the URL, instead of you having to update the hash manually every time you make changes to the resource pack.

Let's encrypt certificates do not work for < 1.17

When specifying a resource pack URL, clients older than 1.17 cannot use sites that use Let's Encrypt SSL certificates due to their Java version. This includes mc-packs.

The all section specifies that this configured resource pack works on all Minecraft versions. You can specify resource packs for specific Minecraft versions by using the pack format ID. See the comments in the config for more information.

Configuring actions

You can configure the plugin to perform console commands or kick the player when the a resource pack status is received.

To disable any commands from running for a status, change:

Commands:
- say [player] denied the resource pack!

To:

Commands: []

I am experiencing problems with applying the resource pack.

Proceed to the debugging section.

Configuring the resource pack on a Proxy

Proxies have much more powerful settings because they cover several servers at once. You have several options to configure when setting up a proxy. We will go through them in the order in the config. If a section doesn't apply to your use-case, skip it.

Setting the resource pack

On all sections, you will see the following settings:

# The ResourcePack URL. This must be a direct URL, ending with .zip. For Dropbox URLs, add ?dl=1 to the end.
resourcepack.url = "https://www.convallyria.com/files/BlankPack.zip"
# Whether to automatically generate the SHA-1 hash. This is not recommended for security and reliability.
# The hash setting will be ignored if this is true, however it will fall back to that if the generation fails.
resourcepack.generate-hash = false
# Use a site such as http://onlinemd5.com/ or the hash provided when uploading to https://mc-packs.net/.
resourcepack.hash = "118AFFFC54CDCD308702F81BA24E03223F15FE5F"
# The prompt message for clients on 1.17+.
resourcepack.prompt = "<yellow>Please accept our resource pack to improve your experience."
note

url can be changed to urls for multiple resource packs. You will also need to change hash to hashes.

You will also see actions:

[servers.example-server.actions]
# List of valid actions: https://jd.velocitypowered.com/3.0.0/com/velocitypowered/api/event/player/PlayerResourcePackStatusEvent.Status.html
[servers.example-server.actions.ACCEPTED]
kick = false
commands = []
[servers.example-server.actions.DECLINED]
kick = true
message = "<color:#FF5555>Please accept our ResourcePack to play on the server!"
commands = []
[servers.example-server.actions.FAILED_DOWNLOAD]
kick = true
message = "<color:#FF5555>The ResourcePack download failed. Please try rejoining."
commands = []
[servers.example-server.actions.SUCCESSFUL]
kick = false
commands = []

I recommend you read the Spigot section as these are fundamentally the same.

Unload pack

This is used to make a resource pack unload when going from a server that has a resource pack to one that does not. It is generally recommended you keep this enabled. The blank resource pack provided works well, however it would be nice if you could rehost it e.g on your ForcePack webserver instead of requests being sent to my webserver.

If there are certain servers that have custom resource pack handling, you'll want to add them to the exclusion list.

Global pack

This section defines a resource pack for your entire proxy, however individual configured servers can override it.

Groups

Groups define a group of servers, rather than an individual one. These are powerful and useful when you have servers with a similar name, e.g survival-1 survival-2 etc.

These settings are unique to this section:

# If exact-match is true, only servers exactly equal to the name will be checked
# If false, they must only contain the keywords
exact-match = true
servers = [
"example-server",
"example-server-2"
]

The servers list is a list of server names that you want the resource pack to apply to.

When exact-match is enabled, the list of servers is checked against the server the player is connecting to using .equals, meaning one of them must match exactly. Otherwise, it uses .contains, which means it must only contain part of it.

For example, if I had the servers survival-1 and survival-2 I would set it to the following:

exact-match = false
servers = [
"survival"
]

Servers

This is the main section which configures specific servers. In every case, you will want to change example-server to the name of a server you want to apply a resource pack to.

Specifying pack versions

In groups, global pack, and servers, you can specify different resource packs for different resource pack versions. Note that you must keep the default root resource pack as a fallback.

The actions section does not need to be specified. It is shared with the default root.

# Here you can specify a pack format version-specific resource pack.
# Note that the "all" section above must be kept as a fallback.
# You can do the same thing in the global resource pack and resource pack groups.
# See https://minecraft.fandom.com/wiki/Pack_format.
# 222 is an example number.
[servers.example-server.version.222]
resourcepack.url = "https://www.convallyria.com/files/BlankPack.zip"
resourcepack.generate-hash = false
resourcepack.hash = "118AFFFC54CDCD308702F81BA24E03223F15FE5F"
resourcepack.prompt = "<yellow>Please accept our resource pack to improve your experience."

I am experiencing problems with applying the resource pack.

Proceed to the debugging section.

Debugging

In almost all cases, there is not a problem with ForcePack, but a misconfiguration or mistake.

Enable debug mode.

The first thing you want to do is enable debug mode. ForcePack comes with a debug setting that outputs useful information when applying resource packs. Set it to true and reload or the plugin or restart your server.

"Nothing happens when I join"

Do you have OP/all permissions? You should check if you have the forcepack.bypass permission, in which case you should negate it from your permissions. You can disable bypass-permission in your config if this is not an option.

See also "I don't see a resource pack screen".

"It says the resource pack failed to download"

This has many meanings, and it is impossible to deduce a specific problem from it.

Firstly, check the debug output in console. If you see something like "kicked player because they were sending fake resource pack statuses", or two ACCEPTED statuses, you have a plugin sending another resource pack.

Other common problems include the resource pack being too big for your version (Maximum resource pack sizes), or strange client behaviour. Try clearing your server-resource-packs folder in your .minecraft.

The server cannot determine what caused this problem. You must check your Minecraft client logs to deduce the problem, usually at .minecraft/logs/latest.log.

"I don't see a resource pack screen and I can't move"

You probably have a plugin teleporting on join or sending some other GUI. Try messing with the delay-pack-sending-by option.

Also see ItemsAdder incompatibility.

Incompatibilities

Minehut

Reports of the plugin not working on Minehut and always returning declined status. Not my problem, tell Minehut to fix their servers.

ItemsAdder

There have been reports of ItemsAdder cancelling the screen even when its sending functionality has been disabled.

SkinsRestorer (14.2.3 and below)

Note: SkinRestorer has fixed this as of 14.2.3. SkinRestorer for example needs DisableOnJoinSkins to be set to true, and then use this as a ForcePack SUCCESSFULLY_LOADED command to apply skins on join: sr applyskin [player]