diff --git a/src/main/java/me/clip/placeholderapi/expansion/PlaceholderExpansion.java b/src/main/java/me/clip/placeholderapi/expansion/PlaceholderExpansion.java
index 5cd3029..a41be94 100644
--- a/src/main/java/me/clip/placeholderapi/expansion/PlaceholderExpansion.java
+++ b/src/main/java/me/clip/placeholderapi/expansion/PlaceholderExpansion.java
@@ -40,6 +40,14 @@ import org.jetbrains.annotations.Nullable;
*/
public abstract class PlaceholderExpansion extends PlaceholderHook {
+ /**
+ * The type is {@link Type#INTERNAL} by default.
+ * For external expansions, the type is updated on {@link me.clip.placeholderapi.expansion.manager.LocalExpansionManager#register(Class) register}.
+ * @since 2.11.4
+ */
+ @ApiStatus.Internal
+ protected Type expansionType = Type.INTERNAL;
+
/**
* The placeholder identifier of this expansion. May not contain {@literal %},
* {@literal {}} or _
@@ -159,6 +167,27 @@ public abstract class PlaceholderExpansion extends PlaceholderHook {
return PlaceholderAPIPlugin.getInstance();
}
+ /**
+ * Get the type of the expansion
+ *
+ * @return the type of the expansion
+ * @since 2.11.4
+ */
+ @ApiStatus.Internal
+ public Type getExpansionType() {
+ return expansionType;
+ }
+
+ /**
+ * Set the type of the expansion
+ * @param expansionType the new type
+ * @since 2.11.4
+ */
+ @ApiStatus.Internal
+ public void setExpansionType(Type expansionType) {
+ this.expansionType = expansionType;
+ }
+
// === Configuration ===
/**
@@ -166,7 +195,7 @@ public abstract class PlaceholderExpansion extends PlaceholderHook {
* null when not specified.
*
You may use the {@link Configurable} interface to define default values set
*
- * @return ConfigurationSection that this epxpansion has.
+ * @return ConfigurationSection that this expansion has.
*/
@Nullable
public final ConfigurationSection getConfigSection() {
@@ -394,8 +423,8 @@ public abstract class PlaceholderExpansion extends PlaceholderHook {
*/
@Override
public final String toString() {
- return String.format("PlaceholderExpansion[name: '%s', author: '%s', version: '%s']", getName(),
- getAuthor(), getVersion());
+ return String.format("PlaceholderExpansion[name: '%s', author: '%s', version: '%s', type: '%s']", getName(),
+ getAuthor(), getVersion(), getExpansionType());
}
// === Deprecated API ===
@@ -432,4 +461,19 @@ public abstract class PlaceholderExpansion extends PlaceholderHook {
public String getLink() {
return null;
}
+
+ public enum Type {
+
+ /**
+ * An expansion provided by a plugin is considered internal
+ */
+ INTERNAL,
+
+ /**
+ * An expansion loaded from the expansions folder is considered external
+ */
+ EXTERNAL
+
+ }
+
}
diff --git a/src/main/java/me/clip/placeholderapi/expansion/manager/LocalExpansionManager.java b/src/main/java/me/clip/placeholderapi/expansion/manager/LocalExpansionManager.java
index 80c785a..8e6cbd0 100644
--- a/src/main/java/me/clip/placeholderapi/expansion/manager/LocalExpansionManager.java
+++ b/src/main/java/me/clip/placeholderapi/expansion/manager/LocalExpansionManager.java
@@ -187,6 +187,8 @@ public final class LocalExpansionManager implements Listener {
return Optional.empty();
}
}
+
+ expansion.setExpansionType(PlaceholderExpansion.Type.EXTERNAL);
if (!expansion.register()) {
Msg.warn("Cannot load expansion %s due to an unknown issue.", expansion.getIdentifier());
@@ -209,6 +211,11 @@ public final class LocalExpansionManager implements Listener {
return Optional.empty();
}
+ /**
+ * Attempt to register a {@link PlaceholderExpansion}
+ * @param expansion the expansion to register
+ * @return if the expansion was registered
+ */
@ApiStatus.Internal
public boolean register(@NotNull final PlaceholderExpansion expansion) {
final String identifier = expansion.getIdentifier().toLowerCase(Locale.ROOT);
@@ -216,10 +223,10 @@ public final class LocalExpansionManager implements Listener {
if (!expansion.canRegister()) {
return false;
}
-
- if (expansions.containsKey(identifier)) {
- Msg.warn("Failed to load expansion %s. Identifier is already in use.",
- expansion.getIdentifier());
+
+ // Avoid loading two external expansions with the same identifier
+ if (expansion.getExpansionType() == PlaceholderExpansion.Type.EXTERNAL && expansions.containsKey(identifier)) {
+ Msg.warn("Failed to load external expansion %s. Identifier is already in use.", expansion.getIdentifier());
return false;
}
@@ -287,21 +294,24 @@ public final class LocalExpansionManager implements Listener {
Bukkit.getPluginManager().registerEvents(((Listener) expansion), plugin);
}
- Msg.info("Successfully registered expansion: %s [%s]", expansion.getIdentifier(),
- expansion.getVersion());
+ Msg.info(
+ "Successfully registered %s expansion: %s [%s]",
+ expansion.getExpansionType().name().toLowerCase(),
+ expansion.getIdentifier(),
+ expansion.getVersion()
+ );
if (expansion instanceof Taskable) {
((Taskable) expansion).start();
}
- if (plugin.getPlaceholderAPIConfig().isCloudEnabled()) {
- final Optional cloudExpansionOptional =
- plugin.getCloudExpansionManager().findCloudExpansionByName(identifier);
+ // Check eCloud for updates only if the expansion is external
+ if (plugin.getPlaceholderAPIConfig().isCloudEnabled() && expansion.getExpansionType() == PlaceholderExpansion.Type.EXTERNAL) {
+ final Optional cloudExpansionOptional = plugin.getCloudExpansionManager().findCloudExpansionByName(identifier);
if (cloudExpansionOptional.isPresent()) {
CloudExpansion cloudExpansion = cloudExpansionOptional.get();
cloudExpansion.setHasExpansion(true);
- cloudExpansion.setShouldUpdate(
- !cloudExpansion.getLatestVersion().equals(expansion.getVersion()));
+ cloudExpansion.setShouldUpdate(!cloudExpansion.getLatestVersion().equals(expansion.getVersion()));
}
}