FFEntityPainting

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.