BlueprintImplementableEvent doesn't show in blueprint

I am trying to add a BlueprintImplementableEvent to my c++ code so that I can fire the event in c++ and then act on the event in my blueprint.

I added the event in my c++ header

UFUNCTION(BlueprintImplementableEvent, Category = "Test Event")
	void TestEvent(const FString &RxData);

It built sucessfully but I can’t find the event in the blueprint editor to add it.

I’m sure I’m missing something simple, but I’ve looked through several examples and can’t figure it out.

Hey,

Just to get more data on your problem :

this is in an actor class or a component class ?

this is either protected or public ?

in what kind of blueprint ? self actor ? self component ? Owner actor ? Level ?

did you use hot reload or classic rebuild ? ( try classic rebuild )

try again without input for the event and if it is displayed, try add input again.

this is in an actor class or a component class ?
→ The event is in a UBlueprintFunctionLibrary,
this is either protected or public ?
→ Public

in what kind of blueprint ? self actor ? self component ? Owner actor ? Level ?
→ I’m very new to unreal, so I’m not sure the difference between self actor, owner actor, etc. It isn’t in the level blueprint. It says in the top right the parent class is Actor. To create it I selected several static mesh actors and selected “Convert selected components to blueprint class”

did you use hot reload or classic rebuild ? ( try classic rebuild )
→ I tried classic rebuild

try again without input for the event and if it is displayed, try add input again.
→ It isn’t showed when I build without input either

#pragma once

#include "Kismet/BlueprintFunctionLibrary.h"
#include "TcpBlueprintBPLibrary.generated.h"

/* 
*	Function library class.
*	Each function in it is expected to be static and represents blueprint node that can be called in any blueprint.
*
*	When declaring function you can define metadata for the node. Key function specifiers will be BlueprintPure and BlueprintCallable.
*	BlueprintPure - means the function does not affect the owning object in any way and thus creates a node without Exec pins.
*	BlueprintCallable - makes a function which can be executed in Blueprints - Thus it has Exec pins.
*	DisplayName - full name of the node, shown when you mouse over the node and in the blueprint drop down menu.
*				Its lets you name the node using characters not allowed in C++ function names.
*	CompactNodeTitle - the word(s) that appear on the node.
*	Keywords -	the list of keywords that helps you to find node when you search for it using Blueprint drop-down menu. 
*				Good example is "Print String" node which you can find also by using keyword "log".
*	Category -	the category your node will be under in the Blueprint drop-down menu.
*
*	For more info on custom blueprint nodes visit documentation:
*	https://wiki.unrealengine.com/Custom_Blueprint_Node_Creation
*/
UCLASS()
class UTcpBlueprintBPLibrary : public UBlueprintFunctionLibrary
{
public:
	GENERATED_UCLASS_BODY()

	UFUNCTION(BlueprintImplementableEvent, Category = "Test Event")
	void TestEvent();
};

ok, i’m not sure if you can put an even on a BlueprintFunctionLibrary…
Could you tell me what you are trying to do so i can help you ?

At the end of the day I’m trying to add an interface so I can swap materials on some items during runtime.

So I created a tcp client in c++ that is called from the blueprint I created, and then it acts on the received data.

I am working to make the tcp receive an async task and then fire an event when data is received. Right now I do all of this in one blueprint, but if it is better to split it up I can ( I wasn’t sure if I should do the tcp client connect / receive as an async task in the level blueprint and then fire an event which each component has a blueprint that acts on it).

Ok, so here is what i would do :

//.h
	UFUNCTION(BlueprintCallable, meta = (DisplayName = "Connect", ScriptName = "Connect"), Category = "Utilities|TCP")
		static void ConnectToServer(UPARAM(DisplayName = "Event") FTimerDynamicDelegate Delegate);

//.cpp
void UHelpers::ConnectToServer(FTimerDynamicDelegate Delegate)
{
//do connection thing get data and then : 
		if (Delegate.IsBound())
		{
			Delegate.Execute();		
		}
}

then when you create this node, drag the delegate pin and do “create event” that new event node is now called by the “Delegate.Execute();” line ! ( so from here you can simply call your tcprx function )

This is perfect, thank you!