A multi-platform Minecraft plugin that allows players to apply custom capes via commands by integrating with the Custom Capes API.
- Multi-platform support: Works on Paper, Spigot, BungeeCord, and Velocity
- Dynamic cape availability: Fetches available capes from API on startup
- Simple commands:
/cape <type>,/cape list,/cape clear - Automatic skin detection: Extracts player's current skin URL automatically
- Cape caching: API caches generated textures for faster subsequent requests
| Platform | Support |
|---|---|
| Paper | Full native support via PlayerProfile API |
| Spigot | Reflection-based support |
| BungeeCord | Reflection-based proxy support |
| Velocity | Native GameProfile API support |
- Java 17+
- A running instance of the Custom Capes API
- Minecraft server/proxy running 1.20+
- Download the latest release or build from source
- Place the JAR in your server's
pluginsfolder - Start the server to generate the default configuration
- Configure the API URL in
config.yml - Restart or reload the plugin
| Command | Description | Permission |
|---|---|---|
/cape <type> |
Apply a cape | customcapes.use |
/cape list |
List available capes | customcapes.use |
/cape clear |
Remove your cape | customcapes.use |
/cape reload |
Reload configuration | customcapes.admin |
The plugin fetches available capes from the API on startup. Use /cape list to see which capes are currently available.
Possible cape types (availability depends on API backend):
vanilla- No capeminecon_2011- Minecon 2011minecon_2012- Minecon 2012minecon_2013- Minecon 2013minecon_2015- Minecon 2015minecon_2016- Minecon 2016mojang- Mojang Capemojang_classic- Mojang Classicmojang_studios- Mojang Studiosrealms_mapmaker- Realms Mapmakercobalt- Cobaltscrolls- Scrollstranslator- Translatormillionth_customer- Millionth Customerprismarine- Prismarinebirthday- Birthdaymigrator- Migratorcherry_blossom- Cherry Blossomanniversary_15th- 15th Anniversary
api:
url: "https://ccapi.thomas.md" # URL to the Custom Capes API
timeout_seconds: 30 # Request timeout
messages:
prefix: "<gray>[<gold>Capes</gold>]</gray> "
cape_applied: "<green>Cape applied successfully!"
cape_cleared: "<green>Cape removed."
cape_not_found: "<red>Cape type not found: <white>%cape%"
error: "<red>Failed to apply cape: <white>%error%"
no_permission: "<red>You don't have permission to do that."
player_only: "<red>This command can only be used by players."
usage: "<yellow>Usage: <white>/cape <list|clear|<cape_type>>"
list_header: "<gold>Available capes:"
list_entry: "<gray>- <white>%cape%"
applying: "<yellow>Applying cape, please wait..."# Clone the repository
cd customcapes
# Build with Gradle
./gradlew build
# The output JAR will be in build/libs/customcapes-<version>.jarcustomcapes/
├── customcapes-core/ # Shared logic, API client, models
├── customcapes-bukkit/ # Paper/Spigot support
├── customcapes-bungee/ # BungeeCord support
└── customcapes-velocity/ # Velocity support
- Player runs
/cape <type> - Plugin extracts the player's current skin URL from their profile
- Plugin sends a request to the Custom Capes API with the skin URL and desired cape type
- API uploads the skin to a Minecraft account with that cape and retrieves signed texture data
- Plugin applies the signed texture data to the player's profile
- Other players are refreshed to see the change
MIT