{"id":14969609,"url":"https://github.com/josemmo/yamipa","last_synced_at":"2026-05-17T12:17:05.571Z","repository":{"id":37864073,"uuid":"331586150","full_name":"josemmo/yamipa","owner":"josemmo","description":"Yet Another Minecraft Image Placing Addon","archived":false,"fork":false,"pushed_at":"2026-04-19T17:26:58.000Z","size":6346,"stargazers_count":83,"open_issues_count":1,"forks_count":26,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-04-19T18:35:28.266Z","etag":null,"topics":["bukkit","images","minecraft","minecraft-plugin","papermc","spigot"],"latest_commit_sha":null,"homepage":"https://www.spigotmc.org/resources/88709/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/josemmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-01-21T10:01:58.000Z","updated_at":"2026-03-21T10:39:35.000Z","dependencies_parsed_at":"2026-04-02T02:01:24.592Z","dependency_job_id":null,"html_url":"https://github.com/josemmo/yamipa","commit_stats":{"total_commits":309,"total_committers":4,"mean_commits":77.25,"dds":"0.012944983818770184","last_synced_commit":"a51c7777a289e464a1eabd114fbbf83730b61084"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/josemmo/yamipa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josemmo%2Fyamipa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josemmo%2Fyamipa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josemmo%2Fyamipa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josemmo%2Fyamipa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/josemmo","download_url":"https://codeload.github.com/josemmo/yamipa/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josemmo%2Fyamipa/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33137832,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bukkit","images","minecraft","minecraft-plugin","papermc","spigot"],"created_at":"2024-09-24T13:42:06.812Z","updated_at":"2026-05-17T12:17:05.558Z","avatar_url":"https://github.com/josemmo.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Yet Another Minecraft Image Placing Addon\n[![Tests](https://github.com/josemmo/yamipa/workflows/Tests/badge.svg)](https://github.com/josemmo/yamipa/actions)\n[![Latest Version](https://img.shields.io/github/v/release/josemmo/yamipa)](https://github.com/josemmo/yamipa/releases/latest)\n![Minecraft Version](https://img.shields.io/badge/minecraft-%3E%3D1.16-blueviolet)\n[![bStats Servers](https://img.shields.io/bstats/servers/10243)](https://bstats.org/plugin/bukkit/Yamipa/10243)\n[![License](https://img.shields.io/github/license/josemmo/yamipa)](LICENSE)\n\nYamipa is a Spigot plugin that allows players to place images (even **animated**!) on any surface in your Minecraft server\nwithout having to install any local client mod.\n\nIt is designed with performance and compatibility in mind, so even the most low-specs servers should be able to run it.\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://imgur.com/9rzeKFS\"\u003e\u003cimg alt=\"Placing and removing image\" src=\"screenshots/demo.gif\" width=\"300\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://imgur.com/a/J22z9Dq\"\u003e\u003cimg alt=\"Works with animated images too!\" src=\"screenshots/demo-animated.gif\" width=\"300\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://imgur.com/a/laPF1eN\"\u003e\u003cimg alt=\"Placing and removing image item\" src=\"screenshots/demo-item.gif\" width=\"300\"\u003e\u003c/a\u003e\n    \u003ca href=\"screenshots/sample.jpg\"\u003e\u003cimg alt=\"Optimized to work in low-spec servers\" src=\"screenshots/sample.jpg\" width=\"300\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Installation\nDownload the JAR file for the [latest release](https://github.com/josemmo/yamipa/releases/latest) and copy it to the\n\"plugins\" directory of your Minecraft server as you'll do with any other plugin. That's it!\n\n### Requirements\nBefore installing Yamipa make sure you meet the following requirements:\n\n- Spigot/PaperMC/forks 1.16 or higher or Folia\n- [ProtocolLib](https://www.spigotmc.org/resources/protocollib.1997/) v5.3.0 or higher\n\nHere are the Minecraft distributions where Yamipa should be able to run:\n| Minecraft version | Spigot | PaperMC | Purpur | Folia |\n|------------------:|:------:|:-------:|:------:|:-----:|\n|            1.16.x |   ✅    |   ✅     |   ✅    |       |\n|     1.17 \u0026 1.17.1 |   ✅    |   ✅     |   ✅    |       |\n|     1.18 \u0026 1.18.x |   ✅    |   ✅     |   ✅    |       |\n|     1.19 \u0026 1.19.x |   ✅    |   ✅     |   ✅    |       |\n|     1.20 \u0026 1.20.x |   ✅    |   ✅     |   ✅    |   ✅   |\n|     1.21 \u0026 1.21.x |   ✅    |   ✅     |   ✅    |   ✅   |\n|     26.1 \u0026 26.1.x |   ✅    |   ✅     |   ✅    |   ✅   |\n\n## Configuration\nYamipa is ready-to-go right out of the box. By default, it creates the following files and directories under the\n`plugins/YamipaPlugin` directory:\n\n- `cache`: A directory containing cached images to speed up the rendering process. You shouldn't modify its contents.\n- `images`: **This is the directory where you put the image files** you want to place in your Minecraft world.\n- `images.dat`: A file holding the list and properties (e.g. coordinates) of all placed images in your server. You\nshouldn't modify its contents.\n\nYou can change the path of these files by creating a `config.yml` file in the plugin configuration directory.\nHere are the default configuration values if you don't specify them:\n```yaml\ncommand-name: yamipa              # Name of the root command\ncommand-aliases: [image, images]  # Aliases for the root command, can be an empty list\nverbose: false                    # Set to \"true\" to enable more verbose logging\nanimate-images: true              # Set to \"false\" to disable GIF support\nimages-path: images               # Path to images directory\ncache-path: cache                 # Path to cache directory\ndata-path: images.dat             # Path to placed images database file\nallowed-paths: null               # Set to a RegExp to limit accessible images to players\nmax-image-dimension: 30           # Maximum width or height in blocks allowed in images\n```\n\nFor more information on how to set a different `allowed-paths` or `max-image-dimension` value per player, see the\n[Player variables](#player-variables) section.\n\n### Allowed paths\nThe variable `allowed-paths` is a regular expression that determines whether a player is allowed to see or download\nan image file. If the desired path relative to the images directory matches this expression, then the player is allowed\nto continue.\n\nIf `allowed-paths` is an empty string (\"\") or null, then the player can read any image file or download to any path\ninside the images directory.\n\nThis regular expression must follow\n[the syntax used by Java](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html). You can test your\nexpression beforehand using an online tool like [regex101](https://regex101.com/).\nIn addition, you can make use of the following special tokens:\n\n- `#player#`: Player name\n- `#uuid#`: Player UUID (with hyphens)\n\nFor example, if you want every player in your server to have their own subdirectory for storing files that only they\ncan access, plus a shared public directory, you can use the following `allowed-paths` value:\n```regexp\n^(private/#player#|public)/\n```\n\nThat way, the player \"john\" can see the image file at \"private/john/something.jpg\", but \"jane\" cannot.\n\n\u003e **IMPORTANT!**\\\n\u003e Note that these restrictions **also apply to other entities** like NPCs, command blocks or the server console.\n\u003e However, special tokens will always match in non-player contexts (e.g., \"#player#\" will be interpreted as \".+\").\n\n### bStats\nThis library uses bStats to anonymously report the number of installs. If you don't like this, feel free to\ndisable it at any time by adding `enabled: false` to the\n[bStats configuration file](https://bstats.org/getting-started#:~:text=Disabling%20bStats) (it's ok, no hard feelings).\n\n## Usage\nThis plugin adds the following commands:\n\n- `/image clear \u003cx z world\u003e \u003cr\u003e [\u003cplaced-by\u003e]`: Remove all placed images in a radius of `r` blocks around an origin.\n- `/image describe`: Show detailed information about a placed image.\n- `/image download \u003curl\u003e \u003cfilename\u003e`: Download an image from a URL and place it in the images directory.\n- `/image give \u003cplayer\u003e \u003cfilename\u003e \u003camount\u003e \u003cw\u003e [\u003ch\u003e] [\u003cflags\u003e]`: Give image items that can be placed later to a player.\n- `/image list [\u003cpage\u003e]`: List all available files in the images directory.\n- `/image place \u003cfilename\u003e \u003cw\u003e [\u003ch\u003e] [\u003cflags\u003e]`: Start a UI dialog to place an image of size `w`x`h` blocks.\n- `/image place-at \u003cx y z world\u003e \u003cface\u003e \u003cfilename\u003e \u003cw\u003e [\u003ch\u003e] [\u003cflags\u003e]`: Place an image at the given coordinates.\n- `/image remove`: Start UI dialog to remove a placed image from the world without deleting the image file.\n- `/image remove-at \u003cx y z world\u003e \u003cface\u003e`: Remove the image at the given coordinates.\n- `/image top`: List players with the most placed images.\n\n### Examples\n\n- Show help\\\n  `/image`\n- Download an image from a URL and save it with another name\\\n  `/image download \"https://www.example.com/a/b/c/1234.jpg\" \"imagename.jpg\"`\n- Give 10 image items to \"TestPlayer\" for the \"test.jpg\" image (3x5 blocks)\\\n  `/image give TestPlayer \"test.jpg\" 10 3 5`\n- Give 10 image items to \"TestPlayer\" that will not drop an image item when removed\\\n  `/image give TestPlayer \"test.jpg\" 10 3 5 -DROP`\n- Start the UI dialog to place an image with a width of 3 blocks and auto height\\\n  `/image place \"imagename.jpg\" 3`\n- Start the UI dialog to place a 3-blocks wide and 2-blocks high image\\\n  `/image place \"imagename.jpg\" 3 2`\n- Start the UI dialog to place an image that glows in the dark\\\n  `/image place \"imagename.jpg\" 3 2 +GLOW`\n- Place an image at a given block, facing north, without player interaction\\\n  `/image place-at 100 200 300 world NORTH \"imagename.jpg\" 3`\n- Start the UI dialog to remove a placed image while keeping the original file\\\n  `/image remove`\n- Remove a placed image at a given block, without player interaction\\\n  `/image remove-at 100 200 300 world NORTH`\n- Remove all placed images in a radius of 5 blocks around the spawn\\\n  `/image clear 0 0 world 5`\n- Remove all images placed by \"EvilPlayer\" in a radius of 100 blocks in the nether\\\n  `/image clear 50 70 world_nether 100 EvilPlayer`\n- Remove all legacy placed images (without \"placed by\" metadata)\\\n  `/image clear 0 0 world 9999999 00000000-0000-0000-0000-000000000000`\n\n## Permissions\nIf you want more granular control over the features exposed to players, permissions are the way to go!\n\nYamipa defines the following permissions:\n\n| Permission                  |   Default   | Description                                                     |\n|:----------------------------|:-----------:|:----------------------------------------------------------------|\n| `yamipa.command.clear`      |     OPs     | To use the `/image clear` command                               |\n| `yamipa.command.describe`   |     OPs     | To use the `/image describe` command                            |\n| `yamipa.command.download`   |     OPs     | To use the `/image download` command                            |\n| `yamipa.command.give`       |     OPs     | To use the `/image give` command                                |\n| `yamipa.command.list`       |     OPs     | To use the `/image list` command                                |\n| `yamipa.command.place`      |     OPs     | To use the `/image place` command                               |\n| `yamipa.command.place-at`   |     OPs     | To use the `/image place-at` command                            |\n| `yamipa.command.remove`     |     OPs     | To use the `/image remove` command                              |\n| `yamipa.command.remove.own` |     OPs     | Same as previous, but only for images placed by the same player |\n| `yamipa.command.remove-at`  |     OPs     | To use the `/image remove-at` command                           |\n| `yamipa.command.top`        |     OPs     | To use the `/image top` command                                 |\n| `yamipa.item.place`         | All players | To place image items                                            |\n| `yamipa.item.remove`        | All players | To remove image items (that have the `REMO` flag)               |\n| `yamipa.item.remove.own`    | All players | Same as previous, but only for images placed by the same player |\n\nNote that permissions work **as a tree**. This means that if you grant a permission, by default its children will also\nbe granted. For instance, you can grant access to all commands with `yamipa.command.*`.\nSimilarly, if you grant the `yamipa.command.remove`, the permission `yamipa.command.remove.own` will also be granted.\n\nYou can change which roles or players are granted these commands by using a permission plugin,\nsuch as [LuckPerms](https://luckperms.net/) or [GroupManager](https://elgarl.github.io/GroupManager/).\nBoth these plugins have been tested to work with Yamipa, although any similar one should work just fine.\n\n## Player variables\nSome permission plugins like LuckPerms allow server operators to assign\n[key-value pairs](https://luckperms.net/wiki/Meta-Commands) to entities as if they were permissions.\nThis is useful for granting different capabilities to different players or groups.\n\nYamipa looks for the following variables which, if found, override the default configuration value that applies to all\nplayers:\n\n| Variable (key)               | Overrides             | Description                                                                       |\n|:-----------------------------|:----------------------|:----------------------------------------------------------------------------------|\n| `yamipa-allowed-paths`       | `allowed-paths`       | Regular expression that limits which paths in the images directory are accessible |\n| `yamipa-max-image-dimension` | `max-image-dimension` | Maximum width or height of images and image items issued by this player or group  |\n\nFor example, if you want to limit the image size to 5x5 blocks just for the \"test\" player, you can run this command:\n```sh\n# Using LuckPerms\n/lp user test meta set yamipa-max-image-dimension 5\n\n# Using GroupManager\n/manuaddv test yamipa-max-image-dimension 5\n```\n\n## Protecting areas\nIn large servers, letting your players place and remove images wherever they want might not be the most sensible idea.\nFor those cases, Yamipa is compatible with other Bukkit plugins that allow creating and managing world areas.\nIf you have one or more of such plugins, Yamipa will automatically apply permissions accordingly and only let players\nplace or remove images where they can place or remove blocks, no additional configuration required.\n\nThe supported plugins are:\n\n- [WorldGuard](https://enginehub.org/worldguard/)\n- [GriefPrevention](https://www.spigotmc.org/resources/griefprevention.1884/)\n- [Towny Advanced](https://townyadvanced.github.io/)\n- [Lands](https://www.spigotmc.org/resources/53313/)\n\n## Flags\nImages from this plugin have a set of boolean attributes called \"flags\" that modify its behavior. Possible values are:\n\n- `ANIM` (animatable): Whether an image should be animated or not, useful when you don't want a GIF image to play.\n- `REMO` (removable): Whether an image can be removed by any player by left-clicking it.\n- `DROP` (droppable): Whether an image drops an image item when is removed by any player.\n- `GLOW` (glowing): Whether an image glows in the dark (only works on Minecraft 1.17 and above).\n\nBy default, images placed with the \"/image place\" command only have the `ANIM` flag.\nSimilarly, image items issued with the \"/image give\" command have `ANIM`, `REMO` and `DROP` flags.\n\nDefault flags can be modified through the \"flags\" argument.\nTo add a flag to the default ones use \"+{FLAG_NAME}\" (e.g. `+GLOW`), and to remove it use \"-{FLAG_NAME}\" (e.g. `-ANIM`).\nYou can modify multiple flags separating them with commas (e.g. `+GLOW,-ANIM`).\n\n## How does it work?\nAs you may have already guessed, Minecraft does not support the placing of image files.\nYamipa bypasses this limitation by using two built-in features (**item frames and maps**) to render custom images.\n\nHowever, because item frames **are entities** (and these cause a lot of lag in a server), Yamipa **does not actually\ncreate any entity** in your world. Instead, it tricks your players' clients into thinking there's a placed item frame\nwhere there isn't by sending crafted network packets.\n\nIn the case of animated images (i.e. GIFs), Yamipa sends all animation frames to the player (which takes a decent amount\nof bandwidth) and then sends a tiny packet telling the client to switch to the next animation step (i.e. map) every few\nmilliseconds.\n\n\u003e **IMPORTANT!**\\\n\u003e Because Yamipa stores a cached copy of an image in memory whenever a player is near it just in case it needs to send\n\u003e it again without compromising performance, your server **needs to have a bit of spare RAM** to handle this.\n\u003e\n\u003e The rule of thumb here is 100K per unique loaded image (1MB for animated images).\n\u003e Unique means if the same image with same dimensions is placed multiple times it only counts as one instance.\n\n## License\nYamipa is licensed under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosemmo%2Fyamipa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjosemmo%2Fyamipa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosemmo%2Fyamipa/lists"}