@Override
  public <T> void putUserData(@NotNull Key<T> key, @Nullable T value) {
    boolean changed = !Objects.equals(value, getUserData(key));
    super.putUserData(key, value);
    if (changed) {
      notifyObservers();
    }
  }
@Override
  public <T> void putUserData(@NotNull Key<T> key, @Nullable T value)