-
Notifications
You must be signed in to change notification settings - Fork 1
Configuration
Click to reveal
{
"paper": {
"use-mini-messages": false
},
"database": {
"enabled": false,
"driver": "SQLite",
"drivers": [
{
"name": "SQLite",
"class": "SQLiteImplementation",
"download-driver": true,
"download-url": "https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.49.1.0/sqlite-jdbc-3.49.1.0.jar",
"file": "players-data.db",
"args": {
"journal_mode": "WAL",
"synchronous": "NORMAL"
},
"timeout": 5000,
"save-interval": 10,
"max-batch-size": 25
},
{
"name": "JSON",
"class": "JsonImplementation",
"compact": false,
"keep-loaded": false,
"file": "players-data.json",
"split": {
"enabled": false,
"file": "player-data/{uuid}.json"
}
},
{
"name": "Memory",
"class": "MemoryCacheImplementation"
}
],
"debug": false
},
"online-authentication": {
"enabled": false,
"allow-offline-players": false,
"use-service": "PlayerDB",
"fallback-services": [
"MojangAPI"
],
"fallback-service-remember-time": 21600,
"max-timeout": 6000,
"min-timeout": 1000,
"check-for-online-unique-id": true,
"send-messages-to-console": true,
"send-error-messages-to-console": true,
"service-connection-throttle": 5000,
"service-connection-throttled-message": "UUID service connection throttled, wait {time-left} seconds until you can connect again!",
"service-defaults": {
"expect-status-code": 200,
"custom-placeholders": {
"failed": "Failed to get your online profile",
"contact": "contact server's administrator!",
"try-again": "try again later!"
},
"default-disconnect-message": "&c{custom.failed}",
"bad-unique-id-disconnect-message": "&c{custom.failed} (bad unique ID), {custom.contact}",
"connection-error-disconnect-message": "&c{custom.failed} (connection error), {custom.contact}",
"bad-status-disconnect-message": "&c{custom.failed} (service returned {http.status}), {custom.contact}",
"unknown-error-disconnect-message": "&c{custom.failed} (unknown error), {custom.contact}",
"timeout-disconnect-message": "&c{custom.failed} (service timed out), {custom.try-again}",
"rate-limited-disconnect-message": "&c{custom.failed} (service rate limited), {custom.try-again}",
"properties-failed-disconnect-message": "&c{custom.failed} (bad properties), {custom.try-again}",
"custom-status-code-disconnect-messages": {},
"timeout": 3000,
"debug": false,
"allow-database-caching": true,
"cache-keep-time": 7200,
"cache-in-memory": false,
"use-fallbacks": [
"ON_CONNECTION_ERROR",
"ON_INVALID_UUID",
"ON_BAD_UUID_PATH",
"ON_UNKNOWN_ERROR",
"ON_BAD_STATUS",
"ON_BAD_PROPERTIES",
"ON_SERVICE_RATE_LIMITED",
"ON_SUB_SERVICE_RATE_LIMITED",
"ON_SERVICE_TIMEOUT",
"ON_SUB_SERVICE_TIMEOUT"
],
"headers": {
"Accept": "application/json"
},
"query-data": {},
"post-data": {}
},
"services": [
{
"name": "PlayerDB",
"endpoint": "https://playerdb.co/api/player/minecraft/{username}",
"json-path-to-uuid": "data.player.id",
"json-path-to-properties": "data.player.properties",
"expect-status-code": null,
"response-handlers": [
{
"event": "POST_REQUEST",
"allow-player-to-join": true,
"conditions": {
"response.code": "minecraft.invalid_username"
}
}
]
},
{
"name": "MojangAPI",
"endpoint": "https://api.mojang.com/users/profiles/minecraft/{username}",
"json-path-to-uuid": "id",
"expect-status-code": null,
"request-services-for-properties": ["MojangSessionServer"],
"require-properties": true,
"response-handlers": [
{
"event": "POST_REQUEST",
"allow-player-to-join": true,
"conditions": {
"::response.errorMessage": true
}
}
],
"max-requests-per-minute": 60
},
{
"name": "MojangSessionServer",
"endpoint": "https://sessionserver.mojang.com/session/minecraft/profile/{response.id}",
"query-data": {
"unsigned": false
},
"max-requests-per-minute": 60,
"json-path-to-properties": "properties"
}
]
},
"player-randomizer": {
"enabled": false,
"use-properties": true,
"fetch-properties-from-services": true,
"username": {
"randomize": true,
"out-of-usernames-disconnect-message": "&cWe seem to hit the limit of random available usernames!",
"save": false,
"expire": -1,
"from-length": 3,
"to-length": 16,
"characters": "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM123456789_"
},
"unique-id": {
"randomize": true,
"save": false,
"expire": -1
}
},
"swapped-unique-ids": {
"enabled": false,
"swap": {
"Notch": "00000000-0000-0000-0000-000000000000",
"00000000-0000-0000-0000-000000000000": "00000000-0000-0000-0000-000000000001"
}
},
"swapped-player-names": {
"enabled": false,
"swap": {
"Notch": "Herobrine",
"00000000-0000-0000-0000-000000000000": "jeb_"
}
},
"command-messages": {
"prefix": "&b[UUIDSwapper] &r",
"no-arguments": [
"{prefix} Available sub-commands:",
"&eReload configuration&r",
" /{command} reload",
"&eSet player's new username, properties and UUID on next login. Resets after second re-login!",
"UUID is optional, if not defined, we will try to fetch the UUID from existing services, offline UUID otherwise.&r",
" /{command} pretend <new username> [fetch properties?] [new UUID]",
"&eTest service. UUID is optional, if empty - offline UUID will be made based on the username.&r",
" /{command} test <service> <username> [UUID]"
],
"reload-success": "{prefix}&aPlugin successfully reloaded! (took {took}ms",
"reload-database-driver-failed": "{prefix}&rFailed to load {driver} driver from configuration! Database will be disabled.",
"reload-failed": [
"{prefix}&cFailed to reload configuration, check console for full error!",
"{prefix} Error: &4{exception_message}",
"{prefix} &fOld configuration reverted."
],
"player-pretend-success": [
"{prefix}Your player data was changed:",
"{prefix} New username -> &a{new_username}",
"{prefix} New UUID -> &a{new_uuid}",
"{prefix}Relog in order to log as that player. &cIf you log out from that player, you will get logged back in your original player!"
],
"player-pretend-failed": "{prefix}&cFailed to pretend a player, check console for full error"
}
}! Options with prefixed star (*) are required !
This only works on paper and velocity!
| Option | Description | If undefined |
|---|---|---|
| use-mini-messages | Should plugin use Paper's MiniMessages (color codes with & won't work if this is enabled) |
false |
Database is used for caching fetched player data.
| Option | Description | If undefined |
|---|---|---|
| *enabled | Should database be enabled | false |
| *driver | Which driver to use from drivers array |
SQLite |
| debug | Should debug message to console be enabled (shows when connection was open/close etc.) | false |
| drivers | Defined drivers implementations (SQLiteImplementation, JsonImplementation, MemoryCacheImplementation) |
SQLite (JDBC) file-based driver to use for caching player data. The driver is not bundled with the plugin but you have the ability to automatically download it and load it.
| Option | Description |
|---|---|
| *name | Name of the driver |
| *class | (Do not edit unless you are implementing your own driver!!!) Driver class path to load and initiate for later use, if class is defined without a package, it's treated as built-in one |
| save-interval | Interval in minutes between automatic saves to file or database |
| max-batch-size | The maximum number of data saved to the database in one go before moving on to the next batch/group |
| download-driver | Should SQLite driver be downloaded |
| download-url | Download URL to download driver from |
| file | File to store SQLite database |
| timeout | Database timeout in milliseconds |
| args | SQLite arguments |
JSON file-based driver to use for caching player data. JSON example:
{
"7d65089d-61cc-3566-8b18-be38e4cb73f1": {
"random": {
"username": "pFOdjSDK",
"unique-id": "0946c8b4-79cd-3039-86c3-5a704381cd23",
"created-at": 1757972403939
},
"online": {
"unique-id": "0946c8b4-79cd-3039-86c3-5a704381cd23",
"properties": [
// Properties here
],
"created-at": 1757972403939
}
}
}Sections random and online are dependant on randomizer/online authentication settings. To clear those sections up, execute the main command with modify-data del-section all online (or random).
If JSON driver is set to split to separate files, then UUID won't be specified in the JSON itself but rather the file name.
| Option | Description |
|---|---|
| *name | Name of the driver |
| *class | (Do not edit unless you are implementing your own driver!!!) Driver class path to load and initiate for later use, if class is defined without a package, it's treated as built-in one |
| *keep-loaded | Should JSON be always loaded |
| *compact | Should JSON be compacted or pretty |
| *file | File to store JSON (directories supported) |
| *split.enabled | Should player data be saved separately for each player |
| *split.file | File with sub-folder to store separate player data (if no folder is specified, player-data/ will be prefixed) |
Memory-based driver to use for caching player data, be aware that data does not persist between restarts!
| Option | Description |
|---|---|
| *name | Name of the driver |
| *class | (Do not edit unless you are implementing your own driver!!!) Driver class path to load and initiate for later use, if class is defined without a package, it's treated as built-in one |
Request services to get player's UUID (unique id) or online properties, player can get disconnected if something fails, unless response handlers are specified in the service's configuration.
| Option | Description | If undefined |
|---|---|---|
| *enabled | Should online authentication be enabled | |
| allow-offline-players | Should offline players be allowed on online/secure server (Velocity/BungeeCord only) | false |
| *use-service | Which service to use | |
| *fallback-services | Which services to use next (in order) if above one fails (array) |
|
| fallback-service-remember-time | For how much time should last used successful service be remembered | 21600 |
| max-timeout | Max timeout for all requests summed up (-1 to disable) | 6000 |
| min-timeout | Min timeout for a single request (0 to disable) | 1000 |
| check-for-online-unique-id | Check if player connects with online UUID (skips service requests). This works by comparing generated offline UUID to player's UUID | true |
| send-messages-to-console | Send plugin messages to console (e.g., when successfully fetched) | true |
| send-error-messages-to-console | Send plugin error messages | true |
| service-connection-throttle | How much time to wait (milliseconds) before requesting already used service | 5000 |
| *service-connection-throttled-message | Connection throttled disconnect message | null |
| *service-defaults | Everything that is defined here will be copied over all services (unless some service override that value) | |
| *services | Service list (array) |
Whatever is defined in this section is also going to be available in service's configuration.
| Option | Description | If undefined |
|---|---|---|
| request-method | Request method to use (GET or POST) | GET |
| expect-status-code | Expected status code from service's endpoint | 200 |
| default-disconnect-message | Default disconnect message | null |
| bad-unique-id-disconnect-message | Disconnect message when service failed to get UUID from specified JSON path | null |
| connection-error-disconnect-message | Unknown connection error disconnect message | null |
| bad-status-disconnect-message | Unexpected request's returned status code disconnect message | null |
| unknown-error-disconnect-message | Internal unknown/overlooked error disconnect message | null |
| timeout-disconnect-message | Service timed-out disconnect message | null |
| rate-limited-disconnect-message | Service rate limited disconnect message | null |
| properties-failed-disconnect-message | Failed to get properties disconnect message | null |
| custom-status-code-disconnect-messages | Custom disconnect messages (key -> value) based on returned service's status code.For example: "500": "Failed to get your online UUID because service returned internal error!" |
Empty |
| max-requests-per-minute | Max request per minute for the service | |
| timeout | Service's time-out time in milliseconds | |
| allow-database-caching | Should service's fetched player data be cached in database (if enabled) | true |
| require-properties | Should properties be required (disconnect otherwise) | false |
| custom-placeholders | Custom placeholders (key -> value) to use in disconnect messages and response handlers |
|
| debug | Should debug messages to console be enabled | false |
| use-fallbacks | On which circumstances should next (fallback) service be used | Empty |
| post-data | Post (key -> value) data for service's request to the endpoint |
Empty |
| query-data | Query (key -> value) data for service's request to the endpoint |
Empty |
| headers | Headers (key -> value) for service's request to the endpoint |
Empty |
A service is used for fetching player's data.
| Option | Description | If undefined |
|---|---|---|
| enabled | Should this service be enabled | true |
| *name | Name for the service that can be used in use-service or fallback-services
|
|
| *endpoint | Endpoint to where request should be sent | |
| json-path-to-uuid | JSON path to player's unique ID (support dashless UUIDs too), leave empty if response is suppose to be text only | null |
| json-path-to-properties | JSON path to player's properties | null |
| request-services-for-properties | Which services should be used for fetching player's properties, json-path-to-properties is also included if defined |
Empty |
| response-handlers | Custom response handlers | Empty |
Handle request's response - allow player to join/disconnect them, set properties required and etc., based on conditions. Response handlers are checked one by one until it finds the matching one, and executes it.
| Option | Description | If undefined |
|---|---|---|
| *order | In which order should this response handler be executed (ascending) | 9999 |
| *event | At what event should this response handler be executed. Available events:PRE_REQUEST - action before requestPOST_REQUEST - action after requestFETCHED_UUID - action when UUID was fetchedPRE_PROPERTIES_FETCH - action when properties are about to be fetched (and checked if they should be fetched)FETCHED_PROPERTIES - action when properties were fetchedPRE_FALLBACK_USE - action on before any fallback usePLAYER_DATA_FETCHED - last action when player's UUID and/or properties were fetched |
|
| allow-player-to-join | Should the player be allowed to join (this is forceful option, meaning if it's true, no matter what, the player will be able to join, if false - instant disconnect, null - allow plugin to decide internally) | null |
| apply-properties | Should properties be applied for the player | true |
| require-properties | Should properties be required to be requested and applied (disconnect if no properties or fallback could be used) | null |
| disconnect-message | Custom disconnect message if allow-player-to-join is set to false |
null |
| message-to-console | Send custom message to console (extra debugging?) | null |
| console-message-type | Message type to send to console (INFO/WARNING/ERROR) | INFO |
| conditions-mode | Message type to send to console (AND / OR) | AND |
| ignore-conditions-case | Should conditions ignore placeholder value casing | false |
| force-string-on-conditions | When comparing, should placeholder's value and specified value be converted to string for comparison | false |
| conditions | Conditions (placeholder -> value) to check if response handler should be executed. Note that not everything can be a text (in "" quotes), comparison is done checking if both objects are equal, or if you really want simplicity, enable above setting |
Empty |
Randomize player's username and UUID. This will be prioritized if online authentication is enabled (it also depends if fetch-properties-from-services is enabled)!
| Option | Description |
|---|---|
| *enabled | Should randomizer be enabled |
| *use-properties | Should properties be applied (skin textures) |
| *fetch-properties-from-services | Should properties first be fetched from services (doesn't matter if online authentication is disabled |
| *username.randomize | Should plugin randomize player's username |
| *username.save | Should player's random username be remembered. |
| *username.expire | When should saved username expire (seconds) |
| *username.characters | Random characters to pick from |
| *username.from-length | Minimum length of randomized username |
| *username.to-length | Maximum length of randomized username |
| *unique-id.randomize | Should plugin randomize player's unique ID (UUID) |
| *unique-id.save | Should player's random unique ID be remembered |
| *unique-id.expire | When should saved unique ID expire (seconds) |
Swap player's unique id/username to another unique id.
| Option | Description |
|---|---|
| *enabled | Should player unique id swapping be enabled |
| *swap | A map (uuid/username -> uuid) for swapped unique ids |
Swap player's UUID/username to a new username.
| Option | Description |
|---|---|
| *enabled | Should player username swapping be enabled |
| *swap | A map (uuid/username -> username) for swapped unique ids |
Messages for command outputs. Placeholders available in all messages:
{command} - command name
{prefix} - prefix defined in prefix
| Option | Description |
|---|---|
| *prefix | Command's prefix |
| *no-arguments | Message when no arguments |
| *reload-success | Message when reload was successful. Available placeholders:{took} - how many milliseconds took to |
| *reload-database-driver-failed | Message when database driver failed to load. Available placeholders:{driver} - driver's name that failed to load |
| *reload-failed | Message when plugin failed to reload. Available placeholders:{error.class} - exception's full (with package) class{error.class-name} - exception's class name{error.message} - exception's message |
| *player-pretend-success | Message when player successfully pretends to be another player on next server join. Available placeholders:{new_username} - player's new username{new_uuid} - player's new unique ID |
| *player-pretend-failed | Message when plugin wasn't able to fake another player |
This file was auto-generated by an annotation processor.