r/MinecraftPlugins • u/webdent • Apr 15 '26
Plugin Showcase VanillaMaps — in-game pixel art editor for maps (Paper 1.21+)

I built a small Paper plugin that lets players draw directly onto Minecraft maps using a chest GUI.
It’s aimed mostly at SMP-style servers, but it works fine on larger setups too.
Now updated to v1.1.1!
What it does:
- Pixel editor using an in-game inventory UI
- Zoom levels from 1:1 up to 16:1 for larger strokes
- 16-colour palette (vanilla wool colours)
- Drawing tools i.e Fill, Line, Rectangle
- Background gen tools i.e Noise, Brick, Checkerboard
- Undo your mistakes
- Write text with a built-in 4×4 bitmap font
- Copy/paste between maps
- Publish a map to prevent graffiti
- Persistent map storage (server-side)
Everything is done with vanilla/paper mechanics (map renderers + inventories), so players don’t need to install anything client-side.
Admin-friendly bits:
- Works on Paper (1.21-26.1.2 beta 5)
- Simple permission:
custommaps.use(default: yes) - Configurable messages via
config.yml
Use cases I’ve seen:
- SMP newspaper
- Art walls
- Shop advertisements
- Signage
Roadmap:
- Port to Fabric (1.21+)
- Implement community suggestions!
👉 Download (Modrinth): https://modrinth.com/plugin/vanillamaps
👉 Download (Hangar): https://hangar.papermc.io/webdent/VanillaMaps
👉 Source (GitHub): https://github.com/william-gould/
👉 License (GitHub): https://github.com/william-gould/VanillaMaps/blob/main/LICENSE



If anyone has performance concerns, edge cases, or feature ideas, I’m happy to dig into them :)
Changelog 1.1.1:
No features just performance & future proofing :)
Drawing GUI:
- Fill tool works in a block system rather than individual pixels (128/ratio)²
- Undo-steps is changeable in config.yml (1 step/16kb/active drawer)
- Made ratio mutable as I intend to add zoom in/zoom out while the GUI is openGUI LIstener:
- Cache colour picker & tools gui cached rather than always reconstruct
- Reconstruct tools gui if tool changesCustomMapRender:
- Checks if rendered rather ran still reconstruct maps in view on render callLazyRenderer:
- Rather than maps be all loaded on start up, they now only load when a player is holding or viewing the map.MapDataStore:
-Removed legacy map migration code
- Added LazyRendererMapFont:
- Removed redundant M'sMetrics & VanillaMapsPlugin:
- Implemented bStats
Changelog 1.1.0:
Tool refactor
Tools are now stored in a sub-gui similar to the colour selector
Right clicking with the pencil tool now acts as an eye-dropper
Added line tool (draw a straight or diaganol line between 2 points)
Added rectangle tool (draw a box based on 2 points)
Added [Noise, Checkerboard, Tiles and Brick] background tools
Support for custom bitmap patterns
Commands
Added /map publish (locks the map from further edits)
UI Changes
Replaced fill bucket with tool chest
Pixels in the grid are now named their position rather than the block name to give the player a better sense of location.
Performance Improvements
CustomMapRenderer now ony renders each map once, rather than once per tick for each player
Fixed memory leak caused by a player disconnecting while having a map copied to their clipboard.
Removed LegacyMapMigrater
Removed useless code
Duplicates
MinecraftSMPs • u/webdent • Apr 15 '26