diff --git a/eco-api/src/main/java/com/willfp/eco/core/EcoPlugin.java b/eco-api/src/main/java/com/willfp/eco/core/EcoPlugin.java index e80a4780..743b6d7e 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/EcoPlugin.java +++ b/eco-api/src/main/java/com/willfp/eco/core/EcoPlugin.java @@ -1,5 +1,6 @@ package com.willfp.eco.core; +import com.google.common.collect.ImmutableList; import com.willfp.eco.core.command.impl.PluginCommand; import com.willfp.eco.core.config.base.ConfigYml; import com.willfp.eco.core.config.base.LangYml; @@ -36,6 +37,8 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Objects; @@ -120,9 +123,17 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike, Regist /** * The display module for the plugin. + * + * @deprecated Plugins can now have multiple display modules. */ + @Deprecated(since = "6.72.0") private DisplayModule displayModule; + /** + * The display modules for the plugin. + */ + private List displayModules = new ArrayList<>(); + /** * The logger for the plugin. */ @@ -555,10 +566,15 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike, Regist * Default code to be executed after the server is up. */ public final void afterLoad() { - this.displayModule = createDisplayModule(); + DisplayModule module = createDisplayModule(); + if (module != null) { + Display.registerDisplayModule(module); + this.displayModules.add(module); + } - if (this.getDisplayModule() != null) { - Display.registerDisplayModule(this.getDisplayModule()); + for (DisplayModule displayModule : this.loadDisplayModules()) { + Display.registerDisplayModule(displayModule); + this.displayModules.add(displayModule); } if (Prerequisite.HAS_PROTOCOLLIB.isMet()) { @@ -899,14 +915,25 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike, Regist * Create the display module for the plugin. * * @return The display module, or null. + * @deprecated Use {@link #loadDisplayModules()} instead. */ @Nullable + @Deprecated(since = "6.72.0") protected DisplayModule createDisplayModule() { Validate.isTrue(this.getDisplayModule() == null, "Display module exists!"); return null; } + /** + * Load display modules. + * + * @return The display modules. + */ + protected List loadDisplayModules() { + return new ArrayList<>(); + } + /** * Get the minimum version of eco to use the plugin. * @@ -1156,12 +1183,23 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike, Regist * Get the plugin's display module. * * @return The display module. + * @deprecated Use {@link #getDisplayModules()} instead. */ @Nullable + @Deprecated(since = "6.72.0", forRemoval = true) public DisplayModule getDisplayModule() { return this.displayModule; } + /** + * Get the plugin's display modules. + * + * @return The display modules. + */ + public List getDisplayModules() { + return ImmutableList.copyOf(this.displayModules); + } + /** * Get if the plugin is outdated. * diff --git a/eco-api/src/main/java/com/willfp/eco/core/display/Display.java b/eco-api/src/main/java/com/willfp/eco/core/display/Display.java index a6d2feb6..d87bdf87 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/display/Display.java +++ b/eco-api/src/main/java/com/willfp/eco/core/display/Display.java @@ -211,12 +211,22 @@ public final class Display { new ArrayList<>() ); - modules.removeIf(it -> it.getPluginName().equalsIgnoreCase(module.getPluginName())); modules.add(module); REGISTERED_MODULES.put(module.getWeight(), modules); } + /** + * Unregister a display module. + * + * @param module The module. + */ + public static void unregisterDisplayModule(@NotNull final DisplayModule module) { + for (List modules : REGISTERED_MODULES.values()) { + modules.remove(module); + } + } + private Display() { throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); }