diff --git a/src/main/java/org/spongepowered/plugin/blackboard/Blackboard.java b/src/main/java/org/spongepowered/plugin/blackboard/Blackboard.java index 8259b84..2b583d3 100644 --- a/src/main/java/org/spongepowered/plugin/blackboard/Blackboard.java +++ b/src/main/java/org/spongepowered/plugin/blackboard/Blackboard.java @@ -27,7 +27,6 @@ import org.spongepowered.plugin.Environment; import java.util.Optional; -import java.util.function.Supplier; /** * An entity that stores various properties for an {@link Environment environment} @@ -35,13 +34,14 @@ public interface Blackboard { /** - * Retrieves a value by {@link Key key} or from the {@link Supplier default value}. + * Sets a value by {@link Key key}. + * * @param key The key - * @param defaultValue The default value + * @param value The value * @param The value type - * @return The value + * @throws IllegalStateException if the key has already a corresponding value */ - V getOrCreate(final Key key, final Supplier defaultValue); + void set(final Key key, final V value); /** * @param key The key diff --git a/src/main/java/org/spongepowered/plugin/builtin/StandardBlackboard.java b/src/main/java/org/spongepowered/plugin/builtin/StandardBlackboard.java index 12e5c74..acd7f5b 100644 --- a/src/main/java/org/spongepowered/plugin/builtin/StandardBlackboard.java +++ b/src/main/java/org/spongepowered/plugin/builtin/StandardBlackboard.java @@ -31,23 +31,23 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.function.Supplier; public final class StandardBlackboard implements Blackboard { - private final Map, Object> values; + private final Map, Object> values; public StandardBlackboard() { this.values = new HashMap<>(); } - @SuppressWarnings("unchecked") @Override - public V getOrCreate(final Key key, final Supplier defaultValue) { + public void set(final Key key, final V value) { Objects.requireNonNull(key, "key"); - Objects.requireNonNull(defaultValue, "defaultValue"); - - return key.clazz().cast(this.values.computeIfAbsent((Key) key, k -> defaultValue.get())); + Objects.requireNonNull(value, "value"); + if (this.values.containsKey(key)) { + throw new IllegalStateException(String.format("Key '%s' already has a value!", key.name())); + } + this.values.put(key, value); } @Override