promotional bannermobile promotional banner

Recruits Skins

A client-side add-on for Recruits on Forge 1.20.1. Drop ordinary Minecraft player skins into a folder and your Recruits wear them; no resource pack, no server support, nothing uploaded or downloaded.

Recruits Skins

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.


What it actually does

  • Reads a folder, not a resource pack. Skins live in 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.
  • Your skins, not a fixed roster. Recruits ships twenty human textures and spreads them across your army. This replaces that pool with yours: as many faces as you care to collect, drawn by anyone, changed whenever you like.
  • The jacket layer Recruits cannot draw. Recruits builds its human units on a plain humanoid model, so a player skin's jacket, sleeves and trouser overlays are silently dropped — half of what most skins are actually wearing. This mod renders them, posed with the body, so a skin looks the way it looks on a player.
  • The same unit keeps the same face. Assignment is computed from the unit's UUID rather than remembered, so it survives chunk unloads, world reloads, game restarts and reinstalls — with no database file to corrupt or migrate. Hire a recruit and it has its face immediately.
  • Adding a skin does not reshuffle the army. This is the part most implementations get wrong. Drop a ninth skin in and only the units that skin actually wins change; everybody else keeps the face you already know them by. Delete a skin and only the units who were wearing it move. Repaint a PNG in place without renaming it and it changes how that skin looks while moving nobody at all.
  • Slim and classic arms, both. A _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.
  • Reload without restarting. <kbd>F3</kbd>+<kbd>T</kbd> reloads the folder alongside your resource packs. /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.
  • It tells you why nothing happened. /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.
  • Bad files fail one at a time. A corrupt PNG costs you that PNG. Wrong-sized images, legacy 64×32 skins, empty files, and text files somebody renamed to .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.
  • Faction colours survive. Recruits paints team colour, regional clothing and companion cloth over its units. Each of those is handled separately and on purpose rather than blanket-disabled: by default team colours stay, companion cloth stays, and only the full-body regional uniform steps aside. See below.

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.


Why bother

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.


Screenshots

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 status output in chat, including a rejected file.

Only use skins you own or have permission to show.


Requirements

  • Minecraft 1.20.1 with Forge 47.x (built and tested against 47.4.22).
  • Recruits 1.15.2 — mandatory, client side, and pinned to that exact version.
  • Recruits' human model turned on (see Installation).

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.


Installation

  1. Install Forge for 1.20.1.

  2. Drop both jars into your mods/ folder:

    • recruits-1.20.1-1.15.2.jar
    • recruitsskins-0.1.0.jar (this mod)
  3. Launch once. This creates config/recruits_skins/ and config/recruitsskins-client.toml.

  4. Turn on Recruits' human model. Open 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.

  5. Put 64×64 player-skin PNGs into config/recruits_skins/.

  6. Press <kbd>F3</kbd>+<kbd>T</kbd> or run /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.


What counts as a skin

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.

Telling the mod about slim skins

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' own clothing

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.


Commands

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.


Configuration

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.
  • teamOverlayModeTEAM_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.
  • armModelDetectionauto, 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.


Multiplayer

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.


When nothing happens

Run /recruitsskins status first — it answers most of this.

  • "Human renderers active: 0 of 12" — set RecruitsLookLikeVillagers = false in recruits-client.toml and restart. Easily the most common cause.
  • "Loaded: 0 skins" — read the rejection list underneath. Wrong image size is usually it.
  • Skins load but units look unchanged — the model setting was changed without restarting. The status line says so explicitly.
  • Arms look a pixel out — the slim guess went the wrong way. Rename the file with a _slim or _classic suffix.
  • A promoted unit changed its face — expected; see below.

With no usable skins, units render exactly as Recruits draws them. That is the intended fallback, not a failure.


Compatibility

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.


Not in this release

  • Keeping a face through promotion. Recruits promotes by creating a new entity and discarding the old one, and the new entity gets a new identity. Selection follows that identity, so a promoted unit is a new person as far as this mod can tell. Fixing it properly means storing appearance in your save, which is a much bigger change than it sounds.
  • Fetching a skin by username, UUID or URL. Local files only, deliberately.
  • Server-enforced or synchronised skin assignments.
  • Skins while Recruits is using its villager-shaped model. Player skins are not geometrically correct for that model.
  • Capes, elytra textures, animated PNGs, or HD skin layouts.
  • Routing skin pools by unit type, biome, team or weapon. Subfolders are organisational only — for now.
  • Pinning a specific skin to a specific unit by hand.

Skin rights

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.


Licence and credits

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.

The Recruits Skins Team

Rising Builder tier frameprofile avatar
Owner
Rising Builder tier icon
  • 23
    Followers
  • 27
    Projects
  • 754.3K
    Downloads

I appreciate any and all feedback, suggestions and input.

More from OtectusView all

  • MCA: Reputation project image

    MCA: Reputation

    MCA: Reputation gives each village a shared memory of your actions, shaping how its community sees and treats you over time.

    • 2.1K
    • September 2, 2026
  • MCA: Crime project image

    MCA: Crime

    MCA: Crime is a mod for Minecraft 1.20.1 (Forge) which adds criminal elements and systems to the MCA: Reborn mod.

    • 495
    • September 2, 2026
  • Runic Tome project image

    Runic Tome

    Runic Tome gives every player one permanent magical book that automatically absorbs guide books and manuals the moment they enter your inventory, replacing clutter with a single clean library. Open the tome at any time to browse all collected books.

    • 2.2K
    • September 1, 2026
  • Locks Reforged project image

    Locks Reforged

    The "Locks" mod updated to work with 1.20.1; includes all features of the original with full configurability and some bug fixes.

    • 25.0K
    • September 1, 2026
  • MCA: Reputation project image

    MCA: Reputation

    MCA: Reputation gives each village a shared memory of your actions, shaping how its community sees and treats you over time.

    • 2.1K
    • September 2, 2026
  • MCA: Crime project image

    MCA: Crime

    MCA: Crime is a mod for Minecraft 1.20.1 (Forge) which adds criminal elements and systems to the MCA: Reborn mod.

    • 495
    • September 2, 2026
  • Runic Tome project image

    Runic Tome

    Runic Tome gives every player one permanent magical book that automatically absorbs guide books and manuals the moment they enter your inventory, replacing clutter with a single clean library. Open the tome at any time to browse all collected books.

    • 2.2K
    • September 1, 2026
  • Locks Reforged project image

    Locks Reforged

    The "Locks" mod updated to work with 1.20.1; includes all features of the original with full configurability and some bug fixes.

    • 25.0K
    • September 1, 2026