diff --git a/src/main/java/net/kyori/option/OptionState.java b/src/main/java/net/kyori/option/OptionState.java index 2a1cc3b..606c5eb 100644 --- a/src/main/java/net/kyori/option/OptionState.java +++ b/src/main/java/net/kyori/option/OptionState.java @@ -142,7 +142,7 @@ interface Builder { * @param the value type * @since 1.0.0 */ - Builder value(final Option option, final V value); + Builder value(final Option option, final @Nullable V value); /** * Apply all values from the existing option state. diff --git a/src/main/java/net/kyori/option/OptionStateImpl.java b/src/main/java/net/kyori/option/OptionStateImpl.java index 804c6c3..e1cad85 100644 --- a/src/main/java/net/kyori/option/OptionStateImpl.java +++ b/src/main/java/net/kyori/option/OptionStateImpl.java @@ -176,15 +176,16 @@ public OptionState build() { } @Override - public Builder value(final Option option, final V value) { - if (!this.schema.has(option)) { + public Builder value(final Option option, final @Nullable V value) { + if (!this.schema.has(requireNonNull(option, "option"))) { throw new IllegalStateException("Option '" + option.id() + "' was not present in active schema"); } - this.values.put( - requireNonNull(option, "flag"), - requireNonNull(value, "value") - ); + if (value == null) { + this.values.remove(option); + } else { + this.values.put(option, value); + } return this; }