Added support for multiple display modules per plugin

This commit is contained in:
Auxilor
2024-07-18 18:57:45 +01:00
parent 4968d3ff22
commit 6e94f3cee8
2 changed files with 52 additions and 4 deletions

View File

@@ -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<DisplayModule> 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<DisplayModule> 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<DisplayModule> getDisplayModules() {
return ImmutableList.copyOf(this.displayModules);
}
/**
* Get if the plugin is outdated.
*

View File

@@ -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<DisplayModule> modules : REGISTERED_MODULES.values()) {
modules.remove(module);
}
}
private Display() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}