private Class<? extends Component> getComponentClass(EntityData.Component componentData) {
    if (componentData.hasTypeIndex()) {
      ComponentMetadata metadata =
          componentLibrary.getMetadata(componentIdTable.get(componentData.getTypeIndex()));
      if (metadata == null) {
        logger.log(
            Level.WARNING,
            "Unable to deserialise unknown component with id: " + componentData.getTypeIndex());
        return null;
      }
      return metadata.getType();
    } else if (componentData.hasType()) {
      ComponentMetadata metadata =
          componentLibrary.getMetadata(componentData.getType().toLowerCase(Locale.ENGLISH));
      if (metadata == null) {
        logger.log(
            Level.WARNING,
            "Unable to deserialise unknown component type: " + componentData.getType());
        return null;
      }
      return metadata.getType();
    }
    logger.log(Level.WARNING, "Unable to deserialise component, no type provided.");

    return null;
  }