Custom Images+ | GUI| Discord URLs | Multilang | WorldGuard | Group/Rank Limits icon

Custom Images+ | GUI| Discord URLs | Multilang | WorldGuard | Group/Rank Limits -----

Place custom images on walls, floors & ceilings in your server from any URL/Discord. Easy to use




Se corrigio el enlace de descarga que anteriormente quedaba corrompido e impedia la descarga del jar
----------, Jun 19, 2026

Se corrigio el enlace de descarga que anteriormente quedaba corrompido e impedia la descarga del jar
----------, Jun 19, 2026

v1.4.1 — Full rebuild of v1.4 (replaces the broken release)

v1.4.0 is buggy. v1.4.1 is v1.4 done right — every feature re-implemented on top of v1.3 with per-step testing so the PAPI regression that hit v1.4.0 cannot reoccur. If you already upgraded to v1.4.0 and saw external placeholders break, replace the JAR with this one. No config or data migration is required — existing image files from v1.2 / v1.3 / v1.4.0 deserialize cleanly.

What went wrong in v1.4.0
v1.4.0 called File.renameTo(plugins/Images → plugins/ImagesPlus) inside onLoad() so the folder name would match the new plugin identity. The rename ran during Paper's plugin-discovery pass and raced with PlaceholderAPI's external-expansion scan. Downstream: PAPI silently stopped registering its external expansions (luckperms, essentials, vault, statistic, math, player, server, worldguard, …), placeholders resolved to their literal text, and any task that wrote a PAPI value back into LuckPerms persisted that literal into the meta store. Several servers corrupted event counters and scoreboard-backed meta fields.

The fix
• Plugin name stays Images in /pl and in log prefixes — zero rename, ever.
• Data folder stays plugins/Images/ forever.
• No onLoad() filesystem operations of any kind.
• If you're upgrading from v1.4.0 and already have a plugins/ImagesPlus/ folder, move it back to plugins/Images/ manually before the first start. Fresh installs and upgrades from v1.2 / v1.3 do nothing.

Everything v1.4 promised — now stable

Management GUI — /image gui
• Paginated chest browser unified for everyone. Opens with /image gui (alias /image menu, /imagen menu).
• Personal scope by default — everyone can browse and manage their own images. Admins with images.gui.admin also get "browse all".
• Clean user / admin row split: user actions (Info, Delete own, Move own, Alias) live on one row; admin tools (Teleport, Hide / Unhide, Ban URL) on the bottom row. Non-admin viewers see light-blue glass-pane crystals in the admin band — admin actions never leak into the user UI.

Moderation
Hide / Unhide — soft flag. Image stops rendering for every viewer but metadata and frames stay in the DB, fully reversible.
Ban URL — global blacklist stored at plugins/Images/banned_urls.txt. Bans the URL and deletes every sibling image that uses it, across every world. Future /image create calls for that URL are rejected with a clear message. Use /image unbanurl to list or lift entries.
Delete — owners can delete their own via the Delete button in the user row; admins with images.gui.delete.any can delete any image.
Move (true relocate) — keeps the same database id, creator, placedAt, and source. Click Move → right-click the new destination block → image rebuilds in place. 40-million-pixel safety cap on scaled bitmaps so oversized images can't OOM the server during the rebuild.
Bulk actions — toggle "Bulk" in the browser, click images to select (enchant-glint marker), apply Delete / Hide / Ban-URL to the whole selection with a single confirmation. Respects per-image ownership gating.

Discovery and housekeeping
Search — chat-based text capture that filters by imageName, sourceUrl, owner alias, or resolved creator name. Admin-scope.
Filter menu — quick presets: one icon per loaded world + Hidden + last-24h recent.
Leaderboard — top creators by placed-image count; click a row to open the browser filtered to that creator.
Orphan scan — lists images whose anchor references a world the server no longer has loaded, with single-click delete.
CSV export — async dump to plugins/Images/exports/images-YYYYMMDD-HHMMSS.csv (17 columns: id, imageName, ownerAlias, creator UUID / name, world, xyz, direction, placedAt, scale, source, sourceUrl, hidden, banned, banReason).

Personalization
Owner alias — set a personal label (max 32 chars) via chat capture. The alias takes precedence over the filename in the browser icon title; the filename stays in the lore for traceability. Admins can override any alias.
Safe teleport — the TP button computes a 3-block view-point in front of the image and scans for two stacked air blocks so you don't land in lava or inside a wall. Yaw aligns you to face the image.
Confirmation dialogs on every destructive action — yes/no stained-glass panes on a full sub-menu, so destructive clicks always require a deliberate second step.

Audit log
• Every GUI action is written to plugins/Images/images.log with its own tag: HIDE, UNHIDE, BAN_URL, UNBAN_URL, MOVE, ALIAS, BULK, GUI_TP. GUI-driven deletes carry method=GUI_DELETE so you can tell them apart from /image delete.
• Format stays key=value per line, grep-friendly.

Quality-of-life fixes
/image create <url> now works with Cloudflare-fronted CDNs. Java's default User-Agent gets served bot-detection HTML by Pexels, Discord, Imgur and others; v1.4.1 downloads with a browser-like UA and follows HTTPS redirects manually. No more "Invalid or unreadable image file" on valid URLs.
CustomImage serialization is fully additive — new moderation and alias fields are written in their own EOF-guarded blocks. Old v1.2 / v1.3 image saves deserialize cleanly with safe defaults; v1.4.0 saves also round-trip.

Localization
• 100% translatable via lang/en.yml / lang/es.yml. 200+ GUI message keys covering every title, button, lore line, click hint and audit message. Drop a pt.yml / fr.yml / any language code and run /image reload.

Permissions added in v1.4.1
  • images.command.gui — open the GUI (default true)
  • images.gui.admin — admin scope in menus (default op)
  • images.gui.teleport — TP from detail menu (default op)
  • images.gui.delete.own / .any — self / any
  • images.gui.move.own / .any — self / any
  • images.gui.alias.own / .any — self / any
  • images.gui.hide, images.gui.ban — moderation (op)
  • images.gui.search, .filter, .leaderboard, .orphan-scan, .export — admin tools (op)
  • images.command.ban — manage URL ban list (op)
  • images.command.create.banned-bypass — create images from a banned URL (default false)

How to upgrade
Stop the server, replace any CustomImages-Plus*.jar in plugins/ with CustomImages-Plus-v1.4.1.jar, start. If you were on v1.4.0 and have a plugins/ImagesPlus/ folder, move its contents back under plugins/Images/ before starting.

Tested on
Paper 1.21.11 (production, 133 images loaded, PAPI 16 external expansions). NMS shim covers 1.8 → 1.21.11 as before. Full changelog and source: https://github.com/michumichifu/CustomImagesPlus/releases/tag/v1.4.1
----------, Apr 19, 2026

v1.4 — Visual management GUI (chest-menu for admins and users)

New — /image gui
Chest-based management menu unified for everyone. Opens with /image gui (alias /imagen menu). No more traveling to each image to click-delete, and no more digging through the audit log to find "who placed what" — everything is one click away.
User quick actions — the top row has a Create image button (green emerald) and a Delete image button (red TNT) so regular players can create and delete without knowing chat commands. Create prompts for a URL + scale in chat; Delete puts the player in right-click-to-delete mode with an actionbar hint, cancellable by sneaking. Designed for Java and Bedrock — including Bedrock mobile, where everyone already has a sneak button on screen.
Role-aware layout — the top rows always show the viewer's own images; the bottom row of admin shortcuts (Browse all, Filter, Hidden, Banned, Orphan scan, Leaderboard, Export CSV) only appears to holders of images.gui.admin. Regular users see decorative crystals instead. Titles differentiate scope: "Your Images" vs "Manage" so staff always know whether they're acting on their own content or the full server.

Moderation
Hide / Ban / Unhide / Unban — brand-new persistent states alongside delete. Hide un-renders the image without destroying the metadata (reversible). Ban is a harder moderation flag that records admin + reason + timestamp and cannot be lifted by the creator. Both ride the existing save format — backward-compatible with v1.2/v1.3 saves.
Move (true relocate) — keeps the same database id, creator, placedAt, and flags. Admin clicks Move → confirms → right-clicks the new destination block. No delete + recreate orphan audit trail.
Bulk actions — toggle bulk-select, click multiple images, then apply Bulk Delete / Ban / Hide with one confirmation. Cuts repetitive moderation work to one step.
Context-aware buttons — ban/hide/move never show up on your own images; admins see the full toolbox only on others' images, keeping the menu uncluttered.

Discovery and housekeeping
Image finder — type a keyword in chat to filter by name or URL. Admin search covers everything; regular players search their own.
Orphan scan — finds images whose item-frames were destroyed but whose metadata is still in the database. Flags them with a red marker; one click bulk-deletes the leftovers.
Owner leaderboard — top players by image count and storage used. Helps catch hoarders on big servers.
CSV export — dump the full registry to plugins/ImagesPlus/exports/images-<timestamp>.csv (17 columns including world, coords, source, URL, flags, sections, alias).

Personalization
Image alias — users can set a personal label on their own images (max 32 chars) so the GUI lists Living Room instead of IMG_20250412_091541.png. The original filename stays untouched in the lore. Admins can override for any image.
Safe teleport — the TP button computes a 2–3 block viewing position perpendicular to the image and snaps to a safe floor. No falling into lava, no clipping into walls.
Confirmation dialog on every destructive action — short clear title plus the full prompt on a paper item inside the menu, so destructive clicks require two deliberate steps.

Audit
• New images.log action tags: HIDE, UNHIDE, BAN, UNBAN, MOVE, BULK_DELETE, GUI_TP (optional, off by default). GUI-driven deletes add via=GUI / via=BULK so you can tell them apart from chat commands.
• New "History" button inside the detail menu surfaces the last 5 log entries for that image without leaving the GUI.

Plugin identity
Renamed from Images to ImagesPlus in /pl and logs — avoids confusion with the original Custom Images plugin and matches the download name. On first boot the data folder plugins/Images/ is automatically migrated to plugins/ImagesPlus/ — no manual step, no data loss.

Localization
100% translatable. Every GUI title, button, lore line, click hint, message and audit line reads from lang/en.yml / lang/es.yml. Drop a pt.yml / fr.yml / any language code and run /image reload. Hot-reload works for all GUI text — no server restart needed.
Sticky Spanish selection — once a player uses /imagen their session stays in Spanish even if the GUI internally runs /image delete on their behalf. Previously any internal English-aliased call flipped them back to English mid-session.
Fixed: language: es in config now actually renders the GUI in Spanish regardless of which command alias the player used.
• 170+ new message keys for the GUI, including unified color palette across all buttons (green = positive, red = destructive, gold = highlight, aqua = tool).

Quality of life
• Tab-complete for /images create now correctly filters to image extensions only — no more WIKI.md or images.db showing up as suggestions.
• Config auto-migration adds the new gui: block without touching existing settings.

New permissions
Code (Text):

images.command.gui       — Open the menu                 [true]
images.gui.admin         — Admin rows + server-wide scope [op]
images.gui.teleport      — Teleport to any image          [op]
images.gui.move          — Move an image to a new block   [op]
images.gui.hide          — Hide / unhide                  [op]
images.gui.ban           — Ban / unban with reason        [op]
images.gui.delete.any    — Delete any image               [op]
images.gui.delete.own    — Delete your own images         [true]
images.gui.delete.distance — Delete own from any distance [true]
images.gui.bulk          — Bulk-select mode               [op]
images.gui.search        — Text search                    [op]
images.gui.export        — CSV export                     [op]
images.gui.leaderboard   — Owner leaderboard              [op]
images.gui.orphan-scan   — Orphan detection               [op]
 
Backward compatibility
• Existing v1.2/v1.3 images deserialize cleanly with hidden/banned/alias defaulting to the intuitive values. No database migration required.
• If you have an existing plugins/Images/ directory the plugin renames it to plugins/ImagesPlus/ on first boot. All your images, config and lang customizations survive.
• Old chat commands ( /images create, /images who, etc.) keep working unchanged; the GUI is strictly additive.

Thanks
Special thanks to every admin that pushed back on v1.3 to make the UX tighter — the unified "Your Images" view, the short confirm titles with wrapped prompts, the contextual button visibility, and the full-translation pass are all direct consequences of that feedback.
----------, Apr 16, 2026

v1.3 — Paper 26.1.x support + Kittle subfolder fix

Major
Full Paper 26.1.x compatibility — new NMS module that targets the unified org.bukkit.craftbukkit.* package layout (no more v_X_RX suffix). Fixes the UnsupportedOperationException: Version v26_1 is not supported crash on the latest Paper builds. Also handles Mojang's split of ServerboundInteractPacket into separate interact / attack records.

Bug fixes
Subfolders work again in TAB-complete and /images listgetImageFiles() now walks the images directory recursively, so users with hundreds of images organized in subfolders (pokemon/, signs/, etc.) get them listed and auto-completed properly. Big thanks to @Kittle for the report.
Better "Invalid image name" feedback — three specific messages (cannot start with a dot / path traversal not allowed / illegal character) instead of the generic one, and forward-slashes in paths are normalized cross-platform. Thanks to @fett for raising it.
Robust packet handler injection — the addBefore("packet_handler", ...) call is now wrapped with fallbacks (alternative pipeline names, then addLast as last resort), so newer Paper builds that rename the handler don't break image clicks.

Compatibility
• Adds 1.21.x → Paper 26.1.x. All previous versions (1.8 → 1.21.11) keep working.
• Java 25 only required for the Paper 26.1 module (the bundled JAR works on any Java the server supports).

Thanks
Special thanks to @OldComputerMan for prompting the 26.1.x update, @CloudeLecaw for confirming the crash trace, and everyone who tested intermediate builds.
----------, Apr 15, 2026

✦━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━✦
New features

Audit log — plugins/Images/images.log
Every image placement and removal is logged with full context. Plain-text, grep-friendly, append-only.

Code (Text):

[2026-04-14 16:25:03] PLACE player=Steve uuid=... world=world x=100 y=64 z=200 direction=NORTH player_x=99.50 player_y=64.00 player_z=200.30 source=URL name=foo.png url=https://cdn.discordapp.com/... scale=1.00
[2026-04-14 16:30:15] REMOVE player=Steve uuid=... method=COMMAND_DELETE confidence=EXACT world=world x=100 y=64 z=200 image_name=foo.png creator=OtherPlayer
 
  • Toggle with logging.enabled: true in config (auto-added on first run)
  • Tracks confidence levels: EXACT (single click) vs PROBABLE (area delete)
  • Thread-safe writes, one event per line
  • Great for: anti-grief investigations, staff activity audits, content moderation

Click-to-inspect — /imagen quien / /images who
Run the command, click any image, see a full info panel:

Code (Text):

--- Image Info ---
 Name: foo.png
 Placed by: Steve
 UUID: 1b4bb76f-1bd9-45f1-9d08-f017a1c14b08
 Date: 2026-04-14 16:25:03
 World: world
 Coordinates: 100, 64, 200
 Direction: NORTH
 Source: URL
 URL: https://cdn.discordapp.com/...
 Scale: 1.00x
----------------------
 
Permission: images.command.who (default op). Aliases: quien, info.

DB-backed metadata per image
Every image now stores its own placedAt, source ( URL/ SERVER_FILE), full URL, and scale directly in the plugin database. No schema change — backward-compatible with pre-v1.2 images (handled via EOFException in the Serializable format). /images who reads from the DB first (O(1)), only falls back to the log for older images.

✦━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━✦

"Just works" defaults (for new installs)

If you were about to download this plugin for the first time, v1.2 makes the first-run experience painless:

  • place-mode: OP by default — the server owner can place immediately without any LP configuration
  • Command permissions with default: true for read-only / basic actions (manage, list, create, delete) — non-ops see clean "can't place" messages instead of "unknown command"
  • Destructive/staff commands still default: op (delete.near, placed, who, import, transfer, reload)
  • Generic example groups in config instead of random server-specific names
  • region-restricted: false by default — no more "nobody can place anywhere" gotcha on fresh installs

✦━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━✦

Fixes & improvements

  • Lang auto-merge — when a new version adds new message keys, they get merged into your existing lang/*.yml files automatically. No more <placeholder.key> appearing on screen after an update
  • images.command.placed is now its own permission (was sharing images.command.list in v1.1). Staff audit tools can now be granted separately from file listing
  • Fixed: NoSuchMethodError: CustomImage.getLocation() that happened on /images placed when the JAR was built with an incorrect merge process. v1.2 ships with a correct merge (docs included for anyone building from source)
  • Config migration cleaned up to use generic groups (admin, moderator, builder, vip) instead of server-specific names

✦━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━✦

⬆️ Upgrading from v1.1

  1. Stop your server
  2. Replace the old JAR with ImagesPlus-1.2.jar
  3. Start the server — config gets logging.enabled: true added automatically, lang files get new who.* keys merged automatically
  4. Existing images are fully compatible. They'll show up fine, but /images who will display "Before logging (v1.2)" as the date since the metadata wasn't captured at placement time. All new placements will have full info.

Breaking change: if you had non-OP staff using /images placed via the shared images.command.list permission, you'll need to grant them images.command.placed too. OPs are unaffected.

✦━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━✦

Downloads

Tested on Paper 1.21.11. Compatible with 1.8 → 1.21.11, 26.1, 26.2. Thank you to everyone downloading and testing!

───────────────────────────────────────────────────────────────

SHORT CHANGELOG (for the version description field, <500 chars):
───────────────────────────────────────────────────────────────

v1.2 — Major update:

NEW:
• /images who /imagen quien — click-to-inspect any image (creator, date, URL, scale)
• images.log — detailed audit log of every PLACE and REMOVE
• DB metadata per image (placedAt, source, URL, scale) — backward compatible

IMPROVED:
• Works out of the box (place-mode: OP + true defaults for basic commands)
• Auto-merges new lang keys on update (no more <placeholder> messages)
• images.command.placed is now its own permission (was sharing with .list)
• Generic example groups in config (no more server-specific names)

FIXED:
• NoSuchMethodError CustomImage.getLocation() on /images placed
----------, Apr 14, 2026

What's new in v1.1:

New command: /images placed [radius]
List all placed images with world, coordinates, and creator
name. Click any entry to teleport directly to that image.
Supports optional radius filter. Bilingual: /imagen
colocadas [radio]


Fix: Quick disconnect crash
Fixed NoSuchElementException: packet_handler
that occurred when a player disconnected within 1 second
of joining. This was a long-standing bug in the original
plugin that was never fixed.

Local files + TAB autocomplete
Place .png or .jpg files directly in
plugins/Images/ folder. In-game, type
/images create and press TAB — the plugin
auto-suggests all available image files. No URL needed.

Documentation
WIKI updated to 817 lines. New troubleshooting entries for
hosting issues, map footprint artifacts, and the
packet_handler error.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Drop-in upgrade — just replace the JAR. Compatible with
v1.0 and the original Custom Images. Your images and
database are preserved
----------, Apr 13, 2026

Resource Information
Author:
----------
Total Downloads: 181
First Release: Apr 13, 2026
Last Update: Jun 19, 2026
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings