Skip to content

Commit ac9a70c

Browse files
authored
fix: IndexOutOfRange on packet reading (Forge)
fix: IndexOutOfRange on packet reading (Forge)
2 parents 5f4227a + 4bb25c3 commit ac9a70c

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public static void Read(DataTypes dataTypes, Queue<byte> packetData, int protoco
4747
29 => new ParserScoreHolder(dataTypes, packetData),
4848
43 => new ParserResourceOrTag(dataTypes, packetData),
4949
44 => new ParserResource(dataTypes, packetData),
50+
50 => new ParserForgeEnum(dataTypes, packetData),
5051
_ => new ParserEmpty(dataTypes, packetData),
5152
};
5253
else if (protocolVersion <= Protocol18Handler.MC_1_19_3_Version) // 1.19.3
@@ -69,6 +70,7 @@ public static void Read(DataTypes dataTypes, Queue<byte> packetData, int protoco
6970
42 => new ParserResourceOrTag(dataTypes, packetData),
7071
43 => new ParserResource(dataTypes, packetData),
7172
44 => new ParserResource(dataTypes, packetData),
73+
50 => new ParserForgeEnum(dataTypes, packetData),
7274
_ => new ParserEmpty(dataTypes, packetData),
7375
};
7476
else if (protocolVersion <= Protocol18Handler.MC_1_20_2_Version)// 1.19.4 - 1.20.2
@@ -92,6 +94,13 @@ public static void Read(DataTypes dataTypes, Queue<byte> packetData, int protoco
9294
42 => new ParserResourceOrTag(dataTypes, packetData),
9395
43 => new ParserResource(dataTypes, packetData),
9496
44 => new ParserResource(dataTypes, packetData),
97+
50 => protocolVersion == Protocol18Handler.MC_1_19_4_Version ?
98+
new ParserForgeEnum(dataTypes, packetData) :
99+
new ParserEmpty(dataTypes, packetData),
100+
51 => (protocolVersion >= Protocol18Handler.MC_1_20_Version &&
101+
protocolVersion <= Protocol18Handler.MC_1_20_2_Version) ? // 1.20 - 1.20.2
102+
new ParserForgeEnum(dataTypes, packetData) :
103+
new ParserEmpty(dataTypes, packetData),
95104
_ => new ParserEmpty(dataTypes, packetData),
96105
};
97106
else // 1.20.3+
@@ -115,6 +124,7 @@ public static void Read(DataTypes dataTypes, Queue<byte> packetData, int protoco
115124
43 => new ParserResourceOrTag(dataTypes, packetData),
116125
44 => new ParserResource(dataTypes, packetData),
117126
45 => new ParserResource(dataTypes, packetData),
127+
52 => new ParserForgeEnum(dataTypes, packetData),
118128
_ => new ParserEmpty(dataTypes, packetData),
119129
};
120130
}
@@ -670,5 +680,28 @@ public override string GetName()
670680
return "minecraft:time";
671681
}
672682
}
683+
684+
internal class ParserForgeEnum : Parser
685+
{
686+
public ParserForgeEnum(DataTypes dataTypes, Queue<byte> packetData)
687+
{
688+
dataTypes.ReadNextString(packetData);
689+
}
690+
691+
public override bool Check(string text)
692+
{
693+
return true;
694+
}
695+
696+
public override int GetArgCnt()
697+
{
698+
return 1;
699+
}
700+
701+
public override string GetName()
702+
{
703+
return "forge:enum";
704+
}
705+
}
673706
}
674707
}

0 commit comments

Comments
 (0)