The ComponentFactory is a utility class that handles dynamic component creation and registration in the Pi-Engine.
public class ComponentFactory
| Property |
Type |
Description |
componentConstructors |
Map<String, Supplier<Component>> |
Static map of component constructors by name |
| Method |
Parameters |
Return Type |
Description |
registerComponentsFromPackage(String basePackage) |
String basePackage |
void |
Scans a package for Component subclasses and registers them |
registerComponent(Class<? extends Component> compClass) |
Class<? extends Component> compClass |
void |
Registers a single component class |
register(String name, Supplier<Component> constructor) |
String name, Supplier<Component> constructor |
void |
Registers a component constructor with a name |
| Method |
Parameters |
Return Type |
Description |
create(String name) |
String name |
Component |
Creates a component instance by name |
createComponent(int typeId) |
int typeId |
Component |
(Reserved) Creates a component by type ID |
| Method |
Parameters |
Return Type |
Description |
isRegistered(String name) |
String name |
boolean |
Checks if a component type is registered |
getRegisteredComponentNames() |
None |
Set<String> |
Gets all registered component names |
GetClass(String name) |
String name |
Class<? extends Component> |
Gets the class type of a component |
Clear() |
None |
void |
Clears all registered components |
// Register all components in a package
ComponentFactory.registerComponentsFromPackage("org.PiEngine.Component");
// Register a single component
ComponentFactory.registerComponent(MyComponent.class);
// Create a component by name
Component comp = ComponentFactory.create("MyComponent");
// Check registration
boolean exists = ComponentFactory.isRegistered("MyComponent");
// Get registered components
Set<String> components = ComponentFactory.getRegisteredComponentNames();
// Clear registrations
ComponentFactory.Clear();
- Component classes are discovered via reflection
- Each class must:
- Extend Component
- Have a public no-arg constructor
- Classes are registered by their simple name
- Constructor suppliers are created and cached
- Register components early in application startup
- Use clear, unique component names
- Handle registration failures gracefully
- Clear registrations when reloading scripts
- Check if components are registered before creation
- Use factory methods instead of direct instantiation