Lost Crafters Server Switcher
Customizable /server command and connection management velocity plugin
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
Lost Crafters Server Switcher
LostCrafters Server Plugin
A Velocity plugin that provides a customizable `/server` command with support for server groups, GUIs (via Protocolize), and text-based selection.
Features
- MiniPlaceholders Support: Define groups of servers. Players only see servers within their current group. - MiniPlaceholders Support: Use Protocolize to show an interactive inventory for server selection. - MiniPlaceholders Support: Fallback to clickable chat messages if GUIs are disabled. - MiniPlaceholders Support: All messages support MiniMessage and can be fully customized in the config. - MiniPlaceholders Support: Fine-grained permission control. - MiniPlaceholders Support: Integration with MiniPlaceholders for dynamic placeholders from other plugins.
Commands
- `/server [server]`: Opens the server selection GUI/menu or connects directly to the specified server. - `/lcserver reload`: Reloads the plugin configuration.
Permissions
- `lostcrafters.server.use`: Allows use of the `/server` command. - `lostcrafters.server.reload`: Allows use of the `/lcserver reload` command. - `lostcrafters.serveraccess.<server>`: Grants access to connect to a specific server, where `<server>` is the internal Velocity server name. - `lostcrafters.serveraccess.*`: Grants access to all servers.
Note: By default, players have no access to any server. You must explicitly grant access via these permissions.
If a player's permission is revoked while they are connected to a server, they will be automatically redirected to a fallback server (as defined in `velocity.toml`) or disconnected if no fallback is available.
Configuration
The configuration is located at `plugins/lostcrafters/server/config.yml`.
Example Configuration
> Note: For GUI items, it is recommended to use vanilla Minecraft IDs (e.g., `minecraft:compass`). Modded items may not be supported by the GUI library and will default to a diamond sword if not found.
```yaml server-groups: survival_group: name: "<green>Survival Group</green>" show-gui: true enable-switch-broadcast: true servers: - lobby: name: "Lobby" item: "minecraft:compass" - survival: name: "Survival" item: "minecraft:iron_pickaxe" - creative: name: "Creative" item: "minecraft:grass_block" - staff_lounge: name: "Staff Lounge" hide-from-list: true minigames_group: name: "<yellow>Minigames Group</yellow>" show-gui: false servers: - minigames_lobby: name: "Minigames Lobby" item: "minecraft:clock" ```
Configuration Breakdown
Server Groups
Each entry under `server-groups` defines a collection of servers. - `name`: (String) The display name of the group. Supports MiniMessage. - `show-gui`: (Boolean) If `true`, a GUI (chest menu) will be shown when using `/server`. If `false`, a text-based selection message will be sent in chat. - `enable-switch-broadcast`: (Boolean, Optional, Default: `true`) If `true`, a message will be broadcast to all players within the group when a player switches from one server in the group to another.
Server Entries
Each server within a group is defined by its internal Velocity name and the following properties: - `name`: (String) The display name of the server. - `item`: (String, Optional, Default: `minecraft:diamond_sword`) The Minecraft item ID for the GUI representation (e.g., `minecraft:compass`). - `hide-from-list`: (Boolean, Optional, Default: `false`) If `true`, this server will be hidden from the GUI and the text selection list. The server remains accessible via `/server <name>` if the player has the appropriate permission. This is useful for servers like limbo lobbies or staff-only areas that you don't want to advertise in the general list.
Message Configuration
You can customize all plugin messages in the `messages` section of the config. The following placeholders are available and valid per message as indicated:
- `%servername%`: The display name of the server as configured in `server-groups`. - `%playercount%`: The current number of players online on that server. - `%players%`: A comma-separated list of names of players currently on that server. - `%server%`: The internal ID/name of the server. - `%player%`: The name of the player who is switching servers. - `%previousserver%`: The internal ID of the previous server. - `%previousservername%`: The display name of the previous server.
Valid Placeholders per Message:
| Message | Default Message | Valid Placeholders | | :--- | :--- | :--- | | `select-server` | `<yellow>Select a server: </yellow>` | (none) | | `server-format` | `[<green>%servername%</green>]` | `%servername%`, `%playercount%`, `%players%` | | `current-server-format` | `[<gray>%servername%</gray>]` | `%servername%`, `%playercount%`, `%players%` | | `hover-text` | `<aqua>%servername%</aqua><newline><white>Players (%playercount%): %players%</white>` | `%servername%`, `%playercount%`, `%players%` | | `no-permission` | `<red>You do not have permission to use this command.</red>` | (none) | | `reloaded` | `<green>Configuration reloaded.</green>` | (none) | | `server-not-found` | `<red>Server %server% not found.</red>` | `%server%` | | `already-connected` | `<red>You are already connected to %servername%.</red>` | `%server%`, `%servername%` | | `connecting` | `<green>Connecting to %servername%...</green>` | `%server%`, `%servername%` | | `no-server-permission` | `<red>You do not have permission to connect to %servername%.</red>` | `%server%`, `%servername%` | | `no-fallback-server` | `<red>You no longer have permission to be on this server and no fallback server is available.</red>` | (none) | | `server-switch-broadcast` | `<gray>%player% has switched from %previousservername% to %servername%</gray>` | `%player%`, `%server%`, `%servername%`, `%previousserver%`, `%previousservername%` |
Example usage in `hover-text`: ```yaml hover-text: "<aqua>%servername%</aqua><newline><white>Players (%playercount%): %players%</white>" ```
Dependencies
- Configurate (YAML): 3.4.0-SNAPSHOT - Configurate (YAML): 2.4.1 (Optional, required for GUIs) - Configurate (YAML): (Optional, for additional placeholders) - Configurate (YAML): For permission management - Configurate (YAML): For configuration management