- Add with_any_potion (id 2), only_with_component (id 3), dyed (id 7)
- Shift existing IDs: item 2→4, item_stack 3→5, tag 4→6,
smithing_trim 5→8, with_remainder 6→9, composite 7→10
- RecipeBookAdd now decodes successfully (was index not found)
- Verified against decompiled client jar via SlotDisplays.bootstrap()
- Replace old broken RegistryEntryHolderSetDecoder with correct varint
discriminator: id != 0 returns raw ID, id == 0 decodes string base
- Add RegistryEntryHolderSetEncoder using type switch (string/int32)
- Add NonErroringIndex to proto_base (zero-fallback index lookup)
- DeclareRecipes now fails with index not found (mapper) instead of to do
- Implement topBitSetTerminatedArray decoder/encoder with MSB continuation
- Fix nbt.Tag.Decode to handle TAG_End at root level (fixes 1.8 slot NBT)
- Remove 228 now-passing decode failure tests, keep 10 still failing
- EntityEquipment now works correctly across all versions
- VisitNameAndData: return any instead of named struct when mergeCompareTo
resolves $compareTo, fixing field type mismatches for switch/container types
- ContainerCompareTo: traverse anon/bitfield fields for compareTo resolution,
fixes entityMetadata 'field not found' errors
- Array.Count: change from string to any to handle numeric count values
- ArrayEncoder: fix nil check to correctly write length prefix for arrays
- ArrayDecoder: use fmt.Sprint for safe Count conversion
- Add -config flag and Configuration state support to raw_to_tmcpr
(required for Minecraft 1.20.2+ protocol >= 764)
- Add 'config' as valid initial state option
- Fix mca_to_tmcpr -world flag being ignored (was hardcoded dev path)
- Add TMCPR replay test data from live 1.8 capture
- Fix data race: use atomic.Bool for running in server.go
- Fix busy loop in timer.go: use time.After when idle
- Fix division by zero in print_replay
- Fix silently swallowed errors in proto_generator
- Fix suppressed error in native_encoder
- Delete unused registry_data_hunter
- Add minecraft-data for 1.14.4 (protocol 498)
- Generate proto_generated/v1_14_4
- Extend legacy RegisterUntil range from 1.12.2 to 1.14.4
- Update download_minecraft_data.sh to use admin-else fork
and include all supported versions
For types identical across all versions (Compress, Disconnect, Status,
Pong), use a single handler at v1_8 registered to 26.2 instead of
per-version duplicates. For types that differ (Encrypt has extra
ShouldAuthenticate field in newer versions, Success has different
Uuid type), keep dual-range registrations.
- RegisterUntilLow now panics if startIndex > endIndex (programmer
must address version incompatibility explicitly, not silently skip)
- Replace per-version RegisterCritical handlers with dual-range
RegisterUntil: modern range (v1_21_8->latest) + legacy range (v1_8->1.12.2)
- Remove v1_12_2 handler duplicates (covered by upward range from v1_8)
- Move legacy chat handling into chat.Module.SendMessage (protocol<764
uses v1_8.PlayToServerPacketChat instead of v1_21_11)
- Skip chat signing init for pre-1.19 versions
- Add minecraft-data for 1.12.2 (protocol 340)
- Generate proto_generated/v1_12_2
- Add v1_12_2 legacy handlers to client.Login (OnDisconnect,
OnCompress, OnSuccess) and client.Status (OnStatus, OnPong)
- Same pattern as v1_8: RegisterUntilLatest only registers
upward, so legacy versions need explicit RegisterCritical handlers
- Delete raw_capture subcommand (use tcpflow + raw-to-tmcpr instead)
- Fix DefaultEncoder to use temp variable for non-addressable value encoding,
eliminating manual post-generation patches
- Map nbt and optionalNbt types to nbt.Tag (named NBT) instead of nbt.Anon
(anonymous NBT) — 1.8 uses named NBT with root tag names
- ConnectWithConn wraps an existing net.Conn into a versioned proto.Conn
- DialFunc is a context-aware dial function type
- WithConn uses a pre-established net.Conn (version required, no DNS)
- WithDialer replaces net.Dialer with a custom dial function
- LoginRawAddr accepts an explicit handshake host address
- Login() wired to support all three connection modes