diff --git a/src/main/java/at/helpch/placeholderapi/configuration/PlaceholderAPIConfig.java b/src/main/java/at/helpch/placeholderapi/configuration/PlaceholderAPIConfig.java index 3fcf999..21f98c8 100644 --- a/src/main/java/at/helpch/placeholderapi/configuration/PlaceholderAPIConfig.java +++ b/src/main/java/at/helpch/placeholderapi/configuration/PlaceholderAPIConfig.java @@ -98,7 +98,7 @@ public final class PlaceholderAPIConfig { } @NotNull - public Map expansions() { + public ConcurrentHashMap expansions() { return expansions; } diff --git a/src/main/java/at/helpch/placeholderapi/expansion/Configurable.java b/src/main/java/at/helpch/placeholderapi/expansion/Configurable.java index df7dda1..20f358d 100644 --- a/src/main/java/at/helpch/placeholderapi/expansion/Configurable.java +++ b/src/main/java/at/helpch/placeholderapi/expansion/Configurable.java @@ -24,6 +24,7 @@ import at.helpch.placeholderapi.PlaceholderAPIPlugin; import org.jetbrains.annotations.NotNull; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Implementing this interface allows {@link at.helpch.placeholderapi.expansion.PlaceholderExpansion PlaceholderExpansions} @@ -43,20 +44,31 @@ import java.util.Map; * @author Ryan McCarthy */ public interface Configurable { - @NotNull Class provideConfigType(); @NotNull T provideDefault(); + @SuppressWarnings("unchecked") @NotNull default T getConfig() { - if (this instanceof PlaceholderExpansion exp) { - return (T) PlaceholderAPIPlugin.instance().configManager().config().expansions().computeIfAbsent(exp.getIdentifier(), s -> provideDefault()); + if (!(this instanceof PlaceholderExpansion exp)) { + return provideDefault(); } - return provideDefault(); + final ConcurrentHashMap expansionConfigs = PlaceholderAPIPlugin.instance().configManager().config().expansions(); + final String key = exp.getIdentifier(); + + final Object existing = expansionConfigs.get(key); + if (existing != null) { + return (T) existing; + } + + final T def = provideDefault(); + final Object conf = expansionConfigs.putIfAbsent(key, def); + + return (T) (conf != null ? conf : def); } // /**