RuinedWardrobe is a high-performance Paper/Folia wardrobe plugin built for large Minecraft servers that need a polished armor wardrobe, strict anti-dupe behavior, safe storage, and useful diagnostics when something goes wrong.
It is free to use on any server, including monetized servers. The source and jar can be used, modified, and shared for free, but the plugin itself cannot be resold or commercially redistributed. See LICENSE.
- Hypixel-style wardrobe GUI with drag/drop armor editing, page navigation, locked slots, and equip/unequip buttons.
- Full Paper and Folia scheduler support.
- Target API:
io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT. - Runtime support: Paper/Folia
1.21through26.1.2. - Java target:
21+. - Permission-tier slots through
ruinedwardrobe.slots.<amount>plus admin bonus slots. - SQLite by default, optional MySQL/MariaDB for networks.
- Async database pipeline with queue limits, retries, health metrics, and batch sync.
- Bound-armor anti-dupe protection for inventory clicks, drags, drops, swaps, armor dispense, and optional container locking.
- Vanilla-compatible death behavior by default, with a config option to preserve wardrobe sets on death.
- Wardrobe audit log for tracing equips, edits, deaths, sanitizer removals, sync changes, storage errors, and item deserialization failures.
- Config, GUI, language, and permission templates designed for server owners instead of just developers.
- Automatic config backup/regeneration on template version changes.
- Legacy schema import with verified backup before old tables are removed.
- Snapshot-based storage migration with digest verification.
- PlaceholderAPI expansion and optional Vault/combat integration hooks.
Latest jar:
- Download
RuinedWardrobe.jarfrom the latest GitHub release. - Put the jar in your server
pluginsfolder. - Start the server once so RuinedWardrobe creates its config files.
- Edit
plugins/RuinedWardrobe/config.yml,gui.yml,lang/en_US.yml, and permissions as needed. - Restart the server, or use
/wardrobe reloadafter config-only changes.
Jar output when building locally:
./gradlew clean buildbuild/libs/RuinedWardrobe-1.0.3.jar
/wardrobeor/rwopens the wardrobe GUI./wardrobe helpshows command help./wardrobe list [player]lists saved wardrobe sets./wardrobe doctorprints runtime diagnostics./wardrobe reloadreloads config, GUI, and language files./wardrobe migrate <sqlite|mysql> [--dry-run] [--force]migrates storage with snapshot verification./wardrobe admin open <player>opens another player's wardrobe./wardrobe admin setslots <player> <amount>adds admin bonus slots./wardrobe admin clearslots <player>removes admin bonus slots.
ruinedwardrobe.useruinedwardrobe.command.helpruinedwardrobe.command.listruinedwardrobe.command.doctorruinedwardrobe.command.reloadruinedwardrobe.command.migrateruinedwardrobe.admin.*ruinedwardrobe.slots.<amount>ruinedwardrobe.bypass.cooldownruinedwardrobe.bypass.restrictionsruinedwardrobe.bypass.emptycheckruinedwardrobe.bypass.combat
See docs/permissions.md and src/main/resources/permissions.yml.
Core config lives in plugins/RuinedWardrobe/config.yml.
Important sections:
wardrobe: slot caps, pages, equip cooldown.death: vanilla-loss behavior or protected wardrobe behavior.storage: SQLite or MySQL/MariaDB setup.performance: cache, session, sync, armor scan, DB queue, and health logging.audit: separate activity log for debugging missing armor or bad sync behavior.restrictions: world, gamemode, combat, and PlaceholderAPI rules.integrations: PlaceholderAPI, Vault, and combat hooks.anti-dupe: strict container interaction lock.
GUI layout is in gui.yml. Player-facing messages are in lang/en_US.yml.
The audit log is meant for real debugging on live servers.
Default path:
plugins/RuinedWardrobe/logs/wardrobe-audit-YYYY-MM-DD.log
It records meaningful wardrobe actions and failures without flooding the console. If armor disappears, send the audit log for the same timestamp plus the server console around that time.
Useful actions to look for:
EQUIPUNEQUIPARMOR_PLACEARMOR_TAKEDEATH_VANILLA_LOSSDEATH_PRESERVEFOREIGN_BOUND_ARMOR_REMOVEDITEM_DESERIALIZE_ERRORARMOR_SYNC_ERRORSAVE_SET_ERROREQUIP_ERROR
You may use RuinedWardrobe on servers that make money from ranks, donations, cosmetics, memberships, stores, ads, or paid access.
You may not sell the RuinedWardrobe jar, source code, fork, modified copy, update access, or a paid bundle that charges for the plugin itself.
See LICENSE and docs/wiki/License-And-Server-Monetization.md.
Start with the wiki-style docs:
- Wiki Home
- Quick Start
- Configuration Guide
- Permissions And Commands
- GUI And Language Customization
- Placeholders And Integrations
- Storage, Migration, And Backups
- Audit Logs And Troubleshooting
- Upgrade And Release Checklist
- License And Server Monetization
- FAQ
Reference docs:
Requirements:
- JDK 21+
- Gradle wrapper included
Build and test:
./gradlew clean test buildThe shaded jar includes SQLite, MariaDB, HikariCP, Caffeine, and bStats dependencies so normal installs do not need extra jars.