ultimate-unreal-engine-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +729 -0
  2. package/dist/build/error-parser.js +51 -0
  3. package/dist/build/fix-suggester.js +84 -0
  4. package/dist/build/ubt-runner.js +146 -0
  5. package/dist/cli.js +13 -0
  6. package/dist/config.js +8 -0
  7. package/dist/docs/data/ue57-api.js +228 -0
  8. package/dist/docs/doc-index.js +110 -0
  9. package/dist/docs/types.js +4 -0
  10. package/dist/generators/class-generator.js +363 -0
  11. package/dist/generators/file-modifier.js +276 -0
  12. package/dist/generators/uht-validator.js +177 -0
  13. package/dist/index.js +89 -0
  14. package/dist/parsers/cpp-class-index.js +230 -0
  15. package/dist/parsers/cpp-parser.js +369 -0
  16. package/dist/parsers/ini-parser.js +216 -0
  17. package/dist/parsers/uproject-parser.js +130 -0
  18. package/dist/plugin-bridge/client.js +217 -0
  19. package/dist/plugin-bridge/protocol.js +6 -0
  20. package/dist/plugin-bridge/retry.js +23 -0
  21. package/dist/setup.js +209 -0
  22. package/dist/tools/ai-systems/index.js +247 -0
  23. package/dist/tools/ai-systems/types.js +4 -0
  24. package/dist/tools/animation/index.js +241 -0
  25. package/dist/tools/animation/types.js +4 -0
  26. package/dist/tools/audio/index.js +204 -0
  27. package/dist/tools/audio/types.js +4 -0
  28. package/dist/tools/blueprint/index.js +495 -0
  29. package/dist/tools/blueprint/types.js +4 -0
  30. package/dist/tools/build/index.js +163 -0
  31. package/dist/tools/chaos/index.js +230 -0
  32. package/dist/tools/chaos/types.js +4 -0
  33. package/dist/tools/collision-physics/index.js +211 -0
  34. package/dist/tools/config/index.js +288 -0
  35. package/dist/tools/cpp/index.js +305 -0
  36. package/dist/tools/docs/index.js +251 -0
  37. package/dist/tools/editor/index.js +242 -0
  38. package/dist/tools/gas/index.js +222 -0
  39. package/dist/tools/gas/types.js +5 -0
  40. package/dist/tools/import-export/index.js +218 -0
  41. package/dist/tools/input/index.js +146 -0
  42. package/dist/tools/known-issues/index.js +88 -0
  43. package/dist/tools/known-issues/middleware.js +55 -0
  44. package/dist/tools/known-issues/store.js +125 -0
  45. package/dist/tools/livelink/index.js +203 -0
  46. package/dist/tools/livelink/types.js +4 -0
  47. package/dist/tools/material/index.js +190 -0
  48. package/dist/tools/motion-design/index.js +251 -0
  49. package/dist/tools/motion-design/types.js +6 -0
  50. package/dist/tools/movie-render/index.js +220 -0
  51. package/dist/tools/networking/index.js +149 -0
  52. package/dist/tools/pcg/index.js +164 -0
  53. package/dist/tools/selection/index.js +180 -0
  54. package/dist/tools/sequencer/index.js +218 -0
  55. package/dist/tools/validation/index.js +183 -0
  56. package/dist/tools/validation/types.js +4 -0
  57. package/dist/tools/viewport/index.js +310 -0
  58. package/dist/tools/worldpartition/index.js +226 -0
  59. package/dist/tools/worldpartition/types.js +4 -0
  60. package/dist/utils/execFileNoThrow.js +40 -0
  61. package/dist/utils/logger.js +27 -0
  62. package/dist/utils/path-guard.js +26 -0
  63. package/package.json +40 -0
  64. package/unreal-plugin/MCPBridge/MCPBridge.uplugin +29 -0
  65. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/MCPBridgeEditor.Build.cs +68 -0
  66. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAICommands.cpp +919 -0
  67. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAICommands.h +23 -0
  68. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPActorCommands.cpp +415 -0
  69. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPActorCommands.h +16 -0
  70. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAnimationCommands.cpp +653 -0
  71. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAnimationCommands.h +24 -0
  72. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAssetCommands.cpp +290 -0
  73. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAssetCommands.h +17 -0
  74. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAudioCommands.cpp +624 -0
  75. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAudioCommands.h +22 -0
  76. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintHandlers.cpp +616 -0
  77. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintHandlers.h +25 -0
  78. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintWriteHandlers.cpp +744 -0
  79. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintWriteHandlers.h +24 -0
  80. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBridgeEditor.cpp +23 -0
  81. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBridgeSubsystem.cpp +149 -0
  82. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBridgeSubsystem.h +38 -0
  83. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPChaosCommands.cpp +771 -0
  84. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPChaosCommands.h +22 -0
  85. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPCollisionPhysicsCommands.cpp +749 -0
  86. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPCollisionPhysicsCommands.h +22 -0
  87. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPEditorStateCommands.cpp +172 -0
  88. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPEditorStateCommands.h +16 -0
  89. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPGASCommands.cpp +715 -0
  90. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPGASCommands.h +22 -0
  91. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPImportExportCommands.cpp +679 -0
  92. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPImportExportCommands.h +22 -0
  93. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPInputHandlers.cpp +381 -0
  94. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPInputHandlers.h +24 -0
  95. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPLiveLinkCommands.cpp +504 -0
  96. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPLiveLinkCommands.h +22 -0
  97. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMaterialCommands.cpp +511 -0
  98. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMaterialCommands.h +22 -0
  99. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMotionDesignCommands.cpp +1110 -0
  100. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMotionDesignCommands.h +28 -0
  101. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMovieRenderCommands.cpp +590 -0
  102. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMovieRenderCommands.h +16 -0
  103. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPNetworkingCommands.cpp +482 -0
  104. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPNetworkingCommands.h +16 -0
  105. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPPieCommands.cpp +338 -0
  106. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPPieCommands.h +16 -0
  107. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSelectionCommands.cpp +677 -0
  108. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSelectionCommands.h +22 -0
  109. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSequencerCommands.cpp +721 -0
  110. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSequencerCommands.h +16 -0
  111. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPValidationCommands.cpp +368 -0
  112. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPValidationCommands.h +22 -0
  113. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPViewportCommands.cpp +1208 -0
  114. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPViewportCommands.h +29 -0
  115. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPWorldPartitionCommands.cpp +822 -0
  116. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPWorldPartitionCommands.h +23 -0
  117. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Public/MCPBridgeEditor.h +14 -0
  118. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/MCPBridgeRuntime.Build.cs +28 -0
  119. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Private/MCPBridgeRuntime.cpp +22 -0
  120. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Private/MCPCommandRouter.cpp +118 -0
  121. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Private/MCPTcpServer.cpp +196 -0
  122. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Public/MCPBridgeRuntime.h +15 -0
  123. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Public/MCPCommandRouter.h +55 -0
  124. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Public/MCPTcpServer.h +59 -0
@@ -0,0 +1,51 @@
1
+ // src/build/error-parser.ts
2
+ // Pure-logic module for parsing compiler diagnostic lines from UBT stdout/stderr.
3
+ // No I/O, no logging, no side effects.
4
+ // MSVC format: C:\path\File.cpp(42,7): error C2061: message
5
+ // MSVC variant: C:\path\File.cpp(10): warning C4668: message
6
+ const MSVC_RE = /^(.+?)\((\d+)(?:,(\d+))?\)\s*:\s*(error|warning|note)\s+(C\d+):\s*(.+)$/;
7
+ // Clang format: /home/user/File.cpp:15:3: error: message
8
+ const CLANG_RE = /^(.+?):(\d+):(\d+):\s*(error|warning|note):\s*(.+)$/;
9
+ /**
10
+ * Parse raw lines from UBT stdout/stderr into structured BuildError objects.
11
+ *
12
+ * Lines that match neither the MSVC nor Clang diagnostic format are silently
13
+ * discarded (blank lines, UBT progress messages, continuation lines, linker
14
+ * summaries, etc.).
15
+ *
16
+ * @param lines - Raw text lines from UBT output.
17
+ * @returns Array of matched BuildError objects, one per recognised diagnostic line.
18
+ */
19
+ export function parseErrors(lines) {
20
+ const results = [];
21
+ for (const line of lines) {
22
+ // Try MSVC first -- parenthesis-based format avoids false matches on Windows
23
+ // drive-letter colons (e.g. "C:\path").
24
+ const msvc = MSVC_RE.exec(line);
25
+ if (msvc !== null) {
26
+ results.push({
27
+ file: msvc[1],
28
+ line: parseInt(msvc[2], 10),
29
+ column: msvc[3] !== undefined ? parseInt(msvc[3], 10) : 0,
30
+ severity: msvc[4],
31
+ code: msvc[5],
32
+ message: msvc[6],
33
+ });
34
+ continue;
35
+ }
36
+ // Try Clang format next.
37
+ const clang = CLANG_RE.exec(line);
38
+ if (clang !== null) {
39
+ results.push({
40
+ file: clang[1],
41
+ line: parseInt(clang[2], 10),
42
+ column: parseInt(clang[3], 10),
43
+ severity: clang[4],
44
+ code: '',
45
+ message: clang[5],
46
+ });
47
+ }
48
+ // Non-matching lines are silently discarded.
49
+ }
50
+ return results;
51
+ }
@@ -0,0 +1,84 @@
1
+ // src/build/fix-suggester.ts
2
+ // Pure-logic module for mapping structured BuildErrors to actionable fix suggestions.
3
+ // No I/O, no logging, no side effects.
4
+ // ---------------------------------------------------------------------------
5
+ // Internal helpers
6
+ // ---------------------------------------------------------------------------
7
+ /**
8
+ * Extract the first UE-style type name from a compiler message.
9
+ * UE types start with one of A, U, F, E, I followed by an uppercase letter.
10
+ */
11
+ function extractUeType(msg) {
12
+ return /\b([AUFEI][A-Z]\w+)/.exec(msg)?.[1] ?? null;
13
+ }
14
+ // Pattern regexes compiled once at module load.
15
+ const RE_MISSING_INCLUDE = /cannot open include file|No such file or directory|file not found/i;
16
+ const RE_GENERATED_BODY = /GENERATED_BODY/i;
17
+ const RE_UNDECLARED = /undeclared identifier|unknown type name|use of undeclared|identifier not found/i;
18
+ const RE_SPECIFIER = /specifier/i;
19
+ const RE_UE_MACRO = /UPROPERTY|UFUNCTION|UCLASS/i;
20
+ // ---------------------------------------------------------------------------
21
+ // Public API
22
+ // ---------------------------------------------------------------------------
23
+ /**
24
+ * Return all FixSuggestion objects that match the given BuildError.
25
+ *
26
+ * Multiple patterns may match a single error -- all matching suggestions are
27
+ * returned. Returns [] when no pattern matches.
28
+ *
29
+ * @param error - The structured compiler diagnostic.
30
+ * @param docIndex - Optional DocIndex for include-path hints.
31
+ */
32
+ export function suggestFix(error, docIndex) {
33
+ const results = [];
34
+ const msg = error.message;
35
+ // Pattern 1: missing-include
36
+ if (RE_MISSING_INCLUDE.test(msg)) {
37
+ const hint = {
38
+ pattern: 'missing-include',
39
+ suggestion: 'Add the required #include. Use ue_get_include_path to find the correct header for the missing file.',
40
+ };
41
+ if (docIndex !== undefined) {
42
+ const ueType = extractUeType(msg);
43
+ if (ueType !== null) {
44
+ const path = docIndex.getIncludePath(ueType);
45
+ if (path !== null) {
46
+ hint.includeHint = path;
47
+ }
48
+ }
49
+ }
50
+ results.push(hint);
51
+ }
52
+ // Pattern 2: generated-body-missing
53
+ if (RE_GENERATED_BODY.test(msg)) {
54
+ results.push({
55
+ pattern: 'generated-body-missing',
56
+ suggestion: 'Add GENERATED_BODY() as the first declaration inside the UCLASS body, immediately after the opening brace.',
57
+ });
58
+ }
59
+ // Pattern 3: undeclared-ue-type
60
+ if (RE_UNDECLARED.test(msg)) {
61
+ const ueType = extractUeType(msg);
62
+ if (ueType !== null) {
63
+ const hint = {
64
+ pattern: 'undeclared-ue-type',
65
+ suggestion: 'Add the #include for the missing UE type. Use ue_get_include_path to find the correct header.',
66
+ };
67
+ if (docIndex !== undefined) {
68
+ const path = docIndex.getIncludePath(ueType);
69
+ if (path !== null) {
70
+ hint.includeHint = path;
71
+ }
72
+ }
73
+ results.push(hint);
74
+ }
75
+ }
76
+ // Pattern 4: wrong-specifier
77
+ if (RE_SPECIFIER.test(msg) && RE_UE_MACRO.test(msg)) {
78
+ results.push({
79
+ pattern: 'wrong-specifier',
80
+ suggestion: 'Check the specifier spelling. Valid UCLASS specifiers: BlueprintType, Blueprintable, Abstract. Valid UPROPERTY specifiers: EditAnywhere, VisibleAnywhere, BlueprintReadWrite, BlueprintReadOnly, Category.',
81
+ });
82
+ }
83
+ return results;
84
+ }
@@ -0,0 +1,146 @@
1
+ // src/build/ubt-runner.ts
2
+ // UBT invocation, UBT path discovery, and concurrent build guard.
3
+ // Invokes UnrealBuildTool as an array-form subprocess via execFileNoThrow — never shell string.
4
+ //
5
+ // Discovery strategy:
6
+ // 1. If params.ubtPath is provided — use it directly (skip discovery).
7
+ // 2. If params.uprojectPath is provided — read EngineAssociation from it.
8
+ // 3. Otherwise — scan PROJECT_ROOT for a .uproject file, then read EngineAssociation.
9
+ // 4. EngineAssociation "X.Y" → binary Launcher install → dotnet + UBT.dll
10
+ // 5. Fallback: walk ancestor dirs looking for source engine UBT.exe
11
+ //
12
+ // Security: execFileNoThrow uses array-form execFile — T-06-04 (injection) is mitigated.
13
+ // Concurrency: buildInProgress boolean guard prevents T-06-05 (double-spawn DoS).
14
+ import * as fs from 'node:fs';
15
+ import * as path from 'node:path';
16
+ import { execFileNoThrow } from '../utils/execFileNoThrow.js';
17
+ import { parseUproject } from '../parsers/uproject-parser.js';
18
+ import { PROJECT_ROOT } from '../config.js';
19
+ import { log, warn } from '../utils/logger.js';
20
+ // ---------------------------------------------------------------------------
21
+ // Concurrent build guard
22
+ // ---------------------------------------------------------------------------
23
+ /** Module-level flag — at most one UBT process may run at a time. Mitigates T-06-05. */
24
+ let buildInProgress = false;
25
+ // ---------------------------------------------------------------------------
26
+ // Public API
27
+ // ---------------------------------------------------------------------------
28
+ /**
29
+ * Invoke UnrealBuildTool for the specified target.
30
+ *
31
+ * Rejects immediately if another build is already running.
32
+ * Rejects with "UnrealBuildTool not found" if UBT cannot be located.
33
+ *
34
+ * @param params Build parameters. Only `target` is required.
35
+ */
36
+ export async function runUbt(params) {
37
+ if (buildInProgress) {
38
+ throw new Error('Build already in progress. Wait for the current build to complete.');
39
+ }
40
+ buildInProgress = true;
41
+ const start = Date.now();
42
+ try {
43
+ // Resolve UBT command and any argument prefix
44
+ let ubtCmd;
45
+ let ubtArgPrefix;
46
+ if (params.ubtPath) {
47
+ // Explicit override — derive invocation style from extension
48
+ if (params.ubtPath.endsWith('.dll')) {
49
+ // Binary Launcher install: dotnet <path-to-dll>
50
+ ubtCmd = 'dotnet';
51
+ ubtArgPrefix = [params.ubtPath];
52
+ }
53
+ else {
54
+ // Source engine install: invoke executable directly
55
+ ubtCmd = params.ubtPath;
56
+ ubtArgPrefix = [];
57
+ }
58
+ }
59
+ else {
60
+ // Discovery path
61
+ const uprojectPath = params.uprojectPath ?? findUproject();
62
+ const discovered = discoverUbt(uprojectPath);
63
+ ubtCmd = discovered.cmd;
64
+ ubtArgPrefix = discovered.argPrefix;
65
+ }
66
+ // Assemble final argument list:
67
+ // [ubtArgPrefix..., target, platform, configuration, -project=<path>?]
68
+ const config = params.configuration ?? 'Development';
69
+ const platform = params.platform ?? 'Win64';
70
+ const uprojectArg = params.uprojectPath ? [`-project=${params.uprojectPath}`] : [];
71
+ const args = [...ubtArgPrefix, params.target, platform, config, ...uprojectArg];
72
+ log(`runUbt: ${ubtCmd} ${args.join(' ')}`);
73
+ const result = await execFileNoThrow(ubtCmd, args, { cwd: PROJECT_ROOT });
74
+ const durationMs = Date.now() - start;
75
+ return {
76
+ stdout: result.stdout,
77
+ stderr: result.stderr,
78
+ exitCode: result.status,
79
+ durationMs,
80
+ };
81
+ }
82
+ finally {
83
+ buildInProgress = false;
84
+ }
85
+ }
86
+ // ---------------------------------------------------------------------------
87
+ // Internal helpers
88
+ // ---------------------------------------------------------------------------
89
+ /**
90
+ * Scan PROJECT_ROOT for a .uproject file.
91
+ * Throws if none found.
92
+ */
93
+ function findUproject() {
94
+ const entries = fs.readdirSync(PROJECT_ROOT);
95
+ const uproject = entries.find((e) => e.endsWith('.uproject'));
96
+ if (!uproject) {
97
+ throw new Error(`No .uproject file found in ${PROJECT_ROOT}`);
98
+ }
99
+ return path.join(PROJECT_ROOT, uproject);
100
+ }
101
+ /**
102
+ * Discover the UBT binary from the given .uproject file.
103
+ *
104
+ * Candidate 1 — Binary Launcher install (EngineAssociation = "X.Y"):
105
+ * %PROGRAMFILES%\Epic Games\UE_X.Y\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll
106
+ * → invoked as: dotnet <dll-path>
107
+ *
108
+ * Candidate 2 — Source engine install (walk ancestor dirs up to 3 levels):
109
+ * <ancestor>\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.exe
110
+ * → invoked directly
111
+ *
112
+ * Throws "UnrealBuildTool not found" if neither candidate exists.
113
+ */
114
+ function discoverUbt(uprojectPath) {
115
+ // Read EngineAssociation from .uproject
116
+ let engineVersion;
117
+ try {
118
+ const content = fs.readFileSync(uprojectPath, 'utf-8');
119
+ const parsed = parseUproject(content);
120
+ if (parsed.success) {
121
+ engineVersion = parsed.data.EngineAssociation;
122
+ }
123
+ }
124
+ catch {
125
+ warn('discoverUbt: failed to read .uproject; attempting fallback paths');
126
+ }
127
+ // Candidate 1: binary Launcher install — EngineAssociation looks like "5.4"
128
+ if (engineVersion && /^\d+\.\d+$/.test(engineVersion)) {
129
+ const programFiles = process.env['PROGRAMFILES'] ?? 'C:\\Program Files';
130
+ const dllPath = path.join(programFiles, 'Epic Games', `UE_${engineVersion}`, 'Engine', 'Binaries', 'DotNET', 'UnrealBuildTool', 'UnrealBuildTool.dll');
131
+ if (fs.existsSync(dllPath)) {
132
+ return { cmd: 'dotnet', argPrefix: [dllPath] };
133
+ }
134
+ }
135
+ // Candidate 2: source engine install — walk ancestor directories
136
+ let dir = path.dirname(uprojectPath);
137
+ for (let i = 0; i < 3; i++) {
138
+ const exePath = path.join(dir, 'Engine', 'Binaries', 'DotNET', 'UnrealBuildTool', 'UnrealBuildTool.exe');
139
+ if (fs.existsSync(exePath)) {
140
+ return { cmd: exePath, argPrefix: [] };
141
+ }
142
+ dir = path.dirname(dir);
143
+ }
144
+ throw new Error('UnrealBuildTool not found. Set UBT_PATH environment variable or ensure UE is installed ' +
145
+ 'at the default Launcher location (C:\\Program Files\\Epic Games\\UE_X.Y).');
146
+ }
package/dist/cli.js ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ // cli.ts — Entry point for `npx ultimate-unreal-engine-mcp`.
3
+ // Routes to setup (interactive installer) or starts the MCP server.
4
+ const command = process.argv[2];
5
+ if (command === 'setup') {
6
+ // Dynamic import keeps the server code out of the setup path
7
+ await import('./setup.js');
8
+ }
9
+ else {
10
+ // No subcommand or unknown — start the MCP server
11
+ await import('./index.js');
12
+ }
13
+ export {};
package/dist/config.js ADDED
@@ -0,0 +1,8 @@
1
+ // Configuration constants for the Ultimate Unreal Engine MCP server.
2
+ // All values are read from environment variables with sensible defaults.
3
+ // Uses console.error for any startup logging (never console.log — stdout safety).
4
+ export const PLUGIN_PORT = process.env['UE_PLUGIN_PORT']
5
+ ? parseInt(process.env['UE_PLUGIN_PORT'], 10)
6
+ : 55557;
7
+ export const PROJECT_ROOT = process.env['UE_PROJECT_ROOT'] ?? process.cwd();
8
+ export const SERVER_VERSION = '0.1.0';
@@ -0,0 +1,228 @@
1
+ // src/docs/data/ue57-api.ts
2
+ // Bundled UE 5.7 API reference index — curated set of the most commonly used classes.
3
+ // Source: UE 5.7 official API documentation (dev.epicgames.com/documentation/en-us/unreal-engine/API).
4
+ // This file is the knowledge base for ue_search_api, ue_lookup_class, ue_get_include_path, ue_check_deprecation.
5
+ const c = (id, module, includePath, description, opts) => ({
6
+ id, type: 'class', name: id, fullName: id, className: id, signature: '', returnType: '', parameters: '',
7
+ includePath, module, deprecated: false, deprecatedMessage: '', replacementAPI: '', description, ...opts,
8
+ });
9
+ const f = (cls, name, sig, ret, params, inc, mod, desc, opts) => ({
10
+ id: `${cls}.${name}`, type: 'function', name, fullName: `${cls}.${name}`, className: cls,
11
+ signature: sig, returnType: ret, parameters: params, includePath: inc, module: mod,
12
+ deprecated: false, deprecatedMessage: '', replacementAPI: '', description: desc, ...opts,
13
+ });
14
+ const p = (cls, name, inc, mod, desc, opts) => ({
15
+ id: `${cls}.${name}`, type: 'property', name, fullName: `${cls}.${name}`, className: cls,
16
+ signature: '', returnType: '', parameters: '', includePath: inc, module: mod,
17
+ deprecated: false, deprecatedMessage: '', replacementAPI: '', description: desc, ...opts,
18
+ });
19
+ const e = (id, mod, inc, desc) => ({
20
+ id, type: 'enum', name: id, fullName: id, className: id, signature: '', returnType: '', parameters: '',
21
+ includePath: inc, module: mod, deprecated: false, deprecatedMessage: '', replacementAPI: '', description: desc,
22
+ });
23
+ export const UE57_API_RECORDS = [
24
+ // ── UObject ──
25
+ c('UObject', 'CoreUObject', 'UObject/Object.h', 'Base class for all UE objects with reflection, serialization, and garbage collection'),
26
+ f('UObject', 'GetClass', 'UClass* GetClass() const', 'UClass*', '', 'UObject/Object.h', 'CoreUObject', 'Returns the UClass that defines this object'),
27
+ f('UObject', 'GetWorld', 'UWorld* GetWorld() const', 'UWorld*', '', 'UObject/Object.h', 'CoreUObject', 'Returns the UWorld this object belongs to'),
28
+ f('UObject', 'IsA', 'bool IsA(const UClass* SomeBase) const', 'bool', 'const UClass* SomeBase', 'UObject/Object.h', 'CoreUObject', 'Returns true if this object is of the specified type'),
29
+ f('UObject', 'GetFName', 'FName GetFName() const', 'FName', '', 'UObject/Object.h', 'CoreUObject', 'Returns the FName of this object'),
30
+ f('UObject', 'GetName', 'FString GetName() const', 'FString', '', 'UObject/Object.h', 'CoreUObject', 'Returns the name of this object as a string'),
31
+ // ── UClass ──
32
+ c('UClass', 'CoreUObject', 'UObject/Class.h', 'Reflection class describing a UObject-derived type'),
33
+ f('UClass', 'GetSuperClass', 'UClass* GetSuperClass() const', 'UClass*', '', 'UObject/Class.h', 'CoreUObject', 'Returns the parent class in the inheritance hierarchy'),
34
+ f('UClass', 'GetDefaultObject', 'UObject* GetDefaultObject(bool bCreateIfNeeded) const', 'UObject*', 'bool bCreateIfNeeded', 'UObject/Class.h', 'CoreUObject', 'Returns the Class Default Object (CDO) for this class'),
35
+ // ── AActor ──
36
+ c('AActor', 'Engine', 'GameFramework/Actor.h', 'Base class for all actors that can be placed or spawned in a level'),
37
+ f('AActor', 'BeginPlay', 'void BeginPlay()', 'void', '', 'GameFramework/Actor.h', 'Engine', 'Called when the game starts or when spawned'),
38
+ f('AActor', 'Tick', 'void Tick(float DeltaTime)', 'void', 'float DeltaTime', 'GameFramework/Actor.h', 'Engine', 'Called every frame'),
39
+ f('AActor', 'GetActorLocation', 'FVector GetActorLocation() const', 'FVector', '', 'GameFramework/Actor.h', 'Engine', 'Returns the location of the actor in world space'),
40
+ f('AActor', 'SetActorLocation', 'bool SetActorLocation(const FVector& NewLocation, bool bSweep, FHitResult* OutSweepHitResult, ETeleportType Teleport)', 'bool', 'const FVector& NewLocation, bool bSweep, FHitResult* OutSweepHitResult, ETeleportType Teleport', 'GameFramework/Actor.h', 'Engine', 'Moves the actor to the specified location'),
41
+ f('AActor', 'GetActorRotation', 'FRotator GetActorRotation() const', 'FRotator', '', 'GameFramework/Actor.h', 'Engine', 'Returns the rotation of the actor in world space'),
42
+ f('AActor', 'SetActorRotation', 'bool SetActorRotation(FRotator NewRotation, ETeleportType Teleport)', 'bool', 'FRotator NewRotation, ETeleportType Teleport', 'GameFramework/Actor.h', 'Engine', 'Sets the actor rotation in world space'),
43
+ f('AActor', 'Destroy', 'void Destroy()', 'void', '', 'GameFramework/Actor.h', 'Engine', 'Destroys this actor and removes it from the level'),
44
+ f('AActor', 'GetComponentByClass', 'UActorComponent* GetComponentByClass(TSubclassOf<UActorComponent> ComponentClass) const', 'UActorComponent*', 'TSubclassOf<UActorComponent> ComponentClass', 'GameFramework/Actor.h', 'Engine', 'Returns the first component of the specified class'),
45
+ f('AActor', 'GetComponents', 'void GetComponents(TArray<UActorComponent*>& OutComponents) const', 'void', 'TArray<UActorComponent*>& OutComponents', 'GameFramework/Actor.h', 'Engine', 'Gets all components owned by this actor'),
46
+ f('AActor', 'AttachToActor', 'void AttachToActor(AActor* ParentActor, const FAttachmentTransformRules& AttachmentRules, FName SocketName)', 'void', 'AActor* ParentActor, const FAttachmentTransformRules& AttachmentRules, FName SocketName', 'GameFramework/Actor.h', 'Engine', 'Attaches this actor to another actor'),
47
+ f('AActor', 'GetDistanceTo', 'float GetDistanceTo(const AActor* OtherActor) const', 'float', 'const AActor* OtherActor', 'GameFramework/Actor.h', 'Engine', 'Returns the distance to another actor'),
48
+ f('AActor', 'SetActorHiddenInGame', 'void SetActorHiddenInGame(bool bNewHidden)', 'void', 'bool bNewHidden', 'GameFramework/Actor.h', 'Engine', 'Sets whether this actor is hidden in the game'),
49
+ f('AActor', 'TeleportTo', 'bool TeleportTo(const FVector& DestLocation, const FRotator& DestRotation, bool bIsATest, bool bNoCheck)', 'bool', 'const FVector& DestLocation, const FRotator& DestRotation, bool bIsATest, bool bNoCheck', 'GameFramework/Actor.h', 'Engine', 'Teleports actor to a new location and rotation'),
50
+ // ── APawn ──
51
+ c('APawn', 'Engine', 'GameFramework/Pawn.h', 'Base class for all actors that can be possessed by a controller'),
52
+ f('APawn', 'GetController', 'AController* GetController() const', 'AController*', '', 'GameFramework/Pawn.h', 'Engine', 'Returns the controller currently possessing this pawn'),
53
+ f('APawn', 'SetupPlayerInputComponent', 'void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)', 'void', 'UInputComponent* PlayerInputComponent', 'GameFramework/Pawn.h', 'Engine', 'Called to bind input to this pawn'),
54
+ f('APawn', 'GetMovementComponent', 'UPawnMovementComponent* GetMovementComponent() const', 'UPawnMovementComponent*', '', 'GameFramework/Pawn.h', 'Engine', 'Returns the movement component for this pawn'),
55
+ // ── ACharacter ──
56
+ c('ACharacter', 'Engine', 'GameFramework/Character.h', 'Actor with a mesh, capsule, and character movement component'),
57
+ f('ACharacter', 'GetCharacterMovement', 'UCharacterMovementComponent* GetCharacterMovement() const', 'UCharacterMovementComponent*', '', 'GameFramework/Character.h', 'Engine', 'Returns the character movement component'),
58
+ f('ACharacter', 'GetMesh', 'USkeletalMeshComponent* GetMesh() const', 'USkeletalMeshComponent*', '', 'GameFramework/Character.h', 'Engine', 'Returns the skeletal mesh component'),
59
+ f('ACharacter', 'Jump', 'void Jump()', 'void', '', 'GameFramework/Character.h', 'Engine', 'Makes the character jump'),
60
+ f('ACharacter', 'StopJumping', 'void StopJumping()', 'void', '', 'GameFramework/Character.h', 'Engine', 'Stops the character from jumping'),
61
+ f('ACharacter', 'LaunchCharacter', 'void LaunchCharacter(FVector LaunchVelocity, bool bXYOverride, bool bZOverride)', 'void', 'FVector LaunchVelocity, bool bXYOverride, bool bZOverride', 'GameFramework/Character.h', 'Engine', 'Launches the character with a given velocity'),
62
+ f('ACharacter', 'GetCapsuleComponent', 'UCapsuleComponent* GetCapsuleComponent() const', 'UCapsuleComponent*', '', 'GameFramework/Character.h', 'Engine', 'Returns the capsule collision component'),
63
+ // ── AController / APlayerController ──
64
+ c('AController', 'Engine', 'GameFramework/Controller.h', 'Base class for controllers that can possess pawns'),
65
+ f('AController', 'Possess', 'void Possess(APawn* InPawn)', 'void', 'APawn* InPawn', 'GameFramework/Controller.h', 'Engine', 'Takes control of the specified pawn'),
66
+ f('AController', 'UnPossess', 'void UnPossess()', 'void', '', 'GameFramework/Controller.h', 'Engine', 'Releases the currently possessed pawn'),
67
+ f('AController', 'GetPawn', 'APawn* GetPawn() const', 'APawn*', '', 'GameFramework/Controller.h', 'Engine', 'Returns the currently possessed pawn'),
68
+ c('APlayerController', 'Engine', 'GameFramework/PlayerController.h', 'Controller for human players with camera, input, and HUD management'),
69
+ f('APlayerController', 'GetHUD', 'AHUD* GetHUD() const', 'AHUD*', '', 'GameFramework/PlayerController.h', 'Engine', 'Returns the HUD for this player controller'),
70
+ f('APlayerController', 'SetInputMode', 'void SetInputMode(const FInputModeDataBase& InData)', 'void', 'const FInputModeDataBase& InData', 'GameFramework/PlayerController.h', 'Engine', 'Sets the input mode for this player controller'),
71
+ f('APlayerController', 'SetShowMouseCursor', 'void SetShowMouseCursor(bool bShow)', 'void', 'bool bShow', 'GameFramework/PlayerController.h', 'Engine', 'Shows or hides the mouse cursor'),
72
+ // ── GameMode / GameState / PlayerState ──
73
+ c('AGameModeBase', 'Engine', 'GameFramework/GameModeBase.h', 'Base class defining game rules, spawn logic, and match flow'),
74
+ f('AGameModeBase', 'InitGame', 'void InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage)', 'void', 'const FString& MapName, const FString& Options, FString& ErrorMessage', 'GameFramework/GameModeBase.h', 'Engine', 'Initializes the game with the specified map and options'),
75
+ f('AGameModeBase', 'GetDefaultPawnClassForController', 'UClass* GetDefaultPawnClassForController(AController* InController)', 'UClass*', 'AController* InController', 'GameFramework/GameModeBase.h', 'Engine', 'Returns the default pawn class for a given controller'),
76
+ c('AGameMode', 'Engine', 'GameFramework/GameMode.h', 'Extended game mode with match state management'),
77
+ f('AGameMode', 'StartMatch', 'void StartMatch()', 'void', '', 'GameFramework/GameMode.h', 'Engine', 'Transitions game to InProgress match state'),
78
+ f('AGameMode', 'EndMatch', 'void EndMatch()', 'void', '', 'GameFramework/GameMode.h', 'Engine', 'Ends the current match'),
79
+ c('AGameStateBase', 'Engine', 'GameFramework/GameStateBase.h', 'Replicated game state accessible to all clients'),
80
+ f('AGameStateBase', 'GetServerWorldTimeSeconds', 'double GetServerWorldTimeSeconds() const', 'double', '', 'GameFramework/GameStateBase.h', 'Engine', 'Returns the server world time in seconds'),
81
+ c('APlayerState', 'Engine', 'GameFramework/PlayerState.h', 'Replicated per-player state including name and score'),
82
+ f('APlayerState', 'GetPlayerName', 'FString GetPlayerName() const', 'FString', '', 'GameFramework/PlayerState.h', 'Engine', 'Returns the player display name'),
83
+ f('APlayerState', 'GetScore', 'float GetScore() const', 'float', '', 'GameFramework/PlayerState.h', 'Engine', 'Returns the player score'),
84
+ // ── Components ──
85
+ c('UActorComponent', 'Engine', 'Components/ActorComponent.h', 'Base class for all components that can be added to actors'),
86
+ f('UActorComponent', 'BeginPlay', 'void BeginPlay()', 'void', '', 'Components/ActorComponent.h', 'Engine', 'Called when the component begins play'),
87
+ f('UActorComponent', 'TickComponent', 'void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)', 'void', 'float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction', 'Components/ActorComponent.h', 'Engine', 'Called every frame for this component'),
88
+ f('UActorComponent', 'GetOwner', 'AActor* GetOwner() const', 'AActor*', '', 'Components/ActorComponent.h', 'Engine', 'Returns the actor that owns this component'),
89
+ f('UActorComponent', 'RegisterComponent', 'void RegisterComponent()', 'void', '', 'Components/ActorComponent.h', 'Engine', 'Registers the component with its owning actor'),
90
+ c('USceneComponent', 'Engine', 'Components/SceneComponent.h', 'Component with transform — can be attached to other scene components'),
91
+ f('USceneComponent', 'GetRelativeLocation', 'FVector GetRelativeLocation() const', 'FVector', '', 'Components/SceneComponent.h', 'Engine', 'Returns location relative to parent component'),
92
+ f('USceneComponent', 'SetRelativeLocation', 'void SetRelativeLocation(FVector NewLocation, bool bSweep, FHitResult* OutSweepHitResult, ETeleportType Teleport)', 'void', 'FVector NewLocation, bool bSweep, FHitResult* OutSweepHitResult, ETeleportType Teleport', 'Components/SceneComponent.h', 'Engine', 'Sets location relative to parent component'),
93
+ f('USceneComponent', 'SetWorldLocation', 'void SetWorldLocation(FVector NewLocation, bool bSweep, FHitResult* OutSweepHitResult, ETeleportType Teleport)', 'void', 'FVector NewLocation, bool bSweep, FHitResult* OutSweepHitResult, ETeleportType Teleport', 'Components/SceneComponent.h', 'Engine', 'Sets location in world space'),
94
+ f('USceneComponent', 'AttachToComponent', 'bool AttachToComponent(USceneComponent* Parent, const FAttachmentTransformRules& AttachmentRules, FName SocketName)', 'bool', 'USceneComponent* Parent, const FAttachmentTransformRules& AttachmentRules, FName SocketName', 'Components/SceneComponent.h', 'Engine', 'Attaches this component to another scene component'),
95
+ c('UStaticMeshComponent', 'Engine', 'Components/StaticMeshComponent.h', 'Renders a static mesh asset in the world'),
96
+ f('UStaticMeshComponent', 'SetStaticMesh', 'bool SetStaticMesh(UStaticMesh* NewMesh)', 'bool', 'UStaticMesh* NewMesh', 'Components/StaticMeshComponent.h', 'Engine', 'Sets the static mesh to render'),
97
+ f('UStaticMeshComponent', 'GetStaticMesh', 'UStaticMesh* GetStaticMesh() const', 'UStaticMesh*', '', 'Components/StaticMeshComponent.h', 'Engine', 'Returns the currently assigned static mesh'),
98
+ f('UStaticMeshComponent', 'SetMaterial', 'void SetMaterial(int32 ElementIndex, UMaterialInterface* Material)', 'void', 'int32 ElementIndex, UMaterialInterface* Material', 'Components/StaticMeshComponent.h', 'Engine', 'Sets a material on the specified element index'),
99
+ c('USkeletalMeshComponent', 'Engine', 'Components/SkeletalMeshComponent.h', 'Renders a skeletal mesh with animation support'),
100
+ f('USkeletalMeshComponent', 'SetSkeletalMeshAsset', 'void SetSkeletalMeshAsset(USkeletalMesh* NewMesh)', 'void', 'USkeletalMesh* NewMesh', 'Components/SkeletalMeshComponent.h', 'Engine', 'Sets the skeletal mesh asset to render'),
101
+ f('USkeletalMeshComponent', 'PlayAnimation', 'void PlayAnimation(UAnimationAsset* NewAnimToPlay, bool bLooping)', 'void', 'UAnimationAsset* NewAnimToPlay, bool bLooping', 'Components/SkeletalMeshComponent.h', 'Engine', 'Plays an animation asset on this mesh'),
102
+ f('USkeletalMeshComponent', 'GetAnimInstance', 'UAnimInstance* GetAnimInstance() const', 'UAnimInstance*', '', 'Components/SkeletalMeshComponent.h', 'Engine', 'Returns the animation instance driving this mesh'),
103
+ f('USkeletalMeshComponent', 'SetSkeletalMesh', 'void SetSkeletalMesh(USkeletalMesh* NewMesh, bool bReinitPose)', 'void', 'USkeletalMesh* NewMesh, bool bReinitPose', 'Components/SkeletalMeshComponent.h', 'Engine', 'Old overload for setting skeletal mesh — use SetSkeletalMeshAsset instead', { deprecated: true, deprecatedMessage: 'Deprecated in UE 5.1 — use SetSkeletalMeshAsset instead', replacementAPI: 'USkeletalMeshComponent::SetSkeletalMeshAsset' }),
104
+ c('UCapsuleComponent', 'Engine', 'Components/CapsuleComponent.h', 'Capsule-shaped collision primitive used for character collision'),
105
+ f('UCapsuleComponent', 'SetCapsuleRadius', 'void SetCapsuleRadius(float Radius, bool bUpdateOverlaps)', 'void', 'float Radius, bool bUpdateOverlaps', 'Components/CapsuleComponent.h', 'Engine', 'Sets the capsule collision radius'),
106
+ f('UCapsuleComponent', 'SetCapsuleHalfHeight', 'void SetCapsuleHalfHeight(float HalfHeight, bool bUpdateOverlaps)', 'void', 'float HalfHeight, bool bUpdateOverlaps', 'Components/CapsuleComponent.h', 'Engine', 'Sets the capsule half height'),
107
+ c('UBoxComponent', 'Engine', 'Components/BoxComponent.h', 'Box-shaped collision primitive'),
108
+ f('UBoxComponent', 'SetBoxExtent', 'void SetBoxExtent(FVector InBoxExtent, bool bUpdateOverlaps)', 'void', 'FVector InBoxExtent, bool bUpdateOverlaps', 'Components/BoxComponent.h', 'Engine', 'Sets the box extent (half-size)'),
109
+ c('USphereComponent', 'Engine', 'Components/SphereComponent.h', 'Sphere-shaped collision primitive'),
110
+ f('USphereComponent', 'SetSphereRadius', 'void SetSphereRadius(float InSphereRadius, bool bUpdateOverlaps)', 'void', 'float InSphereRadius, bool bUpdateOverlaps', 'Components/SphereComponent.h', 'Engine', 'Sets the sphere collision radius'),
111
+ c('USpringArmComponent', 'Engine', 'GameFramework/SpringArmComponent.h', 'Camera boom that traces to prevent clipping through geometry'),
112
+ p('USpringArmComponent', 'TargetArmLength', 'GameFramework/SpringArmComponent.h', 'Engine', 'Natural length of the spring arm when not colliding'),
113
+ p('USpringArmComponent', 'bUsePawnControlRotation', 'GameFramework/SpringArmComponent.h', 'Engine', 'If true, arm rotation follows pawn control rotation'),
114
+ c('UCameraComponent', 'Engine', 'Camera/CameraComponent.h', 'Camera that captures a scene for rendering to the player viewport'),
115
+ f('UCameraComponent', 'SetFieldOfView', 'void SetFieldOfView(float InFieldOfView)', 'void', 'float InFieldOfView', 'Camera/CameraComponent.h', 'Engine', 'Sets the camera field of view in degrees'),
116
+ f('UCameraComponent', 'GetFieldOfView', 'float GetFieldOfView() const', 'float', '', 'Camera/CameraComponent.h', 'Engine', 'Returns the current field of view in degrees'),
117
+ c('UAudioComponent', 'Engine', 'Components/AudioComponent.h', 'Component for playing sound assets in the world'),
118
+ f('UAudioComponent', 'Play', 'void Play(float StartTime)', 'void', 'float StartTime', 'Components/AudioComponent.h', 'Engine', 'Starts playing the assigned sound'),
119
+ f('UAudioComponent', 'Stop', 'void Stop()', 'void', '', 'Components/AudioComponent.h', 'Engine', 'Stops the currently playing sound'),
120
+ f('UAudioComponent', 'IsPlaying', 'bool IsPlaying() const', 'bool', '', 'Components/AudioComponent.h', 'Engine', 'Returns true if the sound is currently playing'),
121
+ c('UCharacterMovementComponent', 'Engine', 'GameFramework/CharacterMovementComponent.h', 'Handles movement logic for ACharacter including walking, falling, swimming'),
122
+ p('UCharacterMovementComponent', 'MaxWalkSpeed', 'GameFramework/CharacterMovementComponent.h', 'Engine', 'Maximum walking speed in cm/s'),
123
+ p('UCharacterMovementComponent', 'JumpZVelocity', 'GameFramework/CharacterMovementComponent.h', 'Engine', 'Initial velocity for jumping in cm/s'),
124
+ f('UCharacterMovementComponent', 'SetMovementMode', 'void SetMovementMode(EMovementMode NewMovementMode, uint8 NewCustomMode)', 'void', 'EMovementMode NewMovementMode, uint8 NewCustomMode', 'GameFramework/CharacterMovementComponent.h', 'Engine', 'Sets the movement mode'),
125
+ f('UCharacterMovementComponent', 'IsMovingOnGround', 'bool IsMovingOnGround() const', 'bool', '', 'GameFramework/CharacterMovementComponent.h', 'Engine', 'Returns true if the character is on the ground'),
126
+ f('UCharacterMovementComponent', 'IsFalling', 'bool IsFalling() const', 'bool', '', 'GameFramework/CharacterMovementComponent.h', 'Engine', 'Returns true if the character is in the air'),
127
+ c('UParticleSystemComponent', 'Engine', 'Particles/ParticleSystemComponent.h', 'Legacy Cascade particle system component — deprecated in favor of Niagara', { deprecated: true, deprecatedMessage: 'Deprecated in UE 5.0 — use UNiagaraComponent for new effects', replacementAPI: 'UNiagaraComponent' }),
128
+ c('UNiagaraComponent', 'Niagara', 'NiagaraComponent.h', 'Niagara particle system component for VFX'),
129
+ f('UNiagaraComponent', 'Activate', 'void Activate(bool bReset)', 'void', 'bool bReset', 'NiagaraComponent.h', 'Niagara', 'Activates the Niagara system'),
130
+ f('UNiagaraComponent', 'Deactivate', 'void Deactivate()', 'void', '', 'NiagaraComponent.h', 'Niagara', 'Deactivates the Niagara system'),
131
+ // ── Subsystems ──
132
+ c('UGameInstance', 'Engine', 'Engine/GameInstance.h', 'Persistent game instance that survives level transitions'),
133
+ f('UGameInstance', 'GetSubsystem', 'UGameInstanceSubsystem* GetSubsystem(TSubclassOf<UGameInstanceSubsystem> SubsystemClass) const', 'UGameInstanceSubsystem*', 'TSubclassOf<UGameInstanceSubsystem> SubsystemClass', 'Engine/GameInstance.h', 'Engine', 'Returns a subsystem of the specified type'),
134
+ c('UGameInstanceSubsystem', 'Engine', 'Subsystems/GameInstanceSubsystem.h', 'Subsystem with lifetime tied to the game instance'),
135
+ c('UWorldSubsystem', 'Engine', 'Subsystems/WorldSubsystem.h', 'Subsystem with lifetime tied to a UWorld'),
136
+ c('ULocalPlayerSubsystem', 'Engine', 'Subsystems/LocalPlayerSubsystem.h', 'Subsystem with lifetime tied to a local player'),
137
+ // ── UMG / UI ──
138
+ c('UUserWidget', 'UMG', 'Blueprint/UserWidget.h', 'Base class for user-created UI widgets in UMG'),
139
+ f('UUserWidget', 'NativeConstruct', 'void NativeConstruct()', 'void', '', 'Blueprint/UserWidget.h', 'UMG', 'Called when the widget is constructed natively'),
140
+ f('UUserWidget', 'AddToViewport', 'void AddToViewport(int32 ZOrder)', 'void', 'int32 ZOrder', 'Blueprint/UserWidget.h', 'UMG', 'Adds this widget to the player viewport'),
141
+ f('UUserWidget', 'RemoveFromViewport', 'void RemoveFromViewport()', 'void', '', 'Blueprint/UserWidget.h', 'UMG', 'Removes this widget from the viewport', { deprecated: true, deprecatedMessage: 'Deprecated in UE 5.1 — use RemoveFromParent instead', replacementAPI: 'UUserWidget::RemoveFromParent' }),
142
+ f('UUserWidget', 'RemoveFromParent', 'void RemoveFromParent()', 'void', '', 'Blueprint/UserWidget.h', 'UMG', 'Removes this widget from its parent'),
143
+ f('UUserWidget', 'SetVisibility', 'void SetVisibility(ESlateVisibility InVisibility)', 'void', 'ESlateVisibility InVisibility', 'Blueprint/UserWidget.h', 'UMG', 'Sets the visibility of this widget'),
144
+ c('UWidget', 'UMG', 'Components/Widget.h', 'Base class for all UMG widgets'),
145
+ c('UTextBlock', 'UMG', 'Components/TextBlock.h', 'Widget that displays text'),
146
+ f('UTextBlock', 'SetText', 'void SetText(FText InText)', 'void', 'FText InText', 'Components/TextBlock.h', 'UMG', 'Sets the text content of this text block'),
147
+ f('UTextBlock', 'GetText', 'FText GetText() const', 'FText', '', 'Components/TextBlock.h', 'UMG', 'Returns the current text content'),
148
+ c('UButton', 'UMG', 'Components/Button.h', 'Clickable button widget'),
149
+ c('UImage', 'UMG', 'Components/Image.h', 'Widget that displays an image or texture'),
150
+ f('UImage', 'SetBrushFromTexture', 'void SetBrushFromTexture(UTexture2D* Texture, bool bMatchSize)', 'void', 'UTexture2D* Texture, bool bMatchSize', 'Components/Image.h', 'UMG', 'Sets the image brush from a texture'),
151
+ c('UProgressBar', 'UMG', 'Components/ProgressBar.h', 'Bar that fills based on a percentage value'),
152
+ f('UProgressBar', 'SetPercent', 'void SetPercent(float InPercent)', 'void', 'float InPercent', 'Components/ProgressBar.h', 'UMG', 'Sets the fill percentage (0.0 to 1.0)'),
153
+ c('UScrollBox', 'UMG', 'Components/ScrollBox.h', 'Scrollable container for child widgets'),
154
+ c('UCanvasPanel', 'UMG', 'Components/CanvasPanel.h', 'Panel that allows arbitrary positioning of child widgets'),
155
+ // ── Data Assets ──
156
+ c('UPrimaryDataAsset', 'Engine', 'Engine/DataAsset.h', 'Base class for data-only assets with asset management support'),
157
+ f('UPrimaryDataAsset', 'GetPrimaryAssetId', 'FPrimaryAssetId GetPrimaryAssetId() const', 'FPrimaryAssetId', '', 'Engine/DataAsset.h', 'Engine', 'Returns the primary asset ID for asset manager registration'),
158
+ c('UDataTable', 'Engine', 'Engine/DataTable.h', 'Table of structured data rows indexed by name'),
159
+ f('UDataTable', 'FindRow', 'T* FindRow<T>(FName RowName, const FString& ContextString, bool bWarnIfRowMissing) const', 'T*', 'FName RowName, const FString& ContextString, bool bWarnIfRowMissing', 'Engine/DataTable.h', 'Engine', 'Finds a row by name — returns nullptr if not found'),
160
+ f('UDataTable', 'GetAllRows', 'void GetAllRows<T>(const FString& ContextString, TArray<T*>& OutRowArray) const', 'void', 'const FString& ContextString, TArray<T*>& OutRowArray', 'Engine/DataTable.h', 'Engine', 'Gets all rows in the data table'),
161
+ f('UDataTable', 'GetRowNames', 'TArray<FName> GetRowNames() const', 'TArray<FName>', '', 'Engine/DataTable.h', 'Engine', 'Returns all row names in the data table'),
162
+ c('USaveGame', 'Engine', 'GameFramework/SaveGame.h', 'Base class for save game objects that can be serialized to disk'),
163
+ c('UAssetManager', 'Engine', 'Engine/AssetManager.h', 'Singleton managing primary assets and async loading'),
164
+ f('UAssetManager', 'Get', 'UAssetManager& Get()', 'UAssetManager&', '', 'Engine/AssetManager.h', 'Engine', 'Returns the global asset manager singleton'),
165
+ // ── Blueprint / Kismet Libraries ──
166
+ c('UGameplayStatics', 'Engine', 'Kismet/GameplayStatics.h', 'Static utility functions for common gameplay operations'),
167
+ f('UGameplayStatics', 'GetPlayerPawn', 'APawn* GetPlayerPawn(const UObject* WorldContextObject, int32 PlayerIndex)', 'APawn*', 'const UObject* WorldContextObject, int32 PlayerIndex', 'Kismet/GameplayStatics.h', 'Engine', 'Returns the pawn for the specified player index'),
168
+ f('UGameplayStatics', 'GetPlayerController', 'APlayerController* GetPlayerController(const UObject* WorldContextObject, int32 PlayerIndex)', 'APlayerController*', 'const UObject* WorldContextObject, int32 PlayerIndex', 'Kismet/GameplayStatics.h', 'Engine', 'Returns the player controller for the specified player index'),
169
+ f('UGameplayStatics', 'GetAllActorsOfClass', 'void GetAllActorsOfClass(const UObject* WorldContextObject, TSubclassOf<AActor> ActorClass, TArray<AActor*>& OutActors)', 'void', 'const UObject* WorldContextObject, TSubclassOf<AActor> ActorClass, TArray<AActor*>& OutActors', 'Kismet/GameplayStatics.h', 'Engine', 'Finds all actors of the specified class in the world'),
170
+ f('UGameplayStatics', 'SpawnActor', 'AActor* SpawnActor(UClass* Class, const FTransform& Transform, const FActorSpawnParameters& SpawnParameters)', 'AActor*', 'UClass* Class, const FTransform& Transform, const FActorSpawnParameters& SpawnParameters', 'Kismet/GameplayStatics.h', 'Engine', 'Spawns an actor of the specified class at the given transform', { deprecated: true, deprecatedMessage: 'Use UWorld::SpawnActor or UWorld::SpawnActorDeferred instead', replacementAPI: 'UWorld::SpawnActor' }),
171
+ f('UGameplayStatics', 'PlaySoundAtLocation', 'void PlaySoundAtLocation(const UObject* WorldContextObject, USoundBase* Sound, FVector Location, float VolumeMultiplier, float PitchMultiplier, float StartTime, USoundAttenuation* AttenuationSettings, USoundConcurrency* ConcurrencySettings)', 'void', 'const UObject* WorldContextObject, USoundBase* Sound, FVector Location, float VolumeMultiplier, float PitchMultiplier, float StartTime, USoundAttenuation* AttenuationSettings, USoundConcurrency* ConcurrencySettings', 'Kismet/GameplayStatics.h', 'Engine', 'Plays a sound at a location in the world'),
172
+ f('UGameplayStatics', 'ApplyDamage', 'float ApplyDamage(AActor* DamagedActor, float BaseDamage, AController* EventInstigator, AActor* DamageCauser, TSubclassOf<UDamageType> DamageTypeClass)', 'float', 'AActor* DamagedActor, float BaseDamage, AController* EventInstigator, AActor* DamageCauser, TSubclassOf<UDamageType> DamageTypeClass', 'Kismet/GameplayStatics.h', 'Engine', 'Applies damage to an actor'),
173
+ f('UGameplayStatics', 'OpenLevel', 'void OpenLevel(const UObject* WorldContextObject, FName LevelName, bool bAbsolute, FString Options)', 'void', 'const UObject* WorldContextObject, FName LevelName, bool bAbsolute, FString Options', 'Kismet/GameplayStatics.h', 'Engine', 'Opens a new level by name'),
174
+ f('UGameplayStatics', 'SetGamePaused', 'bool SetGamePaused(const UObject* WorldContextObject, bool bPaused)', 'bool', 'const UObject* WorldContextObject, bool bPaused', 'Kismet/GameplayStatics.h', 'Engine', 'Pauses or unpauses the game'),
175
+ c('UKismetSystemLibrary', 'Engine', 'Kismet/KismetSystemLibrary.h', 'System utility functions for traces, debug drawing, and engine queries'),
176
+ f('UKismetSystemLibrary', 'LineTraceSingle', 'bool LineTraceSingle(const UObject* WorldContextObject, FVector Start, FVector End, ETraceTypeQuery TraceChannel, bool bTraceComplex, const TArray<AActor*>& ActorsToIgnore, EDrawDebugTrace DrawDebugType, FHitResult& OutHit, bool bIgnoreSelf, FLinearColor TraceColor, FLinearColor TraceHitColor, float DrawTime)', 'bool', 'const UObject* WorldContextObject, FVector Start, FVector End, ETraceTypeQuery TraceChannel, ...', 'Kismet/KismetSystemLibrary.h', 'Engine', 'Performs a line trace and returns the first hit'),
177
+ f('UKismetSystemLibrary', 'PrintString', 'void PrintString(const UObject* WorldContextObject, const FString& InString, bool bPrintToScreen, bool bPrintToLog, FLinearColor TextColor, float Duration, FName Key)', 'void', 'const UObject* WorldContextObject, const FString& InString, ...', 'Kismet/KismetSystemLibrary.h', 'Engine', 'Prints a string to the screen and/or log'),
178
+ c('UKismetMathLibrary', 'Engine', 'Kismet/KismetMathLibrary.h', 'Math utility functions for vectors, rotators, transforms, and interpolation'),
179
+ f('UKismetMathLibrary', 'FindLookAtRotation', 'FRotator FindLookAtRotation(const FVector& Start, const FVector& Target)', 'FRotator', 'const FVector& Start, const FVector& Target', 'Kismet/KismetMathLibrary.h', 'Engine', 'Returns a rotation looking from Start towards Target'),
180
+ f('UKismetMathLibrary', 'VInterpTo', 'FVector VInterpTo(FVector Current, FVector Target, float DeltaTime, float InterpSpeed)', 'FVector', 'FVector Current, FVector Target, float DeltaTime, float InterpSpeed', 'Kismet/KismetMathLibrary.h', 'Engine', 'Interpolates a vector towards a target at a given speed'),
181
+ // ── Interfaces ──
182
+ c('UInterface', 'CoreUObject', 'UObject/Interface.h', 'Base class for UE interface declarations'),
183
+ // ── World ──
184
+ c('UWorld', 'Engine', 'Engine/World.h', 'The top-level object representing a world/level'),
185
+ f('UWorld', 'SpawnActor', 'AActor* SpawnActor(UClass* Class, const FTransform* Transform, const FActorSpawnParameters& SpawnParameters)', 'AActor*', 'UClass* Class, const FTransform* Transform, const FActorSpawnParameters& SpawnParameters', 'Engine/World.h', 'Engine', 'Spawns an actor in the world at the given transform'),
186
+ f('UWorld', 'GetTimerManager', 'FTimerManager& GetTimerManager() const', 'FTimerManager&', '', 'Engine/World.h', 'Engine', 'Returns the timer manager for setting up timers'),
187
+ f('UWorld', 'GetFirstPlayerController', 'APlayerController* GetFirstPlayerController() const', 'APlayerController*', '', 'Engine/World.h', 'Engine', 'Returns the first local player controller'),
188
+ // ── Static Mesh Actor ──
189
+ c('AStaticMeshActor', 'Engine', 'Engine/StaticMeshActor.h', 'Actor that renders a static mesh in the level'),
190
+ f('AStaticMeshActor', 'GetStaticMeshComponent', 'UStaticMeshComponent* GetStaticMeshComponent() const', 'UStaticMeshComponent*', '', 'Engine/StaticMeshActor.h', 'Engine', 'Returns the static mesh component of this actor'),
191
+ // ── More deprecated symbols ──
192
+ f('AHUD', 'DrawText', 'void DrawText(const FString& Text, FLinearColor TextColor, float ScreenX, float ScreenY, UFont* Font, float Scale, bool bScalePosition)', 'void', 'const FString& Text, FLinearColor TextColor, float ScreenX, float ScreenY, ...', 'GameFramework/HUD.h', 'Engine', 'Draws text on the HUD — use UMG UUserWidget instead', { deprecated: true, deprecatedMessage: 'HUD canvas drawing is deprecated — use UMG widgets for UI', replacementAPI: 'UUserWidget' }),
193
+ c('AHUD', 'Engine', 'GameFramework/HUD.h', 'Legacy HUD base class for canvas-based UI drawing'),
194
+ f('UPrimitiveComponent', 'SetCollisionResponseToAllChannels', 'void SetCollisionResponseToAllChannels(ECollisionResponse NewResponse)', 'void', 'ECollisionResponse NewResponse', 'Components/PrimitiveComponent.h', 'Engine', 'Old signature — use the explicit enum value overload', { deprecated: true, deprecatedMessage: 'Use explicit ECollisionResponse enum value parameter', replacementAPI: 'SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Block)' }),
195
+ // ── Enums ──
196
+ e('ECollisionChannel', 'Engine', 'Engine/EngineTypes.h', 'Collision channel enum for trace and overlap queries'),
197
+ e('ECollisionEnabled', 'Engine', 'Engine/EngineTypes.h', 'Collision mode: NoCollision, QueryOnly, PhysicsOnly, QueryAndPhysics'),
198
+ e('EMovementMode', 'Engine', 'GameFramework/CharacterMovementComponent.h', 'Character movement mode: Walking, Falling, Swimming, Flying, Custom'),
199
+ e('EInputEvent', 'Engine', 'Engine/EngineTypes.h', 'Input event type: Pressed, Released, Repeat, DoubleClick, Axis'),
200
+ e('EAttachmentRule', 'Engine', 'Engine/EngineTypes.h', 'Attachment rule: KeepRelative, KeepWorld, SnapToTarget'),
201
+ e('ESlateVisibility', 'UMG', 'Components/SlateWrapperTypes.h', 'Widget visibility: Visible, Collapsed, Hidden, HitTestInvisible, SelfHitTestInvisible'),
202
+ // ── Additional commonly used classes ──
203
+ c('UPrimitiveComponent', 'Engine', 'Components/PrimitiveComponent.h', 'Base class for components with rendering and collision'),
204
+ c('UInputComponent', 'Engine', 'Components/InputComponent.h', 'Component for binding input actions and axes'),
205
+ c('UAnimInstance', 'Engine', 'Animation/AnimInstance.h', 'Animation instance driving a skeletal mesh'),
206
+ c('UMaterialInterface', 'Engine', 'Materials/MaterialInterface.h', 'Base class for materials and material instances'),
207
+ c('UMaterialInstanceDynamic', 'Engine', 'Materials/MaterialInstanceDynamic.h', 'Runtime-modifiable material instance'),
208
+ c('UTexture2D', 'Engine', 'Engine/Texture2D.h', 'Two-dimensional texture asset'),
209
+ c('USoundBase', 'Engine', 'Sound/SoundBase.h', 'Base class for all sound assets'),
210
+ c('ULevel', 'Engine', 'Engine/Level.h', 'Contains all actors and data for a single map'),
211
+ c('ALight', 'Engine', 'Engine/Light.h', 'Base class for all light actors'),
212
+ c('APointLight', 'Engine', 'Engine/PointLight.h', 'Point light that emits light in all directions'),
213
+ c('ADirectionalLight', 'Engine', 'Engine/DirectionalLight.h', 'Directional light simulating sunlight'),
214
+ c('ASpotLight', 'Engine', 'Engine/SpotLight.h', 'Spot light with a cone-shaped illumination area'),
215
+ c('AVolume', 'Engine', 'GameFramework/Volume.h', 'Base class for volumes used for trigger areas and physics'),
216
+ c('ATriggerBox', 'Engine', 'Engine/TriggerBox.h', 'Box-shaped trigger volume for overlap events'),
217
+ c('ATriggerSphere', 'Engine', 'Engine/TriggerSphere.h', 'Sphere-shaped trigger volume for overlap events'),
218
+ c('APlayerStart', 'Engine', 'GameFramework/PlayerStart.h', 'Marker actor for player spawn locations'),
219
+ c('ANavigationData', 'NavigationSystem', 'NavigationData.h', 'Base class for navigation mesh data used by AI pathfinding'),
220
+ c('AAIController', 'AIModule', 'AIController.h', 'Controller for AI-driven pawns with behavior tree support'),
221
+ c('UBehaviorTree', 'AIModule', 'BehaviorTree/BehaviorTree.h', 'Behavior tree asset for AI decision making'),
222
+ c('UBlackboardComponent', 'AIModule', 'BehaviorTree/BlackboardComponent.h', 'Component storing AI blackboard data for behavior trees'),
223
+ c('UWidgetComponent', 'UMG', 'Components/WidgetComponent.h', 'Renders a UMG widget in 3D world space'),
224
+ c('UTimelineComponent', 'Engine', 'Components/TimelineComponent.h', 'Component for driving property changes over time with curves'),
225
+ c('UProjectileMovementComponent', 'Engine', 'GameFramework/ProjectileMovementComponent.h', 'Component for simple projectile movement with gravity and homing'),
226
+ c('UFloatingPawnMovement', 'Engine', 'GameFramework/FloatingPawnMovement.h', 'Simple movement for pawns that float and fly'),
227
+ c('UPhysicsHandleComponent', 'Engine', 'PhysicsEngine/PhysicsHandleComponent.h', 'Component for picking up and moving physics objects'),
228
+ ];