ImageOnMap
Have you ever wanted to view an image on a map ingame? ImageOnMap allows you to do it! (Inspired by ImgMap)
Features
ImageOnMap allows you to load a picture from the Internet to a Minecraft map.
- Loads an image from a URL onto a map. PNG, JPEG and GIF are supported.
- These images will be saved on your server and reloaded at restart.
- Big pictures will be cut automatically into several parts! As example, a 1024x1024 picture will be cut in 16 maps.
- Your image will be centered.
- You can put your map in an item frame.
This plugin is a free software lisensed under the GNU General Public License (version 3 or above). The source code is published on GitHub.
The latest version is only compatible with Minecraft 1.15+.
- For Minecraft 1.13 and 1.14, use 4.0-pre1.
- For older versions, please use ImageOnMap 3.1 (warning: unchecked by the BukkitDev staff—if you're unsure, use 3.0 here in BukkitDev, it's the same but without permissions).
Support and bug requests
If you need help with ImageOnMap, the preferred way is our Discord server. We speak English and French. You should read the FAQ first!
If you want to report a bug or suggest features, by far the best option for us is GitHub issues, which you should use whenever possible. If you absolutely can't use GitHub, use the support options above.
We're a team behind ImageOnMap (and others), and private messages from Spigot can only be read by one person. So you should not send help requests, suggestions or bug reports using Spigot or BukkitDev PMs. Any PM received after June 28, 2020 with any of these topics will be ignored.
Quick guide
- Ensure that you have a free slot in your inventory, as ImageOnMap will give you a map.
- Type /tomap URL, where URL is a link to the picture you want to render (see the section below).
- Enjoy your picture! You can place it in an item frame to make a nice poster if you want.
German speakers, you can watch this video (thanks to StarlessMiner)
English speakers? (thanks to Arma)
Another tutorial in English (thanks to ltjim007)
Commands and Permissions
/tomap <url>
Renders an image and gives a map to the player with it.
- This command can only be used by a player.
- The link must be complete, do not forget that the chat limit is 240 characters.
- You can use an URL shortener like tinyURL or bitly.
- If you want a picture in one map, type resize after the link.
- If you want to resize to multiple maps, add the witth and height after resize: e.g. /tomap url resize 2 4
- You can change the scaling method by replacing the resize keyword in the /tomap command by:
- resize-stretched to stretch the image to the surface (the image could be distorted); or
- resize-covered to ensure the image covers the whole surface (the image will never be distorted, but some parts may be lost near the borders).
- Permission: imageonmap.new (or imageonmap.userender—legacy, but will be kept in the plugin).
/maps
Opens a GUI to see, retrieve and manage the user's maps.
- This command can only be used by a player.
- Opens a GUI listing all the maps in a paginated view.
- A book is displayed too to see some usage statistics (maps created, quotas).
- A user can retrieve a map by left-clicking it, or manage it by right-clicking.
- Maps can be renamed (for organization), deleted (but they won't render in-game anymore!), or partially retrieved (for posters maps containing more than one map).
- Permission: imageonmap.list, plus imageonmap.get, imageonmap.rename and imageonmap.delete for actions into the GUI.
/maptool <new|list|get|delete|explore|migrate>
Main command to manage the maps. The less used in everyday usage, too.
- The commands names are pretty obvious.
- /maptool new is an alias of /tomap.
- /maptool explore is an alias of /maps.
- /maptool migrate migrates the old maps when you upgrade from IoM <= 2.7 to IoM 3.0. You HAVE TO execute this command to retrieve all maps when you do such a migration.
- Permissions:
- imageonmap.new for /maptool new;
- imageonmap.list for both /maptool list and /maptool explore;
- imageonmap.get for /maptool get;
- imageonmap.delete for /maptool delete;
- imageonmap.administrative for /maptool migrate.
About the permissions
All permissions are by default granted to everyone, with the exception of imageonmap.administrative. We believe that in most cases, servers administrators want to give the availability to create images on maps to every player.
Negate a permission using a plugin manager to remove it, if you want to restrict this possibility to a set of users.
You can grant imageonmap.* to users, as this permission is a shortcut for all user permissions (excluding imageonmap.administrative).
Configuration
# Plugin language. Empty: system language.
# Available: en_US (default, fallback) and fr_FR.
lang:
# Allows collection of anonymous statistics on plugin environment and usage
# The statistics are publicly visible here: https://bstats.org/plugin/bukkit/ImageOnMap
collect-data: true
# Images rendered on maps consume Minecraft maps ID, and there are only 32 767 of them.
# You can limit the maximum number of maps a player, or the whole server, can use with ImageOnMap.
# 0 means unlimited.
map-global-limit: 0
map-player-limit: 0
Changelog
3.0
The 3.0 release is a complete rewrite of the original ImageOnMap plugin, now based on zLib, which adds many features and fixes many bugs.
This new version is not compatible with the older ones, so your older maps will not be loaded. Run the/maptool migrate command (as op or in the console) in order to get them back in this new version.
You will find amongst the new features:
- New Splatter maps, making it easy to deploy and remove big posters in one click!
- No more item tags when maps are put in item frames!
- Internationalization support (only french and English are supported, for now; contributions are welcome)
- Map Quotas (for players and the whole server)
- A new map Manager (based on an inventory interface), to list, rename, get and delete your maps
- Improvements on the commands system (integrated help and autocompletion)
- Asynchronous maps rendering (your server won't freeze anymore when rendering big maps, and you can queue multiple map renderings !)
- UUID management (which requires to run /maptool migrate)
3.1
- Fixed permissions support by adding a full set of permissions for every action of the plugin.
4.0 pre-release 1
- Added 1.13.2 and 1.14 compatibility
- Dropped compatibility with 1.12 and lower
- Improved some UIs
- Added support for images' resize to a specific size: you can do /tomap https://url/image.png resize 2 2 to get a 2×2 frames image.
- Status messages are sent in the action bar instead of the chat
- Added back statistics (you can opt-out in plugins/bStats/config.yml)
- Added an update checker
4.0 pre-release 2
- 1.15 compatibility (now building against a 1.15-compatible zLib version).
- This version is only compatible with Minecraft 1.15 and later—for older Minecraft versions, please use 4.0-pre1 or older.
- Improved some translations in French (thanks to Gabriel C.).
4.0
- You can now place a map on the ground or on a ceiling.
- Languages with non-english characters now display correctly (fixed UTF-8 encoding bug).
- Splatter maps no longer throw an exception when placed.
- When a player place a splatter map, other players in the same area see it entirely, including the bottom-left corner.
- Added Russian and German translations (thx to Danechek and squeezer).
4.2.0 The permission and cliffhanger update ⋅ Part I
- 1.17 support.
- Permissions to limit the number of map/image used/owned is now available. (permissions imageonmap.mapLimit.XX and imageonmap.imageLimit.XX where XX is an integer and will define the limit allowed for the player).
- Added a whitelist for trusted image hosting websites. Add an images-hostnames-whitelist list in config.yml, and write every URL prefix you want to allow. If you want to allow everything, remove the images-hostnames-whitelist list entirely, or empty it. There is also a permission to ignore the allow list: imageonmap.bypasswhitelist.
Code (YAML):images-hostnames-whitelist:
- i.imgur.com
- cdn.discord.com - Images are now protected against non player based interaction. (Bye bye sneaky skeleton that used to grief art!)
- Now by default when deploying a map the item frame turn invisible and returned to visible hen removing the map from the frame (there is a permission to allow this behavior: imageonmap.placeinvisiblesplattermap).
- Bug fixes & optimizations.
- Dropped migrator (no more error when reloading or when sometimes loading the server).
- Fixed an issue when resizing with resize 0 0.
- Fixed a map loading issue. (map did not render at all if they weren't in a player inventory.
- Added a fix for map loading on paper. (map did not render fully on paper).
4.2.1 The permission and cliffhanger update ⋅ Part II
- 1.18 support.
- Fixed a lag issue caused by the map loading changes of 4.2.0.
- Fixed an issue with map part not working properly.
- Fixed an issue in survival where an incorrect amount of map were consumed.
- Fixed an issue where image map folder was not created and cause issues.
Data collection
We use bStats to collect basic data about the usage of this plugin*. This can be disabled in the plugins/bStats/config.yml file.
@MCwolski
Actually not.
Simple and very useful plugin :D
Cool plugin!
Can I load pictures from plugin folder by using 1.3?
@vintrove
You're lucky, v1.3 implements this feature !
See the changelog:
Add option for limiting map number by server (Limit-map-by-server) and / or player (Limit-map-by-player) in config.yml
If 0 == unlimited (default).
Set Limit-map-by-player to 20 for example, and user can't have more than 20 custom maps. After, they can "rerender" a picture into a map they have already rendered, or use /rmmap to delete one of her maps.
Renaming is a good idea, maybe in a future update. :)
This plugin is great for my smaller MC community (easy to babysit bad uploads). Thank you for making it!
I'm looking to prevent entire houses of large uploaded pictures. I was wondering if you'd consider a limitation per user on picture uploads. So each user has say... 1 - 20 images. Once they hit 20 images, they can only replace one of those 20 uploaded. Perhaps let them set a name so it's easy to tell which one to delete too. Replace "Dragon5" with "NEW-URL" for example... or whatever, hahah.
Thanks again!
@xXrobin99Xx
Wait that BukkitDev Team approve v1.2.2 :)
Nice plugin but remove the Playernames on the Map its not so pretty :( or add a option in the config that you can enable/disable it... THX
@Mooribus
Thanks! :D
@BoomShnizel
Done !
Can you cancel the (player's name) on the map? :), its pretty ugly on frames
@paintball89
I don't understand, is there an error ? I've put another build that fixes a lot of issues. When she will be approved, tell me if your problem is gone.
not working for me just repeats the same command after i try to add a link
awesome i made one like this before but couldn't figure out a working config
i could only code the image src into the plugin which wouldn't make it useful for the public
good job
Just to be sure: is anyone have the same issue ? Or is it working without problems ?
@TJM4
Can you try with this link for your picture ? https://i.canvasugc.com/ugc/original/51fedd684145921fe35e983195542149edd42d86.png Also, check if there is a folder named "Image" in plugins/ImageOnMap on your server.
I used this and it did not work. All it did was make a checked map! Also it spat this out in the console! fix? I don't understand this!
17:02:47 [INFO] TJM4 issued server command: /help 17:02:56 [INFO] TJM4 issued server command: /help imageonmap 17:04:30 [INFO] TJM4 issued server command: /topmap https://i.canvasugc.com/ugc/ original/51fedd684145921fe35e983195542149edd42d86.png 17:04:38 [INFO] TJM4 issued server command: /tomap https://i.canvasugc.com/ugc/o riginal/51fedd684145921fe35e983195542149edd42d86.png 17:04:47 [INFO] TJM4 issued server command: /tomap https://i.canvasugc.com/ugc/o riginal/51fedd684145921fe35e983195542149edd42d86.png 17:04:50 [SEVERE] java.io.FileNotFoundException: .\plugins\ImageOnMap\Image\map0 .png (The system cannot find the path specified) 17:04:50 [SEVERE] at java.io.RandomAccessFile.open(Native Method) 17:04:50 [SEVERE] at java.io.RandomAccessFile.<init>(Unknown Source) 17:04:50 [SEVERE] at javax.imageio.stream.FileImageOutputStream.<init>(Unk nown Source) 17:04:50 [SEVERE] at com.sun.imageio.spi.FileImageOutputStreamSpi.createOu tputStreamInstance(Unknown Source) 17:04:50 [SEVERE] at javax.imageio.ImageIO.createImageOutputStream(Unknown Source) 17:04:50 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:04:50 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:04:50 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:04:50 [SEVERE] Exception in thread "Thread-10" 17:04:50 [SEVERE] java.lang.NullPointerException 17:04:50 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:04:50 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:04:50 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:05:05 [INFO] TJM4 issued server command: /tomap https://i.canvasugc.com/ugc/o riginal/51fedd684145921fe35e983195542149edd42d86.png 17:05:06 [SEVERE] java.io.FileNotFoundException: .\plugins\ImageOnMap\Image\map0 .png (The system cannot find the path specified) 17:05:06 [SEVERE] at java.io.RandomAccessFile.open(Native Method) 17:05:06 [SEVERE] at java.io.RandomAccessFile.<init>(Unknown Source) 17:05:06 [SEVERE] at javax.imageio.stream.FileImageOutputStream.<init>(Unk nown Source) 17:05:06 [SEVERE] at com.sun.imageio.spi.FileImageOutputStreamSpi.createOu tputStreamInstance(Unknown Source) 17:05:06 [SEVERE] at javax.imageio.ImageIO.createImageOutputStream(Unknown Source) 17:05:06 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:05:06 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:05:06 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:05:06 [SEVERE] Exception in thread "Thread-12" 17:05:06 [SEVERE] java.lang.NullPointerException 17:05:06 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:05:06 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:05:06 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:06:55 [INFO] CommandBlock at 340,56,928 issued server command: /time set 6000
17:08:22 [INFO] TJM4 issued server command: /tomap https://i.canvasugc.com/ugc/o riginal/51fedd684145921fe35e983195542149edd42d86.png 17:08:23 [SEVERE] java.io.FileNotFoundException: .\plugins\ImageOnMap\Image\map0 .png (The system cannot find the path specified) 17:08:23 [SEVERE] at java.io.RandomAccessFile.open(Native Method) 17:08:23 [SEVERE] at java.io.RandomAccessFile.<init>(Unknown Source) 17:08:23 [SEVERE] at javax.imageio.stream.FileImageOutputStream.<init>(Unk nown Source) 17:08:23 [SEVERE] at com.sun.imageio.spi.FileImageOutputStreamSpi.createOu tputStreamInstance(Unknown Source) 17:08:23 [SEVERE] at javax.imageio.ImageIO.createImageOutputStream(Unknown Source) 17:08:23 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:08:23 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:08:23 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:08:23 [SEVERE] Exception in thread "Thread-13" 17:08:23 [SEVERE] java.lang.NullPointerException 17:08:23 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:08:23 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:08:23 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:08:50 [INFO] TJM4 issued server command: /tomap http://www.kde.org/stuff/clip art/klogo-official-lineart_detailed-128x128.png 17:08:51 [SEVERE] java.io.FileNotFoundException: .\plugins\ImageOnMap\Image\map0 .png (The system cannot find the path specified) 17:08:51 [SEVERE] at java.io.RandomAccessFile.open(Native Method) 17:08:51 [SEVERE] at java.io.RandomAccessFile.<init>(Unknown Source) 17:08:51 [SEVERE] at javax.imageio.stream.FileImageOutputStream.<init>(Unk nown Source) 17:08:51 [SEVERE] at com.sun.imageio.spi.FileImageOutputStreamSpi.createOu tputStreamInstance(Unknown Source) 17:08:51 [SEVERE] at javax.imageio.ImageIO.createImageOutputStream(Unknown Source) 17:08:51 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:08:51 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:08:51 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:08:51 [SEVERE] Exception in thread "Thread-14" 17:08:51 [SEVERE] java.lang.NullPointerException 17:08:51 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:08:51 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:08:51 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:08:56 [INFO] TJM4 issued server command: /tomap http://www.kde.org/stuff/clip art/klogo-official-lineart_detailed-128x128.png 17:08:56 [SEVERE] java.io.FileNotFoundException: .\plugins\ImageOnMap\Image\map0 .png (The system cannot find the path specified) 17:08:56 [SEVERE] at java.io.RandomAccessFile.open(Native Method) 17:08:56 [SEVERE] at java.io.RandomAccessFile.<init>(Unknown Source) 17:08:56 [SEVERE] at javax.imageio.stream.FileImageOutputStream.<init>(Unk nown Source) 17:08:56 [SEVERE] at com.sun.imageio.spi.FileImageOutputStreamSpi.createOu tputStreamInstance(Unknown Source) 17:08:56 [SEVERE] at javax.imageio.ImageIO.createImageOutputStream(Unknown Source) 17:08:56 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:08:56 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:08:56 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:08:56 [SEVERE] Exception in thread "Thread-15" 17:08:56 [SEVERE] java.lang.NullPointerException 17:08:56 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:08:56 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:08:56 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:09:18 [INFO] TJM4 issued server command: /tomap http://www.kde.org/stuff/clip art/klogo-official-lineart_detailed-128x128.png 17:09:18 [SEVERE] java.io.FileNotFoundException: .\plugins\ImageOnMap\Image\map1 .png (The system cannot find the path specified) 17:09:18 [SEVERE] at java.io.RandomAccessFile.open(Native Method) 17:09:18 [SEVERE] at java.io.RandomAccessFile.<init>(Unknown Source) 17:09:18 [SEVERE] at javax.imageio.stream.FileImageOutputStream.<init>(Unk nown Source) 17:09:18 [SEVERE] at com.sun.imageio.spi.FileImageOutputStreamSpi.createOu tputStreamInstance(Unknown Source) 17:09:18 [SEVERE] at javax.imageio.ImageIO.createImageOutputStream(Unknown Source) 17:09:18 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:09:18 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:09:18 [SEVERE] at java.lang.Thread.run(Unknown Source) 17:09:18 [SEVERE] Exception in thread "Thread-16" 17:09:18 [SEVERE] java.lang.NullPointerException 17:09:18 [SEVERE] at javax.imageio.ImageIO.write(Unknown Source) 17:09:18 [SEVERE] at fr.moribus.ImageOnMap.Rendu.run(Rendu.java:102) 17:09:18 [SEVERE] at java.lang.Thread.run(Unknown Source)
when 1.7 releases you should add so you can split a image in multiple maps
@LHammonds
Well, I don't place a lot of image in items frame on my server.. So I haven't encountered much lag than that. You can try it and give your feedback. If you remove the plugin later, maps with picture will just be blank.
Isn't one of the major performance problems with Bukkit/Minecraft when maps are placed in item frames? Since this is not really a map, does it bypass the lag caused by maps in item frames?
This sounds fascinating but I'm a bit too gun shy to try it on my server...but I'd like to...even if that meant limiting to just admin use to place a few key images on the server.
Thanks,
LHammonds