@Contract(pure = true)
  default @NotNull OptionController onValueSet(@NotNull BiConsumer<@NotNull String, Object> consumer) {
    OptionController delegate = this;
    return new OptionController() {
      @Override
      public void setOption(@NotNull String bindId, Object value) {
        delegate.setOption(bindId, value);
        consumer.accept(bindId, value);
      }

      @Override
      public Object getOption(@NotNull String bindId) {
        return delegate.getOption(bindId);
      }

      @Override
      public @Nullable OptionControlInfo findControl(@NotNull String bindId) {
        return delegate.findControl(bindId);
      }
    };
  }
@Contract(pure = true)
  default @NotNull OptionController onValueSet(@NotNull BiConsumer<@NotNull String, Object> consumer)