ResourcePack¶
Info
If you are unsure how to reference a ResourcePack-file in a config-file How do I reference a ResourcePack file in a config?
ποΈ ResourcePack-Structure¶
The ResourcePack in Nexo follows the vanilla structure but also letting you import and automatically merge full ResourcePacks
This is in an effort to make importing third-party ResourcePacks a lot easier.
Below is an example of the new structure.
πNexo
βββ πpack
βββ πassets
β βββ πminecraft
β β βββ πmodels
β β β βββ πitem
β β β β βββ πpaper.json
β β β βββ πcustom_model.json
β β βββ πtextures
β β βββ πΌοΈsomething.png
β βββ πcustom_namespace
β βββ πmodels
β βββ πcustom.json
β
βββ πexternal_packs
βββ πDefaultPack.zip
βββ πcustom_resourcepack.zip
βββ πcustom_resourcepack2
βββ πassets
βββ πcustom_namespace2
Goal is to let users merge resourcepacks in via either ZIPs or directories, outside of the normal assets folder.
This would dynamically merge in any conflicting files, like a paper.json or sounds.json, instead of migrating it to Nexo-configs to be generated.
Meaning that pack-import instructions on your end now boils down to:
Put my_pack.zip inside Nexo/pack/external_packs
π Obfuscation¶
Nexo has a built-in way to "obfuscate" the content of your resource-pack.
This is done by randomizing all file-names in an attempt to make it very hard and annoying to try and take stuff from it for pirates.
It comes with three modes, NONE, SIMPLE, FULL
NONE - Self-explanatory, does not obfuscate pack in any way
SIMPLE - Obfuscates filenames only
namespace:model/path.json -> namespace:bba2d60b-8e3e-4051-9734-fef92766777f
FULL - Obfuscates namespace & filename;
namespace:model/path.json -> c491303e-ba1e-4037-a59d-62b5fdfb6bb8:bba2d60b-8e3e-4051-9734-fef92766777f
π¦ PackSquash-Integration¶
Nexo allows you to run PackSquash on the resourcepack without manually reuploading the pack.
Simply download the latest PackSquash build and drop it in plugins/Nexo/pack/packsquash .
Then drop your packsquash.toml in the same directory, an example can be found here.
If you want it in another location, you can specify a path for the binary & settings
Pack:
generation:
packsquash:
enabled: true
executable_path: plugins/Nexo/pack/packsquash/packsquash
settings_path: plugins/Nexo/pack/packsquash/packsquash.toml
To enable Nexo's PackSquash-integration simply enable Pack.generation.packsquash.enabled in settings.yml. Then when the pack generates, it will start the PackSquash process. If it suceeds you should see somehting like the below.

Example of successful PackSquash process
If it failed you should see some detailed info about which file and a reason for it.
If Nexo's debug-mode is enabled, it will output info about all successful files aswell
Info
Depending on your TOML-configuration & ResourcePack size & complexity, the PackSquash process might take some time. Nexo will cache the output so that if the ResourcePack does not change, the PackSquash process will not need to be ran again
π PackServer¶
Nexo supports several ways to upload & dispatch the ResourcePack it generates.
Set the type via Pack.server.type in settings.yml.
NONE¶
Does not send any ResourcePack to players. Use this on backend servers that should not dispatch a pack.
POLYMATH¶
A dedicated upload server hosted by the Nexo team (Germany). The pack is uploaded and served automatically.
SELFHOST¶
Hosts the ResourcePack directly from your server machine. Requires an open port and a reachable public address.
Pack:
server:
type: SELFHOST
selfhost:
port: 8082
public_address: "http://your.ip.or.domain"
dispatch_threads: 10
LOBFILE¶
Uploads the pack to LobFile. Requires an API key.
S3¶
Uploads the pack to any S3-compatible object storage (AWS S3, Cloudflare R2, Hetzner Object Storage, etc.).
Pack:
server:
type: S3
s3:
public_url: "https://fsn1.your-objectstorage.com"
endpoint_url: "https://fsn1.your-objectstorage.com"
region: eu-central-1
bucket: nexo-storage
access_key: ACCESS
secret_key: SECRET
url_expiration: 7d
path_style: false
chunked_encoding: true
Custom PackServer¶
The NexoPackServer interface can be implemented by third-party plugins and registered via PackServerRegistry, allowing you to add your own upload/dispatch logic.
π Cross-Server/Proxy ResourcePacks¶
For Velocity proxy networks, use NexoProxy β a Velocity plugin that blocks duplicate ResourcePack sends when players switch between backend servers.
π₯ Importing¶
Nexo lets you import Third-Party ResourcePacks in several ways.
The recommended one is shown above, by adding a directory or .zip to plugins/Nexo/pack/external\_packs
There is also Plugin.import.from_location in settings.yml, letting you specify a directory/zip relative to your plugins folder
There is also Plugin.import.from_url in settings.yml, letting you specify any url that Nexo will download a directory/zip from and include