Two critical issues in the 1.20.6 configuration phase that could cause
connection instability and packet desync:
1. RegistryData: The handler used an early `break` when it encountered
a registryId other than "minecraft:dimension_type" or
"minecraft:chat_type". This skipped reading the remaining entries
for that registry, leaving unconsumed data in the packet buffer.
Subsequent packet reads would start at the wrong offset, causing
cascading parse failures and eventual disconnection.
Fix: Always read all entries (entryId + hasData + optional NBT)
for every registry, regardless of whether we process it. For
dimension_type entries, if the server sends inline NBT data (i.e.
non-vanilla dimensions from mods/datapacks), parse and store
the dimension directly via World.StoreOneDimension(). Only fall
back to hardcoded defaults when no dimension data was received.
2. KnownDataPacks: The client echoed back ALL packs the server
listed, including non-vanilla ones. This told the server "I have
these packs cached" when the client actually did not, so the
server would skip sending full registry data for those packs.
The result: incomplete registries for modded/datapack content.
Fix: Filter the response to only include packs with the
"minecraft" namespace. Non-vanilla packs are omitted, forcing
the server to send their full registry data inline.
Also adds supporting methods to World.cs:
- SetDimensionIdMap(): Store VarInt ID -> dimension name mapping
from RegistryData entries (needed by JoinGame/Respawn)
- GetDimensionNameById(): Look up dimension name by numeric ID
- HasAnyDimension(): Check if any dimensions were loaded from
server-provided data
Made-with: Cursor
Special thanks to @TheSnoozer and @vkorn for their help!
- Implement global block Palette mechanism
- Add class generation tool from blocks.json
- Regenerate Material.cs and redefine solid blocks
- Migrate previous Material.cs into Palette112
- Generate Palette113 from MC 1.13.2 blocks.json
- Improve Block class to handle up to 65535 block states
- Adjust terrain parsing, small fixes in packets
- Remove unused snapshot-related protocol cases
Solves #599
Taken from Bukkit's Material class, with credits.
Allows to know types and properties of blocks.
+ Use database for "is solid" checks
+ Add "can harm players" method
+ Faster movements, falling seems natural now
+ Shorter error message when ping failed
- World is now properly parsed and stored from chunk data
- Block changes are also handled and world updated accordingly
- Added ground checking, the player will move down to reach the ground
- Performance tweaking in Protocol18, using lists instead of arrays
- Fix player look not properly skipped causing invalid location after
teleport