mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
DeclareCommand: Fix 1.19.4 crash (#2474)
This commit is contained in:
parent
0ff64910f7
commit
09b3ec1a81
1 changed files with 103 additions and 76 deletions
|
|
@ -25,57 +25,58 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
|
|
||||||
string? name = ((flags & 0x03) == 1 || (flags & 0x03) == 2) ? dataTypes.ReadNextString(packetData) : null;
|
string? name = ((flags & 0x03) == 1 || (flags & 0x03) == 2) ? dataTypes.ReadNextString(packetData) : null;
|
||||||
|
|
||||||
int paserId = ((flags & 0x03) == 2) ? dataTypes.ReadNextVarInt(packetData) : -1;
|
int parserId = ((flags & 0x03) == 2) ? dataTypes.ReadNextVarInt(packetData) : -1;
|
||||||
Paser? paser = null;
|
Parser? parser = null;
|
||||||
if ((flags & 0x03) == 2)
|
if ((flags & 0x03) == 2)
|
||||||
{
|
{
|
||||||
if (protocolVersion <= Protocol18Handler.MC_1_19_2_Version)
|
if (protocolVersion <= Protocol18Handler.MC_1_19_2_Version)
|
||||||
paser = paserId switch
|
parser = parserId switch
|
||||||
{
|
{
|
||||||
1 => new PaserFloat(dataTypes, packetData),
|
1 => new ParserFloat(dataTypes, packetData),
|
||||||
2 => new PaserDouble(dataTypes, packetData),
|
2 => new ParserDouble(dataTypes, packetData),
|
||||||
3 => new PaserInteger(dataTypes, packetData),
|
3 => new ParserInteger(dataTypes, packetData),
|
||||||
4 => new PaserLong(dataTypes, packetData),
|
4 => new ParserLong(dataTypes, packetData),
|
||||||
5 => new PaserString(dataTypes, packetData),
|
5 => new ParserString(dataTypes, packetData),
|
||||||
6 => new PaserEntity(dataTypes, packetData),
|
6 => new ParserEntity(dataTypes, packetData),
|
||||||
8 => new PaserBlockPos(dataTypes, packetData),
|
8 => new ParserBlockPos(dataTypes, packetData),
|
||||||
9 => new PaserColumnPos(dataTypes, packetData),
|
9 => new ParserColumnPos(dataTypes, packetData),
|
||||||
10 => new PaserVec3(dataTypes, packetData),
|
10 => new ParserVec3(dataTypes, packetData),
|
||||||
11 => new PaserVec2(dataTypes, packetData),
|
11 => new ParserVec2(dataTypes, packetData),
|
||||||
18 => new PaserMessage(dataTypes, packetData),
|
18 => new ParserMessage(dataTypes, packetData),
|
||||||
27 => new PaserRotation(dataTypes, packetData),
|
27 => new ParserRotation(dataTypes, packetData),
|
||||||
29 => new PaserScoreHolder(dataTypes, packetData),
|
29 => new ParserScoreHolder(dataTypes, packetData),
|
||||||
43 => new PaserResourceOrTag(dataTypes, packetData),
|
43 => new ParserResourceOrTag(dataTypes, packetData),
|
||||||
44 => new PaserResource(dataTypes, packetData),
|
44 => new ParserResource(dataTypes, packetData),
|
||||||
_ => new PaserEmpty(dataTypes, packetData),
|
_ => new ParserEmpty(dataTypes, packetData),
|
||||||
};
|
};
|
||||||
else // protocolVersion >= MC_1_19_3_Version
|
else // protocolVersion >= MC_1_19_3_Version
|
||||||
paser = paserId switch
|
parser = parserId switch
|
||||||
{
|
{
|
||||||
1 => new PaserFloat(dataTypes, packetData),
|
1 => new ParserFloat(dataTypes, packetData),
|
||||||
2 => new PaserDouble(dataTypes, packetData),
|
2 => new ParserDouble(dataTypes, packetData),
|
||||||
3 => new PaserInteger(dataTypes, packetData),
|
3 => new ParserInteger(dataTypes, packetData),
|
||||||
4 => new PaserLong(dataTypes, packetData),
|
4 => new ParserLong(dataTypes, packetData),
|
||||||
5 => new PaserString(dataTypes, packetData),
|
5 => new ParserString(dataTypes, packetData),
|
||||||
6 => new PaserEntity(dataTypes, packetData),
|
6 => new ParserEntity(dataTypes, packetData),
|
||||||
8 => new PaserBlockPos(dataTypes, packetData),
|
8 => new ParserBlockPos(dataTypes, packetData),
|
||||||
9 => new PaserColumnPos(dataTypes, packetData),
|
9 => new ParserColumnPos(dataTypes, packetData),
|
||||||
10 => new PaserVec3(dataTypes, packetData),
|
10 => new ParserVec3(dataTypes, packetData),
|
||||||
11 => new PaserVec2(dataTypes, packetData),
|
11 => new ParserVec2(dataTypes, packetData),
|
||||||
18 => new PaserMessage(dataTypes, packetData),
|
18 => new ParserMessage(dataTypes, packetData),
|
||||||
27 => new PaserRotation(dataTypes, packetData),
|
27 => new ParserRotation(dataTypes, packetData),
|
||||||
29 => new PaserScoreHolder(dataTypes, packetData),
|
29 => new ParserScoreHolder(dataTypes, packetData),
|
||||||
41 => new PaserResourceOrTag(dataTypes, packetData),
|
40 => new ParserTime(dataTypes, packetData),
|
||||||
42 => new PaserResourceOrTag(dataTypes, packetData),
|
41 => new ParserResourceOrTag(dataTypes, packetData),
|
||||||
43 => new PaserResource(dataTypes, packetData),
|
42 => new ParserResourceOrTag(dataTypes, packetData),
|
||||||
44 => new PaserResource(dataTypes, packetData),
|
43 => new ParserResource(dataTypes, packetData),
|
||||||
_ => new PaserEmpty(dataTypes, packetData),
|
44 => new ParserResource(dataTypes, packetData),
|
||||||
|
_ => new ParserEmpty(dataTypes, packetData),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
string? suggestionsType = ((flags & 0x10) == 0x10) ? dataTypes.ReadNextString(packetData) : null;
|
string? suggestionsType = ((flags & 0x10) == 0x10) ? dataTypes.ReadNextString(packetData) : null;
|
||||||
|
|
||||||
Nodes[i] = new(flags, childs, redirectNode, name, paser, suggestionsType);
|
Nodes[i] = new(flags, childs, redirectNode, name, parser, suggestionsType);
|
||||||
}
|
}
|
||||||
RootIdx = dataTypes.ReadNextVarInt(packetData);
|
RootIdx = dataTypes.ReadNextVarInt(packetData);
|
||||||
|
|
||||||
|
|
@ -149,7 +150,7 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
public int[] Clildren;
|
public int[] Clildren;
|
||||||
public int RedirectNode;
|
public int RedirectNode;
|
||||||
public string? Name;
|
public string? Name;
|
||||||
public Paser? Paser;
|
public Parser? Paser;
|
||||||
public string? SuggestionsType;
|
public string? SuggestionsType;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -157,7 +158,7 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
int[] Clildren,
|
int[] Clildren,
|
||||||
int RedirectNode = -1,
|
int RedirectNode = -1,
|
||||||
string? Name = null,
|
string? Name = null,
|
||||||
Paser? Paser = null,
|
Parser? Paser = null,
|
||||||
string? SuggestionsType = null)
|
string? SuggestionsType = null)
|
||||||
{
|
{
|
||||||
this.Flags = Flags;
|
this.Flags = Flags;
|
||||||
|
|
@ -169,7 +170,7 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal abstract class Paser
|
internal abstract class Parser
|
||||||
{
|
{
|
||||||
public abstract string GetName();
|
public abstract string GetName();
|
||||||
|
|
||||||
|
|
@ -178,10 +179,10 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
public abstract bool Check(string text);
|
public abstract bool Check(string text);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserEmpty : Paser
|
internal class ParserEmpty : Parser
|
||||||
{
|
{
|
||||||
|
|
||||||
public PaserEmpty(DataTypes dataTypes, Queue<byte> packetData) { }
|
public ParserEmpty(DataTypes dataTypes, Queue<byte> packetData) { }
|
||||||
|
|
||||||
public override bool Check(string text)
|
public override bool Check(string text)
|
||||||
{
|
{
|
||||||
|
|
@ -199,12 +200,12 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserFloat : Paser
|
internal class ParserFloat : Parser
|
||||||
{
|
{
|
||||||
private byte Flags;
|
private byte Flags;
|
||||||
private float Min = float.MinValue, Max = float.MaxValue;
|
private float Min = float.MinValue, Max = float.MaxValue;
|
||||||
|
|
||||||
public PaserFloat(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserFloat(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Flags = dataTypes.ReadNextByte(packetData);
|
Flags = dataTypes.ReadNextByte(packetData);
|
||||||
if ((Flags & 0x01) > 0)
|
if ((Flags & 0x01) > 0)
|
||||||
|
|
@ -229,12 +230,12 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserDouble : Paser
|
internal class ParserDouble : Parser
|
||||||
{
|
{
|
||||||
private byte Flags;
|
private byte Flags;
|
||||||
private double Min = double.MinValue, Max = double.MaxValue;
|
private double Min = double.MinValue, Max = double.MaxValue;
|
||||||
|
|
||||||
public PaserDouble(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserDouble(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Flags = dataTypes.ReadNextByte(packetData);
|
Flags = dataTypes.ReadNextByte(packetData);
|
||||||
if ((Flags & 0x01) > 0)
|
if ((Flags & 0x01) > 0)
|
||||||
|
|
@ -259,12 +260,12 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserInteger : Paser
|
internal class ParserInteger : Parser
|
||||||
{
|
{
|
||||||
private byte Flags;
|
private byte Flags;
|
||||||
private int Min = int.MinValue, Max = int.MaxValue;
|
private int Min = int.MinValue, Max = int.MaxValue;
|
||||||
|
|
||||||
public PaserInteger(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserInteger(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Flags = dataTypes.ReadNextByte(packetData);
|
Flags = dataTypes.ReadNextByte(packetData);
|
||||||
if ((Flags & 0x01) > 0)
|
if ((Flags & 0x01) > 0)
|
||||||
|
|
@ -289,12 +290,12 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserLong : Paser
|
internal class ParserLong : Parser
|
||||||
{
|
{
|
||||||
private byte Flags;
|
private byte Flags;
|
||||||
private long Min = long.MinValue, Max = long.MaxValue;
|
private long Min = long.MinValue, Max = long.MaxValue;
|
||||||
|
|
||||||
public PaserLong(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserLong(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Flags = dataTypes.ReadNextByte(packetData);
|
Flags = dataTypes.ReadNextByte(packetData);
|
||||||
if ((Flags & 0x01) > 0)
|
if ((Flags & 0x01) > 0)
|
||||||
|
|
@ -319,13 +320,13 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserString : Paser
|
internal class ParserString : Parser
|
||||||
{
|
{
|
||||||
private StringType Type;
|
private StringType Type;
|
||||||
|
|
||||||
private enum StringType { SINGLE_WORD, QUOTABLE_PHRASE, GREEDY_PHRASE };
|
private enum StringType { SINGLE_WORD, QUOTABLE_PHRASE, GREEDY_PHRASE };
|
||||||
|
|
||||||
public PaserString(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserString(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Type = (StringType)dataTypes.ReadNextVarInt(packetData);
|
Type = (StringType)dataTypes.ReadNextVarInt(packetData);
|
||||||
}
|
}
|
||||||
|
|
@ -346,11 +347,11 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserEntity : Paser
|
internal class ParserEntity : Parser
|
||||||
{
|
{
|
||||||
private byte Flags;
|
private byte Flags;
|
||||||
|
|
||||||
public PaserEntity(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserEntity(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Flags = dataTypes.ReadNextByte(packetData);
|
Flags = dataTypes.ReadNextByte(packetData);
|
||||||
}
|
}
|
||||||
|
|
@ -371,10 +372,10 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserBlockPos : Paser
|
internal class ParserBlockPos : Parser
|
||||||
{
|
{
|
||||||
|
|
||||||
public PaserBlockPos(DataTypes dataTypes, Queue<byte> packetData) { }
|
public ParserBlockPos(DataTypes dataTypes, Queue<byte> packetData) { }
|
||||||
|
|
||||||
public override bool Check(string text)
|
public override bool Check(string text)
|
||||||
{
|
{
|
||||||
|
|
@ -392,10 +393,10 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserColumnPos : Paser
|
internal class ParserColumnPos : Parser
|
||||||
{
|
{
|
||||||
|
|
||||||
public PaserColumnPos(DataTypes dataTypes, Queue<byte> packetData) { }
|
public ParserColumnPos(DataTypes dataTypes, Queue<byte> packetData) { }
|
||||||
|
|
||||||
public override bool Check(string text)
|
public override bool Check(string text)
|
||||||
{
|
{
|
||||||
|
|
@ -413,10 +414,10 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserVec3 : Paser
|
internal class ParserVec3 : Parser
|
||||||
{
|
{
|
||||||
|
|
||||||
public PaserVec3(DataTypes dataTypes, Queue<byte> packetData) { }
|
public ParserVec3(DataTypes dataTypes, Queue<byte> packetData) { }
|
||||||
|
|
||||||
public override bool Check(string text)
|
public override bool Check(string text)
|
||||||
{
|
{
|
||||||
|
|
@ -434,10 +435,10 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserVec2 : Paser
|
internal class ParserVec2 : Parser
|
||||||
{
|
{
|
||||||
|
|
||||||
public PaserVec2(DataTypes dataTypes, Queue<byte> packetData) { }
|
public ParserVec2(DataTypes dataTypes, Queue<byte> packetData) { }
|
||||||
|
|
||||||
public override bool Check(string text)
|
public override bool Check(string text)
|
||||||
{
|
{
|
||||||
|
|
@ -455,10 +456,10 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserRotation : Paser
|
internal class ParserRotation : Parser
|
||||||
{
|
{
|
||||||
|
|
||||||
public PaserRotation(DataTypes dataTypes, Queue<byte> packetData) { }
|
public ParserRotation(DataTypes dataTypes, Queue<byte> packetData) { }
|
||||||
|
|
||||||
public override bool Check(string text)
|
public override bool Check(string text)
|
||||||
{
|
{
|
||||||
|
|
@ -476,9 +477,9 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserMessage : Paser
|
internal class ParserMessage : Parser
|
||||||
{
|
{
|
||||||
public PaserMessage(DataTypes dataTypes, Queue<byte> packetData) { }
|
public ParserMessage(DataTypes dataTypes, Queue<byte> packetData) { }
|
||||||
|
|
||||||
public override bool Check(string text)
|
public override bool Check(string text)
|
||||||
{
|
{
|
||||||
|
|
@ -496,11 +497,11 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserScoreHolder : Paser
|
internal class ParserScoreHolder : Parser
|
||||||
{
|
{
|
||||||
private byte Flags;
|
private byte Flags;
|
||||||
|
|
||||||
public PaserScoreHolder(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserScoreHolder(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Flags = dataTypes.ReadNextByte(packetData);
|
Flags = dataTypes.ReadNextByte(packetData);
|
||||||
}
|
}
|
||||||
|
|
@ -521,11 +522,11 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserRange : Paser
|
internal class ParserRange : Parser
|
||||||
{
|
{
|
||||||
private bool Decimals;
|
private bool Decimals;
|
||||||
|
|
||||||
public PaserRange(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserRange(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Decimals = dataTypes.ReadNextBool(packetData);
|
Decimals = dataTypes.ReadNextBool(packetData);
|
||||||
}
|
}
|
||||||
|
|
@ -546,11 +547,11 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserResourceOrTag : Paser
|
internal class ParserResourceOrTag : Parser
|
||||||
{
|
{
|
||||||
private string Registry;
|
private string Registry;
|
||||||
|
|
||||||
public PaserResourceOrTag(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserResourceOrTag(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Registry = dataTypes.ReadNextString(packetData);
|
Registry = dataTypes.ReadNextString(packetData);
|
||||||
}
|
}
|
||||||
|
|
@ -571,11 +572,11 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PaserResource : Paser
|
internal class ParserResource : Parser
|
||||||
{
|
{
|
||||||
private string Registry;
|
private string Registry;
|
||||||
|
|
||||||
public PaserResource(DataTypes dataTypes, Queue<byte> packetData)
|
public ParserResource(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
{
|
{
|
||||||
Registry = dataTypes.ReadNextString(packetData);
|
Registry = dataTypes.ReadNextString(packetData);
|
||||||
}
|
}
|
||||||
|
|
@ -595,5 +596,31 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
||||||
return "minecraft:resource";
|
return "minecraft:resource";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Undocumented parser type for 1.19.4+
|
||||||
|
/// </summary>
|
||||||
|
internal class ParserTime : Parser
|
||||||
|
{
|
||||||
|
public ParserTime(DataTypes dataTypes, Queue<byte> packetData)
|
||||||
|
{
|
||||||
|
dataTypes.ReadNextInt(packetData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Check(string text)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetArgCnt()
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string GetName()
|
||||||
|
{
|
||||||
|
return "minecraft:time";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue