{"id":1094,"date":"2022-06-22T20:15:44","date_gmt":"2022-06-22T11:15:44","guid":{"rendered":"https:\/\/colory-games.net\/site\/?p=1094"},"modified":"2023-04-20T20:41:50","modified_gmt":"2023-04-20T11:41:50","slug":"create-your-own-blueprint-node-by-inheriting-k2node-1-basic-en","status":"publish","type":"post","link":"https:\/\/colory-games.net\/site\/en\/create-your-own-blueprint-node-by-inheriting-k2node-1-basic-en\/","title":{"rendered":"[UE5] Create Your Own Blueprint Node by Inheriting K2Node (1) Basic"},"content":{"rendered":"\n<div class=\"wp-block-jetpack-markdown\"><p>When you create your own Blueprint node in the Unreal Engine, creating a library function is a one of the way.<br>\nHowever, there is a limitation to create a Blueprint node with library functions.<br>\nFor example, it is not possible to create complex nodes with execution control, such as &quot;Switch on Int&quot;.<\/p>\n<p>This article explains how to create a Blueprint node by inheriting from the class UK2Node.<br>\nCreating a Blueprint node is an in-depth content, so we will divide the topics.<\/p>\n<ul>\n<li>Create Your Own Blueprint Node by Inheriting K2Node (1) Basic &lt;&#8212; This article<\/li>\n<li><a href=\"https:\/\/colory-games.net\/site\/en\/create-your-own-blueprint-node-by-inheriting-k2node-2-execution-pin-en\/\">Create Your Own Blueprint Node by Inheriting K2Node (2) Execution Pin<\/a><\/li>\n<li><a href=\"https:\/\/colory-games.net\/site\/en\/create-your-own-blueprint-node-by-inheriting-k2node-3-menu-en\/\">Create Your Own Blueprint Node by Inheriting K2Node (3) Menu<\/a><\/li>\n<li><a href=\"https:\/\/colory-games.net\/site\/en\/create-your-own-blueprint-node-by-inheriting-k2node-4-ui-en\/\">Create Your Own Blueprint Node by Inheriting K2Node (4) UI<\/a><\/li>\n<\/ul>\n<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">\u76ee\u6b21<\/p><ul class=\"toc_list\"><li><a href=\"#Source_Code\">Source Code<\/a><\/li><li><a href=\"#Specification_of_the_Blueprint_Node\">Specification of the Blueprint Node<\/a><\/li><li><a href=\"#Create_a_Module\">Create a Module<\/a><\/li><li><a href=\"#Create_a_Blueprint_Node\">Create a Blueprint Node<\/a><\/li><li><a href=\"#Use_the_Created_Node\">Use the Created Node<\/a><\/li><\/ul><\/div>\n<h1><span id=\"Source_Code\">Source Code<\/span><\/h1>\n<p>The complete source code is available on GitHub.<\/p>\n<p>[https:\/\/github.com\/colory-games\/techblog-sample-projects\/tree\/main\/nutti\/20220622](https:\/\/github.com\/colory-games\/techblog- sample-projects\/tree\/main\/nutti\/20220622)<\/p>\n<p>To run the source code, follow these steps.<\/p>\n<ol>\n<li>Place the directory <code>MyDivide<\/code> into <code>Plugins<\/code> in your Unreal Engine project directory.<\/li>\n<li>Right click on the <code>.uproject<\/code> file and create a project file for Visual Studio.<\/li>\n<li>Open the project file and build the project.<\/li>\n<li>Run Unreal Engine from the <code>.uproject<\/code> file and activate the &quot;MyDivide&quot; plugin.<\/li>\n<\/ol>\n<h1><span id=\"Specification_of_the_Blueprint_Node\">Specification of the Blueprint Node<\/span><\/h1>\n<p>The specification of the Blueprint node &quot;MyDivide&quot; is as follows.<\/p>\n<ul>\n<li>Takes two integers &quot;A&quot; and &quot;B&quot; as input and outputs the quotient &quot;Quotient&quot; of A divided by B and the remainder &quot;Remainder&quot;.<\/li>\n<li>No execution pin. (Pure function)<\/li>\n<\/ul>\n<p>The node we are going to create is a node that can be created using the Blueprint Editor.<br>\nHowever, we will create it using the class UK2Node.<\/p>\n<h1><span id=\"Create_a_Module\">Create a Module<\/span><\/h1>\n<p>In this section, the source code structure is designed to provide the Blueprint node &quot;MyDivide&quot; in plugin format.<\/p>\n<p>First, we will show the contents of the <code>Build.cs<\/code> file.<br>\nThe necessary modules to create a Blueprint node are added.<\/p>\n<pre><code class=\"language-c#\">using UnrealBuildTool;\n\npublic class MyDivide : ModuleRules\n{\n    public MyDivide(ReadOnlyTargetRules Target) : base(Target)\n    {\n        PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;\n\n        PublicDependencyModuleNames.AddRange(new string[]{\n            &quot;Core&quot;,\n            &quot;CoreUObject&quot;,\n            &quot;Engine&quot;\n        });\n\n        PrivateDependencyModuleNames.AddRange(new string[]{\n            &quot;BlueprintGraph&quot;,\n            &quot;GraphEditor&quot;,\n            &quot;KismetCompiler&quot;,\n            &quot;SlateCore&quot;,\n            &quot;UnrealEd&quot;\n        });\n    }\n}\n<\/code><\/pre>\n<p>Also, add the following entry to <code>Modules<\/code> in the <code>.uplugin<\/code> file.<\/p>\n<pre><code class=\"language-json\">{\n    &quot;Name&quot;: &quot;MyDivide&quot;,\n    &quot;Type&quot;: &quot;UncookedOnly&quot;,\n    &quot;LoadingPhase&quot;: &quot;PreLoadingScreen&quot;\n}\n<\/code><\/pre>\n<h1><span id=\"Create_a_Blueprint_Node\">Create a Blueprint Node<\/span><\/h1>\n<p>We can create a Blueprint node by the following steps.<\/p>\n<ol>\n<li>Inherit class <code>UK2Node<\/code>.<\/li>\n<li>Setup basic information.<\/li>\n<li>Add pins.<\/li>\n<li>Make Pure function.<\/li>\n<li>Define the process of data pin.<\/li>\n<\/ol>\n<p><div class=step-group><\/p>\n<p><div class=step-title>Inherit class UK2Node<\/div><\/p>\n<p>Blueprint nodes are defined by inheriting from class <code>UK2Node<\/code>.<br>\nCreate a header file <code>K2Node_MyDivide.h<\/code> and define the class <code>UK2Node_MyDivide<\/code>.<\/p>\n<pre><code class=\"language-cpp\">UCLASS(meta = (Keywords = &quot;MyDivide Divide&quot;))\nclass UK2Node_MyDivide : public UK2Node\n{\n    GENERATED_BODY()\n\n    \/\/ Overrided from UEdGraphNode.\n    virtual void AllocateDefaultPins() override;\n    virtual FText GetTooltipText() const override;\n    virtual FLinearColor GetNodeTitleColor() const override;\n    virtual FText GetNodeTitle(ENodeTitleType::Type TitleType) const override;\n    virtual FSlateIcon GetIconAndTint(FLinearColor&amp; OutColor) const override;\n\n    \/\/ Overrided from UK2Node.\n    virtual bool IsNodePure() const override;\n    virtual void GetMenuActions(FBlueprintActionDatabaseRegistrar&amp; ActionRegistrar) const override;\n    virtual FText GetMenuCategory() const override;\n    void ExpandNode(FKismetCompilerContext&amp; CompilerContext, UEdGraph* SourceGraph) override;\n};\n<\/code><\/pre>\n<p>The following member functions are declared in the class <code>UK2Node_MyDivide<\/code>.<\/p>\n<table>\n<thead>\n<tr>\n<th><strong>Member Function<\/strong><\/th>\n<th><strong>Role<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>AllocateDefaultPins<\/code><\/td>\n<td>Allocate default pins.<\/td>\n<\/tr>\n<tr>\n<td><code>GetTooltipText<\/code><\/td>\n<td>Set the text of the Tooltip.<\/td>\n<\/tr>\n<tr>\n<td><code>GetNodeTitleColor<\/code><\/td>\n<td>Set the color of the title section.<\/td>\n<\/tr>\n<tr>\n<td><code>GetNodeTitle<\/code><\/td>\n<td>Set the text to display in the title section.<\/td>\n<\/tr>\n<tr>\n<td><code>GetIconAndTint<\/code><\/td>\n<td>Set the icon to display in the title section.<\/td>\n<\/tr>\n<tr>\n<td><code>IsNodePure<\/code><\/td>\n<td>If <code>true<\/code> is returned, the node will be a Pure function.<\/td>\n<\/tr>\n<tr>\n<td><code>GetMenuActions<\/code><\/td>\n<td>Make nodes available from the Blueprint editor.<\/td>\n<\/tr>\n<tr>\n<td><code>GetMenuCategory<\/code><\/td>\n<td>Set the category for the node search menu.<\/td>\n<\/tr>\n<tr>\n<td><code>ExpandNode<\/code><\/td>\n<td>Add\/Remove node at compilation time.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><div class=step-title>Setup Basic Information<\/div><\/p>\n<p>Create the definitions of the member functions you declared.<br>\nCreate a source file <code>K2Node_MyDivide.cpp<\/code> and define each member function.\nFor details, refer to the comments in each function.<\/p>\n<pre><code class=\"language-cpp\">FText UK2Node_MyDivide::GetTooltipText() const\n{\n    \/\/ Returns text to be displayed in Tooltip.\n    return LOCTEXT(&quot;MyDivide_Tooltip&quot;, &quot;MyDivide\\nGet quotient and remainder from dividing two integer&quot;);\n}\n\nFLinearColor UK2Node_MyDivide::GetNodeTitleColor() const\n{\n    \/\/ The color of the title section is the same color as the integer type (Integer) pin.\n    return GetDefault()->IntPinTypeColor;\n}\n\nFText UK2Node_MyDivide::GetNodeTitle(ENodeTitleType::Type TitleType) const\n{\n    \/\/ Returns text to be displayed in the title section.\n    return LOCTEXT(&quot;MyDivide&quot;, &quot;MyDivide&quot;);\n}\n\nFSlateIcon UK2Node_MyDivide::GetIconAndTint(FLinearColor&amp; OutColor) const\n{\n    \/\/ Display the function icon in the title section.\n    static FSlateIcon Icon(&quot;EditorStyle&quot;, &quot;Kismet.AllClasses.FunctionIcon&quot;);\n    return Icon;\n}\n\nvoid UK2Node_MyDivide::GetMenuActions(FBlueprintActionDatabaseRegistrar&amp; ActionRegistrar) const\n{\n    UClass* ActionKey = GetClass();\n    if (ActionRegistrar.IsOpenForRegistration(ActionKey))\n    {\n        UBlueprintNodeSpawner* NodeSpawner = UBlueprintNodeSpawner::Create(GetClass());\n        check(NodeSpawner != nullptr);\n\n        ActionRegistrar.AddBlueprintAction(ActionKey, NodeSpawner);\n    }\n}\n\nFText UK2Node_MyDivide::GetMenuCategory() const\n{\n    \/\/ Register the category &quot;Math&quot;.\n    return FEditorCategoryUtils::GetCommonCategory(FCommonEditorCategory::Math);\n}\n<\/code><\/pre>\n<p>The member function <code>GetMenuActions<\/code> adds the node &quot;MyDivide&quot; to the right-clicked menu in the Blueprint Editor.<br>\nNote that the node &quot;MyDivide&quot; will not appear in the menu if you forget to implement the member function <code>GetMenuActions<\/code>.<br>\nThis process is same when you create a Blueprint node, so you can reuse this implementation.<br>\nAlso, by implementing the member function <code>GetMenuCategory<\/code>, the node <code>MyDivide<\/code> is registered in the category <code>Math<\/code>.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/custom_node_basic_information.png?ssl=1\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/custom_node_basic_information.png?ssl=1\" alt=\"Basic Information Settings\" data-recalc-dims=\"1\"><\/a><\/p>\n<p><div class=step-title>Add Pins<\/div><\/p>\n<p>Add the following pins according to the specification.<\/p>\n<table>\n<thead>\n<tr>\n<th><strong>Pin Name<\/strong><\/th>\n<th><strong>Input\/Output<\/strong><\/th>\n<th><strong>Role<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>A<\/td>\n<td>Input<\/td>\n<td>Input of integer.<\/td>\n<\/tr>\n<tr>\n<td>B<\/td>\n<td>Input<\/td>\n<td>Input of integer.<\/td>\n<\/tr>\n<tr>\n<td>Quotient<\/td>\n<td>Output<\/td>\n<td>Quotient of A divided by B.<\/td>\n<\/tr>\n<tr>\n<td>Remainder<\/td>\n<td>Output<\/td>\n<td>Remainder of A divided by B.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>We need to add those pins.<br>\n<code>AllocateDefaultPins<\/code> is the member funciton which defines the process of adding pins to the node.<\/p>\n<pre><code class=\"language-cpp\">namespace\n{\nstatic const FName APinName(TEXT(&quot;A&quot;));\nstatic const FName BPinName(TEXT(&quot;B&quot;));\nstatic const FName QuotientPinName(TEXT(&quot;Quotient&quot;));\nstatic const FName RemainderPinName(TEXT(&quot;Remainder&quot;));\n}\n\nvoid UK2Node_MyDivide::AllocateDefaultPins()\n{\n    CreatePin(EGPD_Input, UEdGraphSchema_K2::PC_Int, APinName);\n    CreatePin(EGPD_Input, UEdGraphSchema_K2::PC_Int, BPinName);\n    CreatePin(EGPD_Output, UEdGraphSchema_K2::PC_Int, QuotientPinName);\n    CreatePin(EGPD_Output, UEdGraphSchema_K2::PC_Int, RemainderPinName);\n}\n<\/code><\/pre>\n<p>We can add pins by calling the member function <code>CreatePin<\/code>.<br>\nThe first argument specifies the input\/output direction of the pin.<br>\nSpecify <code>EGPD_Input<\/code> for input or <code>EGPD_Output<\/code> for output.<\/p>\n<p>The second argument specifies the pin type.<br>\nSince all pins are integer type (Integer), specify <code>UEdGraphSchema_K2::PC_Int<\/code>.<\/p>\n<p>The third argument specifies the pin name.<\/p>\n<p><div class=step-title>Make Pure function<\/div><\/p>\n<p>We can make the node Pure function by returning <code>True<\/code> from the member function <code>IsNodePure<\/code>.<\/p>\n<pre><code class=\"language-cpp\">bool UK2Node_MyDivide::IsNodePure() const\n{\n    return true;\n}\n<\/code><\/pre>\n<p><div class=step-title>Define the Process of Data Pin<\/div><\/p>\n<p>Finally, define the process of the data pins.<br>\nThe process of data pin must be defined as a computational graph.<\/p>\n<p>The node receives two integers &quot;A&quot; and &quot;B&quot; as input and output the quotient &quot;Quotient&quot; of A divided by B and the remainder &quot;Remainder&quot;.<br>\nWe will show the code to realize this in a Blueprint.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/blueprint_implementation.png?ssl=1\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/blueprint_implementation.png?ssl=1\" alt=\"Implement in Blueprint\" data-recalc-dims=\"1\"><\/a><\/p>\n<ul>\n<li>Connect input pins &quot;A&quot; and &quot;B&quot; to the input of the &quot;\/&quot; node and its output to the output pin &quot;Quotient&quot;.<\/li>\n<li>Connect input pins &quot;A&quot; and &quot;B&quot; to the input of the &quot;%&quot; node and its output to the output pin &quot;Remainder&quot;.<\/li>\n<\/ul>\n<p>The &quot;\/&quot; node corresponds to a call the library function &quot;Divide_IntInt&quot; of &quot;UKismetMathLibrary&quot;.<br>\nThe &quot;%&quot; node corresponds to a call the library function &quot;Percent_IntInt&quot; of &quot;UKismetMathLibrary&quot;.<br>\nTherefore, it is sufficient to define a process in the member function <code>ExpandNode<\/code> to realize the following operations.<\/p>\n<ul>\n<li>Call the library function &quot;Divide_IntInt&quot; with the input pins &quot;A&quot; and &quot;B&quot; as inputs, and connect the result to the output pin &quot;Quotient&quot;.<\/li>\n<li>Call the library function `Percent_IntInt&#8217; with the input pins &quot;A&quot; and &quot;B&quot; as inputs, and connect the result to the output pin &quot;Remainder<\/li>\n<\/ul>\n<p>We will show the source code of the member function <code>ExpandNode<\/code>.<\/p>\n<pre><code class=\"language-cpp\">void UK2Node_MyDivide::ExpandNode(FKismetCompilerContext&amp; CompilerContext, UEdGraph* SourceGraph)\n{\n    \/\/ This equals to the placement of &quot;\/&quot; node.\n    UK2Node_CallFunction* CallDivideFunction = CompilerContext.SpawnIntermediateNode(this, SourceGraph);\n    CallDivideFunction->SetFromFunction(UKismetMathLibrary::StaticClass()->FindFunctionByName(GET_MEMBER_NAME_CHECKED(UKismetMathLibrary, Divide_IntInt)));\n    CallDivideFunction->AllocateDefaultPins();\n    CompilerContext.MovePinLinksToIntermediate(*FindPinChecked(QuotientPinName), *CallDivideFunction->GetReturnValuePin());\n    CompilerContext.MovePinLinksToIntermediate(*FindPinChecked(APinName), *CallDivideFunction->FindPinChecked(TEXT(&quot;A&quot;)));\n    CompilerContext.MovePinLinksToIntermediate(*FindPinChecked(BPinName), *CallDivideFunction->FindPinChecked(TEXT(&quot;B&quot;)));\n\n    \/\/ This equals to the placement of &quot;%&quot; node.\n    UK2Node_CallFunction* CallPercentFunction = CompilerContext.SpawnIntermediateNode(this, SourceGraph);\n    CallPercentFunction->SetFromFunction(UKismetMathLibrary::StaticClass()->FindFunctionByName(GET_MEMBER_NAME_CHECKED(UKismetMathLibrary, Percent_IntInt)));\n    CallPercentFunction->AllocateDefaultPins();\n    CompilerContext.MovePinLinksToIntermediate(*FindPinChecked(RemainderPinName), *CallPercentFunction->GetReturnValuePin());\n    CompilerContext.MovePinLinksToIntermediate(*FindPinChecked(APinName), *CallPercentFunction->FindPinChecked(TEXT(&quot;A&quot;)));\n    CompilerContext.MovePinLinksToIntermediate(*FindPinChecked(BPinName), *CallPercentFunction->FindPinChecked(TEXT(&quot;B&quot;)));\n}\n<\/code><\/pre>\n<p>You can add a node to call a library function by calling the member function <code>SpawnIntermediateNode<\/code> of the <code>CompilerContext<\/code> with template parameter <code>UK2Node_CallFunction<\/code>.<\/p>\n<p>The member function <code>SetFromFunction<\/code> of <code>UK2Node_CallFunction<\/code> is used to specify the library function to be called.<br>\nWe can see that the first added node (<code>CallDivideFunction<\/code>) is same as placing the &quot;\/&quot; node.<br>\nSince the pins for the &quot;\/&quot; node have not been added, we need to call the member function <code>AllocateDefaultPins<\/code> to add them.<\/p>\n<p>The member function <code>MovePinLinksToIntermediate<\/code> of <code>CompilerContext<\/code> connects the two specified pins.<br>\nWe will connect the pins as follows.<\/p>\n<ul>\n<li>The output pin &quot;Quotient&quot; and the output pin of <code>CallDivideFunction<\/code>.<\/li>\n<li>Input pin &quot;A&quot; and the input pin &quot;A&quot; of <code>CallDivideFunction<\/code>.<\/li>\n<li>Input pin &quot;B&quot; and the input pin &quot;B&quot; of <code>CallDivideFunction<\/code>.<\/li>\n<\/ul>\n<p>Add the &quot;%&quot; node in the same way.<br>\nThe implementation is finished now.<br>\nVerify that the source code can be built correctly.<\/p>\n<p><\/div><\/p>\n<h1><span id=\"Use_the_Created_Node\">Use the Created Node<\/span><\/h1>\n<p>Let&#8217;s use the node you created.\nOpen the Blueprint Editor, right-click to display the menu, and enter &quot;mydivide&quot; in the search box.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/use_custom_node_search.png?ssl=1\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/use_custom_node_search.png?ssl=1\" alt=\"Search Node &quot;MyDivide&quot;\" data-recalc-dims=\"1\"><\/a><\/p>\n<p>Select and place the node &quot;MyDivide&quot; in the category &quot;Math&quot;.<\/p>\n<p>Create an Actor with appropriate input values.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/use_custom_node_build_actor.png?ssl=1\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/use_custom_node_build_actor.png?ssl=1\" alt=\"Create Actor\" data-recalc-dims=\"1\"><\/a><\/p>\n<p>When the created Actor is placed in the level, we can see that the quotient and remainder by division.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/use_custom_node_run.png?ssl=1\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/colory-games.net\/site\/wp-content\/uploads\/tech-blog\/nutti\/2022\/06\/20220622\/use_custom_node_run.png?ssl=1\" alt=\"Execute Node &quot;MyDivide&quot;\" data-recalc-dims=\"1\"><\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>When you create your own Blueprint node in the Unreal Engine, creating a library function is a one of the way.<br \/>\nHowever, there is a limitation to create a Blueprint node with library functions.<br \/>\nFor example, it is not possible to create complex nodes with execution control, such as &#8220;Switch on Int&#8221;.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"templates\/single-home-techblog.php","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":false,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[154,71],"tags":[177],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/posts\/1094"}],"collection":[{"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/comments?post=1094"}],"version-history":[{"count":4,"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/posts\/1094\/revisions"}],"predecessor-version":[{"id":1153,"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/posts\/1094\/revisions\/1153"}],"wp:attachment":[{"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/media?parent=1094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/categories?post=1094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/colory-games.net\/site\/wp-json\/wp\/v2\/tags?post=1094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}