Configuration
Painting rules are server settings in ffentitypainting-server.toml in the world's serverconfig folder. Client settings are in ffentitypainting-client.toml in config. On NeoForge the settings screen is in the Mods list; on Fabric it is in Mod Menu.
| Option | Default | Purpose |
|---|---|---|
maxLayers |
4 | Layer count limit, 1 to 16; the pixel memory limit also applies |
maxTextureSize |
256 | Longest-side paint resolution cap; 0 disables this cap, but the hard 256-pixel limit remains |
paintReach |
5 | Maximum distance to entity bounds, with line of sight required |
requireCreative |
false | Restricts painting and layer edits to creative players |
keepPlayerPaintOnDeath |
false | Players keep their paint when they die and respawn |
paintOpaqueOnly |
true | Skips base pixels with alpha below 200; fully transparent holes don't capture clicks |
brushSize |
2 | 1 paints one texel; larger values use a circular radius of the setting minus one |
shapes.maxCachedShapes |
2048 | Most mob shapes the server remembers, cleared when it stops |
shapes.maxReportDistance |
128 | Farthest away, in blocks, a player's game may report a mob from |
Client shapes section:
| Option | Default | Purpose |
|---|---|---|
reportShapes |
true | Measure nearby mobs when the server asks |
reportRange |
48 | Measure mobs within this many blocks |
recaptureSeconds |
30 | Re-measure to catch shearing or a villager's new job |
capturesPerTick |
2 | How many mobs to measure per tick; each costs about one extra model draw |
maxGridSize |
32 | Detail of each shape report |
Client localLayers section:
| Option | Default | Purpose |
|---|---|---|
saveLocalLayers |
true | Keep local layers when you leave and come back |
forgetAfterDays |
30 | Forget a mob's saved local layers after this many days without seeing it |
maxSavedMegabytes |
64 | Most disk space saved local layers may use across all worlds |
Each entity has a hard budget of 196,608 paint texels across its layers, so a 256x256 surface allows three layers. Smaller surfaces allow more, up to maxLayers. Locked layers from other mods don't count toward maxLayers but share the texel budget and the hard limit of 16 layers. The first stamp fixes the resolution. Edits are limited to ten per second per player.
Diagnostics default off: debugUvLog, debugDrawRay, debugDrawHitPoint, debugDrawHitTriangle, debugLineDuration (3 seconds) and debugLogShapeReports. The retained debugForceAabb option disables painting instead of making approximate edits.
Commands
Operators (permission level 2) can inspect and edit paint with /entitypaint. Targets are ordinary entity selectors; non-living entities are skipped. Layers are picked by name (the first layer with that name), and names with spaces go in quotes, like "Layer 1". Commands can change locked layers from other mods, so be careful with those.
| Command | What it does |
|---|---|
/entitypaint info <target> |
Revision, layers (with lock, visibility, opacity, blend mode and painted texels), part count and budget use |
/entitypaint parts <target> |
Every established part with its surface hash, name, canvas size and texture rectangle |
/entitypaint clear <targets> [layer] |
Wipes all paint, or one layer's paint while keeping the layer |
/entitypaint fill <targets> <layer> <color> [blend\|replace\|erase\|atop\|behind\|multiply\|screen\|add\|subtract\|darken\|lighten\|difference\|dodge\|burn\|invert\|saturate\|desaturate] |
Paints every established part of a layer (created if missing) with #RRGGBB or #AARRGGBB |
/entitypaint copy <source> <targets> |
Copies one entity's paint onto others |
/entitypaint resync <targets> |
Sends a fresh copy of the paint to nearby players |
/entitypaint layer add <targets> <name> [locked] |
Adds a layer on top, optionally locked |
/entitypaint layer remove <targets> <layer> |
Deletes a layer and its paint |
/entitypaint layer rename <targets> <layer> <newName> |
Renames a layer |
/entitypaint layer move <targets> <layer> <index> |
Moves a layer; 0 is the bottom |
/entitypaint layer opacity <targets> <layer> <0-1> |
Sets layer opacity |
/entitypaint layer visible <targets> <layer> <true\|false> |
Shows or hides a layer |
/entitypaint layer locked <targets> <layer> <true\|false> |
Locks or unlocks a layer for players |
/entitypaint layer blend <targets> <layer> <mode> |
Sets the blend mode: 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 or mask |
/entitypaint layer access <targets> <layer> <view\|paint> <rule> [argument] |
Chooses who sees (view) or paints (paint) a layer |
Access rules for layer access:
| Rule | Argument | Who passes |
|---|---|---|
everyone |
none | Everybody (the default) |
nobody |
none | Nobody; only commands and mods can change the layer |
team |
team name | Players on that scoreboard team |
same_team |
none | Players on the same scoreboard team as the painted mob |
players |
names or UUIDs, comma separated | Those players |
tag |
tag | Players with that /tag |
self |
none | Only the painted player themselves |
Rules other mods add are typed with their full quoted ID, like "othermod:captain".
Examples: /entitypaint info @e[type=cow,limit=1,sort=nearest], /entitypaint fill @s "Layer 1" #80FF0000 for a see-through red tint, /entitypaint clear @e[type=sheep,distance=..10], /entitypaint layer access @e[tag=flag] Red view team red so only the red team sees the flag's "Red" layer.
Parts only exist once a player has painted them (or another mod has set them up), so fill on a never-painted mob does nothing.