Links
Tags
Creators
Details
All versions
4.1
Release
VerityAI 4.13 months ago 8
Compatibility
Minecraft: Java Edition
1.21.x
Platform
Paper
Changes
VerityAI 4.1
Fixed
- Reminder ID collisions:
/verity taskreminder IDs were generated from a counter that reset to 1 on every server restart, so a restart could produce duplicate IDs and make/verity task remove <id>remove the wrong reminder. IDs are now derived from a UUID and never collide across restarts. - AI requests failing on "Empty choices in response": some free OpenRouter models occasionally return HTTP 200 with no choices under load. This is now treated as a transient error and retried with backoff instead of immediately failing the request.
- Blank/placeholder API keys: an empty or leftover placeholder entry in
ai.api-keyscould get sent as an emptyAuthorizationheader, causing a401 Missing Authentication headererror. Blank/placeholder keys are now filtered out at load time.
Security
- Owner identity is now tied to the player's UUID, not just their name. Previously,
/verity owner <player>stored only a name, and every check for "is this the server owner" compared names — which is spoofable on an offline-mode server, since anyone can log in with any username. Running/verity owner <player>now requires the target to be online (so their real UUID can be recorded) and all internal checks use that UUID. - ⚠️ If your server runs in offline-mode, note that this only closes part of the gap — offline-mode UUIDs are themselves derived from the player name, so the strongest fix is enabling
online-mode: true(real Mojang/Microsoft authentication) if you're granting the owner elevated console-level command access through Verity.
Added
- Automatic quests: Verity can now send everyone online a fresh quest suggestion on a timer, on top of the existing on-demand
/verity quest. Configurable with/verity quest interval <minutes>(0 disables it), defaults to every 30 minutes. - Full command access mode:
commands.whitelist-mode: "all"in config.yml lets Verity run any command the asking player already has permission for, instead of requiring an explicit per-command whitelist. Commands still always run as the asking player (never more power than they already have), and a small set of server-critical commands (op,deop,stop,restart,ban,whitelist, ...) are always blocked regardless of this setting.
Notes
- No breaking config changes — existing
config.ymlfiles keep working as-is. New settings (economy,quests,commands.whitelist-mode,server-info.owner-uuid) are additive; add them manually to an existing liveconfig.ymlif you want the new behavior (see the updatedconfig.ymlin this release for reference). - If you're hitting
HTTP 404 "This model is unavailable for free"orHTTP 429 rate limiterrors, that's an OpenRouter-side change (the specific free model was discontinued, or you've hit the free daily cap), not a plugin bug — see the model recommendations in the README.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:IzR2Tleh:OPkD0d2F"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:IzR2Tleh:OPkD0d2F"
}

