- Introduced a comprehensive physics engine that replicates Minecraft's movement mechanics, including player input handling, gravity, and collision detection.
- Added classes for player physics, movement input, and collision detection, ensuring accurate simulation of player interactions with the game world.
- Integrated AABB (Axis-Aligned Bounding Box) structures for precise collision detection against blocks.
- Enhanced movement capabilities with support for jumping, sneaking, and sprinting, along with step-up mechanics for navigating terrain.
These changes significantly improve the realism and responsiveness of player movement within the game environment.
- SpawnEntity packet handler now registers non-player entities via OnSpawnEntity
for protocol >= 1.20.2 (previously only players were tracked, causing 'entity near'
to find nothing)
- PlaceBlock gains lookAtBlock option that sends a position/rotation update before the
block placement packet, fixing containers not opening via useblock
- Enchantment registry IDs are now dynamically parsed from server RegistryData
(minecraft:enchantment), fixing incorrect enchantment name display in 1.21
- AttributeModifiersComponent uses base SubComponent type to avoid InvalidCastException
when parsing 1.21-specific attribute subcomponents
Made-with: Cursor
FileInputBot (ChatBots/FileInputBot.cs):
- New ChatBot that monitors a text file (default: mcc_input.txt) for
commands, enabling MCC control from Cursor Shell or any non-interactive
environment where stdin is not available
- Activated by setting MCC_FILE_INPUT env var (e.g. MCC_FILE_INPUT=1)
- Polls every ~500ms for new lines appended to the file
- Lines starting with "/" are sent as server chat/commands
- Other lines are executed as MCC internal commands (same as console input)
- File path overridable via MCC_INPUT_FILE env var
McClient.cs:
- Load FileInputBot when MCC_FILE_INPUT environment variable is set
ChatParser.cs - NbtToString:
- Fix InvalidCastException when NBT "text" or nameless root tag values
are Int32 instead of String (happens with 1.20.6 SystemChat packets
containing numeric values in the chat component tree)
- Replace direct (string) casts with ?.ToString() ?? string.Empty
Made-with: Cursor
In 1.20.6+, items use structured components instead of NBT for metadata.
Previously, ReadNextItemSlot parsed the components but never stored them
on the Item instance, leaving DisplayName/Lores/Damage/Enchantments all
empty. GetItemSlot also still used the pre-1.20.6 format (bool + VarInt +
byte + NBT), causing the server to reject any item operation packets.
Changes:
Item.cs:
- Add List<StructuredComponent>? Components field to hold the raw
component list for round-trip serialization
- DisplayName property: read from CustomNameComponent (with
ItemNameComponent as fallback) when Components is present
- Lores property: read from LoreNameComponent1206 when Components is
present
- Damage property: read from DamageComponent when Components is present
- Add EnchantmentList property: read from EnchantmentsComponent (covers
both normal and StoredEnchantmentsComponent for enchanted books)
- ToFullString(): use EnchantmentList with EnchantmentMapping for display
when available, fall back to NBT path for older versions
- Add CloneWithCount() method that preserves both NBT and Components
DataTypes.cs - ReadNextItemSlot:
- Assign parsed strcturedComponentsToAdd to item.Components
DataTypes.cs - GetItemSlot:
- Add 1.20.6+ branch: write VarInt(count) + VarInt(itemId) + component
counts + serialized components (using each component's TypeId and
Serialize() method)
- Empty slot sends VarInt(0) per the 1.20.6 protocol spec
StructuredComponent.cs:
- Add int TypeId property (default -1) to store the registry type ID
assigned during parsing, enabling round-trip serialization
StructuredComponentRegistry.cs:
- Set component.TypeId = id after instantiation in ParseComponent()
McClient.cs:
- Replace manual Item constructor calls (new Item(type, count, nbt))
with Item.CloneWithCount() to preserve Components during inventory
operations like slot moves, stack splits, and right-click placement
Made-with: Cursor
* Add Sentry Error Tracking
* Omit personally identifiable information and add additional sentry context
* Remove debug message
* Make sentry opt-out and add related notices and strings
Also add Minecraft Version to error context
* Update build to send release info to sentry
* Adjust sentry error tracking
- Send the user-friendly Minecraft Version in the error logs
- Capture exceptions in more parts of the application
We now capture exceptions from the following locations:
- Protocol18 (1.8+) Packet errors
- Errors during client initialization phase (When client is about to start, session keys are NEVER sent to sentry)
* Make Sentry DSN configurable and repository-specific
The Sentry DSN will automatically be filled out on the main repository through the Github Actions build.
* Update build-and-release.yml
Update sed command
* style: change variable name
nitpick, just to make it a little bit more descriptive
* Add Sentry branding in README.
* remove old code (merge conflict)
The fix is to remove the ParseText call from the OnConnectionLost call, as the ReadNextChat function already calls ParseText. Calling ParseText on an unparsable string returns an empty string, therefore the disconnect message never gets propagated to the user.
Makes AutoRelog more hands on with the relogging rather than have the general relogging handler handle it.
Fallback to the general handler only when the AutoRelog module is disabled.
Non-vanilla server may have player name other than English, for example Chinese server can have player name in Chinese. This setting allow MCC to display those non-English name in the player list.