Skip to content

MC Presence v2.0.7

Choose a tag to compare

@github-actions github-actions released this 10 May 22:44
· 10 commits to main since this release

Features

  • Breaks system — per-session random "step away from the keyboard" simulation. Configure a check interval, hit chance, and min/max duration. While connected, the bot rolls the chance every N minutes; on a hit it disconnects for a random duration in [min, max] and reconnects automatically when the break ends. Auto-reconnect is suppressed during breaks (so the schedule/auto-reconnect loops don't fight the break timer). In scheduled mode, a break that ends outside the active window stays disconnected; the schedule ticker reconnects when the window reopens. A pill in Controls > Connection shows "On break — returning around HH:MM" while active. Config lives under Setup > Breaks.
  • Min-required break floor — extra fields under Setup > Breaks: "Force After (hr)" and "Forced Length (min)". If no break has happened within the floor window, the next check forces a fixed-duration break regardless of the random roll. Defaults: 3h floor / 10min forced. Set "Force After" to 0 to disable. Baseline for "no break yet" is the bot's connectedAt on first connection (so a freshly-connected bot isn't immediately overdue). lastBreakAt persists across server restarts.
  • Last Break readout — a "Last Break" row in Controls > Connection shows when the bot last took a break (e.g., "47m ago", "2h 15m ago", "Never"). Visible whenever breaks are enabled or a break has ever happened.

Fixes

  • CMI-nicknamed players' chat now classifies as real chat — the chat handler resolved senders by direct lookup in bot.players, which is keyed by real MC username. CMI (and Essentials, and any plugin that rewrites chat formats to show a nickname) sends the chat event with the visible nickname as the sender, so the lookup missed and the message fell through to the "Server" / plugin-broadcast branch — appearing in the UI as a non-chat system message and never reaching the AI handler. Added resolveChatSender() which falls back to matching against each player's displayName (with §-color codes stripped) when the direct lookup fails. UI now shows the nickname as the sender (matching what the player sees in-game) while AI/cooldowns/bot-account checks use the resolved real MC username. Whisper handler updated to the same resolver for consistency.
  • Asset cache-busting — index.html is now rendered at request time with the running APP_VERSION substituted into the asset URLs (/app.js?v=2.0.7, /app.css?v=2.0.7). Previously browsers could keep serving cached app.js after a container update, so users would see the new server version badge while still running the old UI (e.g., the v2.0.6 sidebar refactor not appearing until a manual hard-refresh). Bumping the version automatically invalidates the cached URLs on every release.
  • 26.1.x connect failure handled gracefully — the v2.0.6 dependency bump registered the protocol metadata for 26.1.2 but PrismarineJS hasn't shipped the per-version game-data directory yet, so minecraft-data('26.1.2') returned null and minecraft-protocol threw before login. A first attempt to override the wire protocol so the handshake would still claim 26.1.2 succeeded at login but immediately crashed post-login because too many packets changed shape between 1.21.11 and 26.1.2 — the bot would briefly appear in-game and then vanish (PartialReadError / Cannot read properties of undefined in inventory.js). Now: when a 26.X.Y server is detected via ping, the bot auto-falls-back to negotiating as 1.21.11. Connects cleanly if the server has ViaVersion (or another protocol-translation plugin) installed; if not, the server rejects with a clear "outdated client" message instead of crashing mid-stream. Manual override via the Version field in Setup still works. The fallback becomes a no-op automatically once PrismarineJS ships proper 26.x data.