flockbay 0.10.49 → 0.10.52
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.
- package/README.md +60 -60
- package/bin/flockbay-mcp.mjs +62 -62
- package/bin/flockbay.mjs +95 -95
- package/dist/{index-r3VTdgFI.cjs → index-IntvnrmZ.cjs} +71 -14
- package/dist/{index-D8AeVbvv.mjs → index-wkeSi0iC.mjs} +70 -13
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/lib.cjs +1 -1
- package/dist/lib.mjs +1 -1
- package/dist/{migratePlugin-CEvGPul8.mjs → migratePlugin-C71hAoc5.mjs} +12 -2
- package/dist/{migratePlugin-wFK-k3Wk.cjs → migratePlugin-D1XjjWFq.cjs} +12 -2
- package/dist/{runCodex-DuyuYqoB.cjs → runCodex-B7i_ICoQ.cjs} +34 -23
- package/dist/{runCodex-ZfUyhHF6.mjs → runCodex-BSx-hCu6.mjs} +34 -23
- package/dist/{runGemini-DBU1mMdp.mjs → runGemini-Dwyh7_WI.mjs} +2 -2
- package/dist/{runGemini-D7j5Y5TF.cjs → runGemini-gBKR3rdL.cjs} +2 -2
- package/dist/{types-DNr0xwSy.cjs → types-5z8UADAi.cjs} +224 -15
- package/dist/{types-BRJuZQj_.mjs → types-Bgzap7qR.mjs} +224 -16
- package/package.json +131 -131
- package/scripts/claude_local_launcher.cjs +72 -72
- package/scripts/claude_remote_launcher.cjs +15 -15
- package/scripts/claude_version_utils.cjs +445 -445
- package/scripts/ripgrep_launcher.cjs +32 -32
- package/scripts/run-with-root-env.mjs +37 -32
- package/scripts/session_hook_forwarder.cjs +49 -49
- package/scripts/test-codex-abort-history.mjs +77 -77
- package/scripts/unpack-tools.cjs +244 -244
- package/tools/licenses/difftastic-LICENSE +21 -21
- package/tools/licenses/ripgrep-LICENSE +3 -3
- package/tools/unreal-mcp/UPSTREAM_VERSION.md +8 -8
- package/tools/unreal-mcp/upstream/Docs/README.md +8 -8
- package/tools/unreal-mcp/upstream/Docs/Tools/README.md +6 -6
- package/tools/unreal-mcp/upstream/Docs/Tools/actor_tools.md +183 -183
- package/tools/unreal-mcp/upstream/Docs/Tools/blueprint_tools.md +268 -268
- package/tools/unreal-mcp/upstream/Docs/Tools/editor_tools.md +104 -104
- package/tools/unreal-mcp/upstream/Docs/Tools/node_tools.md +274 -274
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Config/FilterPlugin.ini +8 -8
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/FlockbayMCP.uplugin +36 -36
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/FlockbayMCP.Build.cs +82 -82
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPBlueprintCommands.cpp +1364 -1364
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPBlueprintNodeCommands.cpp +1310 -1310
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPCommandSchema.cpp +756 -756
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPCommonUtils.cpp +1177 -1177
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPEditorCommands.cpp +2618 -2618
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPProjectCommands.cpp +71 -71
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPUMGCommands.cpp +543 -543
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/MCPServerRunnable.cpp +372 -372
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/UnrealMCPBridge.cpp +457 -457
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/UnrealMCPModule.cpp +21 -21
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPBlueprintCommands.h +35 -35
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPBlueprintNodeCommands.h +30 -30
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPCommandSchema.h +41 -41
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPCommonUtils.h +59 -59
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPEditorCommands.h +61 -61
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPProjectCommands.h +20 -20
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPUMGCommands.h +82 -82
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/MCPServerRunnable.h +33 -33
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/UnrealMCPBridge.h +64 -64
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/UnrealMCPModule.h +22 -22
- package/tools/unreal-mcp/upstream/Python/README.md +39 -39
- package/tools/unreal-mcp/upstream/Python/pyproject.toml +22 -22
- package/tools/unreal-mcp/upstream/Python/scripts/actors/test_cube.py +202 -202
- package/tools/unreal-mcp/upstream/Python/scripts/blueprints/test_create_and_spawn_blueprints_with_different_components.py +496 -496
- package/tools/unreal-mcp/upstream/Python/scripts/blueprints/test_create_and_spawn_cube_blueprint.py +193 -193
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_component_reference.py +266 -266
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_create_bird_blueprint_with_input_and_camera.py +617 -617
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_input_mapping.py +365 -365
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_physics_variables.py +389 -389
- package/tools/unreal-mcp/upstream/Python/tools/blueprint_tools.py +419 -419
- package/tools/unreal-mcp/upstream/Python/tools/editor_tools.py +369 -369
- package/tools/unreal-mcp/upstream/Python/tools/node_tools.py +429 -429
- package/tools/unreal-mcp/upstream/Python/tools/project_tools.py +63 -63
- package/tools/unreal-mcp/upstream/Python/tools/umg_tools.py +332 -332
- package/tools/unreal-mcp/upstream/Python/unreal_mcp_server.py +398 -398
- package/tools/unreal-mcp/upstream/Python/uv.lock +521 -521
package/tools/unreal-mcp/upstream/Python/scripts/blueprints/test_create_and_spawn_cube_blueprint.py
CHANGED
|
@@ -1,194 +1,194 @@
|
|
|
1
|
-
#!/usr/bin/env python
|
|
2
|
-
"""
|
|
3
|
-
Test script for creating and manipulating a basic Blueprint in Unreal Engine via MCP.
|
|
4
|
-
|
|
5
|
-
This script demonstrates the core Blueprint creation and manipulation workflow:
|
|
6
|
-
1. Creates a new Blueprint class (TestBP) derived from Actor
|
|
7
|
-
2. Adds a StaticMeshComponent named 'CubeVisual' to the Blueprint
|
|
8
|
-
3. Sets the component's mesh to a basic cube shape (/Engine/BasicShapes/Cube.Cube)
|
|
9
|
-
4. Compiles the Blueprint to apply the changes
|
|
10
|
-
5. Spawns an instance of the Blueprint in the level at [0, 0, 100]
|
|
11
|
-
|
|
12
|
-
The script serves as both a test of the MCP Blueprint manipulation functionality
|
|
13
|
-
and a basic example of how to programmatically create and modify Blueprints
|
|
14
|
-
through the MCP interface.
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
import sys
|
|
18
|
-
import os
|
|
19
|
-
import time
|
|
20
|
-
import socket
|
|
21
|
-
import json
|
|
22
|
-
import logging
|
|
23
|
-
from typing import Dict, Any, Optional
|
|
24
|
-
|
|
25
|
-
# Add the parent directory to the path so we can import the server module
|
|
26
|
-
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
|
27
|
-
|
|
28
|
-
# Set up logging
|
|
29
|
-
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
30
|
-
logger = logging.getLogger("TestBasicBlueprint")
|
|
31
|
-
|
|
32
|
-
def send_command(sock: socket.socket, command: str, params: Dict[str, Any]) -> Optional[Dict[str, Any]]:
|
|
33
|
-
"""Send a command to the Unreal MCP server and get the response."""
|
|
34
|
-
try:
|
|
35
|
-
# Create command object
|
|
36
|
-
command_obj = {
|
|
37
|
-
"type": command,
|
|
38
|
-
"params": params
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
# Convert to JSON and send
|
|
42
|
-
command_json = json.dumps(command_obj)
|
|
43
|
-
logger.info(f"Sending command: {command_json}")
|
|
44
|
-
sock.sendall(command_json.encode('utf-8'))
|
|
45
|
-
|
|
46
|
-
# Receive response
|
|
47
|
-
chunks = []
|
|
48
|
-
while True:
|
|
49
|
-
chunk = sock.recv(4096)
|
|
50
|
-
if not chunk:
|
|
51
|
-
break
|
|
52
|
-
chunks.append(chunk)
|
|
53
|
-
|
|
54
|
-
# Try parsing to see if we have a complete response
|
|
55
|
-
try:
|
|
56
|
-
data = b''.join(chunks)
|
|
57
|
-
json.loads(data.decode('utf-8'))
|
|
58
|
-
# If we can parse it, we have the complete response
|
|
59
|
-
break
|
|
60
|
-
except json.JSONDecodeError:
|
|
61
|
-
# Not a complete JSON object yet, continue receiving
|
|
62
|
-
continue
|
|
63
|
-
|
|
64
|
-
# Parse response
|
|
65
|
-
data = b''.join(chunks)
|
|
66
|
-
response = json.loads(data.decode('utf-8'))
|
|
67
|
-
logger.info(f"Received response: {response}")
|
|
68
|
-
return response
|
|
69
|
-
|
|
70
|
-
except Exception as e:
|
|
71
|
-
logger.error(f"Error sending command: {e}")
|
|
72
|
-
return None
|
|
73
|
-
|
|
74
|
-
def main():
|
|
75
|
-
"""Main function to test creating a basic blueprint."""
|
|
76
|
-
try:
|
|
77
|
-
# Connect to Unreal MCP server
|
|
78
|
-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
79
|
-
sock.connect(("127.0.0.1", 55557))
|
|
80
|
-
|
|
81
|
-
try:
|
|
82
|
-
# Step 1: Create a blueprint
|
|
83
|
-
bp_params = {
|
|
84
|
-
"name": "TestBP",
|
|
85
|
-
"parent_class": "Actor"
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
response = send_command(sock, "create_blueprint", bp_params)
|
|
89
|
-
|
|
90
|
-
# Fixed response check to handle nested structure
|
|
91
|
-
if not response or response.get("status") != "success":
|
|
92
|
-
logger.error(f"Failed to create blueprint: {response}")
|
|
93
|
-
return
|
|
94
|
-
|
|
95
|
-
# Check if blueprint already existed
|
|
96
|
-
if response.get("result", {}).get("already_exists"):
|
|
97
|
-
logger.info(f"Blueprint 'TestBP' already exists, reusing it")
|
|
98
|
-
else:
|
|
99
|
-
logger.info("Blueprint created successfully!")
|
|
100
|
-
|
|
101
|
-
# Step 2: Add a static mesh component
|
|
102
|
-
component_params = {
|
|
103
|
-
"blueprint_name": "TestBP",
|
|
104
|
-
"component_type": "StaticMeshComponent",
|
|
105
|
-
"component_name": "CubeVisual",
|
|
106
|
-
"location": [0.0, 0.0, 0.0],
|
|
107
|
-
"rotation": [0.0, 0.0, 0.0],
|
|
108
|
-
"scale": [1.0, 1.0, 1.0]
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
# Close and reopen connection for each command
|
|
112
|
-
sock.close()
|
|
113
|
-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
114
|
-
sock.connect(("127.0.0.1", 55557))
|
|
115
|
-
|
|
116
|
-
response = send_command(sock, "add_component_to_blueprint", component_params)
|
|
117
|
-
|
|
118
|
-
# Fixed response check to handle nested structure
|
|
119
|
-
if not response or response.get("status") != "success":
|
|
120
|
-
logger.error(f"Failed to add component: {response}")
|
|
121
|
-
return
|
|
122
|
-
|
|
123
|
-
logger.info("Component added successfully!")
|
|
124
|
-
|
|
125
|
-
# Step 3: Set the static mesh properties
|
|
126
|
-
sock.close()
|
|
127
|
-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
128
|
-
sock.connect(("127.0.0.1", 55557))
|
|
129
|
-
|
|
130
|
-
mesh_params = {
|
|
131
|
-
"blueprint_name": "TestBP",
|
|
132
|
-
"component_name": "CubeVisual",
|
|
133
|
-
"static_mesh": "/Engine/BasicShapes/Cube.Cube"
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
response = send_command(sock, "set_static_mesh_properties", mesh_params)
|
|
137
|
-
|
|
138
|
-
# Fixed response check to handle nested structure
|
|
139
|
-
if not response or response.get("status") != "success":
|
|
140
|
-
logger.error(f"Failed to set static mesh properties: {response}")
|
|
141
|
-
return
|
|
142
|
-
|
|
143
|
-
logger.info("Static mesh properties set successfully!")
|
|
144
|
-
|
|
145
|
-
# Step 4: Compile the blueprint
|
|
146
|
-
sock.close()
|
|
147
|
-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
148
|
-
sock.connect(("127.0.0.1", 55557))
|
|
149
|
-
|
|
150
|
-
compile_params = {
|
|
151
|
-
"blueprint_name": "TestBP"
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
response = send_command(sock, "compile_blueprint", compile_params)
|
|
155
|
-
|
|
156
|
-
# Fixed response check to handle nested structure
|
|
157
|
-
if not response or response.get("status") != "success":
|
|
158
|
-
logger.error(f"Failed to compile blueprint: {response}")
|
|
159
|
-
return
|
|
160
|
-
|
|
161
|
-
logger.info("Blueprint compiled successfully!")
|
|
162
|
-
|
|
163
|
-
# Step 5: Spawn an instance of the blueprint
|
|
164
|
-
sock.close()
|
|
165
|
-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
166
|
-
sock.connect(("127.0.0.1", 55557))
|
|
167
|
-
|
|
168
|
-
spawn_params = {
|
|
169
|
-
"blueprint_name": "TestBP",
|
|
170
|
-
"actor_name": "TestBPInstance",
|
|
171
|
-
"location": [0.0, 0.0, 100.0], # 100 units up
|
|
172
|
-
"rotation": [0.0, 0.0, 0.0],
|
|
173
|
-
"scale": [1.0, 1.0, 1.0]
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
response = send_command(sock, "spawn_blueprint_actor", spawn_params)
|
|
177
|
-
|
|
178
|
-
# Fixed response check to handle nested structure
|
|
179
|
-
if not response or response.get("status") != "success":
|
|
180
|
-
logger.error(f"Failed to spawn blueprint actor: {response}")
|
|
181
|
-
return
|
|
182
|
-
|
|
183
|
-
logger.info("Blueprint actor spawned successfully!")
|
|
184
|
-
|
|
185
|
-
finally:
|
|
186
|
-
# Close the socket
|
|
187
|
-
sock.close()
|
|
188
|
-
|
|
189
|
-
except Exception as e:
|
|
190
|
-
logger.error(f"Error: {e}")
|
|
191
|
-
sys.exit(1)
|
|
192
|
-
|
|
193
|
-
if __name__ == "__main__":
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
Test script for creating and manipulating a basic Blueprint in Unreal Engine via MCP.
|
|
4
|
+
|
|
5
|
+
This script demonstrates the core Blueprint creation and manipulation workflow:
|
|
6
|
+
1. Creates a new Blueprint class (TestBP) derived from Actor
|
|
7
|
+
2. Adds a StaticMeshComponent named 'CubeVisual' to the Blueprint
|
|
8
|
+
3. Sets the component's mesh to a basic cube shape (/Engine/BasicShapes/Cube.Cube)
|
|
9
|
+
4. Compiles the Blueprint to apply the changes
|
|
10
|
+
5. Spawns an instance of the Blueprint in the level at [0, 0, 100]
|
|
11
|
+
|
|
12
|
+
The script serves as both a test of the MCP Blueprint manipulation functionality
|
|
13
|
+
and a basic example of how to programmatically create and modify Blueprints
|
|
14
|
+
through the MCP interface.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import sys
|
|
18
|
+
import os
|
|
19
|
+
import time
|
|
20
|
+
import socket
|
|
21
|
+
import json
|
|
22
|
+
import logging
|
|
23
|
+
from typing import Dict, Any, Optional
|
|
24
|
+
|
|
25
|
+
# Add the parent directory to the path so we can import the server module
|
|
26
|
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
|
27
|
+
|
|
28
|
+
# Set up logging
|
|
29
|
+
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
30
|
+
logger = logging.getLogger("TestBasicBlueprint")
|
|
31
|
+
|
|
32
|
+
def send_command(sock: socket.socket, command: str, params: Dict[str, Any]) -> Optional[Dict[str, Any]]:
|
|
33
|
+
"""Send a command to the Unreal MCP server and get the response."""
|
|
34
|
+
try:
|
|
35
|
+
# Create command object
|
|
36
|
+
command_obj = {
|
|
37
|
+
"type": command,
|
|
38
|
+
"params": params
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# Convert to JSON and send
|
|
42
|
+
command_json = json.dumps(command_obj)
|
|
43
|
+
logger.info(f"Sending command: {command_json}")
|
|
44
|
+
sock.sendall(command_json.encode('utf-8'))
|
|
45
|
+
|
|
46
|
+
# Receive response
|
|
47
|
+
chunks = []
|
|
48
|
+
while True:
|
|
49
|
+
chunk = sock.recv(4096)
|
|
50
|
+
if not chunk:
|
|
51
|
+
break
|
|
52
|
+
chunks.append(chunk)
|
|
53
|
+
|
|
54
|
+
# Try parsing to see if we have a complete response
|
|
55
|
+
try:
|
|
56
|
+
data = b''.join(chunks)
|
|
57
|
+
json.loads(data.decode('utf-8'))
|
|
58
|
+
# If we can parse it, we have the complete response
|
|
59
|
+
break
|
|
60
|
+
except json.JSONDecodeError:
|
|
61
|
+
# Not a complete JSON object yet, continue receiving
|
|
62
|
+
continue
|
|
63
|
+
|
|
64
|
+
# Parse response
|
|
65
|
+
data = b''.join(chunks)
|
|
66
|
+
response = json.loads(data.decode('utf-8'))
|
|
67
|
+
logger.info(f"Received response: {response}")
|
|
68
|
+
return response
|
|
69
|
+
|
|
70
|
+
except Exception as e:
|
|
71
|
+
logger.error(f"Error sending command: {e}")
|
|
72
|
+
return None
|
|
73
|
+
|
|
74
|
+
def main():
|
|
75
|
+
"""Main function to test creating a basic blueprint."""
|
|
76
|
+
try:
|
|
77
|
+
# Connect to Unreal MCP server
|
|
78
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
79
|
+
sock.connect(("127.0.0.1", 55557))
|
|
80
|
+
|
|
81
|
+
try:
|
|
82
|
+
# Step 1: Create a blueprint
|
|
83
|
+
bp_params = {
|
|
84
|
+
"name": "TestBP",
|
|
85
|
+
"parent_class": "Actor"
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
response = send_command(sock, "create_blueprint", bp_params)
|
|
89
|
+
|
|
90
|
+
# Fixed response check to handle nested structure
|
|
91
|
+
if not response or response.get("status") != "success":
|
|
92
|
+
logger.error(f"Failed to create blueprint: {response}")
|
|
93
|
+
return
|
|
94
|
+
|
|
95
|
+
# Check if blueprint already existed
|
|
96
|
+
if response.get("result", {}).get("already_exists"):
|
|
97
|
+
logger.info(f"Blueprint 'TestBP' already exists, reusing it")
|
|
98
|
+
else:
|
|
99
|
+
logger.info("Blueprint created successfully!")
|
|
100
|
+
|
|
101
|
+
# Step 2: Add a static mesh component
|
|
102
|
+
component_params = {
|
|
103
|
+
"blueprint_name": "TestBP",
|
|
104
|
+
"component_type": "StaticMeshComponent",
|
|
105
|
+
"component_name": "CubeVisual",
|
|
106
|
+
"location": [0.0, 0.0, 0.0],
|
|
107
|
+
"rotation": [0.0, 0.0, 0.0],
|
|
108
|
+
"scale": [1.0, 1.0, 1.0]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
# Close and reopen connection for each command
|
|
112
|
+
sock.close()
|
|
113
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
114
|
+
sock.connect(("127.0.0.1", 55557))
|
|
115
|
+
|
|
116
|
+
response = send_command(sock, "add_component_to_blueprint", component_params)
|
|
117
|
+
|
|
118
|
+
# Fixed response check to handle nested structure
|
|
119
|
+
if not response or response.get("status") != "success":
|
|
120
|
+
logger.error(f"Failed to add component: {response}")
|
|
121
|
+
return
|
|
122
|
+
|
|
123
|
+
logger.info("Component added successfully!")
|
|
124
|
+
|
|
125
|
+
# Step 3: Set the static mesh properties
|
|
126
|
+
sock.close()
|
|
127
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
128
|
+
sock.connect(("127.0.0.1", 55557))
|
|
129
|
+
|
|
130
|
+
mesh_params = {
|
|
131
|
+
"blueprint_name": "TestBP",
|
|
132
|
+
"component_name": "CubeVisual",
|
|
133
|
+
"static_mesh": "/Engine/BasicShapes/Cube.Cube"
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
response = send_command(sock, "set_static_mesh_properties", mesh_params)
|
|
137
|
+
|
|
138
|
+
# Fixed response check to handle nested structure
|
|
139
|
+
if not response or response.get("status") != "success":
|
|
140
|
+
logger.error(f"Failed to set static mesh properties: {response}")
|
|
141
|
+
return
|
|
142
|
+
|
|
143
|
+
logger.info("Static mesh properties set successfully!")
|
|
144
|
+
|
|
145
|
+
# Step 4: Compile the blueprint
|
|
146
|
+
sock.close()
|
|
147
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
148
|
+
sock.connect(("127.0.0.1", 55557))
|
|
149
|
+
|
|
150
|
+
compile_params = {
|
|
151
|
+
"blueprint_name": "TestBP"
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
response = send_command(sock, "compile_blueprint", compile_params)
|
|
155
|
+
|
|
156
|
+
# Fixed response check to handle nested structure
|
|
157
|
+
if not response or response.get("status") != "success":
|
|
158
|
+
logger.error(f"Failed to compile blueprint: {response}")
|
|
159
|
+
return
|
|
160
|
+
|
|
161
|
+
logger.info("Blueprint compiled successfully!")
|
|
162
|
+
|
|
163
|
+
# Step 5: Spawn an instance of the blueprint
|
|
164
|
+
sock.close()
|
|
165
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
166
|
+
sock.connect(("127.0.0.1", 55557))
|
|
167
|
+
|
|
168
|
+
spawn_params = {
|
|
169
|
+
"blueprint_name": "TestBP",
|
|
170
|
+
"actor_name": "TestBPInstance",
|
|
171
|
+
"location": [0.0, 0.0, 100.0], # 100 units up
|
|
172
|
+
"rotation": [0.0, 0.0, 0.0],
|
|
173
|
+
"scale": [1.0, 1.0, 1.0]
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
response = send_command(sock, "spawn_blueprint_actor", spawn_params)
|
|
177
|
+
|
|
178
|
+
# Fixed response check to handle nested structure
|
|
179
|
+
if not response or response.get("status") != "success":
|
|
180
|
+
logger.error(f"Failed to spawn blueprint actor: {response}")
|
|
181
|
+
return
|
|
182
|
+
|
|
183
|
+
logger.info("Blueprint actor spawned successfully!")
|
|
184
|
+
|
|
185
|
+
finally:
|
|
186
|
+
# Close the socket
|
|
187
|
+
sock.close()
|
|
188
|
+
|
|
189
|
+
except Exception as e:
|
|
190
|
+
logger.error(f"Error: {e}")
|
|
191
|
+
sys.exit(1)
|
|
192
|
+
|
|
193
|
+
if __name__ == "__main__":
|
|
194
194
|
main()
|