From 0067540ec10542fe08c4900d7620b41f821a268f Mon Sep 17 00:00:00 2001 From: PiggyPiglet Date: Thu, 19 Feb 2026 19:11:37 +0800 Subject: [PATCH] Ensure configurable object is converted from map to object on /papi reload --- .../placeholderapi/PlaceholderAPIPlugin.java | 7 +++ .../manager/LocalExpansionManager.java | 43 ++++++++++++------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/main/java/at/helpch/placeholderapi/PlaceholderAPIPlugin.java b/src/main/java/at/helpch/placeholderapi/PlaceholderAPIPlugin.java index 400775b..38b13eb 100644 --- a/src/main/java/at/helpch/placeholderapi/PlaceholderAPIPlugin.java +++ b/src/main/java/at/helpch/placeholderapi/PlaceholderAPIPlugin.java @@ -2,6 +2,7 @@ package at.helpch.placeholderapi; import at.helpch.placeholderapi.commands.PlaceholderCommandRouter; import at.helpch.placeholderapi.configuration.ConfigManager; +import at.helpch.placeholderapi.expansion.PlaceholderExpansion; import at.helpch.placeholderapi.expansion.manager.CloudExpansionManager; import at.helpch.placeholderapi.expansion.manager.LocalExpansionManager; import at.helpch.placeholderapi.metrics.MetricsManager; @@ -78,6 +79,12 @@ public class PlaceholderAPIPlugin extends JavaPlugin { configManager.setup(); localExpansionManager.load(sender); + for (final PlaceholderExpansion expansion : localExpansionManager.getExpansions()) { + if (expansion.getExpansionType() == PlaceholderExpansion.Type.INTERNAL) { + // when the config gets reloaded, getConfig for internal expansions will return a map instead of the correct object + localExpansionManager.createConfig(expansion); + } + } if (configManager.config().cloudEnabled()) { cloudExpansionManager.load(); diff --git a/src/main/java/at/helpch/placeholderapi/expansion/manager/LocalExpansionManager.java b/src/main/java/at/helpch/placeholderapi/expansion/manager/LocalExpansionManager.java index cd1757e..5c7dc14 100644 --- a/src/main/java/at/helpch/placeholderapi/expansion/manager/LocalExpansionManager.java +++ b/src/main/java/at/helpch/placeholderapi/expansion/manager/LocalExpansionManager.java @@ -220,21 +220,7 @@ public final class LocalExpansionManager /*implements Listener*/ { public boolean register(@NotNull final PlaceholderExpansion expansion) { final String identifier = expansion.getIdentifier().toLowerCase(Locale.ROOT); - if (expansion instanceof Configurable configurable) { - final PlaceholderAPIConfig config = configManager.config(); - - if (config.expansions() == null) { - config.expansions(new ConcurrentHashMap<>()); - } - - if (!config.expansions().containsKey(expansion.getIdentifier())) { - config.expansions().put(expansion.getIdentifier(), configurable.provideDefault()); - configManager.save(); - } else { - final Object expansionConfig = configManager.convertExpansion((Map) config.expansions().get(expansion.getIdentifier()), configurable.provideConfigType()); - config.expansions().put(expansion.getIdentifier(), expansionConfig); - } - } + createConfig(expansion); if (!expansion.canRegister()) { return false; @@ -307,6 +293,33 @@ public final class LocalExpansionManager /*implements Listener*/ { return true; } + /** + * Creates and initializes the configuration for the provided {@link PlaceholderExpansion}. + * If the expansion implements the {@link Configurable} interface, this method ensures that + * the expansion's default configuration is registered and saved if it is not already present. + * If a configuration already exists, it converts and updates it using the provided configuration type. + * + * @param expansion the {@link PlaceholderExpansion} for which the configuration is being created + */ + @ApiStatus.Internal + public void createConfig(PlaceholderExpansion expansion) { + if (expansion instanceof Configurable configurable) { + final PlaceholderAPIConfig config = configManager.config(); + + if (config.expansions() == null) { + config.expansions(new ConcurrentHashMap<>()); + } + + if (!config.expansions().containsKey(expansion.getIdentifier())) { + config.expansions().put(expansion.getIdentifier(), configurable.provideDefault()); + configManager.save(); + } else { + final Object expansionConfig = configManager.convertExpansion((Map) config.expansions().get(expansion.getIdentifier()), configurable.provideConfigType()); + config.expansions().put(expansion.getIdentifier(), expansionConfig); + } + } + } + @ApiStatus.Internal public boolean unregister(@NotNull final PlaceholderExpansion expansion) { if (expansions.remove(expansion.getIdentifier().toLowerCase(Locale.ROOT)) == null) {