SlipIntoSkin Documentation
Setup, commands, permissions and configuration
Requirements
- SkinsRestorer is required. SlipIntoSkin depends on SkinsRestorer and will not run without a compatible SkinsRestorer v15 API.
- Java 21 is required. The plugin is built with a Java 21 toolchain.
- Minecraft 1.21.11 is the main target. The plugin was coded against Spigot API 1.21.11, but may work on nearby versions.
- Internet access is required. Your server must be able to connect to wss://slipinto.skin/api/plugin/ws.
Installation
- Install SkinsRestorer on your server.
- Download slipintoskin.jar from https://slipinto.skin/api/plugin/download.
- Place slipintoskin.jar inside your server's plugins folder.
- Restart the server.
- SlipIntoSkin will create its config file and automatically register the server with the web service.
- After registration, server-id and shared-token are saved automatically.
- Run /sis status to check the connection.
First Start
On first startup, the plugin checks the config. If
server-id or
shared-token is empty, it sends a registration request to the web service. The received credentials are saved into
config.yml, then the plugin connects to the SlipIntoSkin WebSocket.
If the credentials are already present, the plugin skips registration and connects directly.
Player Usage
- The player joins the Minecraft server.
- The player runs /sis link.
- The plugin asks the web service for a temporary link code.
- The player opens https://slipinto.skin/.
- The player enters the link code.
- The browser session is linked to that Minecraft player and server.
- The player can import a Mojang username, upload a PNG skin, or reuse a saved skin.
- The website sends the skin request to the connected plugin.
- The plugin stores and applies the skin through SkinsRestorer.
Link codes expire after 10 minutes.
Commands
/slipintoskin is the main command.
Aliases:
/sis,
/skinlink
- /sis link - Generates a temporary browser link code for the player. Player-only command.
- /sis status - Shows the WebSocket connection state. For players, it also shows whether they have a pending offline skin.
- /sis unlink - Requests unlinking the player from the current browser session.
- /sis reload - Reloads the plugin config and requests a WebSocket reconnect.
- /sis reconnect - Forces the plugin to reconnect to the web service.
- /sis debug - Shows server id, connection state, pending WebSocket request count, pending offline skin count, SkinsRestorer API status and current time.
Permissions
- slipintoskin.use - Allows /sis link, /sis status and /sis unlink. Default: true.
- slipintoskin.admin - Allows /sis reload, /sis reconnect and /sis debug. Default: op.
Configuration
- server-id - Unique server id received from the web service. This is saved automatically.
- shared-token - Secret token used to authenticate the plugin WebSocket. This is saved automatically.
- websocket-url - WebSocket endpoint. Default: wss://slipinto.skin/api/plugin/ws.
- reconnect.initial-delay-seconds - First reconnect delay after connection failure. Default: 2.
- reconnect.max-delay-seconds - Maximum reconnect delay. Default: 60.
- cooldown.mode - Controls when cooldown applies. Supported values: only-identifier-generation and all.
- cooldown.max-changes - Maximum skin changes allowed inside the cooldown window. Default: 3. Set to 0 to disable cooldown.
- cooldown.window-minutes - Cooldown window length in minutes. Default: 10.
- debug - Enables WebSocket message logging. Tokens are redacted in logs. Default: false.
Cooldown Modes
- only-identifier-generation - Cooldown applies to identifier-based skin requests. This is the default.
- all - Cooldown applies to all skin apply requests.
Skin Sources
- Mojang username - The website fetches signed texture data from Mojang and sends it to the plugin.
- PNG upload - The website accepts valid Minecraft skin PNG files.
- Saved skin - The player can reapply skins saved in the browser session library.
PNG Upload Rules
- The uploaded file must be a PNG.
- The skin size must be 64x64 or 64x32.
- The upload limit is 2 MB.
Saved Skins And Favourites
- The web panel keeps recently used skins for the current browser session.
- The saved skin library returns up to 25 entries.
- The service keeps recent skins pruned around the newest saved entries and favourites.
- A browser session can have up to 5 favourites.
- Favourites are shown before non-favourite skins.
Offline Player Handling
If a skin request arrives while the player is offline, the plugin stores it in
pending-skins.json. When the player joins again, the plugin applies the stored skin through SkinsRestorer and removes the pending entry after success.
Request Statuses
- pending - The web service stored the request because the plugin/server was not connected.
- sent - The request was sent to the plugin WebSocket.
- pending_offline - The player was offline, so the plugin stored the skin for next join.
- ok - The plugin applied the skin successfully.
- cooldown - The request was blocked by cooldown settings.
- error - The request failed while applying the skin.
Connection States
The status/debug commands may show these WebSocket states:
- DISCONNECTED - The plugin is not connected.
- CONNECTING - The plugin is trying to connect.
- AUTHENTICATED - The plugin is connected and authenticated.
- AUTH_FAILED - Authentication failed. Check server-id, shared-token and the web service.
Troubleshooting
- Plugin disables on startup - Check that SkinsRestorer is installed and compatible with the v15 API.
- /sis link says the WebSocket is not authenticated - Check the WebSocket connection with /sis status or /sis debug.
- Authentication failed - Remove invalid server-id and shared-token only if you want the plugin to register as a new server.
- Skin does not apply immediately - The player may be offline, the request may still be pending, or cooldown may be active.
- PNG upload fails - Make sure the file is PNG, under 2 MB, and either 64x64 or 64x32.
Security Notes
- Do not share shared-token.
- The plugin redacts WebSocket tokens in debug logs.
- Browser sessions are stored with an HTTP-only cookie.
- The plugin authenticates every WebSocket connection with server-id and shared-token.
Documentation for SlipIntoSkin 1.0