public @NotNull <T> T getRequiredData(@NotNull DataKey<T> key) {
    T data = getData(key);
    assert data != null : key.getName() + " is missing";
    return data;
  }
public @NotNull <T> T getRequiredData(@NotNull DataKey<T> key)