{"id":23938,"date":"2026-06-01T11:04:12","date_gmt":"2026-06-01T08:04:12","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/"},"modified":"2026-06-01T11:04:12","modified_gmt":"2026-06-01T08:04:12","slug":"autoupdateplugin","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/","title":{"rendered":"AutoUpdatePlugins"},"content":{"rendered":"<div align=\"center\">\n<p># **AutoUpdatePlugins v12.2.0**<\/p>\n<p>*Keep your server\u2019s plugins up-to-date &#8211; automatically, safely, and across platforms.*<\/p>\n<p>![Platforms](https:\/\/img.shields.io\/badge\/Platforms-Spigot%20%7C%20Paper%20%7C%20Folia%20%7C%20Velocity%20%7C%20BungeeCord-5A67D8)<br \/>\n![MC](https:\/\/img.shields.io\/badge\/Minecraft-1.8%E2%86%92Latest-2EA043)<br \/>\n![Java](https:\/\/img.shields.io\/badge\/Java-8%2B%20(11%2B%20HTTP%2F2,%2021%2B%20Virtual%20Threads)-1F6FEB)<br \/>\n![License](https:\/\/img.shields.io\/badge\/License-MIT-0E8A16)<\/p>\n<\/div>\n<p>> **TL;DR**<br \/>\n> Drop in the jar \u279c list the plugins you want \u279c it finds, downloads, validates, and stages updates from a ton of<br \/>\n> sources &#8211; on a schedule, in parallel, without blocking your main thread.<\/p>\n<p>&#8212;<\/p>\n<p>## Table of Contents<\/p>\n<p>* [Highlights](#highlights)<br \/>\n* [Supported Sources &#038; Platforms](#supported-sources&#8211;platforms)<br \/>\n* [Requirements](#requirements)<br \/>\n* [Installation](#installation)<br \/>\n* [Quick Start](#quick-start)<br \/>\n* [Configuration](#configuration)<\/p>\n<p>    * [`config.yml`](#configyml)<br \/>\n    * [`list.yml`](#listyml)<br \/>\n    * [Scheduling Cheat Sheet](#scheduling-cheat-sheet)<br \/>\n    * [Performance Tuning Guide](#performance-tuning-guide)<br \/>\n* [Commands &#038; Permissions](#commands&#8211;permissions)<br \/>\n* [How It Works (Under the Hood)](#how-it-works-under-the-hood)<br \/>\n* [Examples for Every Source](#examples-for-every-source)<br \/>\n* [Troubleshooting &#038; FAQ](#troubleshooting&#8211;faq)<br \/>\n* [Building from Source](#building-from-source)<br \/>\n* [Security Notes](#security-notes)<br \/>\n* [Contributing, Issues &#038; Support](#contributing-issues&#8211;support)<br \/>\n* [License](#license)<\/p>\n<p>&#8212;<\/p>\n<p>## Highlights<\/p>\n<p>* **One list, many sources.** Pull updates from GitHub Releases\/Actions, Jenkins, SpigotMC (Spiget), dev.bukkit,<br \/>\n  Modrinth, Hangar, BusyBiscuit, blob.build, Guizhanss v2, MineBBS, CurseForge, or any page with a direct `.jar` link.<br \/>\n* **Local sources.** Point at local jar files or run scripts that output a jar path for custom\/patched builds.<br \/>\n* **Smart file selection.** Use `?get=<regex>`, `[N]` (pick the N-th asset &#8211; works for both GitHub and Jenkins<br \/>\n  artifacts), `?artifact=2` for GitHub Actions bundles, `?prerelease=true`, `?alpha=true`, `?beta=true`, `?latest=true`,<br \/>\n  `?channel=Alpha`, `?autobuild=true` &#8211; mix and match to land on the exact build you need.<br \/>\n* **Zero-friction config evolution.** New options are **auto-added** to `config.yml` without clobbering your comments or<br \/>\n  existing values.<br \/>\n* **HTTP flexibility.** Add custom headers, rotate User-Agents, and route through proxies when needed.<br \/>\n* **Performance built-in.**<\/p>\n<p>    * Fully **async** downloads; no main-thread stalls.<br \/>\n    * **Java 11+ HTTP\/2** client for modern, non-blocking transfers.<br \/>\n    * **Java 21+ virtual threads** for ultra-lightweight concurrency.<br \/>\n    * **Connection pooling**, **parallel downloads**, and **retry with exponential backoff**.<br \/>\n* **Flexible scheduling.** Interval + boot delay *or* cron with timezone support.<br \/>\n* **Cross-platform.** Works on **Spigot**, **Paper**, **Folia**, **Velocity**, **BungeeCord**.<br \/>\n* **Safe updates.** Download \u279c validate \u279c atomic replace, staged through temp\/update paths.<br \/>\n* **Integrity + dedupe.** Optional zip integrity checks and MD5 comparison skip corrupted or unchanged downloads.<br \/>\n* **Rollback safety net.** Snapshot the previous jar and auto-restore if the new build fails to start.<\/p>\n<p>&#8212;<\/p>\n<p>## Supported Sources &#038; Platforms<\/p>\n<p>### Download Sources<\/p>\n<p>| Source                | Release\/Build Discovery | Notes \/ Selectors Supported                                                                                            |<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|<br \/>\n| **GitHub**            | Releases &#038; Actions      | `[N]`, `?artifact=2`, `?get=regex`, `?prerelease=true`, `?alpha=true`, `?beta=true`, `?latest=true`, `?autobuild=true` |<br \/>\n| **Jenkins**           | Latest build artifacts  | `[N]`, `?get=regex`                                                                                                    |<br \/>\n| **SpigotMC (Spiget)** | Resource page URL       | Auto-resolves latest                                                                                                   |<br \/>\n| **dev.bukkit**        | Project page            | Auto-resolves latest                                                                                                   |<br \/>\n| **Modrinth**          | Project\/version URL     | `?get=regex`, `?alpha=true`, `?beta=true`, `?latest=true`                                                              |<br \/>\n| **Hangar**            | Project\/releases        | `?get=regex`, `?alpha=true`, `?beta=true`, `?latest=true`, `?channel=Alpha`                                            |<br \/>\n| **BusyBiscuit**       | Project index           | Auto-resolves                                                                                                          |<br \/>\n| **blob.build**        | Build artifacts         | `?get=regex`                                                                                                           |<br \/>\n| **Guizhanss v2**      | Project index           | Auto-resolves                                                                                                          |<br \/>\n| **MineBBS**           | Resource page           | Auto-resolves                                                                                                          |<br \/>\n| **CurseForge**        | Project\/files           | `?get=regex`                                                                                                           |<br \/>\n| **Generic**           | Direct `.jar` link      | Exact file URL                                                                                                         |<br \/>\n| **Local file**        | Local path              | `file:`, `local:`, `path:`, or absolute\/relative path                                                                  |<br \/>\n| **Local script**      | Script stdout path      | `script:` or `exec:` (script prints jar path to stdout)                                                                |<\/p>\n<p>> **Note:** GitHub and Jenkins links both accept `[N]` to pick the **N-th** artifact on their release\/build pages (<br \/>\n> 1-indexed).<br \/>\n> **Tip:** You can pass just the **project root URL** for most sources (e.g., a GitHub repo or Spigot resource page) and<br \/>\n> let AutoUpdatePlugins choose the latest artifact. Add selectors for precision.<\/p>\n<p>### Server Platforms<\/p>\n<p>* **Spigot**, **Paper**, **Folia**<br \/>\n* **Velocity**, **BungeeCord**<\/p>\n<p>### Minecraft &#038; Java<\/p>\n<p>* **Minecraft:** 1.8 \u2192 Latest<br \/>\n* **Java:** 8+ (uses advanced features automatically on 11+ and 21+)<\/p>\n<p>&#8212;<\/p>\n<p>## Requirements<\/p>\n<p>* **Java 8 or newer.**<\/p>\n<p>    * Uses Java 11+ HTTP\/2 client when available.<br \/>\n    * Uses Java 21+ virtual threads when available.<br \/>\n* **Network access** for source builds (Gradle\/Maven wrappers or system `gradle`\/`mvn`, if used).<\/p>\n<p>&#8212;<\/p>\n<p>## Installation<\/p>\n<p>1. Download the latest `.jar` from **Spigot**.<br \/>\n2. Place it into your server\u2019s **`plugins\/`** directory.<br \/>\n3. Start the server to generate default config files.<br \/>\n4. Edit **`plugins\/AutoUpdatePlugins\/config.yml`** and **`plugins\/AutoUpdatePlugins\/list.yml`**.<br \/>\n5. Run **`\/update`** or **`\/aup update`** (or restart) to kick off the first check.<\/p>\n<p>> **Velocity \/ BungeeCord:** Same process &#8211; drop the jar in `plugins\/`, configure, then trigger an update run.<\/p>\n<p>&#8212;<\/p>\n<p>## Quick Start<\/p>\n<p>1. Add a few entries to `list.yml`:<\/p>\n<p>   &#8220;`yaml<br \/>\n   ViaVersion: &#8220;https:\/\/www.spigotmc.org\/resources\/viaversion.19254\/&#8221;<br \/>\n   Geyser: &#8220;https:\/\/download.geysermc.org\/v2\/projects\/geyser\/versions\/latest\/builds\/latest\/downloads\/spigot&#8221;<br \/>\n   EssentialsXChat: &#8220;https:\/\/github.com\/EssentialsX\/Essentials[3]&#8221;<br \/>\n   &#8220;`<br \/>\n2. Leave `updates.interval` at the default (every 120 minutes), or set a cron schedule.<br \/>\n3. Optional: Add a GitHub token in `config.yml` to avoid rate limits.<br \/>\n4. Trigger a run:<\/p>\n<p>   &#8220;`<br \/>\n   \/update<br \/>\n   &#8220;`<br \/>\n5. New jars are staged atomically in your plugins folder (using temp\/update paths under the hood). **Restart** the<br \/>\n   server to load the updated jars.<\/p>\n<p>&#8212;<\/p>\n<p>## Configuration<\/p>\n<p>### `config.yml`<\/p>\n<p>> The plugin **adds new options automatically** without overwriting your comments. Below is the full schema with<br \/>\n> defaults and notes.<\/p>\n<p>&#8220;`yaml<br \/>\n################################################################################<br \/>\n# AutoUpdatePlugins &#8211; Main Configuration<br \/>\n################################################################################<\/p>\n<p>updates:<br \/>\n  # How often to run plugin updates (minutes). Default: 120 (every 2 hours)<br \/>\n  interval: 120<\/p>\n<p>  # Delay after server startup (seconds) before the first run. Default: 50<br \/>\n  bootTime: 50<\/p>\n<p>  # Schedule (experimental): Use a cron expression to control exactly when<br \/>\n  # updates run. When set, this overrides both interval and bootTime.<br \/>\n  # Examples:<br \/>\n  #   Every day at 03:30: &#8220;30 3 * * *&#8221;<br \/>\n  #   Every 15 minutes:   &#8220;*\/15 * * * *&#8221;<br \/>\n  #   At 5 past every hour on weekdays: &#8220;5 * * * 1-5&#8221;<br \/>\n  schedule:<br \/>\n    cron: &#8220;&#8221;         # Cron expression (UNIX 5-field). Leave blank to disable.<br \/>\n    timezone: &#8220;UTC&#8221;  # Timezone for the cron schedule, e.g. &#8220;America\/New_York&#8221;<\/p>\n<p>  # Optional GitHub personal access token (PAT). Strongly recommended if you use<br \/>\n  # many GitHub links to avoid API rate-limits when listing releases\/artifacts.<br \/>\n  # Scope: public_repo is enough for public repos.<br \/>\n  # Generate a token: https:\/\/github.com\/settings\/tokens<br \/>\n  key:<\/p>\n<p># HTTP configuration (optional)<br \/>\nhttp:<br \/>\n  # If blank, a rotating pool of realistic User-Agents will be used.<br \/>\n  userAgent: &#8220;&#8221;<br \/>\n  # Extra request headers added to every request. Only add if you know you need it.<br \/>\n  headers: [ ]<br \/>\n  # Verify TLS certificates (set to false to trust all; only if you must)<br \/>\n  sslVerify: true<br \/>\n  # Optional pool of User-Agents; the plugin will rotate between them to avoid<br \/>\n  # strict CDNs blocking automation.<br \/>\n  userAgents:<br \/>\n    &#8211; { ua: &#8220;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/123.0.0.0 Safari\/537.36&#8221; }<br \/>\n    &#8211; { ua: &#8220;Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\/605.1.15 (KHTML, like Gecko) Version\/17.0 Safari\/605.1.15&#8221; }<br \/>\n    &#8211; { ua: &#8220;Mozilla\/5.0 (X11; Linux x86_64; rv:126.0) Gecko\/20100101 Firefox\/126.0&#8221; }<\/p>\n<p># Proxy configuration (optional)<br \/>\nproxy:<br \/>\n  type: &#8220;NONE&#8221; # HTTP | SOCKS | (anything else = disabled)<br \/>\n  host: &#8220;proxy.example&#8221;<br \/>\n  port: 8080<\/p>\n<p># Behavior toggles<br \/>\nbehavior:<br \/>\n  useUpdateFolder: true<br \/>\n  # Open downloaded .jar\/.zip to ensure integrity before install (recommended)<br \/>\n  zipFileCheck: true<br \/>\n  # Skip replacing an existing plugin if the new jar has the same MD5<br \/>\n  ignoreDuplicates: true<br \/>\n  # Allow GitHub\/Modrinth\/Hangar pre-releases by default for release queries.<br \/>\n  allowPreRelease: false<br \/>\n  # Enable source-build fallback for GitHub repositories.<br \/>\n  autoCompile:<br \/>\n    enable: false<br \/>\n    # Build when a release has no .jar asset (zip-only)<br \/>\n    whenNoJarAsset: true<br \/>\n    # Build from source if default branch is newer than latest (pre)release by N months<br \/>\n    branchNewerMonths: 6<br \/>\n  # Verbose debug logging. Toggle with \/aup debug on|off<br \/>\n  debug: false<br \/>\n  # Restart the server\/proxy automatically after updates.<br \/>\n  restartAfterUpdate: false<br \/>\n  # Delay in seconds before restarting after updates.<br \/>\n  restartDelaySec: 5<br \/>\n  # Broadcast message before restarting (supports {delay}).<br \/>\n  restartMessage: &#8220;Server restarting to apply updates.&#8221;<\/p>\n<p># Optional custom paths<br \/>\npaths:<br \/>\n  tempPath: &#8221;<br \/>\n  updatePath: &#8221;<br \/>\n  filePath: &#8221;<br \/>\n  rollbackPath: &#8221;<\/p>\n<p># Performance and reliability options<br \/>\nperformance:<br \/>\n  # Maximum parallel downloads. Higher is faster but uses more IO\/CPU.<br \/>\n  # If set above CPU cores, it is clamped internally.<br \/>\n  maxParallel: 4<br \/>\n  # HTTP connect timeout in milliseconds per request.<br \/>\n  connectTimeoutMs: 10000<br \/>\n  # HTTP read timeout in milliseconds per request.<br \/>\n  readTimeoutMs: 30000<br \/>\n  # Optional per-download hard timeout in seconds. 0 disables the cap.<br \/>\n  perDownloadTimeoutSec: 0<br \/>\n  # Retry behavior for transient HTTP errors (403\/429\/5xx)<br \/>\n  maxRetries: 3<br \/>\n  # Exponential backoff base and max delay in milliseconds between retries<br \/>\n  backoffBaseMs: 500<br \/>\n  backoffMaxMs: 5000<br \/>\n  # Limit concurrent downloads per host to avoid 429s and improve stability<br \/>\n  maxPerHost: 3<\/p>\n<p>rollback:<br \/>\n  # Keep a backup of the previous version when updating a plugin and automatically revert back on plugin load failure (experimental!)<br \/>\n  enabled: false<br \/>\n  # Maximum number of old versions to keep per plugin (0 = unlimited)<br \/>\n  maxBackups: 3<br \/>\n  # Case-insensitive regex patterns that trigger rollback when matched in logs.<br \/>\n  filters:<br \/>\n    &#8211; &#8220;Unsupported API version&#8221;<br \/>\n    &#8211; &#8220;Could not load plugin&#8221;<br \/>\n    &#8211; &#8220;Error occurred while enabling&#8221;<br \/>\n    &#8211; &#8220;Unsupported MC version&#8221;<br \/>\n    &#8211; &#8220;You are running an unsupported server version&#8221;<\/p>\n<p># Plugins List Configuration<br \/>\n# Edit the generated list.yml in this folder. Format:<br \/>\n#   {FileSaveName}: {link.to.plugin}<br \/>\n#<br \/>\n# Example list.yml template: https:\/\/github.com\/NewAmazingPVP\/AutoUpdatePlugins\/blob\/main\/list.yml<br \/>\n# Examples:<br \/>\n#   ViaVersion: &#8220;https:\/\/www.spigotmc.org\/resources\/viaversion.19254\/&#8221;<br \/>\n#   Geyser: &#8220;https:\/\/download.geysermc.org\/v2\/projects\/geyser\/versions\/latest\/builds\/latest\/downloads\/spigot&#8221;<br \/>\n#   EssentialsXChat: &#8220;https:\/\/github.com\/EssentialsX\/Essentials[3]&#8221;<br \/>\n#<br \/>\n# Supported sources: GitHub (Releases &#038; Actions), Jenkins, SpigotMC (Spiget), dev.bukkit, Modrinth, Hangar,<br \/>\n# BusyBiscuit, blob.build, Guizhanss v2, MineBBS, CurseForge, local file paths, local scripts, plus generic pages with direct .jar links.<br \/>\n#<br \/>\n# Tips:<br \/>\n# &#8211; Select assets: append [N] to pick the Nth asset or use ?get=<regex> to match by filename.<br \/>\n# &#8211; GitHub Actions ZIPs: use ?artifact=2 (or ?index=\/ ?zip=) to pick a specific build, default is the first.<br \/>\n# &#8211; Pre-releases: set behavior.allowPreRelease: true or append ?prerelease=true on a GitHub link.<br \/>\n# &#8211; Channel flags: ?beta=true, ?alpha=true, ?latest=true, or ?channel=Alpha\/Beta for Hangar.<br \/>\n# &#8211; Modrinth\/Hangar obey the same flags (?alpha, ?beta, ?latest) to pick non-release builds when desired.<br \/>\n# &#8211; Force source build from GitHub: append ?autobuild=true to a GitHub repo URL.<\/p>\n<p>&#8220;`<\/p>\n<p>#### Safety &#038; Recovery<\/p>\n<p>&#8211; `behavior.zipFileCheck`: validates `.jar` downloads extracted from archives before they ever reach the plugins<br \/>\n  directory.<br \/>\n&#8211; `behavior.ignoreDuplicates`: skips deployment if the incoming jar matches the installed checksum, avoiding pointless<br \/>\n  restarts.<br \/>\n&#8211; `rollback.*`: snapshots the previous jar, keeps a rotating history, and restores automatically when console output<br \/>\n  matches the configured failure patterns.<\/p>\n<p>#### Advanced Selectors Cheat Sheet<\/p>\n<p>| Flag \/ Selector              | Effect                                                                               | Providers                      |<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|<br \/>\n| `?get=<regex>`               | Picks assets whose filename matches a regex                                          | GitHub, Jenkins, Modrinth, etc |<br \/>\n| `[N]`                        | Chooses the N\u2011th asset (1-indexed)                                                   | GitHub Releases, Jenkins       |<br \/>\n| `?artifact=2` \/ `?index=`    | Chooses the N\u2011th GitHub Actions artifact (defaults to 1)                             | GitHub Actions                 |<br \/>\n| `?prerelease=true`           | Install the newest build regardless of stability tier                                | GitHub, Modrinth, Hangar       |<br \/>\n| `?alpha=true` \/ `?beta=true` | Prefer that channel while falling back to newer releases if no matching build exists | GitHub, Modrinth, Hangar       |<br \/>\n| `?latest=true`               | Same as `?prerelease=true`, but intended for explicit &#8220;always newest&#8221; behaviour      | GitHub, Modrinth, Hangar       |<br \/>\n| `?channel=Alpha` \/ `Beta`    | Stick to a specific Hangar channel                                                   | Hangar                         |<br \/>\n| `?autobuild=true`            | Trigger Gradle\/Maven source builds when binaries are missing                         | GitHub                         |<\/p>\n<p>**Key options explained**<\/p>\n<p>* **`updates.schedule.cron` + `timezone`** &#8211; When set, cron **overrides** `interval`\/`bootTime`.<br \/>\n* **`updates.key`** &#8211; GitHub PAT for Releases\/Actions access and higher rate limits (especially useful for public repos<br \/>\n  under heavy use or any private repos).<br \/>\n* **`http.userAgents`** &#8211; Simple rotation to avoid brittle server-side filters.<br \/>\n* **`proxy`** &#8211; Full support for HTTP\/SOCKS proxies.<br \/>\n* **`behavior.autoCompile`** &#8211; For GitHub repos: if there\u2019s no release jar (or if the branch is newer than the last<br \/>\n  release by `branchNewerMonths`), the repo can be **built from source** using Gradle\/Maven.<br \/>\n* **`behavior.zipFileCheck`** &#8211; Open downloaded jars\/zips to ensure they aren&#8217;t corrupt before install.<br \/>\n* **`behavior.ignoreDuplicates`** &#8211; Skip replacing a plugin if the new jar has the same MD5.<br \/>\n* **`behavior.useUpdateFolder`** &#8211; Stage new jars in the server\u2019s `update\/` directory for atomic swaps.<br \/>\n* **`behavior.restartAfterUpdate`** &#8211; Automatically restart after updates (delay via `behavior.restartDelaySec`, message<br \/>\n  via `behavior.restartMessage`).<br \/>\n* **`behavior.debug`** &#8211; Verbose logging toggle, also controllable via `\/aup debug`.<br \/>\n* **`rollback`** &#8211; Configure automatic snapshots, retention, and log-match triggers for self-healing updates.<br \/>\n* **`paths`** &#8211; Customize temp\/staging\/output locations (falls back to sane defaults).<br \/>\n* **`performance`** &#8211; See [Performance Tuning Guide](#performance-tuning-guide).<\/p>\n<p>&#8212;<\/p>\n<p>### `list.yml`<\/p>\n<p>A simple mapping of **plugin display name \u279c source URL (+ optional selectors)**.<\/p>\n<p>&#8220;`yaml<br \/>\n# A list of plugins to update.<br \/>\n# Format: <plugin-name>: <download-url><\/p>\n<p>ViaVersion: &#8220;https:\/\/www.spigotmc.org\/resources\/viaversion.19254\/&#8221;<br \/>\nGeyser: &#8220;https:\/\/download.geysermc.org\/v2\/projects\/geyser\/versions\/latest\/builds\/latest\/downloads\/spigot&#8221;<br \/>\nEssentialsXChat: &#8220;https:\/\/github.com\/EssentialsX\/Essentials[3]&#8221;<br \/>\n&#8220;`<\/p>\n<p>> Comment out a line with `#` to temporarily disable an entry. The `\/aup enable` and `\/aup disable` commands toggle this<br \/>\n> for you.<\/p>\n<p>**Selectors you can use**<\/p>\n<p>* **`[N]`** &#8211; Select the **N-th** jar asset (1-indexed) from a release or Jenkins build page. Example:<br \/>\n  `&#8230;\/Essentials[3]`<br \/>\n* **`?get=<regex>`** &#8211; Choose files whose names match a regex. Example: `?get=.*(paper|spigot).*.jar`<br \/>\n* **`?artifact=2`** &#8211; Pick a specific GitHub Actions artifact (defaults to the first).<br \/>\n* **`?prerelease=true`** &#8211; Permit pre-releases.<br \/>\n* **`?autobuild=true`** &#8211; Force a source build on GitHub even if a jar asset exists.<\/p>\n<p>> **Pro tip:** Combine selectors, e.g. `&#8230;?prerelease=true&#038;get=.*spigot.*.jar`.<\/p>\n<p>&#8212;<\/p>\n<p>### Scheduling Cheat Sheet<\/p>\n<p>Common cron expressions (with examples using `America\/New_York`):<\/p>\n<p>* **Every 2 hours:** `0 *\/2 * * *`<br \/>\n* **Every day at 05:00:** `0 5 * * *`<br \/>\n* **Every Monday &#038; Thursday at 03:30:** `30 3 * * 1,4`<br \/>\n* **Every 15 minutes:** `*\/15 * * * *`<\/p>\n<p>If cron is empty, the plugin uses **`interval`** (minutes) with an initial **`bootTime`** delay (seconds).<\/p>\n<p>&#8212;<\/p>\n<p>### Performance Tuning Guide<\/p>\n<p>* **Java 21+ (virtual threads):** Keep `performance.maxParallel` higher (e.g., 8\u201316) for many small artifacts.<br \/>\n* **Java 11+ (HTTP\/2):** Great default throughput. Tune `maxPerHost` if a single origin hosts most of your jars.<br \/>\n* **Java 8:** Increase `readTimeoutMs` if you see timeouts on large downloads; lower `maxParallel` if network is<br \/>\n  saturated.<br \/>\n* **Retries:** The plugin retries **`maxRetries`** times with exponential backoff (`backoffBaseMs` \u2192 `backoffMaxMs`).<br \/>\n* **Per-download timeout:** Set `perDownloadTimeoutSec` to protect against stuck transfers; keep `0` to disable.<br \/>\n* **I\/O Paths:** Put `tempPath`\/`updatePath` on fast local storage if possible.<\/p>\n<p>&#8212;<\/p>\n<p>## Commands &#038; Permissions<\/p>\n<p>### Commands<\/p>\n<p>* **`\/update`** &#8211; Trigger an update run.<br \/>\n* **`\/aup download [names&#8230;]`** &#8211; Update all, or only the named plugins.<br \/>\n* **`\/aup update [names&#8230;]`** &#8211; Alias of `download`.<br \/>\n* **`\/aup stop`** &#8211; Request to stop the current updating process.<br \/>\n* **`\/aup reload`** &#8211; Reload the plugin configuration.<br \/>\n* **`\/aup add <name> <link>`** &#8211; Add a new entry to `list.yml`.<br \/>\n* **`\/aup remove <name>`** &#8211; Remove an entry from `list.yml`.<br \/>\n* **`\/aup list [page]`** &#8211; View the configured plugin list.<br \/>\n* **`\/aup debug <on|off|toggle|status>`** &#8211; Toggle verbose logging and persist the setting.<br \/>\n* **`\/aup enable|disable <name>`** &#8211; Toggle an entry (comment\/uncomment in `list.yml`).<\/p>\n<p>### Permissions<\/p>\n<p>* `autoupdateplugins.update` &#8211; Allows `\/update`.<br \/>\n* `autoupdateplugins.manage` &#8211; Allows `\/aup &#8230;` commands.<\/p>\n<p>> **Heads-up:** Most servers still require a **restart** to load updated jars. The plugin handles download &#038; staging;<br \/>\n> you decide when to reboot (auto-restart available via `behavior.restartAfterUpdate`).<\/p>\n<p>&#8212;<\/p>\n<p>## How It Works (Under the Hood)<\/p>\n<p>1. **Discovery.** For each entry in `list.yml`, the plugin detects the provider (GitHub, Jenkins, SpigotMC, etc.) and<br \/>\n   computes the **latest matching artifact** using your selectors.<br \/>\n2. **Download (async).** Files are fetched with pooled connections; on Java 11+ it uses the HTTP\/2 client; on Java 21+<br \/>\n   it schedules downloads on virtual threads when available.<br \/>\n3. **Validation.** Optional **zip integrity** checks and duplicate detection (`name + size`) avoid unnecessary writes.<br \/>\n4. **Staging &#038; Atomic Replace.** Files are written to a **temp** directory, then moved atomically into the *<br \/>\n   *update\/plugins** target so the server is never left in a partial state.<br \/>\n5. **Repeat.** According to your **interval** or **cron** schedule, with retries\/backoff on transient failures.<\/p>\n<p>&#8212;<\/p>\n<p>## Examples for Every Source<\/p>\n<p>> **Patterns below are illustrative.** Use your project\u2019s actual URLs and apply selectors as needed.<\/p>\n<p>* **GitHub Releases (pick 2nd asset, spigot-only):**<\/p>\n<p>  &#8220;`<br \/>\n  MyPlugin: &#8220;https:\/\/github.com\/Owner\/MyPlugin[2]?get=.*spigot.*\\.jar&#8221;<br \/>\n  &#8220;`<br \/>\n* **GitHub Actions (latest alpha artifact, fallback to source build):**<\/p>\n<p>  &#8220;`<br \/>\n  MyActionsPlugin: &#8220;https:\/\/github.com\/Owner\/MyActionsPlugin\/actions?alpha=true&#038;artifact=1&#8221;<br \/>\n  MyActionsPluginSource: &#8220;https:\/\/github.com\/Owner\/MyActionsPlugin?autobuild=true&#8221;<br \/>\n  &#8220;`<br \/>\n* **Jenkins (match shaded jar; select by index with `[N]`):**<\/p>\n<p>  &#8220;`<br \/>\n  CoolThing: &#8220;https:\/\/ci.example.com\/job\/CoolThing\/lastSuccessfulBuild\/artifact\/?get=.*-all\\.jar&#8221;<br \/>\n  # second artifact<br \/>\n  CoolThingAlt: &#8220;https:\/\/ci.example.com\/job\/CoolThing\/lastSuccessfulBuild\/artifact\/[2]&#8221;<br \/>\n  &#8220;`<br \/>\n* **SpigotMC (resource page):**<\/p>\n<p>  &#8220;`<br \/>\n  ViaVersion: &#8220;https:\/\/www.spigotmc.org\/resources\/viaversion.19254\/&#8221;<br \/>\n  &#8220;`<br \/>\n* **dev.bukkit:**<\/p>\n<p>  &#8220;`<br \/>\n  Vault: &#8220;https:\/\/dev.bukkit.org\/projects\/vault&#8221;<br \/>\n  &#8220;`<br \/>\n* **Modrinth (match platform flavor, latest alpha build):**<\/p>\n<p>  &#8220;`<br \/>\n  Fancy: &#8220;https:\/\/modrinth.com\/plugin\/fancy?alpha=true&#038;get=.*(paper|spigot).*\\.jar&#8221;<br \/>\n  &#8220;`<br \/>\n* **Hangar (snapshot channel):**<\/p>\n<p>  &#8220;`<br \/>\n  HangarThing: &#8220;https:\/\/hangar.papermc.io\/Owner\/Project?channel=Alpha&#038;get=.*spigot.*\\.jar&#8221;<br \/>\n  &#8220;`<br \/>\n* **CurseForge (filter file name):**<\/p>\n<p>  &#8220;`<br \/>\n  CFThing: &#8220;https:\/\/www.curseforge.com\/minecraft\/bukkit-plugins\/cfthing\/files?get=.*release.*\\.jar&#8221;<br \/>\n  &#8220;`<br \/>\n* **Generic direct jar:**<\/p>\n<p>  &#8220;`<br \/>\n  DirectJar: &#8220;https:\/\/downloads.example.com\/plugins\/DirectJar-1.2.3.jar&#8221;<br \/>\n  &#8220;`<br \/>\n* **Local file (patched jar on disk):**<\/p>\n<p>  &#8220;`<br \/>\n  PatchedPlugin: &#8220;file:\/home\/me\/builds\/PatchedPlugin.jar&#8221;<br \/>\n  &#8220;`<br \/>\n* **Local script (builds jar and prints path):**<\/p>\n<p>  &#8220;`<br \/>\n  PatchedPlugin: &#8220;script:.\/scripts\/build-plugin.sh&#8221;<br \/>\n  &#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## Troubleshooting &#038; FAQ<\/p>\n<p>**Q: Updates downloaded, but server didn\u2019t change.**<br \/>\nA: Most platforms load jars only at startup. **Restart** your server after a run. Avoid hot-reloaders for complex<br \/>\nplugins.<\/p>\n<p>**Q: GitHub rate-limited \/ cannot access Actions artifacts.**<br \/>\nA: Add a **GitHub PAT** in `config.yml` \u2192 `updates.key`. For private repos, ensure the token has read access to<br \/>\nReleases\/Actions artifacts.<\/p>\n<p>**Q: Wrong file selected.**<br \/>\nA: Add a **`?get=regex`** or use **`[N]`** to pick an asset index. Confirm the regex escapes dots (e.g., `\\.jar`).<\/p>\n<p>**Q: Timeouts or slow downloads.**<br \/>\nA: Increase `readTimeoutMs`; decrease `maxParallel`; or set `perDownloadTimeoutSec` and tune `maxRetries`\/backoff.<\/p>\n<p>**Q: Need pre-releases.**<br \/>\nA: Use per-link flags like `?prerelease=true`, `?beta=true`, `?alpha=true`, or `?latest=true` (works on GitHub,<br \/>\nModrinth, and Hangar). Hangar also respects `?channel=Alpha`\/`Beta`. Set `behavior.allowPreRelease: true` if you want<br \/>\nthis to be the default.<\/p>\n<p>**Q: Behind a corporate proxy.**<br \/>\nA: Configure `proxy.type\/host\/port`. If your proxy MITM-s TLS, ensure the Java trust store has the proxy CA.<\/p>\n<p>**Q: Build from source didn\u2019t trigger.**<br \/>\nA: Ensure `behavior.autoCompile.enable: true` and use `?autobuild=true` or let it kick in when no jar asset exists. The<br \/>\nserver must have outbound network access.<\/p>\n<p>&#8212;<\/p>\n<p>## Building from Source<\/p>\n<p>Use **Maven**:<\/p>\n<p>&#8220;`bash<br \/>\nmvn -DskipTests package<br \/>\n&#8220;`<\/p>\n<p>The built `.jar` will be in `target\/`.<\/p>\n<p>&#8212;<\/p>\n<p>## Security Notes<\/p>\n<p>* Prefer **least-privileged tokens**. For GitHub, use a PAT limited to the repos you need with read permissions<br \/>\n  sufficient for Releases\/Actions artifacts.<br \/>\n* Treat third-party download links as untrusted: keep `zipFileCheck: true`.<br \/>\n* Consider pinning sources with `?get=regex` to avoid accidentally switching to platform-incompatible jars.<\/p>\n<p>&#8212;<\/p>\n<p>## Contributing, Issues &#038; Support<\/p>\n<p>* **Bugs \/ Feature requests:** Open an issue:<br \/>\n  https:\/\/github.com\/NewAmazingPVP\/AutoUpdatePlugins\/issues<br \/>\n* PRs welcome! Please keep code style consistent and include a brief test plan in your PR description.<\/p>\n<p>&#8212;<\/p>\n<p>## Acknowledgements<\/p>\n<p>**This is the original AutoUpdatePlugins project.** There are several forks of this plugin in the community; many of<br \/>\ntheir good ideas and improvements have been incorporated here over time as well. Thanks especially to contributors and<br \/>\nprojects like ApliNi\/AutoUpdatePlugins and others for inspiration and features.<\/p>\n<p>&#8212;<\/p>\n<p>## License<\/p>\n<p>AutoUpdatePlugins is licensed under the **MIT License**. See **`LICENSE`** for details.<\/p>\n<p>&#8212;<\/p>\n<p>### Changelog Snapshot (v12.x)<\/p>\n<p>* Expanded provider coverage and smarter selection (`[N]`, `?get=regex`, `?prerelease`, `?autobuild`).<br \/>\n* HTTP stack upgrades (HTTP\/2 on Java 11+, virtual threads on Java 21+).<br \/>\n* Better parallelism, retry\/backoff, and connection pooling defaults.<br \/>\n* Comment-preserving config regeneration and richer scheduling controls.<\/p>\n<p>&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Original AutoUpdatePlugins)<br \/>\nAutomatically update any plugin you wish!<\/p>\n","protected":false},"featured_media":23939,"template":"","meta":{"_minecraft_slug":"autoupdateplugin","_minecraft_project_id":"PLCVxvPs","_minecraft_author":"NewAmazingPVP","_minecraft_license":"MIT","_minecraft_downloads":7874,"_minecraft_follows":6,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"autoupdateplugin.zip","_minecraft_size_bytes":8214640,"_minecraft_version_count":2,"_minecraft_updated_at":"2026-05-16T02:25:52.472382Z","_minecraft_date_created":"2025-08-25T22:10:48.195937Z","_minecraft_date_modified":"2026-01-22T03:30:33.556114Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/autoupdateplugin","_minecraft_icon_attachment_id":23939,"_minecraft_imported_at":"2026-06-01T08:04:13+00:00","_minecraft_import_hash":"1a179ed9537421b172a8d7b9eeb834bf","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[124,894,125,126,127,128,129,123,92,985,992],"mod_loader":[130,895,131,132,133,134,986,993],"minecraft_version":[339,340,341,357,359,360,379,382,385,438,446,449,110,111,112,113,114,115,116,117,118,119,120,46,47,48,49,50,51,52,53,54,55,56,57,58,59,36,60,93,94,101,102,62,37,40,41,73,74,38,78,79,80,81,82,22,23,24,25,26,27,28,29,30,31,860,861,862,863,864],"class_list":["post-23938","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-bukkit","mod_category-bungeecord","mod_category-folia","mod_category-management","mod_category-paper","mod_category-purpur","mod_category-spigot","mod_category-technology","mod_category-utility","mod_category-velocity","mod_category-waterfall","mod_loader-bukkit","mod_loader-bungeecord","mod_loader-folia","mod_loader-paper","mod_loader-purpur","mod_loader-spigot","mod_loader-velocity","mod_loader-waterfall","minecraft_version-1-10","minecraft_version-1-10-1","minecraft_version-1-10-2","minecraft_version-1-11","minecraft_version-1-11-1","minecraft_version-1-11-2","minecraft_version-1-12","minecraft_version-1-12-1","minecraft_version-1-12-2","minecraft_version-1-13","minecraft_version-1-13-1","minecraft_version-1-13-2","minecraft_version-1-14","minecraft_version-1-14-1","minecraft_version-1-14-2","minecraft_version-1-14-3","minecraft_version-1-14-4","minecraft_version-1-15","minecraft_version-1-15-1","minecraft_version-1-15-2","minecraft_version-1-16","minecraft_version-1-16-1","minecraft_version-1-16-2","minecraft_version-1-16-3","minecraft_version-1-16-4","minecraft_version-1-16-5","minecraft_version-1-17","minecraft_version-1-17-1","minecraft_version-1-18","minecraft_version-1-18-1","minecraft_version-1-18-2","minecraft_version-1-19","minecraft_version-1-19-1","minecraft_version-1-19-2","minecraft_version-1-19-3","minecraft_version-1-19-4","minecraft_version-1-20","minecraft_version-1-20-1","minecraft_version-1-20-2","minecraft_version-1-20-3","minecraft_version-1-20-4","minecraft_version-1-20-5","minecraft_version-1-20-6","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9","minecraft_version-1-8","minecraft_version-1-8-1","minecraft_version-1-8-2","minecraft_version-1-8-3","minecraft_version-1-8-4","minecraft_version-1-8-5","minecraft_version-1-8-6","minecraft_version-1-8-7","minecraft_version-1-8-8","minecraft_version-1-8-9","minecraft_version-1-9","minecraft_version-1-9-1","minecraft_version-1-9-2","minecraft_version-1-9-3","minecraft_version-1-9-4"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>AutoUpdatePlugins - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AutoUpdatePlugins - Minecraft\" \/>\n<meta property=\"og:description\" content=\"(Original AutoUpdatePlugins) Automatically update any plugin you wish!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/autoupdateplugin\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/autoupdateplugin\\\/\",\"name\":\"AutoUpdatePlugins - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/autoupdateplugin\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/autoupdateplugin\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/autoupdateplugin-icon-e00d21e6359fddb9f43c235cd8db18819344be6d_96.webp\",\"datePublished\":\"2026-06-01T08:04:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/autoupdateplugin\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/autoupdateplugin\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/autoupdateplugin\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/autoupdateplugin-icon-e00d21e6359fddb9f43c235cd8db18819344be6d_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/autoupdateplugin-icon-e00d21e6359fddb9f43c235cd8db18819344be6d_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/autoupdateplugin\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"AutoUpdatePlugins\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AutoUpdatePlugins - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/","og_locale":"en_US","og_type":"article","og_title":"AutoUpdatePlugins - Minecraft","og_description":"(Original AutoUpdatePlugins) Automatically update any plugin you wish!","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/","name":"AutoUpdatePlugins - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/autoupdateplugin-icon-e00d21e6359fddb9f43c235cd8db18819344be6d_96.webp","datePublished":"2026-06-01T08:04:12+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/autoupdateplugin-icon-e00d21e6359fddb9f43c235cd8db18819344be6d_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/autoupdateplugin-icon-e00d21e6359fddb9f43c235cd8db18819344be6d_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/autoupdateplugin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"AutoUpdatePlugins"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/23938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/23939"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=23938"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=23938"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=23938"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=23938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}