@Contract(pure = true)
  default @NotNull OptionController onPrefix(@NotNull String prefix, @NotNull OptionController prefixController) {
    String fullPrefix = prefix + ".";
    OptionController controller = this;
    return new OptionController() {
      @Override
      public void setOption(@NotNull String bindId, Object value) {
        if (bindId.startsWith(fullPrefix)) {
          prefixController.setOption(bindId.substring(fullPrefix.length()), value);
        }
        else {
          controller.setOption(bindId, value);
        }
      }

      @Override
      public Object getOption(@NotNull String bindId) {
        if (bindId.startsWith(fullPrefix)) {
          return prefixController.getOption(bindId.substring(fullPrefix.length()));
        }
        return controller.getOption(bindId);
      }

      @Override
      public @Nullable OptionControlInfo findControl(@NotNull String bindId) {
        if (bindId.startsWith(fullPrefix)) {
          return prefixController.findControl(bindId.substring(fullPrefix.length()));
        }
        return controller.findControl(bindId);
      }
    };
  }
@Contract(pure = true)
  default @NotNull OptionController onPrefix(@NotNull String prefix, @NotNull OptionController prefixController)