strom: add 1.8 protocol support, raw-to-tmcpr, disable raw-capture

- Add minecraft-data for version 1.8 (protocol 47)
- Generate proto_generated/v1_8 from 1.8 protocol.json
- Fix generator compatibility: missing CompareTo natives (i16, i32, u16, u32,
  i64, string, nbt, optionalNbt), parameterized type placeholder handling ()
- Add raw-to-tmcpr subcommand: converts raw tcpflow captures to TMCPR
  with zlib decompression and state-aware compression threshold tracking
- Extend print-replay: 1.8 state transitions (success->Play, login_start->Play,
  handshake/status initial states, set_protocol NextState detection)
- Comment out broken raw-capture subcommand (use tcpflow instead)
- Fix nbt.Anon Encode/Decode on value receivers
This commit is contained in:
Admin Else
2026-08-04 16:10:15 +02:00
parent 3273244c42
commit b162d0d401
34 changed files with 55210 additions and 249 deletions
+1 -1
View File
@@ -429,7 +429,7 @@ func GenerateVersions(versions []string) (err error) {
}
func main() {
err := GenerateVersions([]string{"1.21.8", "1.21.9", "1.21.11", "26.1", "26.2"})
err := GenerateVersions([]string{"1.8", "1.21.8", "1.21.9", "1.21.11", "26.1", "26.2"})
if err != nil {
panic(err)
}
+10
View File
@@ -12,6 +12,10 @@ import (
)
func (g *Generator) ParseCompareTo(compareTo string) (e ast.Expr, cet CaseExprType, err error) {
if strings.HasPrefix(compareTo, "$") {
err = fmt.Errorf("parameterized type placeholder: %s", compareTo)
return
}
parts := strings.Split(compareTo, "/")
downPrefixCount := 0
for _, part := range parts {
@@ -124,6 +128,12 @@ func (g *Generator) RegisterCompareToNatives() {
"bitfield": BitfieldCompareTo,
"u8": ReturnInputCompareTo,
"i8": ReturnInputCompareTo,
"i16": ReturnInputCompareTo,
"i32": ReturnInputCompareTo,
"i64": ReturnInputCompareTo,
"u16": ReturnInputCompareTo,
"u32": ReturnInputCompareTo,
"string": ReturnInputCompareTo,
"bitflags": BitflagsCompareTo,
"switch": ReturnInputCompareTo,
"varlong": ReturnInputCompareTo,
+2
View File
@@ -634,6 +634,8 @@ func (g *Generator) RegisterDecoderNatives() {
"varlong": VarLongDecoder,
"anonymousNbt": DefaultDecoder,
"anonOptionalNbt": DefaultDecoder, // I have no idea what the difference is between these two
"optionalNbt": DefaultDecoder,
"nbt": DefaultDecoder,
"lpVec3": DefaultDecoder,
"UUID": UUIDDecoder,
"restBuffer": DefaultDecoder,
+2
View File
@@ -402,6 +402,8 @@ func (g *Generator) RegisterEncoderNatives() {
"varlong": VarLongEncoder,
"anonymousNbt": DefaultEncoder,
"anonOptionalNbt": DefaultEncoder, // I have no idea what the difference is between these two
"optionalNbt": DefaultEncoder,
"nbt": DefaultEncoder,
"UUID": UUIDEncoder,
"restBuffer": DefaultEncoder,
"lpVec3": DefaultEncoder,
+2
View File
@@ -200,6 +200,8 @@ func (g *Generator) RegisterNatives() {
"native": VisitDontGenerateType,
"anonymousNbt": MakeSelectorVisitor("nbt", "Anon"),
"anonOptionalNbt": MakeSelectorVisitor("nbt", "Anon"), // I have no idea what the difference is between these two
"optionalNbt": MakeSelectorVisitor("nbt", "Anon"),
"nbt": MakeSelectorVisitor("nbt", "Anon"),
"void": VoidType,
"bool": MakeIdentVisitor("bool"),
"u8": MakeIdentVisitor("uint8"),