Your army, wearing real player skins. Drop ordinary Minecraft skin PNGs into a folder and every Recruit puts one on — recruits, bowmen, crossbowmen, shieldmen, nomads, horsemen, scouts, messengers, captains, patrol leaders, siege engineers and nobles alike. No resource pack, no server install, no restart loop. Each unit picks a skin that looks random but never changes, so the scarred veteran holding your east gate is still the scarred veteran holding your east gate tomorrow, next week, and after you reinstall the pack.
Minecraft 1.20.1 · Forge 47.x · Java 17 Client-side only. Free and open source, GPL-3.0-only. Requires Recruits
1.15.2.
config/recruits_skins/. The folder is created for you on first launch with a _README.txt in it. Put PNGs in, press <kbd>F3</kbd>+<kbd>T</kbd>, done. Subfolders work and are purely for your own organisation — sort by faction, by author, by whatever you like._slim or _classic suffix in the filename, or a slim/ or classic/ subfolder, settles it outright. Otherwise the mod inspects the arm pixels — a slim skin leaves the texels a wider arm would cover transparent — and works it out. Slim units get a proper three-pixel-arm model, and Recruits' own team and companion cloth lands on that narrower geometry correctly./recruitsskins reload does the same on demand. Scanning and decoding happen off the render thread, so a folder of hundreds of skins does not freeze the game./recruitsskins status reports whether the add-on is enabled, how many of the twelve unit types are actually using Recruits' human renderer right now, the folder path, how many skins loaded split by arm type, and every file that was rejected with the reason — "expected 64x64, found 128x128", not a silent shrug..png are all named and skipped while their neighbours load normally. An empty folder is not an error either — units simply look exactly as Recruits draws them.Armour renders over the skin as normal. Bows, crossbows, shields, muskets, custom heads, crouching, riding and every upstream animation are untouched — the mod changes one texture and one model and leaves the rest to Recruits.
Recruits gives you an army of individuals who fight, follow, garrison and get promoted, and then dresses all of them out of the same twenty-texture wardrobe. Past a certain army size you stop seeing people and start seeing copies.
This mod turns that wardrobe into a folder you drag files into. Because assignment is stable and minimally disruptive, curating that folder is actually pleasant — you can add a skin mid-campaign without your whole garrison swapping faces, which is what makes it worth building a roster over time rather than setting it once and never touching it.
For modpack authors: ship the same config/recruits_skins contents and the same selectionSeed to every client and everyone sees the same soldiers in the same places, without a single byte crossing the network.
Placeholder — add screenshots before publishing:
- A squad of five or six visibly different Recruits standing together.
- A slim-armed unit beside a classic-armed one, close up on the arms.
- A unit in full armour, showing armour rendering over a custom skin.
- Two teamed units in different team colours, showing faction colour surviving on top of custom skins.
/recruitsskins statusoutput in chat, including a rejected file.Only use skins you own or have permission to show.
1.15.2 — mandatory, client side, and pinned to that exact version.Recruits is declared a hard client-side dependency, so a client without it refuses to load with a clear message rather than crashing later.
The version pin is exact and deliberate. This add-on hooks Recruits' renderer and clothing layers directly, so it is tested against one specific build rather than a hopeful range. On any other Recruits version it refuses to load — which is the honest outcome, because the alternative is a mod that loads and quietly does nothing. When Recruits updates, this needs a matching release.
mods/ folder:recruits-1.20.1-1.15.2.jarrecruitsskins-0.1.0.jar (this mod)config/recruits_skins/ and config/recruitsskins-client.toml.config/recruits-client.toml and set: RecruitsLookLikeVillagers = false
Then restart the game. Recruits picks its renderer once, at startup — changing this setting while playing does nothing until the next launch. This trips up nearly everyone, so /recruitsskins status reports the live state explicitly and warns you when the file and the running game disagree.
config/recruits_skins/./recruitsskins reload.Only install it on the client. A dedicated server does not need it, does not benefit from it, and if it ends up there by accident it loads and does nothing.
| Format | PNG, exactly 64×64 — the modern skin size |
| Arm layouts | Classic (4px) and slim / Alex (3px), both |
| Overlay layers | Hat, jacket, sleeves and trousers all render |
| Legacy 64×32 | Rejected — convert it to 64×64 first |
| Anything else | Rejected and named in /recruitsskins status |
Any skin from any skin site works, as long as it is the modern 64×64 layout. Your own Minecraft skin works. So does a skin you drew yourself.
Nothing inside a PNG records which arm width it was drawn for, so the mod looks at the arm pixels and works it out. That is right for most skins and wrong for a few — a slim skin exported with those unused texels painted in reads as classic.
If the arms look a pixel off, say so in the name or the folder:
config/recruits_skins/
├── royal_soldier_slim.png forced slim
├── city_archer_classic.png forced classic
├── slim/
│ └── frontier_scout.png everything in this folder is slim
└── regional/
└── desert_ranger.png worked out from the pixels
_slim, -slim and .slim all work, as do their classic equivalents, and a filename marker beats a folder marker. Or set armModelDetection to classic or slim in the config to skip the guessing entirely.
Renaming a file changes which units wear it. Repainting one in place does not.
Recruits paints three separate things over its units, and a custom skin has to share the body with them. They are handled independently, because they are not equally worth keeping.
| Layer | Default | Why |
|---|---|---|
| Team colour | Kept | It tells you which side a unit is on, at a glance, in a fight. |
| Generic outfit | Dropped | The plain cloth an unaffiliated unit wears — precisely what your skin replaces. |
| Regional clothing | Dropped | A full-body texture. It would cover the skin you chose entirely. |
| Companion cloth | Kept | Marks messengers, scouts, captains and siege engineers, which players read to pick them out. |
The first two are the same upstream layer wearing two hats, which is why teamOverlayMode has three settings rather than a switch: TEAM_ONLY (the default) keeps the colour and drops the outfit, UPSTREAM keeps both, OFF drops both.
None of this touches a unit without a custom skin. An empty folder, a disabled add-on, or a unit on a Corpse body all render exactly as Recruits draws them, whatever these settings say.
One honest caveat: a skin's jacket, sleeves and trousers sit a fraction of a pixel outside the body, so opaque pixels there can cover team or companion cloth underneath. That is ordinary player-model behaviour, not a bug — it is how a player in a jacket looks too. If an unobstructed uniform matters more to you than skin fidelity, set renderPlayerOuterLayers = false; the hat is part of the base model and is unaffected.
Every command is client-side, so they work on any server — including one that has never heard of this mod.
| Command | What it does |
|---|---|
/recruitsskins |
Same as status |
/recruitsskins reload |
Rescan the folder and report what loaded |
/recruitsskins status |
Enabled state, how many unit types are really using the human renderer, folder path, counts by arm type, seed, all three clothing policies, and every rejected file with its reason |
/recruitsskins list [page] |
Every loaded skin with its arm model |
/recruitsskins folder |
The absolute path skins are read from |
/rskins is an alias for all of them. <kbd>F3</kbd>+<kbd>T</kbd> reloads the folder too. The server's /reload does not — it has nothing to do with files on your machine.
config/recruitsskins-client.toml:
[general]
enabled = true
selectionSeed = 0
renderPlayerOuterLayers = true
[models]
armModelDetection = "auto"
[recruitsLayers]
teamOverlayMode = "TEAM_ONLY"
applyBiomeOverlay = false
applyCompanionOverlay = true
[loading]
recursive = true
maxScanDepth = 8
maxSkinCount = 512
maxFileSizeKiB = 1024
showReloadSummary = true
[cache]
maxRecruitAssignments = 8192
The ones worth knowing about:
selectionSeed — change it to reroll every unit in the world at once. Modpacks that want every player to see identical soldiers must ship the same seed.teamOverlayMode — TEAM_ONLY, UPSTREAM or OFF. See the section above.applyBiomeOverlay — set it to true to put Recruits' regional clothing back on top of your skins.renderPlayerOuterLayers — set it to false to drop the jacket, sleeves and trousers and let upstream cloth show unobstructed.armModelDetection — auto, classic or slim, for skins with no filename marker.Everything else is bounds and logging. Every setting takes effect immediately except the scan bounds, which trigger a rescan.
Your skins are yours alone. The server is never told about them and does not need the mod.
| You have the mod, the server does not | Works. This is the normal case. |
| Another player does not have the mod | They see ordinary Recruits. Nothing breaks. |
| Two players with different folders | They see different soldiers. This is expected, not a bug. |
Two players with identical folders and the same selectionSeed |
They see identical soldiers. |
| Installed on a dedicated server by accident | It loads, does nothing, and gets in nobody's way. |
The mod never uploads, downloads, or fetches a skin by username, UUID or URL. It reads files on your disk and nothing else. It adds no packets, no entity data and nothing to your save.
Run /recruitsskins status first — it answers most of this.
RecruitsLookLikeVillagers = false in recruits-client.toml and restart. Easily the most common cause._slim or _classic suffix.With no usable skins, units render exactly as Recruits draws them. That is the intended fallback, not a failure.
Built with narrow Mixin injections and no overwrites, so it inherits Recruits' models, poses, animations, armour, equipment and arm-pose logic rather than duplicating them. It does not replace the entity renderer, so it should coexist with other rendering mods. If another mod also changes a Recruit's base texture, which one wins depends on injection order — report it and it will be documented.
Corpse is supported and handled deliberately: bodies keep Recruits' own textures rather than a custom skin. Recruits draws a corpse from a stand-in that carries the dead unit's variant, biome and team but not its identity, so the original skin genuinely cannot be recovered. A corpse wearing a stranger's face would read as a bug, so it falls back instead. If Corpse is not installed, that part of the mod switches itself off entirely.
Skins in your own folder are your business. If you ship a modpack with skin artwork in it, make sure you have permission to distribute that artwork. Player skins are made by people, and a lot of them are not free to redistribute.
GPL-3.0-only. Source at github.com/otectus/RecruitsSkins.
Recruits by talhanation is a separate project, All Rights Reserved. No Recruits code or asset is copied into this mod, and its jar is not redistributed with it.