Skip to content

Releases: aebrer/minecraft-god

v2.5.0 — Pydantic validation & whitelist player checks

Choose a tag to compare

@aebrer aebrer released this 20 Feb 00:57
ab189d1

What's new

Pydantic validation for tool calls

All 14 tool call types now have pydantic models validating their arguments before they become Minecraft commands. Malformed LLM output gets caught with field-level error messages that guide the model to self-correct, instead of silently failing or producing broken commands.

Whitelist-based player validation

Player names are validated against the server whitelist (paper/whitelist.json) with case-insensitive matching. Catches the LLM hallucinating or misspelling usernames — observed working on first prayer after deploy.

Kind God memory turn

The Kind God now reflects after acting (two-turn pattern matching the God of Digging). A 1-2 sentence memory flows into the consolidation log for long-term integration.

Numeric clamping

Values like item count, effect duration, and amplifier are clamped to valid ranges instead of hard-rejected, preserving the god's intent without wasting API round-trips.

Stats

  • 14 pydantic models added
  • 7 new tests, 335 total passing
  • 5 files changed, +665 / -254 lines

Closes #26

v2.4.0 — God of Digging + Thinking Broadcast

Choose a tag to compare

@aebrer aebrer released this 19 Feb 02:06

God of Digging

Third deity joins the pantheon — an enthusiastic hole connoisseur who actually modifies terrain for players. Four dig shapes: holes, tunnels, staircases, and shafts, all with instant block clearing, particle effects, and shared undo history.

  • Structured responses: Uses pydantic-validated JSON (two-turn: dig action + memory composition), unlike the free-text approach of other gods
  • Personality: Punny historical aliases each appearance, hole quality ratings, bounded memory archive of past excavations
  • Inter-god communication: Can forward prayers to Kind God when requests are outside its domain — players see the handoff in chat
  • Java plugin: executeDigCommand() handles all 4 shapes with staircase two-pass placement, 5-block headroom, and try-catch safety wrapper

Thinking Broadcast

All gods' inner monologue now appears in-game as colored chat messages. Players see the gods deliberating in real-time.

  • Callback pattern: Each god's think() fires on_thinking with narrative text; for Kind God multi-turn schematic reasoning, thinking appears turn-by-turn
  • Filtering: JSON blobs, fenced code blocks, minecraft commands, and markdown formatting stripped before display
  • Word wrapping: All god chat messages wrapped at ~50 chars to fit Minecraft chat width, with proper indentation on continuation lines
  • Line caps: Thinking capped at 6 lines, messages at 10 lines to prevent chat flooding

PR Review Fixes

  • Java try-catch on executeDigCommand to protect the command polling loop
  • Protected json.loads in _handle_tool_calls for malformed LLM output
  • callable to Callable[[str], None] | None type annotations across all gods
  • alias field capped at 100 chars, no-op validator removed
  • FILO to FIFO terminology fix, docstring updates

Stats

  • 328 tests (78 dig god + 27 thinking broadcast + existing)
  • 2,139 lines changed across 13 files
  • 4 new files: dig_god.py, dig_memory.py, test_dig_god.py, test_thinking_broadcast.py

Closes #24 | PR #25

v2.3.0 — Smarter builds & prayer silence feedback

Choose a tag to compare

@aebrer aebrer released this 16 Feb 23:25
af4e04a

What's New

Build schematic improvements

  • near_player now defaults to the praying player — the LLM no longer needs to type the username, eliminating misspelling failures
  • Fallback: if the LLM provides a name that doesn't match any online player, it falls back to the requesting player's position
  • near_player removed from required tool parameters

Prayer silence feedback

  • When a god hears a prayer but chooses not to act, the player now gets themed feedback instead of silence
  • Each god has distinct silence messages (Kind God, Deep God, Herald)
  • Silence events are recorded in the activity log for memory consolidation

PR review fixes

  • Removed stale error message that would mislead the LLM on build retries
  • Silence events now logged for Kind God memory consolidation

Full Changelog: v2.2.0...v2.3.0

v2.2.0 — /godhelp Command & Chat-Only Messaging

Choose a tag to compare

@aebrer aebrer released this 16 Feb 22:24
0104467

What's New

/godhelp Command

  • Any player can run /godhelp to see how the server's god system works
  • Covers all three entities (Kind God, Deep God, Herald), prayer keywords, and tips
  • Automatically shown to new players 3 seconds after their first join
  • Clickable /godhelp link in the message for easy re-access

Chat-Only Messaging

  • All god messages now go through tellraw (chat) instead of title/actionbar overlays
  • Messages are retained in chat history — no more missing truncated titles
  • Removed style parameter from all god tool definitions
  • assign_mission simplified to a single formatted tellraw announcement
  • Removed title from the command allowlist

Full Changelog

  • 7 files changed across Java plugin and Python backend
  • Tests updated (221 passing)

v2.1.0 — Memory Persistence & Remember Keyword

Choose a tag to compare

@aebrer aebrer released this 16 Feb 16:07
c332edb

The Kind God now remembers what happens in the world — and you can ask it to reflect on command.

What's New for Players

The god sleeps when you're gone. When no players are online, the Kind God stops watching. No more burning through API calls all night reacting to rain. The god wakes up the moment someone joins.

"Remember." Say "remember" in chat and the Kind God will pause, close its eyes, and reflect on everything that's happened since its last reflection. It consolidates its memories on the spot — useful after a big event you want it to actually retain. You'll get honest feedback: a gold message and chime when it works, a grey message if there's nothing new to reflect on or it's still recovering from a recent reflection, and a red warning if something goes wrong.

"Remember" takes priority. If you say "dear god please remember", the god recognizes "remember" first and reflects instead of treating it as a prayer. The priority order is: remember > prayer > herald.

The god remembers across restarts. The Kind God's activity log (everything it observed — chats, prayers, deaths, its own actions) now saves to disk. Previously, restarting the backend wiped its short-term memory. Now it picks up right where it left off.

Real-time consolidation. Memory consolidation runs on a real 3-hour wall-clock timer instead of a broken tick counter that required 32+ hours of continuous gameplay to fire. The timer persists across restarts too.

Technical Changes

  • Idle tick optimization: get_player_status() returns None when the last status beacon is older than 120 seconds. The god tick loop drains buffered events silently and skips the LLM call. Events are still logged — only the LLM call is suppressed.
  • Unified keyword detection: classify_divine_request() and is_divine_request() in prayer_queue.py are the single source of truth for prayer/herald/remember classification. Priority: remember > prayer > herald.
  • Remember via DivineRequestQueue: "remember" requests are queued like prayers with full player context snapshots. The processing path checks preconditions (non-empty log, cooldown expired) before sending feedback, then runs consolidation inline.
  • Wall-clock consolidation timer: MEMORY_CONSOLIDATION_INTERVAL_SECONDS (default 3 hours, env-configurable). Stored as unix timestamp in the memory JSON, survives restarts. Failure cooldown prevents retry-spam on LLM outages.
  • Activity log persistence: data/consolidation_log.json saved via atomic writes (tmp + os.replace) on shutdown and after each consolidation. Loaded on startup. Handles missing, corrupt, and non-list JSON gracefully.
  • Player staleness threshold: Player positions older than 10 minutes are excluded from Deep God trigger checks, preventing stale cached positions from triggering underground events after players log off.
  • Error handling improvements: UnicodeDecodeError caught on file loads, logger.exception for full tracebacks on corruption, non-list JSON detection with warning, atomic writes throughout.
  • Dead code removed: _validate_block, _validate_coordinate (unused since v2.0.0), has_divine_request (superseded by prayer queue).
  • Test suite: 220 tests covering commands (36), deaths (12), events (28), deep god triggers (15), herald (10), memory (20), prayer queue (33), activity log (14), schematics (12). Pre-commit hook enforces all tests pass before every commit.

v2.0.0 — Prayer Queue & Divine Construction Overhaul

Choose a tag to compare

@aebrer aebrer released this 16 Feb 02:02

Major architectural overhaul to how the gods hear prayers, build structures, and manage their attention.

What's New for Players

Prayers actually queue now. If you pray while the god is busy answering someone else, your prayer waits in line instead of being silently dropped. The god remembers exactly where you were standing and what you were looking at when you prayed — not where you wandered off to by the time it gets around to answering.

Builds land where they should. Divine construction now places structures directly in front of where you were standing when you prayed, at a sensible distance. No more barns appearing 80 blocks away because the LLM flipped a coordinate sign. The gods just pick the blueprint and the player — the server handles the math using your prayer snapshot.

Undo exists. If a divine construction goes wrong (clipped into a mountain, landed on your house), the Kind God can undo it and restore the original terrain. Up to 5 recent builds can be reversed. Players can also ask the god to remove a recent build.

Herald joins the queue. Herald invocations ("herald", "bard") now go through the same priority system as prayers, so the Herald won't talk over the Kind God mid-response.

Shorter titles. On-screen title messages are capped at 40 characters so they're actually readable during the ~3 seconds they're visible.

Technical Changes

  • Prayer queue with snapshot context: FIFO DivineRequestQueue captures full player state (position, inventory, facing, nearby entities) at the moment of prayer. Retry up to 5 attempts with in-game feedback on abandonment.
  • Fresh LLM context per call: Gods no longer accumulate conversation history across unrelated interactions. Each think() call starts clean — the memory system handles long-term continuity.
  • Server-side build placement: build_schematic now takes near_player + in_front/direction/distance instead of raw coordinates. The backend resolves absolute coordinates from the player's position and facing direction, using the prayer snapshot so the build lands where the player was when they prayed.
  • Tool simplification: Removed browse_schematics, inspect_schematic, place_block, and fill_blocks. The schematic flow is now search → build (2 steps instead of 3-4). This is a breaking change for any tooling that referenced the old tool names.
  • Undo system: New undo_last_build tool and /godundo console command. The Java plugin maintains a ring buffer of the last 5 builds with full block-level rollback.
  • Inline player snapshots: Chat events now include a full player snapshot built on the main server thread, eliminating stale position data from async event handlers.
  • Multi-turn improvements: Search nudging (god won't search twice without building), error retry on failed tool calls, configurable turn limit (max 4).
  • Message length caps: title=40, actionbar=80, chat=200 characters per style.
  • Code review cleanup: Fixed double "prayer abandoned" messages, stale documentation, added Literal type for request routing, improved error logging with request context.

Breaking Changes

  • browse_schematics, inspect_schematic, place_block, and fill_blocks tools have been removed
  • build_schematic no longer accepts x/y/z coordinates — uses near_player + placement parameters instead
  • LLM timeout increased from 2 minutes to 5 minutes

v1.1.0 — Structured Error Logging & Public Release

Choose a tag to compare

@aebrer aebrer released this 12 Feb 23:55
0dc3b0d

Adds diagnostic error details to the /logs admin endpoint and prepares the repository for public access.

Changes:

  • Error entries in /logs now include the exception type and message (e.g. "error": "APITimeoutError: Request timed out.") instead of just {"action": "error"} — no more digging through journalctl to diagnose god failures
  • Comprehensive README with project overview, architecture, and setup instructions
  • CLAUDE.md safety rules for public repo operations
  • Repository cleaned up for public release

v1.0.1 — Schematic Build Fixes

Choose a tag to compare

@aebrer aebrer released this 12 Feb 17:18

Hotfix: Schematic Build Quality

Terrain Clearing

  • Builds now clear the bounding box before placing blocks, preventing terrain from interfering with mechanisms
  • Player valuables are protected: beds, chests, shulker boxes, barrels, beacons, enchanting tables, and anvils are never overwritten

Block Activation

  • All placed blocks are now ticked after build completion, activating redstone circuits, water flow, and piston mechanisms
  • Previously, blocks were placed with physics disabled and never activated — redstone machines wouldn't start

Broken Schematics Removed

  • Removed 44 GrabCraft machine schematics with missing directional block states (pistons/repeaters/comparators saved without facing data — completely non-functional)
  • Minemev functional schematics (Litematica exports) have full block states and work correctly

BDS Service Cleanup

  • Permanently deleted the legacy Bedrock server service file that kept restarting and stealing commands

Catalog: 3,386 blueprints across 44 categories

v1.0.0 — Minemev Technical Schematics & Fuzzy Search

Choose a tag to compare

@aebrer aebrer released this 12 Feb 15:59

What's New

Minemev Integration — 696 Functional Schematics

Integrated the full Minemev technical Minecraft archive. The gods can now build working farms, machines, and redstone contraptions — not just decorative buildings.

New functional categories:

Category Count Highlights
mob-farms 49 Iron farms (10K+ downloads), creeper farms (2M/hr!), wither skeleton, shulker, raid
storage-systems 73 Encoded main storage, bulk storage, cart-based MIS
redstone 59 Piston bolts, slimestone, contraptions
crop-farms 31 Sugar cane, bamboo, wheat, melon, cactus, mushroom
resource-farms 34 Cobblestone, obsidian, sand, concrete
tnt-machines 27 World eaters, tunnel bores, quarries, bedrock breakers
tree-farms 20 All wood types from oak to crimson
xp-farms 17 Gold, enderman, zombie piglin
auto-crafting 19 Furnace arrays (50–1728), mass crafters
shulker-systems 12 Box loaders, sorters, displays
villager-systems 9 Breeders, encoded trading halls

GrabCraft Machines Category

Added 48 "Working Mechanisms" blueprints from GrabCraft — cobblestone generators, auto farms, redstone piston doors, brewing stations, and more.

Fuzzy Search Tool

New search_schematics god tool enables keyword search across the entire catalog. The god can go from a player's prayer ("can I have an iron farm?") to placing a build in 2 tool calls instead of 4–5 category-browsing turns.

Search ranks results by relevance (name/tag/description matching) plus download popularity from Minemev.

Pipeline

New scrape_minemev.py script handles the full Minemev → .schem pipeline:

  • Paginates Minemev's API with exponential backoff
  • Converts .litematic → .schem via litemapy
  • Quality filter skips entries without usable names/tags
  • Player-friendly category mapping
  • Crash recovery with periodic index saves

Numbers

  • Total catalog: 3,430 blueprints across 44 categories (up from 2,139 / 31)
  • 696 Minemev technical builds + 48 GrabCraft machines added
  • Sources: GrabCraft (decorative), Minemev (technical)

🤖 Generated with Claude Code

v0.3.0 — GLM-5 Upgrade

Choose a tag to compare

@aebrer aebrer released this 11 Feb 20:59

What's New

Upgraded the LLM backend from GLM-4.7 to GLM-5 (Zhipu AI's latest flagship model).

GLM-5 is a 745B parameter MoE model with 200K context window, available through the same Z.ai coding plan API endpoint.

Changes

  • Updated GOD_MODEL from glm-4.7 to glm-5 in config and .env.example