FFEntityPainting

Overview

Paint living entities with shared, team-restricted and local layers, with a mod API for brushes, layer access rules and server-side painting.

A sheep in a grassy field painted with bright rainbow stripes across its body, with the player holding a paint tool in first person.

Features

Getting started

  1. Find the six paint tools, the eraser and the Mob AI Wand in the Entity Paint Tools creative tab. The wand toggles a mob's AI off and on with a right-click, so a mob stands still while you paint it; it is saved with the mob like the vanilla NoAI tag.
  2. Use first-person view and right-click a living entity that isn't wearing armor, a saddle or a llama carpet. Parts that stick out past the mob, like a wolf's tail, are fair game too. The click waits up to one second for a fresh model draw. A miss or unsupported surface changes nothing.
  3. Paint once to set up that entity's texture resolution, then sneak and right-click to open the layer manager.
  4. Add layers, pick the one you paint on, and rename, reorder, hide, fade, blend, clear or delete them. Erasing removes paint from the selected layer and reveals the layers underneath.

This version captures paint placement from the actual vanilla model draw. Painting a sheep has been checked in game on every supported Minecraft version and loader, but multiplayer, villagers and players on the newer targets still need more testing.

Managing layers

The layer manager lists layers top first, the same order they stack on the mob. Click a layer to paint on it (it gets a > marker). Each row has ^ and v to move the layer, and x to delete it. The button turns into ? so a stray click can't wipe your work; click again to confirm.

Below the list, type a new name and press Rename (or Enter). Blend cycles normal, multiply, additive, screen, overlay, darken, lighten, color dodge, color burn, linear burn, hard light, soft light, difference, exclusion, subtract, divide, hue, saturation, color, luminosity, erase and mask (hold Shift to go backwards); the API guide says what each one does; Show / Hide, Clear Layer and Opacity round things out. The list has page buttons when a mob has more layers than fit.

Opacity

Brush Opacity cycles 100%, 75%, 50%, 25% and 10%. See-through strokes mix with paint already on that layer, so dabbing again builds the color up, and translucent blue over red gives purple. The eraser follows the same setting. Layer Opacity (100%, 75%, 50%, 25%) fades a whole layer without touching its pixels. Brush opacity is your own setting; layer opacity is shared with everyone.

Locked layers

Layers marked [locked] belong to another mod (team colors, markings, dirt and the like). You can see them, but you can't select, paint, clear, move or change them, and your own layers can't hop over them. New layers slide in just under any locked layers on top. If every layer on a mob is locked, your first stroke makes a fresh layer of your own.

Local layers

Add Local makes a layer that lives only in your game. Nobody else sees it and the server never hears about it. Local layers sit on top of everyone's paint, are marked [local], and work like any other layer. They are saved on your computer, filed under the world or server world you painted them in, so they survive server address changes. A mob's local layers go away when it dies, and ones you haven't seen for a while are tidied up (see localLayers below).

Team layers

A server, a datapack or another mod can decide who sees each shared layer and who can paint it. For example: everyone paints an "ALL" layer but only the red team can paint "Red"; only the red team can even see "Red"; or a secret mark only the player wearing it can see. Layers you can see but can't paint show [view only]. Layers you can't see simply aren't there for you. When your team or tags change, what you see catches up within about a second.

The server confirms changes. If another editor changes the same entity first, your stale edit is rejected and the latest state is sent back. Brushes use texture pixels, not a fixed world-space size.

Supported scope and limitations

Mob shapes for other mods

Some mods, like FFEntityDirt, need to know where each paintable spot sits on a mob's body. Only your game knows what a model looks like, so on those servers FFEntityPainting quietly measures nearby standing mobs now and then (a couple per tick, each again every 30 seconds or so) and tells the server. Your own player is measured too, even in first person. On a server where no mod asks for shapes, nothing is measured. You can turn measuring off in the client settings.

Paint is saved on ordinary entities. Player paint persists across reconnects and dimension changes, and resets when a player dies unless the server turns on keepPlayerPaintOnDeath.

Configuration and commands

Painting rules are server settings and the brush and display options are client settings. Every option with its default, and the operator /entitypaint commands, are on the Configuration page.

Datapacks and functions

Datapacks can keep any mob from being painted with the ffentitypainting:unpaintable entity tag, and functions can use the /entitypaint commands above, team layers included. See the Datapacks page for the tag and examples.

Requirements and source version

Minecraft1.21.1 and 1.21.11
NeoForge21.1.211 or newer (1.21.1), 21.11.45 or newer (1.21.11)
FabricFabric Loader 0.16.1 or newer (1.21.1) or 0.18.0 or newer (1.21.11), plus Fabric API
IncludedFFUtilities is bundled in the download
Source version0.9.4

A Modrinth link appears only when a project link is configured. The source version above may be newer than the latest published file.