All versions
1.2
Release
AskChat 1.25 months ago 42
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Bukkit
Paper
Spigot
Changes
Changelog
1.2
First public multi-provider release. Two jars are shipped:
AiChatBuddy-1.2-mc26.jar— Paper 26.x (Java 25)AiChatBuddy-1.2-mc1.21.jar— Paper 1.21.x (Java 21)
Added
- Three AI providers, runtime-switchable via
provider:inconfig.yml:- Gemini (default) — defaults to
gemma-4-31b-it, supports function calling. - Ollama — works with local Ollama (
http://localhost:11434) or Ollama Turbo cloud (https://ollama.com). - NVIDIA NIM — OpenAI-compatible, defaults to
meta/llama-3.3-70b-instruct.
- Gemini (default) — defaults to
- Agentic tool use — the model can call tools mid-conversation and the plugin loops until it produces a final answer:
web_search— Brave Search API (free tier, hidden from the model if no key is set).minecraft_wiki— MediaWiki search against the official Minecraft Wiki.
- Notch persona — default
prompt-templatecasts the bot as the ancient overseer of the world: mythical, kind, knowledgeable, never breaks character, never narrates its plan. - Per-player rolling history — last
max-historyturns (default 8) kept per UUID, plus:/aichat forget— clears your own history./aichat forget <player>— op-only, clears another player's.
/aichat reload— re-readsconfig.ymland clears in-memory history without a server restart.agent-max-steps(default 8) — caps tool-calling iterations, then forces a best-effort synthesis pass so players always get an answer instead of an error.private-questionsmode — when true,!askis whispered back to the asker instead of broadcast.- Dual-flavor build —
-Pflavor=modern|legacyproduces the matching jar with the correct Java target and paper-api version.
Changed
- Default Gemini model:
gemini-2.5-flash→gemma-4-31b-it(verified function-calling support, free tier). - Default Ollama model:
llama3.2→gpt-oss:20b(works on cloud;llama3.2is local-only). - Default
agent-max-steps: 5 → 8. - Prompt template rewritten for Notch persona with explicit anti-narration rules ("never say 'let me try again'", etc.) and balanced tool-use guidance (use tools for factual queries, skip for greetings/jokes/opinions).
- Length guidance: short by default but go longer when the question genuinely needs detail.
Fixed
- Gemini 400 INVALID_ARGUMENT ("function response turn must immediately follow function call turn"). Root cause: per-player history was storing the full tool-call trajectory, and the front-trim could leave an orphan
function_callat the head. Fix: only user turns and plain assistant-text turns are persisted; intermediate tool plumbing is dropped. - Hitting
agent-max-stepsproduced a hard error instead of an answer. Now does one final synthesis pass with tools disabled. - Bot saying "Let me try that again!" without retrying. Prompt now bans status-update narration outright — either silently call a tool or give the final answer.
- MediaWiki tool — pipe separator must be
%7C-encoded in URLs. - Brave Search tool — gzip handling fixed; parse errors now include a body preview (json-simple's
ParseException.getMessage()returns null otherwise).
Configuration migration
- Old top-level
api-key/api-urlare still read but logged as deprecated. Move them toproviders.gemini.api-key/providers.gemini.api-url.
Build
./gradlew build— modern (Paper 26.x, Java 25)../gradlew build -Pflavor=legacy— legacy (Paper 1.21.x, Java 21).- Foojay toolchain resolver added so missing JDKs auto-download.
Permissions
aichatbuddy.ask(default: everyone) — use!askin chat.aichatbuddy.reload(op) —/aichat reload.aichatbuddy.forget.self(default: everyone) —/aichat forget.aichatbuddy.forget.others(op) —/aichat forget <player>.
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:LjVeDMMV:aBiBE5Lh"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:LjVeDMMV:aBiBE5Lh"
}

