CustomPaintings lets server admins upload PNG images to the server and give players map-based paintings, including multi-map murals (2x2, 4x4, etc.).
- Upload PNG files directly to the server filesystem
- Import as:
- Single painting (
1x1map) - Multi-map mural (
2x2up to8x8) - Give painting sets to players with one command
- Persistent painting index in
paintings.yml - Tab-complete for commands and painting names
- Paper
- Java
21
From plugin source folder:
./gradlew buildOutput jar:
build/libs/CustomPaintings-1.0.0.jar
- Stop your Paper server.
- Copy
CustomPaintings-1.0.0.jarinto your serverplugins/folder. - Start the server.
- Confirm plugin is enabled:
- Run
/plugins CustomPaintingsshould be green
After successful startup, plugin creates:
plugins/CustomPaintings/config.ymlplugins/CustomPaintings/uploads/(put upload PNGs here)plugins/CustomPaintings/paintings/(generated map tile PNGs)plugins/CustomPaintings/paintings.yml(painting metadata)
Base command:
/painting
/painting list
Shows all registered painting names and dimensions (example wallart (4x4)).
/painting import <name> <upload-file.png> [widthMaps] [heightMaps]
name: painting id (a-z,0-9,_,-, max 32 chars)upload-file.png: filename placed inuploads/widthMaps: optional, default1, range1..8heightMaps: optional, default1, range1..8
Examples:
/painting import mona mona.png
/painting import castle castle.png 2 2
/painting import mega_wall panorama.png 4 3
/painting give <name> [player] [sets]
name: registered paintingplayer: optional target playersets: optional number of full sets (default1, clamped1..64)
A set contains all map items required for the mural:
1x1mural = 1 map per set2x2mural = 4 maps per set4x4mural = 16 maps per set
Examples:
/painting give mona
/painting give mona bitz
/painting give castle bitz 3
/painting remove <name>
Deletes metadata and generated tile images for that painting.
/painting reload
Reloads paintings.yml without restarting server.
custompaintings.use(default:true)custompaintings.admin(default:op)
Admin required for:
/painting import .../painting remove .../painting reload
- Upload
sunset.pngto:
plugins/CustomPaintings/uploads/sunset.png
- Import as 2x2 mural:
/painting import sunset sunset.png 2 2
- Confirm:
/painting list
- Give one set to yourself:
/painting give sunset bitz 1
- Place maps in item frames in grid order:
- Top row left to right
- Then next row left to right
Map display names include tile position like:
Painting: sunset [1/2, 1/2]
Meaning:
- first value pair is horizontal position (
x/width) - second pair is vertical position (
y/height)
Use that to place frames correctly for murals.
Check console logs on startup for CustomPaintings errors.
Common issue fixed in this project:
- Missing
config.ymlin jar causes: The embedded resource 'config.yml' cannot be found
Folder is:
plugins/CustomPaintings/uploads
If it does not exist, plugin likely failed to enable.
- Ensure painting was imported first
- Check exact painting name in
/painting list
- Verify file exists in
plugins/CustomPaintings/uploads/ - Use exact filename including
.png
Convert source to PNG and retry import.
Max import size is 8x8 maps.
paintings.yml stores each painting as:
widthheightprefix(tile filename prefix)
The plugin also supports loading older legacy single-file entries and treating them as 1x1.
- Stop server.
- Replace plugin jar in
plugins/. - Start server.
- Run
/painting reloadif only metadata changed while running.
- Stop server.
- Remove plugin jar from
plugins/. - (Optional) Delete
plugins/CustomPaintings/data folder.
MIT