Configuration Guide ⚙️
The main configuration for VelocityPteroPower is located in the config.yml
file within the plugins/VelocityPteroPower/
folder. This file is automatically generated with default values the first time you run the plugin.
Always Backup!
Before making significant changes to your configuration, it's always a good practice to create a backup of your config.yml
file.
This guide explains each configuration option available.
General Settings
fileversion
- Description: Internal version number for the configuration file. This is used by the plugin to automatically manage updates to the config structure between plugin versions.
- Action: Do not change this value manually.
- Default: (Automatically set by the plugin, e.g.,
8
)
checkUpdate
- Description: If
true
, the plugin will check for new versions of VelocityPteroPower on startup. If an update is found, a message will be displayed in the console. - Type:
Boolean
- Default:
true
- Example:
checkUpdate: true
loggerLevel
- Description: Controls the verbosity of messages logged by VelocityPteroPower to the Velocity console.
- Type:
Integer
- Accepted Values:
10
: DEBUG (Most detailed information, useful for troubleshooting issues)20
: INFO (Standard operational messages, recommended for production)30
: WARNING (Potential issues or non-critical errors)40
: ERROR (Critical errors that may impair functionality)
- Default:
20
- Example:
loggerLevel: 20
For Troubleshooting
When reporting issues, setting
loggerLevel: 10
can provide valuable diagnostic information. Remember to set it back to20
for normal operation to avoid excessive console spam.
apiThreads
- Description: The number of threads allocated in a dedicated thread pool for handling asynchronous API requests to your panel. Increasing this might improve responsiveness if you manage a very large number of servers and experience API-related delays, but it also consumes more system resources.
- Type:
Integer
- Default:
10
- Action: Changes to this value require a full restart of the Velocity proxy.
- Example:
apiThreads: 10
printRateLimit
- Description: If
true
, the plugin will log information about the current API rate limit status (limit, remaining requests) received from the panel after API calls. This is useful for diagnosing if API rate limiting is affecting the plugin's operation. - Type:
Boolean
- Default:
false
- Example:
printRateLimit: false
Server Status & Behavior
serverStatusCheckMethod
- Description: Determines how VPP checks if a managed Minecraft server is online and ready.
- Type:
String
- Accepted Values:
"VELOCITY_PING"
: Uses Velocity's built-in server pinging mechanism.- Pros: Less resource-intensive on the panel API; doesn't consume API rate limit quotas.
- Cons: Requires the server to be correctly registered in
velocity.toml
and network-accessible from the proxy. Might report a server as "online" slightly before it's fully joinable (e.g., before all backend plugins load). Some very minimal limbo servers might not respond to pings correctly.
"PANEL_API"
: Directly queries the Pterodactyl/Pelican/MC Server Soft panel API for the server's current state (e.g., "running", "offline").- Pros: Generally more accurate regarding the actual state of the server process as reported by the panel.
- Cons: Uses an API request for each check, contributing to rate limit usage. Can be slightly slower due to API call latency.
- Default:
"VELOCITY_PING"
- Example:
serverStatusCheckMethod: "VELOCITY_PING"
pingTimeout
- Description: If
serverStatusCheckMethod
is set to"VELOCITY_PING"
, this is the maximum time (in milliseconds) VPP will wait for a ping response from a backend server before considering it offline or unreachable. - Type:
Integer
(milliseconds) - Default:
1000
(1 second) - Example:
pingTimeout: 1000
shutdownRetries
- Description: If VPP sends a "stop" signal to a server and the server doesn't appear to shut down (based on subsequent status checks), VPP will retry sending the "stop" signal this many times.
- Type:
Integer
- Default:
3
- Example:
shutdownRetries: 3
shutdownRetryDelay
- Description: The time (in seconds) VPP will wait between failed shutdown attempts before retrying.
- Type:
Integer
(seconds) - Default:
300
(5 minutes) - Example:
shutdownRetryDelay: 300
idleStartShutdownTime
- Description: If a server is started by VPP (either by a player connecting or via command) but no player successfully joins it within this duration (in seconds), VPP will automatically shut it down. This prevents servers from staying online indefinitely if they were started but never actually used.
- Type:
Integer
(seconds) - Set to
-1
to disable this feature. - Default:
300
(5 minutes) - Example:
idleStartShutdownTime: 300
playerStartCooldown
- Description: The cooldown period (in seconds) a player must wait before they can initiate the start of another server, does not work for the
/ptero start
command. - Type:
Integer
(seconds) - Default:
10
- Example:
playerStartCooldown: 10
limboServer
- Description: The name of a server (as defined in your
velocity.toml
) to which players will be temporarily redirected while their target VPP-managed server is starting up. This provides a waiting area instead of disconnecting the player. - Type:
String
- Action: If set to
"changeMe"
or an invalid/unregistered server name, the limbo functionality is effectively disabled, and players might be disconnected if their target server is offline. - Default:
"changeMe"
- Example:
limboServer: "lobby"
Limbo Server Considerations
- The limbo server should be lightweight and always accessible.
- If the limbo server itself is managed by VPP, ensure its
timeout
setting (in theservers
section) is configured appropriately (e.g.,-1
to prevent auto-shutdown, or a very short timeout if it's designed to be ephemeral but quick to start).
startupInitialCheckDelay
- Description: After VPP sends a "start" signal to a server, it will wait this many seconds before performing the first status check to see if the server has come online.
- Type:
Integer
(seconds) - Default:
10
- Example:
startupInitialCheckDelay: 10
Note
The per-server
startupJoinDelay
is applied after this initial check confirms the server is online, before a player is connected.
stopIdleIgnore
- Description: A list of server names (as defined in
velocity.toml
and VPP'sservers
section) that will be ignored by the/ptero stopidle
command. These servers will not be shut down by this specific command even if they are empty. - Type:
List
ofString
- Default:
["hub", "lobby", "limbo"]
- Example:yaml
stopIdleIgnore: - lobby1 - lobby2 - hub
Important
This list only affects the
/ptero stopidle
command. It does not prevent automatic shutdown based on a server'stimeout
setting or the globalidleStartShutdownTime
. It also does not affect the/ptero forcestopall
command.
serverNotFoundMessage
- Description: If
true
, when a player attempts to connect to a server name that is registered invelocity.toml
but not configured in VPP'sservers
section, the player will receive a "server not found in configuration" message. A message is always logged to the console regardless of this setting. - Type:
Boolean
- Default:
false
- Example:
serverNotFoundMessage: false
Whitelist Settings
whitelistAllowBypass
- Description: If
true
, players with theptero.bypass
permission can bypass VPP's whitelist check when attempting to start/connect to a server that haswhitelist: true
in its per-server configuration. - Type:
Boolean
- Default:
true
- Example:
whitelistAllowBypass: true
Important Distinction
This setting only bypasses VPP's pre-connection check. It does not allow players to bypass the actual
whitelist.json
enforced by the backend Minecraft server itself. If a player bypasses VPP's check but is not on the backend server's whitelist, they will still be unable to join.
whitelistCheckInterval
- Description: The interval (in minutes) at which VPP will periodically attempt to re-fetch the
whitelist.json
file from servers that havewhitelist: true
configured. This helps keep VPP's internal whitelist cache up-to-date. - Type:
Integer
(minutes) - Set to
0
or a negative value to disable periodic automatic updates. Whitelists will still be fetched on plugin load/reload and via/ptero whitelistReload
. - Default:
10
- Example:
whitelistCheckInterval: 10
MC Server Soft Limitation
The whitelist fetching feature (and thus this interval) is not supported if your panel is MC Server Soft due to API differences.
Panel Connection (pterodactyl
)
INFO
This section of the config is still named pterodactyl
for compatibility reasons, even if you are using Pelican or MC Server Soft. The plugin will automatically detect the panel type based on the API key format.
This section contains the crucial details for connecting to your panel url.
pterodactyl.url
- Description: The full base URL of your panel.
- Type:
String
- Required: Yes
- Format: Must include the protocol (
http://
orhttps://
). It's generally recommended to ensure it ends with a/
if your panel requires it for API access (most do). - Example:
url: "https://panel.yourdomain.com/"
Cloudflare & Proxies
If you are using Cloudflare, a reverse proxy, or a tunnel in front of your panel, ensure that the URL points to the accessible endpoint and that any necessary IP bypass or security rules are configured to allow VPP to reach the API.
pterodactyl.apiKey
- Description: Your Client API Key for the panel.
- Type:
String
- Required: Yes
- Format:
- For Pterodactyl Panel: The key should start with
ptlc_
. - For Pelican Panel: The key should start with
plcn_
.
- For Pterodactyl Panel: The key should start with
- Location: You can generate/find this key in your account settings on the panel, usually under "API Credentials" or a similar section.
- Example:
apiKey: "ptlc_YOUR_CLIENT_API_KEY_HERE"
Critical: Use Client API Keys Only!
You must use a Client API Key. Application API Keys (which might start with
ptla_
for Pterodactyl orpeli_
for Pelican) are NOT supported by VPP and will result in connection failures. The Client API Key grants permissions on behalf of your user account.Information for MC Server Soft Users
Mc Server Soft doesnt have any kind of distinction between types of Api Keys. There is just one type.
Per-Server Configuration (servers
)
This section is where you define each individual Minecraft server that VelocityPteroPower should manage. Each entry is a sub-section named after the server as it appears in your velocity.toml
.
servers.<serverName>
Description: This is the block for a specific server. Replace
<serverName>
with the actual name of your server (e.g.,lobby
,survival
,minigames
). This name must exactly match the server name defined in your Velocityvelocity.toml
file (case-sensitive).Inside each
<serverName>
block, you define the following:id
- Description: The unique identifier of this server on your panel.
- Type:
String
- Required: Yes
- How to find:
- Pterodactyl: Look at the URL when viewing the server in the panel. If the URL is
https://panel.example.com/server/a1b2c3d4
, then the ID isa1b2c3d4
. - Pelican: This is typically the "Short UUID" found in the server's details page on the panel.
- Pterodactyl: Look at the URL when viewing the server in the panel. If the URL is
- Example:
id: "a1b2c3d4"
timeout
- Description: The time (in seconds) VPP will wait after the last player leaves this specific server before automatically sending a "stop" signal.
- Type:
Integer
(seconds) - Set to
-1
to disable automatic shutdown for this server when it becomes empty. - Set to
0
to attempt to stop the server immediately after the last player leaves. - Default (if not specified for a server, though it's good practice to specify): The plugin might have an internal default, but explicitly set it.
- Example:
timeout: 300
(5 minutes)
startupJoinDelay
- Description: After VPP detects that this server has successfully started and is "online" (according to
serverStatusCheckMethod
), it will wait an additional period (in seconds) defined by this value before attempting to connect waiting players to it. This delay allows backend server plugins and worlds to fully load and initialize. - Type:
Integer
(seconds) - Default (if not specified):
10
(as seen in the example config) - Example:
startupJoinDelay: 15
(wait 15 seconds after server reports online)
whitelist
- Description: If
true
, VPP will attempt to fetch thewhitelist.json
file for this server from the panel and enforce it for players attempting to start or connect to this server (unless bypassed by permission). - Type:
Boolean
- Default:
false
- Example:
whitelist: true
MC Server Soft Limitation
As mentioned previously, the whitelist fetching feature is not supported if your panel is MC Server Soft. Setting this to
true
for an MC Server Soft panel will likely result in VPP logging warnings and the whitelist check being ineffective.
Example config.yml
(fileversion: 8)
################################
# VelocityPteroPower #
# by TubYoub #
################################
# Version of the configuration file
fileversion: 8
# Check for updates
checkUpdate: true
# Choose which logging level should be used
# 10 = Debug, 20 = Info, 30 = Warning, 40 = Error
loggerLevel: 20
# How many Threads should be used for API requests
apiThreads: 10
# Print updated Rate Limit from the API response to console
printRateLimit: false
# Choose the method to check if a managed server is online
# "VELOCITY_PING" or "PANEL_API"
serverStatusCheckMethod: "VELOCITY_PING"
# Timeout for VELOCITY_PING (in milliseconds)
pingTimeout: 1000
# Retries for shutdown if previous failed
shutdownRetries: 3
# Delay before retrying shutdown (in seconds)
shutdownRetryDelay: 300
# Time before shutting down a server if no player joined after start (in seconds)
# -1 = disabled
idleStartShutdownTime: 300
# Cooldown for players starting a server (in seconds)
playerStartCooldown: 10
# Limbo server name (from velocity.toml)
# "changeMe" = disabled
limboServer: changeMe
# Initial delay before first online check after starting a server (in seconds)
startupInitialCheckDelay: 10
# Servers to ignore for /ptero stopIdle command
stopIdleIgnore:
- hub
- lobby
- limbo
# Send message to player if server not in VPP config
serverNotFoundMessage: false
# Allow players with ptero.bypass to bypass VPP's whitelist check
whitelistAllowBypass: true
# Interval for periodic whitelist checks (in minutes)
# 0 or less = disabled
whitelistCheckInterval: 10
# Panel configuration
pterodactyl:
url: "https://panel.example.com/"
apiKey: "ptlc_000000000000000000000000000000000000000000"
# Per server configuration
# Server names must match velocity.toml
servers:
lobby: # Example server 1
id: "a1b2c3d4"
timeout: -1 # Never auto-stop lobby
startupJoinDelay: 5
whitelist: false
survival: # Example server 2
id: "e5f6g7h8"
timeout: 600 # Stop after 10 minutes empty
startupJoinDelay: 15
whitelist: true
minigame-1: # Example server 3
id: "i9j0k1l2"
timeout: 120 # Stop after 2 minutes empty
startupJoinDelay: 10
whitelist: false