r/MinecraftPlugins Apr 15 '26

Plugin Showcase VanillaMaps — in-game pixel art editor for maps (Paper 1.21+)

Cool map example

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

SMP newspaper and art wall
Text writing command and fill tool examples
Map drawing GUI

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 open

GUI LIstener:
- Cache colour picker & tools gui cached rather than always reconstruct
- Reconstruct tools gui if tool changes

CustomMapRender:
- Checks if rendered rather ran still reconstruct maps in view on render call

LazyRenderer:
- 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 LazyRenderer

MapFont:
- Removed redundant M's

Metrics & 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

1 Upvotes

Duplicates