JoinMe is a powerful and engaging proxy plugin designed to enhance player interaction on your proxy network. With JoinMe, players can share their current server with others, complete with a visually appealing avatar display and clickable commands to join instantly. The plugin includes a robust token system for rewarding players, customizable cooldowns, blacklisted servers, server aliases, and detailed configuration options to tailor the experience to your network's needs.
JoinMe supports both Velocity and BungeeCord proxy servers and adds a fun, interactive way for players to connect — while giving administrators full control over permissions, costs, and messaging.
Features
Multi-Platform Support: Works seamlessly on both Velocity and BungeeCord proxy servers.
Server Sharing: Players can broadcast their current server with a stylized message and pixelated skin avatar.
Temporary Join Links: Clickable joins use a temporary (5-minute) internal ID with the /joinme goto command for controlled connections.
Server Aliases & Descriptions: Configure per-server display names and optional descriptions shown in join broadcasts.
Token System: Configurable token costs for /joinme, daily claims, VIP bypass, file or MySQL/MariaDB storage.
Avatar Rendering: Displays a player's Minecraft skin as a pixelated avatar in chat. Uses the proxy profile when online, with automatic Steve-skin fallback if loading fails.
LuckPerms Integration: Optional rank prefix placeholder (%player_prefix%) in join messages for colored rank tags.
Cooldowns & Permissions: Prevent spam with customizable cooldowns and bypass permissions for VIPs or staff. Option to disable permission requirement entirely.
Blacklisted Servers: Restrict the /joinme command on specific servers (e.g., lobbies).
Daily Token Claim: Encourage engagement with a daily token claim system (configurable interval and amount).
Customizable Messages: Fully customizable messages using MiniMessage for rich formatting and clickable actions.
Admin Tools: Manage tokens (including offline players and console), reload configurations, and monitor usage with detailed commands.
Developer API: Public API for other plugins to get, set, give and remove JoinMe tokens.
Backend Token Bridge: Backend plugins can grant tokens via the joinme:give plugin message channel.
bStats Integration: Track plugin usage with lightweight metrics.
Version Checker: Automatically notifies admins about new plugin updates.
Commands
/joinme
Broadcasts the player's current server with a stylized message, generating a temporary ID for direct joining.
Costs configurable JoinMe Tokens (default: 1, can be disabled).
Players with the permission 'joinme.vip' do not need to spend tokens when using this command.
Respects cooldowns and blacklisted servers.
Permission: joinme.use (can be disabled via config)
/joinme goto <ID>
Allows joining a server using the temporary ID generated by the /joinme command.
This command is primarily used via the clickable link in chat.
/joinme help
Displays a help menu with all available commands.
Can be used by the console.
/joinme reload
Reloads the plugin's configuration file.
Permission: joinme.reload
Can be used by the console.
/joinme tokens
Shows the player's current JoinMe Token balance.
/joinme tokens <player>
Displays another player's token balance (also works for offline players when LuckPerms is installed).
/joinme tokens claim
Claims daily JoinMe Tokens (configurable amount and interval).
/joinme tokens give <player|uuid> <amount>
Gives tokens to a specified player (online, offline via LuckPerms, or by UUID).
Permission: joinme.tokens.manage
Can be used by the console.
/joinme tokens remove <player|uuid> <amount>
Removes tokens from a specified player (online, offline via LuckPerms, or by UUID).
Permission: joinme.tokens.manage
Can be used by the console.
Placeholders Join messages and goto messages support the following placeholders:
%player% — Player name
%player_prefix% — LuckPerms prefix (MiniMessage formatted, empty if LuckPerms is not installed)
%server% / %server_alias% — Configured server alias (falls back to internal name)
%server_name% — Internal proxy server name
%server_description% — Per-server description from config
// grant tokens byte[] payload
= JoinMeGrantBridge.
encode(player.
getUniqueId(), amount
); player.
sendPluginMessage(this, JoinMeGrantBridge.
CHANNEL, payload
);
Configuration JoinMe offers a highly customizable
config.yml file where you can:
Set cooldown durations and token costs.
Define blacklisted servers and per-server aliases/descriptions.
Configure the daily token claim system (enabled/disabled, amount, interval).
Choose token storage: file (tokens.yml) or sql (MySQL/MariaDB).
Enable or disable permission requirement for the /joinme command.
Customize all messages with MiniMessage formatting.
Code (YAML):
# =================================================== # JoinMe Plugin Configuration # =================================================== settings: # Whether the 'joinme.use' permission is required to use the /joinme command. # Set to false to allow all players to use the command. require-permission: true
# Cooldown in seconds before a player can use the /joinme command again. cooldown: 5
# Amount of JoinMe Tokens deducted when a player uses the /joinme command. # Set to 0 to disable the cost. token-cost: 1
# Configuration for blacklisted servers where the /joinme command cannot be used. blacklist: - lobby2
# Configuration for the different servers. servers:
lobby:
alias: "Lobby" description: " <gray>Welcome to the Heart of our Network!</gray>" citybuild:
alias: "CityBuild" description: " <gray>Gather resources and build with your friends!</gray>"
# Type of description display. Options: "line", "none" description-type: "line"
# Configuration for the daily token claim system. token-claim: # Whether the daily token claim system is enabled. enabled: true
# Amount of tokens players receive when claiming. amount: 5
# Interval in hours between claims. interval-hours: 24
# Token storage backend. Options: "file", "sql" # file - stores tokens in tokens.yml and claim_times.yml (default) # sql - stores tokens in a MySQL/MariaDB database (requires JDBC driver on the proxy) token-storage:
type: file
sql:
host: localhost
port: 3306
database: joinme
username: root
password: "" table-prefix: joinme_
# =================================================== # Message Configuration # =================================================== messages: # Plugin prefix used in all messages. prefix: "<gray>[<aqua>JoinMe</aqua>]</gray>"
# Message displayed when a player uses /joinme. # Placeholders: %player%, %player_prefix% (LuckPerms), %server% (alias if configured), %server_alias%, %server_name% (internal name), %serverId% join-message-line1: " %player_prefix%<aqua>%player%</aqua> <gray>is playing on</gray> <aqua>%server%</aqua><dark_gray>!</dark_gray>" join-message-line2: " <gray>Click</gray> <aqua><bold><click:run_command:/joinme goto %serverId%>HERE</click></bold></aqua><gray>, to join him</gray><dark_gray>!</dark_gray>" join-command-message: "<gray>%prefix% or use <yellow>/joinme goto %serverId%</yellow>, to join him</gray><dark_gray>!</dark_gray>"# You can leave the line empty so that it is not displayed. goto-connecting: "<green>%prefix% Connecting to <yellow>%server%</yellow>...</green>" goto-already-on-server: "<yellow>%prefix% You are already on server <aqua>%server%</aqua>.</yellow>" goto-server-not-found: "<red>%prefix% Server '<yellow>%server%</yellow>' not found or offline.</red>" goto-invalid-id: "<red>%prefix% Invalid JoinMe ID.</red>"
# Error messages. command-permission-message: "<red>%prefix% You don't have permission for this!</red>" command-player-only: "<red>%prefix% This command can only be executed by players.</red>" cooldown-message: "<red>%prefix% You can use this command again in <yellow>%remaining_seconds%</yellow> seconds.</red>" blacklist-message: "<red>%prefix% This command cannot be used on this server.</red>" not-enough-tokens: "<red>%prefix% You don't have enough JoinMe Tokens. Cost: <yellow>%cost%</yellow></red>" invalid-amount: "<red>%prefix% Amount must be a positive number.</red>" invalid-number: "<red>%prefix% Invalid number.</red>" player-not-found: "<red>%prefix% Player '<yellow>%player%</yellow>' not found.</red>"
# Token related messages. tokens-balance-self: "<green>%prefix% Your JoinMe Tokens: <yellow>%tokens%</yellow></green>" tokens-balance-other: "<green>%prefix% %player%'s JoinMe Tokens: <yellow>%tokens%</yellow></green>" tokens-given: "<green>%prefix% You have given <yellow>%amount%</yellow> JoinMe Tokens to <aqua>%player%</aqua>.</green>" tokens-received: "<green>%prefix% You have received <yellow>%amount%</yellow> JoinMe Tokens from <aqua>%sender%</aqua>.</green>" tokens-removed: "<red>%prefix% You have removed <yellow>%amount%</yellow> JoinMe Tokens from <aqua>%player%</aqua>.</red>" tokens-claimed: "<green>%prefix% You have claimed <yellow>%amount%</yellow> JoinMe Tokens.</green>" tokens-claim-cooldown: "<red>%prefix% You can claim JoinMe Tokens again in <yellow>%time_remaining%</yellow>.</red>" tokens-claim-disabled: "<red>%prefix% The daily token claim is currently disabled.</red>" token-cost-used: "<yellow>%cost% JoinMe %token_label% used.</yellow>" tokens-usage-admin: "<red>%prefix% Usage: /joinme tokens <give|remove> <player> <amount></red>" tokens-usage: "<red>%prefix% Usage: /joinme tokens [claim | <player>]</red>" permission-manage-tokens: "<red>%prefix% You don't have permission to manage tokens.</red>"
# Help command messages. help-header: "<green>JoinMe Commands:</green>" help-joinme: "<yellow>/joinme</yellow> - Shows your current server to other players." help-reload: "<yellow>/joinme reload</yellow> - Reloads the configuration." help-tokens-balance: "<yellow>/joinme tokens</yellow> - Shows your JoinMe Token balance." help-tokens-balance-other: "<yellow>/joinme tokens <player></yellow> - Shows the JoinMe Token balance of another player." help-tokens-give: "<yellow>/joinme tokens give <player> <amount></yellow> - Gives JoinMe Tokens to a player (Admin only)." help-tokens-remove: "<yellow>/joinme tokens remove <player> <amount></yellow> - Removes JoinMe Tokens from a player (Admin only)." help-tokens-claim: "<yellow>/joinme tokens claim</yellow> - Claims your daily JoinMe Tokens."