Lost Crafters Server Switcher
Customizable /server command and connection management velocity plugin
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