Skip to main content

Supported software

Install the plugin

1

Install the proxy plugins

Download Proxy Essentials from GitHub and place it in the proxy template’s plugins/ folder. Standard SimpleCloud templates already include simplecloud-api; add it through the target’s Plugins setting or the CLI if you use a custom template.
2

Generate the configuration

Start a proxy once. Proxy Essentials creates its data directory in one of these locations:
3

Keep the generated files in the template

For a group proxy, copy the generated plugin data directory from the running proxy back to the same path in its proxy template. Otherwise, changes made only in the temporary running directory disappear when that proxy stops.See Templates for how to move generated files into a template. Template changes apply the next time the proxy starts.
4

Apply and verify changes

Run /scproxy reload after editing files on a running proxy. If you edited its template instead, restart the proxy so it receives the changed files.
The proxy console should show Proxy Essentials starting without configuration or Cloud API errors.
/tab reload belongs to a different tablist plugin and does not reload Proxy Essentials. Use /scproxy reload on the proxy.

Generated files

Join states

A join state is a named access policy. The joinstates list in config.yml defines the available policies; the active state is stored on the selected SimpleCloud group or server instance. Join states can:
  • Require a permission to enter the proxy or a backend server
  • Require a separate permission to enter a full proxy network
  • Select a maintenance MOTD layout for the proxy
  • Apply to a complete group or one running server instance

Proxy groups and backend groups behave differently

Setting the Lobby group to maintenance does not change the public network MOTD. Set the proxy group to maintenance when you want to restrict the whole network and show its maintenance layout.

Define join states

config.yml
Run /scproxy reload after adding or changing state definitions. Reloading a definition does not activate it.

Activate maintenance for the network

Assume the proxy group is named Proxy:
1

Configure the maintenance state

Set forced-motd-layout: maintenance on the state and make sure layout/maintenance.yml exists with motd.enabled: true.
2

Reload the files

Run /scproxy reload on the proxy.
3

Set the state on the proxy group

The group command stores the state on the group and its currently running server instances. Instances without their own state fall back to the group state.
4

Verify the active state

Players now need simplecloud.proxy-essentials.join.maintenance to enter. Refresh the Minecraft multiplayer list to see the maintenance MOTD.
5

Open the network again

To restrict only a backend group or one server instance, use for example:
The first command changes the complete Lobby group and its running server instances. The second changes only Lobby-1.

MOTD layout priority

The proxy resolves its server list layout in this order:
  1. A valid layout stored on the proxy instance or group by /scproxy layout set
  2. The active join state’s forced-motd-layout
  3. initial-layout
A layout stored with /scproxy layout set takes priority over forced-motd-layout. If maintenance activates but the MOTD stays public, check /scproxy layout info <proxy-group>. Either manage the layout explicitly with /scproxy layout set when changing states, or avoid pinning a layout when join states should switch it automatically. The whitelist block currently present in the generated config.yml is not evaluated by the join checks. Use permission.join for administrator or maintenance access.

Server list layouts

Each file in layout/ is one selectable server list layout. The file name is its layout name, so layout/maintenance.yml is referenced as maintenance.
layout/public.yml
RANDOM selects a random MOTD entry on each server list ping. QUEUE cycles through the configured entries. Place icon files in layout/server-icons/. Use /scproxy layout set <group> <layout> only when you want to pin a layout independently of join-state changes.

MOTD by domain

Show a different server list layout to players based on the hostname they connected with, for example when multiple domains point at the same proxy. Add routes to the domains list in config.yml:
config.yml
Players connecting through play.example.com see the layout selected by the join state of the scalable Lobby group; players connecting through citybuild.example.com see the layout selected by the join state of the persistent Citybuild server.
  • Exact matching: domain must be the complete hostname, such as play.example.com. Wildcards and subdomains, such as *.example.com, are not supported.
  • Target scope: target names a group or a persistent server, not a single server instance such as Lobby-1.
  • Layout resolution: for a matching domain, the proxy uses the rules entry whose state matches the current join state on target. If that rule’s layout does not exist, it falls back to that join state’s global forced-motd-layout, then to initial-layout.
  • Default target: a hostname without a matching domain, or a route where none of the above resolves, falls back to the standard MOTD layout priority described above.
  • Live updates: routes recompute automatically when target’s join state changes. Run /scproxy reload after adding or editing entries in domains so the new routes take effect.
This only changes the server list MOTD. To also send players who connect through a domain to a specific server, combine it with Server Connection’s subdomain routing.

Tablist

Tablist entries live in config.yml. Their name is matched against the backend server on which each player is currently connected. The first matching rule is used in this order:
  1. Exact server name, case-insensitive
  2. First configured prefix, such as Lobby for Lobby-1
  3. *
  4. global
config.yml
Multiple layout entries under the same name rotate automatically. Currently, the lowest update-time from all tablist entries becomes one global interval for every entry. Use the same value for all entries and restart the proxy after changing it, because /scproxy reload does not recreate the scheduled task.

Player count

The displayed count includes all proxies in the current proxy group. You can add other groups and persistent servers.
config.yml
The update interval is measured in ticks.

Backend kick handling

config.yml
  • false keeps the proxy’s normal fallback behavior after a backend kick.
  • true disconnects the player from the proxy with the backend’s kick reason instead of sending them to a fallback server.

Text formatting

Proxy Essentials uses MiniMessage for MOTDs, tablists, and messages. Use tags such as <red>, <color:#0ea5e9>, <bold>, and <br>. Legacy & and § color codes are not supported.

Commands

Placeholders

Do not expose tokens, passwords, or other secrets through <env:NAME>. MOTDs are public, and tablist content is visible to connected players.
Configure <ping> colors in placeholder.yml:
placeholder.yml

Permissions

The last two permissions are defaults from config.yml; you can replace them with permissions from your own permission scheme.

Choose which features Proxy Essentials manages

Proxy Essentials does not have to manage every feature at once. For example, you can use its join states while another proxy plugin provides the MOTD or tablist. Configure one provider for each feature so plugins do not overwrite each other’s output.

Use another MOTD plugin

Set motd.enabled to false in every layout that the proxy can select:
layout/public.yml
Repeat this setting in layouts such as maintenance.yml, then run /scproxy reload. Proxy Essentials now leaves the complete ping response unchanged, including its description, icon, hover list, displayed version, and slots. The replacement MOTD plugin must run on the proxy. A plugin installed only on a Lobby or another backend does not receive the network’s public server list ping.

Use another tablist plugin

Use an empty list in config.yml:
config.yml
Run /scproxy reload. Proxy Essentials then stops sending tablist headers and footers. Players may need to reconnect before content sent previously disappears or is replaced by the other plugin. update-time: 0 only disables scheduled tablist updates when the proxy starts; it does not reliably hand the feature to another plugin. Use tablist: [] instead.

Stop restricting joins

Join states have no global enabled setting. Set every affected proxy and backend group back to an unrestricted state such as public:
Make sure that state’s permission.join is empty:
config.yml

Stop aggregating player counts

config.yml
Run /scproxy reload. The local proxy count remains available, but Proxy Essentials no longer adds players from the rest of the proxy group or additional targets.

Keep standard fallback handling

config.yml
Run /scproxy reload. The proxy can then handle backend kicks with its normal fallback behavior.

Stop using Proxy Essentials

Remove the Proxy Essentials JAR from all matching proxy templates and restart the proxies. Keep simplecloud-api installed if another plugin depends on it.

Troubleshooting

Confirm that Proxy Essentials and simplecloud-api are in the proxy template, then restart a matching proxy. Check the proxy console and the platform-specific data directory listed under Install the plugin. Installing the JAR on a Lobby does not load the proxy plugin.
Use /scproxy reload, not /tab reload. Confirm that you edited the files belonging to the running proxy. Changes made only in a template require a proxy restart; changes made only in a temporary running group instance disappear when it stops.
Follow Use another tablist plugin above, then check for any other proxy or backend plugin that sends tablist headers and footers.
Confirm that you changed the proxy group rather than only a backend group. Check that the state’s forced-motd-layout names an existing file with motd.enabled: true. Then check /scproxy layout info <proxy-group>: a layout stored with /scproxy layout set has higher priority than the join-state layout.
Confirm the DNS record for the domain points at this proxy and that the player connected with the exact hostname in domain; matching is case-insensitive but does not support wildcards or subdomains. Check that target is a group or persistent server name, not a single server instance. Confirm the current join state on target has a matching entry in rules, and that its layout names an existing file. Run /scproxy reload after editing domains.
Follow Use another MOTD plugin above and confirm that every selectable layout has been updated. A backend Lobby plugin cannot control the public proxy ping; use a compatible proxy MOTD plugin instead.
Replace legacy & or § codes with MiniMessage tags such as <green> or <color:#22c55e>, then reload the configuration.
Proxy Essentials server list MOTD example