mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
Implement command completion suggestions.
This commit is contained in:
parent
5d2589b10f
commit
84cf749344
115 changed files with 4684 additions and 2695 deletions
|
|
@ -19,10 +19,11 @@ using MinecraftClient.Mapping.EntityPalettes;
|
|||
using MinecraftClient.Protocol.Handlers.Forge;
|
||||
using MinecraftClient.Protocol.Handlers.packet.s2c;
|
||||
using MinecraftClient.Protocol.Handlers.PacketPalettes;
|
||||
using MinecraftClient.Protocol.Keys;
|
||||
using MinecraftClient.Protocol.Message;
|
||||
using MinecraftClient.Protocol.ProfileKey;
|
||||
using MinecraftClient.Protocol.Session;
|
||||
using MinecraftClient.Proxy;
|
||||
using MinecraftClient.Scripting;
|
||||
using static MinecraftClient.Settings;
|
||||
|
||||
namespace MinecraftClient.Protocol.Handlers
|
||||
|
|
@ -64,9 +65,7 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
internal const int MC_1_19_2_Version = 760;
|
||||
|
||||
private int compression_treshold = 0;
|
||||
private bool autocomplete_received = false;
|
||||
private int autocomplete_transaction_id = 0;
|
||||
private readonly List<string> autocomplete_result = new();
|
||||
private readonly Dictionary<int, short> window_actions = new();
|
||||
private bool login_phase = true;
|
||||
private readonly int protocolVersion;
|
||||
|
|
@ -1325,6 +1324,7 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
}
|
||||
break;
|
||||
case PacketTypesIn.TabComplete:
|
||||
int old_transaction_id = autocomplete_transaction_id;
|
||||
if (protocolVersion >= MC_1_13_Version)
|
||||
{
|
||||
autocomplete_transaction_id = dataTypes.ReadNextVarInt(packetData);
|
||||
|
|
@ -1333,20 +1333,19 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
}
|
||||
|
||||
int autocomplete_count = dataTypes.ReadNextVarInt(packetData);
|
||||
autocomplete_result.Clear();
|
||||
|
||||
string[] autocomplete_result = new string[autocomplete_count];
|
||||
for (int i = 0; i < autocomplete_count; i++)
|
||||
{
|
||||
autocomplete_result.Add(dataTypes.ReadNextString(packetData));
|
||||
autocomplete_result[i] = dataTypes.ReadNextString(packetData);
|
||||
if (protocolVersion >= MC_1_13_Version)
|
||||
{
|
||||
// Skip optional tooltip for each tab-complete result
|
||||
// Skip optional tooltip for each tab-complete resul`t
|
||||
if (dataTypes.ReadNextBool(packetData))
|
||||
dataTypes.SkipNextString(packetData);
|
||||
}
|
||||
}
|
||||
|
||||
autocomplete_received = true;
|
||||
handler.OnAutoCompleteDone(old_transaction_id, autocomplete_result);
|
||||
break;
|
||||
case PacketTypesIn.PluginMessage:
|
||||
String channel = dataTypes.ReadNextString(packetData);
|
||||
|
|
@ -2110,18 +2109,10 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
/// </summary>
|
||||
/// <param name="BehindCursor">Text behind cursor</param>
|
||||
/// <returns>Completed text</returns>
|
||||
IEnumerable<string> IAutoComplete.AutoComplete(string BehindCursor)
|
||||
int IAutoComplete.AutoComplete(string BehindCursor)
|
||||
{
|
||||
var sug = McClient.dispatcher.GetCompletionSuggestions(McClient.dispatcher.Parse(BehindCursor[1..], McClient.cmd_source));
|
||||
sug.Wait();
|
||||
foreach (var hint in sug.Result.List)
|
||||
{
|
||||
log.Info(hint);
|
||||
}
|
||||
//log.Info(McClient.dispatcher.GetSmartUsage(McClient.dispatcher.Parse(BehindCursor, McClient.cmd_source), McClient.cmd_source));
|
||||
|
||||
if (String.IsNullOrEmpty(BehindCursor))
|
||||
return Array.Empty<string>();
|
||||
if (string.IsNullOrEmpty(BehindCursor))
|
||||
return -1;
|
||||
|
||||
byte[] transaction_id = dataTypes.GetVarInt(autocomplete_transaction_id);
|
||||
byte[] assume_command = new byte[] { 0x00 };
|
||||
|
|
@ -2134,16 +2125,14 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
if (protocolVersion >= MC_1_13_Version)
|
||||
{
|
||||
tabcomplete_packet = dataTypes.ConcatBytes(tabcomplete_packet, transaction_id);
|
||||
tabcomplete_packet = dataTypes.ConcatBytes(tabcomplete_packet, dataTypes.GetString(BehindCursor));
|
||||
tabcomplete_packet = dataTypes.ConcatBytes(tabcomplete_packet, dataTypes.GetString(BehindCursor.Replace(' ', (char)0x00)));
|
||||
}
|
||||
else
|
||||
{
|
||||
tabcomplete_packet = dataTypes.ConcatBytes(tabcomplete_packet, dataTypes.GetString(BehindCursor));
|
||||
|
||||
if (protocolVersion >= MC_1_9_Version)
|
||||
{
|
||||
tabcomplete_packet = dataTypes.ConcatBytes(tabcomplete_packet, assume_command);
|
||||
}
|
||||
|
||||
tabcomplete_packet = dataTypes.ConcatBytes(tabcomplete_packet, has_position);
|
||||
}
|
||||
|
|
@ -2152,22 +2141,9 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
{
|
||||
tabcomplete_packet = dataTypes.ConcatBytes(dataTypes.GetString(BehindCursor));
|
||||
}
|
||||
|
||||
autocomplete_received = false;
|
||||
autocomplete_result.Clear();
|
||||
autocomplete_result.Add(BehindCursor);
|
||||
ConsoleIO.AutoCompleteDone = false;
|
||||
SendPacket(PacketTypesOut.TabComplete, tabcomplete_packet);
|
||||
|
||||
int wait_left = 50; //do not wait more than 5 seconds (50 * 100 ms)
|
||||
ThreadStart start = new(delegate
|
||||
{
|
||||
while (wait_left > 0 && !autocomplete_received) { System.Threading.Thread.Sleep(100); wait_left--; }
|
||||
if (autocomplete_result.Count > 0)
|
||||
ConsoleIO.WriteLineFormatted("§8" + String.Join(" ", autocomplete_result), false);
|
||||
});
|
||||
Thread t1 = new(start);
|
||||
t1.Start();
|
||||
return autocomplete_result;
|
||||
return autocomplete_transaction_id;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue