Files
RobustToolbox/Robust.Shared/Console/Commands/DumpEventTablesCommand.cs
2023-09-11 09:42:55 +10:00

57 lines
1.8 KiB
C#

using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
namespace Robust.Shared.Console.Commands;
internal sealed class DumpEventTablesCommand : LocalizedCommands
{
[Dependency] private readonly EntityManager _entities = default!;
[Dependency] private readonly IComponentFactory _componentFactory = default!;
public override string Command => "dump_event_tables";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
if (args.Length < 1)
{
shell.WriteError(Loc.GetString("cmd-dump_event_tables-missing-arg-entity"));
return;
}
if (!NetEntity.TryParse(args[0], out var entityNet) ||
!_entities.TryGetEntity(entityNet, out var entity) ||
!_entities.EntityExists(entity))
{
shell.WriteError(Loc.GetString("cmd-dump_event_tables-error-entity"));
return;
}
var eventBus = (EntityEventBus)_entities.EventBus;
var table = eventBus._entEventTables[entity.Value];
foreach (var (evType, comps) in table.EventIndices)
{
shell.WriteLine($"{evType}:");
var idx = comps;
while (idx != -1)
{
ref var entry = ref table.ComponentLists[idx];
idx = entry.Next;
var reg = _componentFactory.IdxToType(entry.Component);
shell.WriteLine($" {reg.Name}");
}
}
}
public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
{
if (args.Length == 1)
return CompletionResult.FromHint(Loc.GetString("cmd-dump_event_tables-arg-entity"));
return CompletionResult.Empty;
}
}