J2 closes the trigger-gap discovered in J review (2026-05-27): J migrated CommandHelpWindow as a window but the v1.5.6 trigger-path was never ported. J2 restores it: - InputBar.cs adds ImGuiInputTextFlags.CallbackEdit + character-level callback that reads data.BufTextSpan, detects /-prefix, extracts command word, and calls _commandHelpWindow.Value.UpdateContent(desc) - AllCommands.cs (new file, 1:1 port from v1.5.6) populates a static Dictionary<string, TextCommand> from Sheets.TextCommandSheet at startup; Plugin.CommandManager.Commands is the fallback for non-hardcoded commands - CommandHelpWindow injected into InputBar via Lazy<T> ctor param to break the InputBar <-> CommandHelpWindow circular dep; PluginHostFactory DI-reg extended with the Lazy wrapper accordingly Closes the smoke-step-9 gap. Phase-3 windows are now all reachable end-to-end (R1 InputPreview, R2 CommandHelpWindow, R3 DebuggerWindow).
37 lines
1.3 KiB
C#
37 lines
1.3 KiB
C#
using Lumina.Excel.Sheets;
|
|
|
|
namespace HellionChat;
|
|
|
|
// Ported 1:1 from v1.5.6 ChatLogWindow.SetUpAllCommands. Provides a fast
|
|
// lookup from slash-command string to the game's TextCommand row so the
|
|
// InputBar callback can feed descriptions to CommandHelpWindow without
|
|
// hitting the sheet on every keystroke.
|
|
internal static class AllCommands
|
|
{
|
|
private static readonly Dictionary<string, TextCommand> Commands = BuildCommands();
|
|
|
|
private static Dictionary<string, TextCommand> BuildCommands()
|
|
{
|
|
var dict = new Dictionary<string, TextCommand>(StringComparer.Ordinal);
|
|
foreach (var command in Sheets.TextCommandSheet)
|
|
{
|
|
if (!command.Command.IsEmpty)
|
|
dict.TryAdd(command.Command.ToString(), command);
|
|
|
|
if (!command.ShortCommand.IsEmpty)
|
|
dict.TryAdd(command.ShortCommand.ToString(), command);
|
|
|
|
if (!command.Alias.IsEmpty)
|
|
dict.TryAdd(command.Alias.ToString(), command);
|
|
|
|
if (!command.ShortAlias.IsEmpty)
|
|
dict.TryAdd(command.ShortAlias.ToString(), command);
|
|
}
|
|
|
|
return dict;
|
|
}
|
|
|
|
public static bool TryGetValue(string command, out TextCommand textCommand) =>
|
|
Commands.TryGetValue(command, out textCommand);
|
|
}
|