SideGate Documentation
Spigot/Bukkit/Paper Setup and Usage Guide
1) Overview
SideGate is a hybrid-login plugin for servers that keep
online-mode=true but still need selected non-premium usernames to join as
Guest.
What SideGate does:
- Lets premium players continue normal Mojang authentication.
- Lets detected Floodgate/Geyser Bedrock players continue their normal Bedrock authentication flow.
- Allows selected non-premium users through guest flow.
- Marks guest players with tag SideGate_Guest.
- Applies configurable guest restrictions/messages.
2) Requirements
- Java: 17+
- Server: Spigot / Paper / Purpur (Bukkit-compatible)
- Dependency: ProtocolLib 5.x+
- Optional integrations: Floodgate and/or Geyser-Spigot
- Server property: online-mode=true
3) Installation
- Install ProtocolLib first.
- Optionally install Floodgate and/or Geyser-Spigot for automatic Bedrock detection.
- Place SideGate jar in /plugins.
- Set online-mode=true in server.properties.
- Start/restart server.
- Edit plugins/SideGate/config.yml.
4) Command & Permission
- /sidegate reload - reload config and runtime listeners
- sidegate.admin - required to use reload command
5) Config Reference
Code (YAML):
# SideGate Configuration
# Master switch for all guest behavior
enable-guest-mode
: true
# If true, SideGate checks Mojang API first
# Premium name => pass to normal premium login
# Non-premium name => continue guest policy
# API unavailable/error => keep normal online-mode authentication
auto-detect-premium
: true
# Guest admission mode:
# true = allow all non-premium usernames
# false = only names listed in allowed-guests
allow-all-guests
: false
# Names always treated as premium (manual override)
premium-usernames
:
-
"TamKungZ"
# What to do when a cracked client uses a Premium-registered name
premium-session-failure
:
# KICK_WITH_MESSAGE or FALLBACK_TO_GUEST
action
:
"KICK_WITH_MESSAGE"
message
:
"&cThis username belongs to a Premium account.\n&eChange your username and try again."
# Used only when allow-all-guests=false
allowed-guests
:
-
"FriendName1"
-
"FriendName2"
guest-settings
:
# SURVIVAL, CREATIVE, ADVENTURE, SPECTATOR
default-gamemode
:
"SURVIVAL"
# Prefix added only for guest-tagged players
chat-prefix
:
"&7[Guest] &r"
messages:
join-title
:
"&cACCESS RESTRICTED"
join-subtitle
:
"&7Guest Mode"
join-message
:
-
"&c=================================="
-
"&6 Welcome to SideGate Protocol"
- "&7 Account Status
:
&cGuest
(Non-License
)
"
- "&7 You have restricted gameplay access.
"
- "&c==================================
"
6) Behavior Details
- Premium flow: If detected premium (or in premium-usernames), SideGate does not force guest handling.
- Bedrock flow: If Floodgate/Geyser identifies the player as Bedrock, SideGate bypasses guest handling and removes any stale SideGate_Guest tag.
- Kick with message: KICK_WITH_MESSAGE compares the login UUID with the official Mojang UUID before encryption and rejects a mismatch with premium-session-failure.message.
- Guest fallback: FALLBACK_TO_GUEST treats a Premium-name UUID mismatch as Guest before encryption; it also supports same-connection fallback when an invalid encrypted session response is available.
- Requirement: Both Premium session failure modes require auto-detect-premium=true.
- Security: A client that spoofs the exact official UUID remains on normal online-mode authentication and must still pass Mojang session verification.
- Guest flow: If allowed by policy, login is injected and player joins as guest.
- Lookup failure: If Mojang API is unavailable or returns an unexpected response, SideGate leaves authentication to the server and does not grant guest access.
- Guest tag: SideGate_Guest is added on join for guest players.
- Guest chat: Prefix is applied only when the player has guest tag.
- Guest mode off: When enable-guest-mode=false, guest handling is skipped.
7) Public API (for Addon Plugins)
SideGate exposes service interface
me.tamkungz.sidegate.api.SideGateApi via Bukkit ServicesManager.
- isGuestModeEnabled()
- isAutoDetectPremiumEnabled()
- isAllowAllGuestsEnabled()
- isConfiguredPremium(String username)
- isKnownPremiumCached(String username)
- checkPremium(String username)
- isGuest(Player player)
Example (Addon Plugin)
Code (Java):
import
me.tamkungz.sidegate.api.SideGateApi
;
import
me.tamkungz.sidegate.api.SideGateApiProvider
;
SideGateApi api
= SideGateApiProvider.
get
(
)
;
if
(api
!=
null
&& api.
isGuest
(player
)
)
{
// guest-only logic
}
8) Troubleshooting
Issue:
Failed to inject guest
- Confirm ProtocolLib is loaded and up to date.
- Confirm server is running with online-mode=true.
- Test with auto-detect-premium=false to isolate Mojang API influence.
- Provide full login logs when opening issue.
Issue: Guest not allowed to join
- Check enable-guest-mode is true.
- If allow-all-guests=false, ensure username is in allowed-guests.
- Verify exact username spelling and case behavior.
Issue: Cracked client uses a name that belongs to a Premium account
- Use KICK_WITH_MESSAGE to tell the player to change their username.
- Use FALLBACK_TO_GUEST to continue the same failed Premium session as Guest.
- Run /sidegate reload after changing the action.
- FALLBACK_TO_GUEST applies server-wide and permits Premium-name impersonation with Guest/offline UUIDs. Use an authentication plugin to protect identities.
Issue: Bedrock player is shown as Guest
- Confirm Floodgate or Geyser-Spigot is installed and enabled on the Bukkit backend.
- Check startup logs for Floodgate integration enabled or Geyser integration enabled.
- If Geyser/Floodgate runs only on a proxy, install and configure the matching backend integration so SideGate can identify the player.
- Include Floodgate/Geyser versions and the full login log when reporting the issue.
9) Links
10) License & Usage Policy
Closed Source
- Normal server usage is allowed.
- Separate addon plugins using SideGate public API are allowed.
- Modification/redistribution/repackaging of SideGate is not allowed without permission.
- Commercial use/monetization requires prior permission by email: [email protected]