package org.terasology.entitySystem.metadata; import org.terasology.entitySystem.Component; /** * The library for metadata about components (and their fields). * * @author Immortius <immortius@gmail.com> */ public interface ComponentLibrary extends Iterable<ComponentMetadata> { /** * Registers a handler for a specific type. * <p/> * Type handlers are used when analysing a component class, and provide the functionality for serializing, * deserializing and cloning supported types * * @param forClass The type to support * @param handler The handler for forClass * @param <T> */ <T> void registerTypeHandler(Class<? extends T> forClass, TypeHandler<T> handler); /** * Registers a componentClass * * @param componentClass */ <T extends Component> void registerComponentClass(Class<T> componentClass); /** * @param componentClass * @param <T> * @return The metadata for the given componentClass, or null if not registered. */ <T extends Component> ComponentMetadata<T> getMetadata(Class<T> componentClass); <T extends Component> ComponentMetadata<? extends T> getMetadata(T component); /** * Copies a component * * @param component * @param <T> * @return A copy of the component, or null if not registered */ <T extends Component> T copy(T component); /** * @param componentName * @return The metadata for the given component, or null if not registered. */ ComponentMetadata<?> getMetadata(String componentName); }