@Override
  public @NotNull Component render(@NotNull Component component, final @NotNull C context) {
    if (component instanceof VirtualComponent) {
      component = this.renderVirtual((VirtualComponent) component, context);
    }
    if (component instanceof TextComponent) {
      return this.renderText((TextComponent) component, context);
    } else if (component instanceof TranslatableComponent) {
      return this.renderTranslatable((TranslatableComponent) component, context);
    } else if (component instanceof KeybindComponent) {
      return this.renderKeybind((KeybindComponent) component, context);
    } else if (component instanceof ScoreComponent) {
      return this.renderScore((ScoreComponent) component, context);
    } else if (component instanceof SelectorComponent) {
      return this.renderSelector((SelectorComponent) component, context);
    } else if (component instanceof NBTComponent<?, ?>) {
      if (component instanceof BlockNBTComponent) {
        return this.renderBlockNbt((BlockNBTComponent) component, context);
      } else if (component instanceof EntityNBTComponent) {
        return this.renderEntityNbt((EntityNBTComponent) component, context);
      } else if (component instanceof StorageNBTComponent) {
        return this.renderStorageNbt((StorageNBTComponent) component, context);
      }
    }
    return component;
  }
An abstract implementation of a component renderer.

@param <C> the context type
@since 4.0.0
api/src/main/java/net/kyori/adventure/text/renderer/AbstractComponentRenderer.java