Add crafting debug exec tools

This commit is contained in:
2026-05-17 18:08:48 -07:00
parent 3509641df8
commit 70eb22d716
5 changed files with 137 additions and 1 deletions
@@ -2,6 +2,7 @@
#include "AgrarianGamePlayerController.h"
#include "AgrarianCraftingComponent.h"
#include "AgrarianGameCharacter.h"
#include "AgrarianInventoryComponent.h"
#include "AgrarianItemPickup.h"
@@ -194,6 +195,49 @@ void AAgrarianGamePlayerController::AgrarianUseItem(FName ItemId, int32 Quantity
ServerAgrarianUseItem(ItemId, Quantity);
}
void AAgrarianGamePlayerController::AgrarianCraft(FName RecipeId)
{
if (RecipeId == NAME_None)
{
ClientMessage(TEXT("Usage: AgrarianCraft <RecipeId>"));
return;
}
ServerAgrarianCraft(RecipeId);
}
void AAgrarianGamePlayerController::AgrarianCraftStatus()
{
const AAgrarianGameCharacter* AgrarianCharacter = GetPawn<AAgrarianGameCharacter>();
const UAgrarianCraftingComponent* CraftingComponent = AgrarianCharacter ? AgrarianCharacter->GetCraftingComponent() : nullptr;
if (!CraftingComponent)
{
ClientMessage(TEXT("No Agrarian crafting component found."));
return;
}
TArray<FAgrarianRecipe> Recipes;
CraftingComponent->GetKnownRecipes(Recipes);
if (Recipes.IsEmpty())
{
ClientMessage(TEXT("No known Agrarian recipes."));
return;
}
ClientMessage(FString::Printf(TEXT("Known Agrarian recipes: %d"), Recipes.Num()));
for (const FAgrarianRecipe& Recipe : Recipes)
{
FText FailureReason;
const bool bCanCraft = CraftingComponent->CanCraft(Recipe.RecipeId, FailureReason);
const FString RecipeName = Recipe.DisplayName.IsEmpty() ? Recipe.RecipeId.ToString() : Recipe.DisplayName.ToString();
ClientMessage(FString::Printf(
TEXT("- %s (%s): %s"),
*RecipeName,
*Recipe.RecipeId.ToString(),
bCanCraft ? TEXT("ready") : *FailureReason.ToString()));
}
}
void AAgrarianGamePlayerController::AgrarianTravel(float X, float Y, float Z)
{
ServerAgrarianTravel(FVector(X, Y, Z));
@@ -372,6 +416,33 @@ void AAgrarianGamePlayerController::ServerAgrarianUseItem_Implementation(FName I
ClientMessage(FString::Printf(TEXT("Used %d x %s: %s."), UsedStack.Quantity, *ItemId.ToString(), *EffectSummary));
}
void AAgrarianGamePlayerController::ServerAgrarianCraft_Implementation(FName RecipeId)
{
AAgrarianGameCharacter* AgrarianCharacter = GetPawn<AAgrarianGameCharacter>();
UAgrarianCraftingComponent* CraftingComponent = AgrarianCharacter ? AgrarianCharacter->GetCraftingComponent() : nullptr;
if (!CraftingComponent)
{
ClientMessage(TEXT("No Agrarian crafting component found."));
return;
}
FText FailureReason;
if (!CraftingComponent->CanCraft(RecipeId, FailureReason))
{
ClientMessage(FString::Printf(TEXT("Cannot craft %s: %s"), *RecipeId.ToString(), *FailureReason.ToString()));
return;
}
if (CraftingComponent->Craft(RecipeId))
{
ClientMessage(FString::Printf(TEXT("Crafted %s."), *RecipeId.ToString()));
}
else
{
ClientMessage(FString::Printf(TEXT("Failed to craft %s."), *RecipeId.ToString()));
}
}
void AAgrarianGamePlayerController::ServerAgrarianTravel_Implementation(FVector Destination)
{
APawn* ControlledPawn = GetPawn();
@@ -75,6 +75,12 @@ public:
UFUNCTION(Exec)
void AgrarianUseItem(FName ItemId, int32 Quantity);
UFUNCTION(Exec)
void AgrarianCraft(FName RecipeId);
UFUNCTION(Exec)
void AgrarianCraftStatus();
UFUNCTION(Exec)
void AgrarianTravel(float X, float Y, float Z);
@@ -103,6 +109,9 @@ protected:
UFUNCTION(Server, Reliable)
void ServerAgrarianUseItem(FName ItemId, int32 Quantity);
UFUNCTION(Server, Reliable)
void ServerAgrarianCraft(FName RecipeId);
UFUNCTION(Server, Reliable)
void ServerAgrarianTravel(FVector Destination);
};