diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 157495260..270e43fe2 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -27,6 +27,23 @@ export default defineConfig({ { text: "Benchmarks", link: "/about/benchmarks" }, ], }, + { + text: "Configuration", + items: [ + { text: "Introduction", link: "/config/introduction" }, + { text: "Basic", link: "/config/basic" }, + { text: "Proxy", link: "/config/proxy"}, + { text: "Authentication", link: "/config/authentication"}, + { text: "Compression", link: "/config/compression"}, + { text: "Resource Pack", link: "/config/resource-pack"}, + { text: "Commands", link: "/config/commands"}, + { text: "RCON", link: "/config/rcon"}, + { text: "PVP", link: "/config/pvp"}, + { text: "Logging", link: "/config/logging"}, + { text: "Query", link: "/config/query"}, + { text: "LAN Broadcast", link: "/config/lan-broadcast"}, + ], + }, { text: "Developers", items: [ @@ -38,14 +55,6 @@ export default defineConfig({ { text: "World", link: "developer/world"}, ], }, - { - text: "Configuration", - items: [ - { text: "Introduction", link: "/config/introduction" }, - { text: "Basic", link: "/config/basic" }, - { text: "Advanced", link: "/config/advanced" }, - ], - }, { text: "Troubleshooting", items: [ diff --git a/docs/config/advanced.md b/docs/config/advanced.md deleted file mode 100644 index 432219d25..000000000 --- a/docs/config/advanced.md +++ /dev/null @@ -1,450 +0,0 @@ -# Advanced Configuration - -## Proxy - -`proxy` - -Whether Proxy Configuration is Enabled - -```toml -enabled=false -``` - -### Velocity - -`proxy.velocity` - -Whether [Velocity](https://papermc.io/software/velocity) Proxy is enabled - -```toml -enabled=false -``` - -#### Velocity Secret - -This secret is used to ensure that player info forwarded by Velocity comes from your proxy and not from someone pretending to run Velocity - -```toml -secret= -``` - -### Bungeecord -`proxy.bungeecord` - -```toml -enabled=false -``` - -## Authentication - -`authentication` - -Whether Authentication is enabled - -```toml -enabled=false -``` - -### Authentication URL - -The Authentication URL being used - -> [!IMPORTANT] -> {username} | The Username from the requested player -> -> {server_hash} | The SHA1 Encrypted hash - -```toml -auth_url="https://sessionserver.mojang.com/session/minecraft/hasJoined?username={username}&serverId={server_hash}" -``` - -### Prevent Proxy Connections - -Prevent proxy connections - -```toml -prevent_proxy_connections=false -``` - -### Prevent Proxy Connections URL - -The Authentication URL being used - -> [!IMPORTANT] -> {username} | The Username from the requested player -> -> {server_hash} | The SHA1 Encrypted hash -> -> {ip} | The IP of the requested Player - -```toml -prevent_proxy_connection_auth_url = "https://sessionserver.mojang.com/session/minecraft/hasJoined?username={username}&serverId={server_hash}&ip={ip}" -``` - -### Player Profile - -`authentication.player_profile` - -#### Allow Banned Players - -Allow players flagged by Mojang (banned, forced name change) - -```toml -allow_banned_players=false -``` - -#### Allowed Actions - -Depends on the value above - -```toml -allowed_actions=["FORCED_NAME_CHANGE", "USING_BANNED_SKIN"] -``` - -```toml -FORCED_NAME_CHANGE -USING_BANNED_SKIN -``` - -### Textures - -`authentication.textures` - -Whether to filter/validate player textures (e.g. Skins/Capes) - -```toml -enabled=true -``` - -#### Allowed URL Schemes - -Allowed URL Schemes for Textures - -```toml -allowed_url_schemes=["http", "https"] -``` - -#### Allowed URL Domains - -Allowed URL domains for Textures - -```toml -allowed_url_domains=[".minecraft.net", ".mojang.com"] -``` - -### Texture Types - -`authentication.textures.types` - -#### Skin - -Use player skins - -```toml -skin=true -``` - -#### Cape - -Use player capes - -```toml -cape=true -``` - -#### Elytra - -Use player elytras -(I didn't know myself that there are custom elytras) - -```toml -elytra=true -``` - -## Compression - -`packet_compression` - -Whether Packet Compression is enabled - -```toml -enable=true -``` - -### Compression Info - -#### Threshold - -The compression threshold is used when compression is enabled - -```toml -threshold=256 -``` - -#### Level - -The Compression Level - -> [!IMPORTANT] -> A value between 0..9 -> -> 1 = Optimize for the best speed of encoding. -> -> 9 = Optimize for the size of data being encoded. - -```toml -level=4 -``` - -## Resource Pack - -`resource_pack` - -Whether a Resource Pack is enabled - -```toml -enable=false -``` - -### Resource Pack URL - -The download URL of the resource pack - -```toml -resource_pack_url= -``` - -### Resource Pack SHA1 - -The SHA1 hash (40) of the resource pack - -```toml -resource_pack_sha1= -``` - -### Prompt Message - -Custom prompt Text component, Leave blank for none - -```toml -prompt_message= -``` - -### Force - -Will force the Player to accept the resource pack - -```toml -force=false -``` - -## Commands - -`commands` - -### Use Console - -Are commands from the Console accepted - -```toml -use_console=true -``` - -### Log Console - -Should commands from players be logged into the console? - -```toml -log_console=true -``` - -## RCON Config - -`rcon` - -Whether RCON is enabled - -```toml -enable=false -``` - -### Address - -The network address and port where the RCON server will listen for connections - -```toml -address=false -``` - -### Password - -The password required for RCON authentication - -```toml -password= -``` - -### Maximum Connections - -The maximum number of concurrent RCON connections allowed - -If 0 there is no limit - -```toml -max_connections=0 -``` - -### RCON Logging - -`rcon.logging` - -#### Logged Successfully - -Whether successful RCON logins should be logged - -```toml -log_logged_successfully=true -``` - -#### Wrong Password - -Whether failed RCON login attempts with incorrect passwords should be logged - -```toml -log_wrong_password=true -``` - -#### Commands - -Whether all RCON commands, regardless of success or failure, should be logged - -```toml -log_commands=true -``` - -#### Disconnect - -Whether RCON client quit should be logged - -```toml -log_quit=true -``` - -## PVP - -`pvp` - -Whether PVP is enabled - -```toml -enable=true -``` - -### Hurt Animation - -Do we want to have the Red hurt animation & fov bobbing - -```toml -hurt_animation=true -``` - -### Protect Creative - -Should players in creative be protected against PVP - -```toml -protect_creative=true -``` - -### Knockback - -Has PVP Knockback (Velocity) - -```toml -knockback=true -``` - -### Swing - -Should players swing when attacking? - -```toml -swing=true -``` - -## Logging - -`logging` -Whether Logging is enabled - -```toml -enable=true -``` - -### Level - -At which level should be logged - -```toml -level=Info -``` - -```toml -Off -Error -Warn -Info -Debug -Trace -``` - -### Env - -Enables the user to choose log level by setting the `RUST_LOG=` environment variable - -```toml -env=false -``` - -### Threads - -Should threads be printed in the message - -```toml -threads=true -``` - -### Color - -Should color be enabled for logging messages - -```toml -color=true -``` - -### Timestamp - -Should the timestamp be printed in the message - -```toml -timestamp=true -``` - -## Query - -### Enabled - -Should clients be able to query the server for info, using the query protocol? - -```toml -enabled=true -``` - -### Port (optional) - -If enabled, what port should the server listen to for query requests? - -```toml -# By default query will listen on the same port the server is running on -port=25565 -``` diff --git a/docs/config/authentication.md b/docs/config/authentication.md new file mode 100644 index 000000000..38ceb7989 --- /dev/null +++ b/docs/config/authentication.md @@ -0,0 +1,177 @@ +# Authentication + +Servers authenthicate with Mojang's session servers in order to ensure the client is playing on a legitmate, paid account. Pumpkin allows you to fully configure authentication. + +## Configuring Authentication + +> [!WARNING] +> Most servers should not change the default authenthication configuration. Doing so may have unintended consequnces. **Only change these settings if you know what you are doing!** + +#### `enabled`: Boolean + +Weather authenthication is enabled or not. + +:::code-group +```toml [features.toml] {2} +[authentication] +enabled = false +``` +::: + +#### `prevent_proxy_connections`: Boolean + +Weather to block proxy connections or not. + +:::code-group +```toml [features.toml] {3} +[authentication] +enabled = true +prevent_proxy_connections = true +``` +::: + +#### `auth_url`: String (optional) +The URL to authenthicate with. Uses Mojang's session servers to authenthicate if not specified. + +##### Placeholders +| Placeholder | Description | +| --------------- | ------------------ | +| `{username}` | Player username | +| `{server_hash}` | Hash of the server | + +:::code-group +```toml [features.toml] {2} +[authentication] +auth_url = "[custom auth server here]" +``` +::: + +#### `prevent_proxy_connection_auth_url`: String (optional) +The URL to authenthicate with if `prevent_proxy_connections` is enabled. Uses Mojang's session servers to authenthicate if not specified. + +##### Placeholders +| Placeholder | Description | +| --------------- | ------------------------ | +| `{username}` | Player username | +| `{server_hash}` | Hash of the server | +| `{ip}` | IP Address of the player | + +:::code-group +```toml [features.toml] {2} +[authentication] +prevent_proxy_connection_auth_url = "[custom auth server here]" +``` +::: + +### Player Profile + +#### `allow_banned_players`: Boolean +Allow players flagged by Mojang. + +:::code-group +```toml [features.toml] {2} +[authentication.player_profile] +allow_banned_players = true +``` +::: + +#### `allowed_actions`: String Array +What actions are allowed if `allow_banned_players` is enabled. + +:::code-group +```toml [features.toml] {3} +[authentication.player_profile] +allow_banned_players = true +allowed_actions = ["FORCED_NAME_CHANGE", "USING_BANNED_SKIN"] +``` +::: + +### Textures + +#### `enabled`: Boolean +Whether to filter/validate player textures (e.g. Skins/Capes). + +:::code-group +```toml [features.toml] {2} +[authentication.textures] +enabled = true +``` +::: + +#### `allowed_url_schemes`: String Array +Allowed URL Schemes for textures. + +:::code-group +```toml [features.toml] {3} +[authentication.textures] +enabled = true +allowed_url_schemes = ["http", "https"] +``` +::: + +#### `allowed_url_domains`: String Array +Allowed URL domains for textures. + +:::code-group +```toml [features.toml] {3} +[authentication.textures] +enabled = true +allowed_url_domains = [".minecraft.net", ".mojang.com"] +``` +::: + +### Texture Types + +#### `skin`: Boolean +Weather to use player skins or not. + +:::code-group +```toml [features.toml] {3} +[authentication.textures.types] +skin = true +``` +::: + +#### `cape`: Boolean +Weather to use player capes or not. + +:::code-group +```toml [features.toml] {3} +[authentication.textures.types] +cape = true +``` +::: + +#### `elytra`: Boolean +Weather to use player elytras or not. + +:::code-group +```toml [features.toml] {3} +[authentication.textures.types] +elytra = true +``` +::: + +## Default Config +By default, authentication is enabled and uses Mojang's servers. Here is the default config: +:::code-group +```toml [features.toml] +[authentication] +enabled = true +prevent_proxy_connections = false + +[authentication.player_profile] +allow_banned_players = false +allowed_actions = ["FORCED_NAME_CHANGE", "USING_BANNED_SKIN"] + +[authentication.textures] +enabled = true +allowed_url_schemes = ["http", "https"] +allowed_url_domains = [".minecraft.net", ".mojang.com"] + +[authentication.textures.types] +skin = true +cape = true +elytra = true +``` +::: diff --git a/docs/config/commands.md b/docs/config/commands.md new file mode 100644 index 000000000..e3918e6e8 --- /dev/null +++ b/docs/config/commands.md @@ -0,0 +1,34 @@ +# Commands +Pumpkin supports Vanilla commands and allows you to configure where they can be ran from. + +## Configuring Commands +#### `use_console`: Boolean +Weather commands from the console are accepted or not. + +:::code-group +```toml [features.toml] {2} +[commands] +use_console = false +``` +::: + +#### `log_console`: Boolean +Weather commands from players should be logged into the console or not. + +:::code-group +```toml [features.toml] {2} +[commands] +log_console = false +``` +::: + +## Default Config +By default, Pumpkin will allow commands from console and log all commands run by players. + +:::code-group +```toml [features.toml] +[commands] +use_console = true +log_console = true +``` +::: diff --git a/docs/config/compression.md b/docs/config/compression.md new file mode 100644 index 000000000..2cc59b4d0 --- /dev/null +++ b/docs/config/compression.md @@ -0,0 +1,55 @@ +# Compression +Compression is used to reduce the size of packets. This is benefical to reduce bandwidth server side and also help players on slower internet connections. + +## Configuring Compression + +#### `enabled`: Boolean +Weather packet compression is enabled or not. + +> [!TIP] +> It might be benefical to disable compression if the server is behind a proxy. + +:::code-group +```toml [features.toml] {2} +[packet_compression] +enabled = true +``` +::: + +#### `threshold`: Integer (0-1024) + +The minimum packet size before the server attempts to compress the packet. + +> [!CAUTION] +> Increasing this value can hurt players on slower connections. + +:::code-group +```toml [features.toml] {2} +[packet_compression] +threshold = 256 +``` +::: + +#### `level`: Integer (0-9) + +A value between 0 to 9: 0 to disable compression, 1 being the fastest compression (at the cost of size), and 9 being maximum compression (at the cost of speed). + +:::code-group +```toml [features.toml] {2} +[packet_compression] +level = 4 +``` +::: + +## Default Config + +By default, compression is enabled. + +:::code-group +```toml [features.toml] +[packet_compression] +enabled = true +threshold = 256 +level = 4 +``` +::: diff --git a/docs/config/lan-broadcast.md b/docs/config/lan-broadcast.md new file mode 100644 index 000000000..94f606f9e --- /dev/null +++ b/docs/config/lan-broadcast.md @@ -0,0 +1,54 @@ +# LAN Broadcast +Pumpkin can broadcast the server across the network in order to make it easier for local players to connect to the server easier. + +## Configuring LAN Broadcast + +#### `enabled`: Boolean +Weather LAN Broadcast is enabled or not. + +:::code-group +```toml [features.toml] {2} +[lan_broadcast] +enabled = true +``` +::: + +#### `motd`: String (optional) +The MOTD to broadcast out to clients. Will use server's MOTD by default. + +> [!CAUTION] +> LAN broadcast MOTD does not support multiple lines, RGB colors, or gradients. Pumpkin does not verify the MOTD before broadcasted. If the server MOTD is using these components, consider defining this field so that clients see a proper MOTD. + +:::code-group +```toml [features.toml] {3} +[lan_broadcast] +enabled = true +motd = "[your MOTD here]" +``` +::: + +#### `port`: Integer (0-65535) (optional) +What port to bind to. If not specified, will bind to port 0 (any availible port on the system). + +> [!IMPORTANT] +> The protocol defines what port to broadcast to. This option only exists to specify which port to bind to on the host. This option purely exists so that the port can be predictable. + +:::code-group +```toml [features.toml] {3} +[lan_broadcast] +enabled = true +port = 46733 +``` +::: + +## Default Config +By default LAN broadcast is disabled. + +:::code-group +```toml [features.toml] +[lan_broadcast] +enabled = false +motd = "[server MOTD here]" +port = 0 +``` +::: diff --git a/docs/config/logging.md b/docs/config/logging.md new file mode 100644 index 000000000..5f44b0091 --- /dev/null +++ b/docs/config/logging.md @@ -0,0 +1,90 @@ +# Logging +Pumpkin allows you to customize what you want in your logs. + +## Configuring Logging + +#### `enabled`: Boolean +Weather logging is enabled or not. + +:::code-group +```toml [features.toml] {2} +[logging] +enabled = true +``` +::: + +#### `level`: Enum +What should be logged. Possible values are: +- Off +- Error +- Warn +- Info +- Debug +- Trace + +:::code-group +```toml [features.toml] {3} +[logging] +enabled = true +level = "Debug" +``` +::: + +#### `env`: Boolean +Weather to allow choosing the log level by setting the `RUST_LOG` environment variable or not. + +:::code-group +```toml [features.toml] {3} +[logging] +enabled = true +env = true +``` +::: + +#### `threads`: Boolean +Weather to print threads in the logging message or not. + +:::code-group +```toml [features.toml] {3} +[logging] +enabled = true +threads = false +``` +::: + +#### `color`: Boolean +Weather to print with color to the console or not. + +:::code-group +```toml [features.toml] {3} +[logging] +enabled = true +color = false +``` +::: + +#### `timestamp`: Boolean +Weather to print the timestamp in the meessage or not. + +:::code-group +```toml [features.toml] {3} +[logging] +enabled = true +timestamp = false +``` +::: + +## Default Config +By default, logging is enabled and will print with color, threads, and timestamp at the `Info` level. + +:::code-group +```toml [features.toml] +[logging] +enabled = true +level = "Info" +env = false +threads = true +color = true +timestamp = true +``` +::: diff --git a/docs/config/proxy.md b/docs/config/proxy.md new file mode 100644 index 000000000..e01bf2f6e --- /dev/null +++ b/docs/config/proxy.md @@ -0,0 +1,78 @@ +# Proxy +Many servers use proxies to manage connections and distribute players across servers. Pumpkin supports the following proxy protocols: + +- [Velocity](https://papermc.io/software/velocity) +- [BungeeCord](https://www.spigotmc.org/wiki/bungeecord-installation/) + +> [!TIP] +> Velocity is recommended for most server networks. Velocity is modern and more performant compared to BungeeCord. + +## Configuring Proxy + +#### `enabled`: Boolean + +Enables support for proxies. + +:::code-group +```toml [features.toml]{2} +[proxy] +enabled = true +``` +::: + +### Velocity + +#### `enabled`: Boolean + +Weather Velocity support is enabled or not. + +:::code-group +```toml [features.toml]{2} +[proxy.velocity] +enabled = true +``` +::: + +#### `secret`: String + +The secret as configured in Velocity. + +:::code-group +```toml [features.toml]{3} +[proxy.velocity] +enabled = true +secret = "[proxy secret here]" +``` +::: + +### BungeeCord + +#### `enabled`: Boolean +Weather BungeeCord support is enabled or not. + +:::code-group +```toml [features.toml]{2} +[proxy.bungeecord] +enabled = true +``` +::: + +> [!CAUTION] +> Ensure that the server's firewall is correctly configured, as BungeeCord can't verify if player info is from your proxy or an imposter. + +## Default Config +By default, proxy support is disabled. Here is the default config: + +:::code-group +```toml [features.toml] +[proxy] +enabled = false + +[proxy.velocity] +enabled = false +secret = "" + +[proxy.bungeecord] +enabled = false +``` +::: diff --git a/docs/config/pvp.md b/docs/config/pvp.md new file mode 100644 index 000000000..09ea5baee --- /dev/null +++ b/docs/config/pvp.md @@ -0,0 +1,68 @@ +# PVP +PVP is a core part of vanilla mechanics, with even the smallest change affecting gameplay. Pumpkin allows you to fully configure PVP. + +## Configuring PVP + +#### `enabled`: Boolean +Weather PVP is enabled or not. + +:::code-group +```toml [features.toml] {2} +[pvp] +enabled = true +``` +::: + +#### `hurt_animation`: Boolean +Weather to show red hurt animation and FOV bobbing or not. + +:::code-group +```toml [features.toml] {2} +[pvp] +hurt_animation = true +``` +::: + +#### `protect_creative`: Boolean +Weather to protect players in creative againest PVP or not. + +:::code-group +```toml [features.toml] {2} +[pvp] +protect_creative = true +``` +::: + +#### `knockback`: Boolean +Weather attacks should have knockback or not. + +:::code-group +```toml [features.toml] {2} +[pvp] +knockback = true +``` +::: + +#### `swing`: Boolean +Weather players should swing when attacking or not. + +:::code-group +```toml [features.toml] {2} +[pvp] +swing = true +``` +::: + +## Default Config +By default all PVP options are enabled to match vanilla behavior. + +:::code-group +```toml [features.toml] +[pvp] +enabled = true +hurt_animation = true +protect_creative = true +knockback = true +swing = true +``` +::: diff --git a/docs/config/query.md b/docs/config/query.md new file mode 100644 index 000000000..2364d7dd0 --- /dev/null +++ b/docs/config/query.md @@ -0,0 +1,36 @@ +# Query +Query protocol is an simple way to query the server about its status. Pumpkin fully supports the query protocol. + +## Configuring Query + +#### `enabled`: Boolean +Weather to listen for query protocol requests or not. + +:::code-group +```toml [features.toml] {2} +[query] +enabled = true +``` +::: + +#### `port`: Integer (0-65535) (optional) +What port to listen to query protocol requests. If not specified, uses the same port as the server. + +:::code-group +```toml [features.toml] {3} +[query] +enabled = true +port = 12345 +``` +::: + +## Default Config +By default query is disabled. It will run on the server port if enabled unless specified explicitly. + +:::code-group +```toml [features.toml] +[query] +enabled = true +port = 25565 +``` +::: diff --git a/docs/config/rcon.md b/docs/config/rcon.md new file mode 100644 index 000000000..947bdf1ac --- /dev/null +++ b/docs/config/rcon.md @@ -0,0 +1,106 @@ +# RCON +RCON is a protocol that allows you to remotely manage the server from a different device. Pumpkin has full support for RCON. + +## Configuring RCON + +#### `enabled`: Boolean + +:::code-group +```toml [features.toml] {2} +[rcon] +enabled = true +``` +::: + +#### `address`: String +The address and port that RCON should listen to. + +:::code-group +```toml [features.toml] {3} +[rcon] +enabled = true +address = "0.0.0.0:25575" +``` +::: + +#### `password`: String +The password to use for RCON authentication. + +:::code-group +```toml [features.toml] {3} +[rcon] +enabled = true +password = "[your safe password here]" +``` +::: + +#### `max_connections`: Integer +The max number of RCON connections allowed at a single time. Set to 0 to disable a limit. + +:::code-group +```toml [features.toml] {3} +[rcon] +enabled = true +max_connections = 5 +``` +::: + +### Logging +#### `log_logged_successfully`: Boolean +Weather successful logins should be logged to console or not. + +:::code-group +```toml [features.toml] {2} +[rcon.logging] +log_logged_successfully = true +``` +::: + +#### `log_wrong_password`: Boolean +Weather wrong password attempts should be logged to console or not. + +:::code-group +```toml [features.toml] {2} +[rcon.logging] +log_logged_successfully = true +``` +::: + +#### `log_commands`: Boolean +Weather to log commands ran from RCON to console or not. + +:::code-group +```toml [features.toml] {2} +[rcon.logging] +log_commands = true +``` +::: + +#### `log_quit`: Boolean +Whether RCON client quit should be logged or not. + +:::code-group +```toml [features.toml] {2} +[rcon.logging] +log_quit = true +``` +::: + +## Default Config +By default RCON is disabled. + +:::code-group +```toml [features.toml] +[rcon] +enabled = false +address = "0.0.0.0:25575" +password = "" +max_connections = 0 + +[rcon.logging] +log_logged_successfully = true +log_wrong_password = true +log_commands = true +log_quit = true +``` +::: diff --git a/docs/config/resource-pack.md b/docs/config/resource-pack.md new file mode 100644 index 000000000..5df01d1ea --- /dev/null +++ b/docs/config/resource-pack.md @@ -0,0 +1,97 @@ +# Resource Pack +Servers can send resource packs to the client in order to change the appearance of the game on the client. Pumpkin allows you to fully configure the resource pack. + +> [!TIP] +> Minify your resource pack using [PackSquash](https://packsquash.aylas.org/)! This can help clients download the resource pack faster. + +## Configuring Resource Pack + +#### `enabled`: Boolean +Weather a resource pack is enabled or not. + +:::code-group +```toml [features.toml] {2} +[resource_pack] +enabled = true +``` +::: + +#### `resource_pack_url`: String +The direct download URL to the resource pack. + +> [!TIP] +> You can host the resource pack for free at [MCPacks](https://mc-packs.net/). + +:::code-group +```toml [features.toml] {3} +[resource_pack] +enabled = true +resource_pack_url = "[your download URL here]" +``` +::: + +#### `resource_pack_sha1`: String +The hash of the resource pack, using the SHA1 algorithm. + +> [!IMPORTANT] +> Although not required to specify, you should specify this field because the client will otherwise redownload the resource pack every time they join the server, even if there are no changes to the resource pack. + +> [!WARNING] +> Make sure to update this field if the resource pack is modified. + +::: details How do I get the SHA1 hash of my resource pack? +::: code-group +```powershell [Windows (PowerShell)] +Get-FileHash [file] SHA1 +``` +```shell [Mac OS] +shasum -a 1 [file] +``` +```shell [Linux] +sha1sum [file] +``` +::: + +:::code-group +```toml [features.toml] {3} +[resource_pack] +enabled = true +resource_pack_sha1 = "[your hash here]" +``` +::: + +#### `prompt_message`: String +The message to show to the user when prompted to download the resource pack. + +:::code-group +```toml [features.toml] {3} +[resource_pack] +enabled = true +prompt_message = "[your message here]" +``` +::: + +#### `force`: Boolean +Weather to force the client to download the resource pack or not. If the client declines the download, they will be kicked from the server. + +:::code-group +```toml [features.toml] {3} +[resource_pack] +enabled = true +force = false +``` +::: + +## Default Config +By default, resource pack is disabled. + +:::code-group +```toml [features.toml] +[resource_pack] +enabled = false +resource_pack_url = "" +resource_pack_sha1 = "" +prompt_message = "" +force = false +``` +:::