Two related fixes for the (255,117,220) -> (237,97,172) route reported where the bot fell out of a 22-block water descent and landed on the rim, and where /pathdiag noticeably froze and warped the bot. DescendTemplate: long-fall water-column overshoot ================================================= On segment 7 of the route, a 22-block descend Descend (254.5,113,224.5) -> (253.5,91,224.5), the bot's footprint enters the target column at the very first airborne tick (X=253.6 footprint inside [253,254], Z=224.7 footprint inside [224,225]). The previous code immediately set biasTowardExitInAir = true, rotating yaw to the next segment's exit heading (-Z) for the entire 20+ tick fall. Forward held during the fall pushed -Z momentum each tick (~0.05 m/tick equilibrium), so by landing time the bot had drifted ~1 m past the water column and landed on the dry rim (Z=223.42 vs target Z=224.5). On a real server this plunge from 22 blocks onto a non-water block would kill the bot. Two changes in DescendTemplate.cs: 1. Gate the footprint-inside-target bias for non-single-step descends behind a "near landing" check (remainingFallY <= 1.5 m, ~3 ticks of free-fall). The bias still applies on single-step descends (where the fall is too short for drift to matter) and on the final approach ticks of multi-block falls. 2. Extend the existing riskyOvershoot Back-input brake to fire on any multi-block descend whose footprint is already inside the target, not just the PrepareJump exit case. Once the bot is in the column, the segment's horizontal travel is done; releasing Forward and pressing Back kills any residual horizontal velocity so the bot falls straight into the water/landing block instead of accumulating air-control momentum from holding Forward for 20+ ticks. Verified on 1.21.11 with /pathdiag on: segment 7 now lands at (253.59,91,224.42), 0.09 m off target X and 0.08 m off target Z, well inside the target water column. PathSegmentManager: PathDiag main-thread offload ================================================= Diagnostic dumps were emitted line-by-line through _infoLog?.Invoke(), which calls Log.Info -> ConsoleIO.WriteLogLine -> file logger on the main 20 TPS tick. A slow-segment dump or failure trace produces 25-200 synchronous log calls; on the affected route a single batch took 200-500 ms on the tick thread, freezing the position-packet stream long enough for the server to lose track and then snap the bot forward when the tick resumed. Symptom on the user side: every time /pathdiag is on, the bot freezes for ~half a second, then "teleports" through the queued segments, then freezes again. Each diagnostic emission point now snapshots its lines into a List and dispatches them through DispatchDiagnosticsBatch, which appends to a single chained Task running on TaskScheduler.Default. The chain preserves emission order across batches so concurrent slow-segment and seg-> headers do not interleave. The tick path now does O(1) work per dump (build list, ContinueWith) instead of O(N) console writes. Verified by running the same /goto twice (with and without pathdiag): both runs produced identical trajectories and identical replan counts, confirming the diagnostics path no longer perturbs movement. Pathing test suite: 23 failures, identical to baseline. Live regression on prior 4 zero-replan routes ((237<->252, 237<->244)) all still complete cleanly. Made-with: Cursor |
||
|---|---|---|
| .claude | ||
| .codex | ||
| .cursor | ||
| .github | ||
| .idea | ||
| .skills | ||
| .vscode | ||
| config | ||
| ConsoleInteractive@ff6d2129e9 | ||
| DebugTools | ||
| Docker | ||
| docs | ||
| MinecraftClient | ||
| MinecraftClient.Tests | ||
| MinecraftClientGUI | ||
| tools | ||
| .cursorindexingignore | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| crowdin.yml | ||
| Directory.Build.props | ||
| LICENSE.md | ||
| MinecraftClient.sln | ||
| MinecraftClientGUI.sln | ||
| README.md | ||
English | Nederlands | Русский | Српски | Türkçe | Tiếng Việt | 简体中文 | 繁體中文
About ℹ️
Minecraft Console Client (MCC) is a lightweight cross-platform open-source Minecraft TUI client for Java edition that allows you to connect to any Minecraft Java server, send commands and receive text messages in a fast and easy way without having to open the main Minecraft game.
Download
Get the latest release from the Releases section.
Quick Install ⚡
Open a terminal in the folder where you want MCC and run:
Linux / macOS:
curl -fsSL https://mccteam.github.io/install.sh | sh
Windows (PowerShell):
iwr -useb https://mccteam.github.io/install.ps1 | iex
The script detects your architecture and downloads the right binary. For more options (including wget and manual downloads), see the installation guide.
How to use 📚
- 🌐 Full Documentation
- 📦 Installation
- 📖 Usage
- ⚙️ Configuration
- 🤖 Chat Bots
- 📝 Sample configuration files
Getting Help 🙋
Check out the Website, README and existing Discussions: Maybe your question is answered there. If not, please open a New Discussion and ask your question. If you find a bug, please report it in the Issues section.
Discord
We now have a Discord server, click here to join.
Helping Us ❤️
We are a small community so we need help to implement upgrades for new Minecraft versions, fixing bugs and expanding the project. We are always looking for motivated people to contribute. If you feel like it could be you, please have a look at the issues section :)
How to contribute 📝
If you'd like to contribute to Minecraft Console Client, great, just fork the repository and submit a pull request on the Master branch. To contribute to the website / online documentation see also the Website repository.
Translating Minecraft Console Client 🌍
To improve translations for MCC, please visit: Crowdin - Minecraft Console Client.
Building from the source 🏗️
This section has been moved to our new Documentation website.
License ⚖️
Unless specifically stated, the code is from the MCC Team or Contributors, and available under CDDL-1.0. Else, the license and original author are mentioned in source file headers. The main terms of the CDDL-1.0 license are basically the following:
- You may use the licensed code in whole or in part in any program you desire, regardless of the license of the program as a whole (or rather, as excluding the code you are borrowing). The program itself may be open or closed source, free or commercial.
- However, in all cases, any modifications, improvements, or additions to the CDDL code (any code that is referenced in direct modifications to the CDDL code is considered an addition to the CDDL code, and so is bound by this requirement; e.g. a modification of a math function to use a fast lookup table makes that table itself an addition to the CDDL code, regardless of whether it's in a source code file of its own) must be made publicly and freely available in source, under the CDDL license itself.
- In any program (source or binary) that uses CDDL code, recognition must be given to the source (either project or author) of the CDDL code. As well, modifications to the CDDL code (which must be distributed as source) may not remove notices indicating the ancestry of the code.
More info at http://qstuff.blogspot.fr/2007/04/why-cddl.html Full license at http://opensource.org/licenses/CDDL-1.0