This repository has been archived on 2026-05-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AgrarianGameArchive/Scripts/verify_agrarian_player_blueprints.py
T
2026-05-17 17:57:17 -07:00

89 lines
3.1 KiB
Python

import unreal
CHARACTER_BLUEPRINT_PATH = "/Game/Agrarian/Blueprints/Characters/BP_AgrarianPlayerCharacter"
CONTROLLER_BLUEPRINT_PATH = "/Game/Agrarian/Blueprints/Characters/BP_AgrarianPlayerController"
GAME_MODE_BLUEPRINT_PATH = "/Game/Agrarian/Blueprints/Characters/BP_AgrarianGameMode"
EXPECTED_RECIPE_IDS = [
"campfire",
"primitive_frame",
"primitive_wall_panel",
"primitive_roof_panel",
"primitive_shelter",
"basic_tool",
"simple_container",
"bandage",
]
def class_path(value):
if not value:
return ""
return value.get_path_name().split(".")[0]
def load_blueprint_class(path):
generated_class = unreal.EditorAssetLibrary.load_blueprint_class(path)
if not generated_class:
raise RuntimeError(f"Could not load generated Blueprint class: {path}")
return generated_class
def main():
failures = []
for path in [CHARACTER_BLUEPRINT_PATH, CONTROLLER_BLUEPRINT_PATH, GAME_MODE_BLUEPRINT_PATH]:
if not unreal.EditorAssetLibrary.does_asset_exist(path):
failures.append(f"{path} missing")
character_class = load_blueprint_class(CHARACTER_BLUEPRINT_PATH)
controller_class = load_blueprint_class(CONTROLLER_BLUEPRINT_PATH)
game_mode_class = load_blueprint_class(GAME_MODE_BLUEPRINT_PATH)
game_mode_cdo = unreal.get_default_object(game_mode_class)
default_pawn_path = class_path(game_mode_cdo.get_editor_property("default_pawn_class"))
player_controller_path = class_path(game_mode_cdo.get_editor_property("player_controller_class"))
if default_pawn_path != CHARACTER_BLUEPRINT_PATH:
failures.append(
f"Game mode default pawn expected {CHARACTER_BLUEPRINT_PATH}, got {default_pawn_path}"
)
if player_controller_path != CONTROLLER_BLUEPRINT_PATH:
failures.append(
"Game mode player controller expected "
f"{CONTROLLER_BLUEPRINT_PATH}, got {player_controller_path}"
)
character_cdo = unreal.get_default_object(character_class)
if not character_cdo:
failures.append(f"{CHARACTER_BLUEPRINT_PATH} CDO missing")
else:
crafting_component = character_cdo.get_editor_property("crafting_component")
recipe_assets = crafting_component.get_editor_property("known_recipe_assets") if crafting_component else []
recipe_ids = [
str(asset.get_editor_property("recipe").get_editor_property("recipe_id"))
for asset in recipe_assets
if asset
]
if recipe_ids != EXPECTED_RECIPE_IDS:
failures.append(
"BP_AgrarianPlayerCharacter known recipes expected "
f"{EXPECTED_RECIPE_IDS}, got {recipe_ids}"
)
controller_cdo = unreal.get_default_object(controller_class)
if not controller_cdo:
failures.append(f"{CONTROLLER_BLUEPRINT_PATH} CDO missing")
if failures:
raise RuntimeError("Agrarian player Blueprint verification failed: " + "; ".join(failures))
unreal.log(
"Agrarian player Blueprint verification complete: "
"native Agrarian character, controller, and game mode asset paths load correctly."
)
main()