From 47c8ea3341c8d4e42728d90ec2e5787ae242569c Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 27 Apr 2022 12:31:27 +0100 Subject: [PATCH] Switched from DisplayPriority to weight --- .../eco/core/display/DisplayModule.java | 35 ++++++++++++++++-- .../eco/core/display/DisplayPriority.java | 36 ++++++++++++++++--- .../eco/internal/display/EcoDisplayHandler.kt | 28 ++++++--------- 3 files changed, 74 insertions(+), 25 deletions(-) diff --git a/eco-api/src/main/java/com/willfp/eco/core/display/DisplayModule.java b/eco-api/src/main/java/com/willfp/eco/core/display/DisplayModule.java index 21c4fa91..1feab3b6 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/display/DisplayModule.java +++ b/eco-api/src/main/java/com/willfp/eco/core/display/DisplayModule.java @@ -14,7 +14,7 @@ public abstract class DisplayModule extends PluginDependent { /** * The priority of the module. */ - private final DisplayPriority priority; + private final int weight; /** * Create a new display module. @@ -25,7 +25,19 @@ public abstract class DisplayModule extends PluginDependent { protected DisplayModule(@NotNull final EcoPlugin plugin, @NotNull final DisplayPriority priority) { super(plugin); - this.priority = priority; + this.weight = priority.getWeight(); + } + + /** + * Create a new display module. + * + * @param plugin The plugin that the display is for. + * @param weight The weight/priority of the module. + */ + protected DisplayModule(@NotNull final EcoPlugin plugin, + final int weight) { + super(plugin); + this.weight = weight; } /** @@ -84,8 +96,25 @@ public abstract class DisplayModule extends PluginDependent { * Get the display priority. * * @return The priority. + * @deprecated Use getWeight instead. */ + @Deprecated(since = "6.35.0", forRemoval = true) public DisplayPriority getPriority() { - return this.priority; + return switch (this.weight) { + case 100 -> DisplayPriority.LOWEST; + case 200 -> DisplayPriority.LOW; + case 300 -> DisplayPriority.HIGH; + case 400 -> DisplayPriority.HIGHEST; + default -> DisplayPriority.CUSTOM; + }; + } + + /** + * Get the display weight. + * + * @return The weight. + */ + public int getWeight() { + return this.weight; } } diff --git a/eco-api/src/main/java/com/willfp/eco/core/display/DisplayPriority.java b/eco-api/src/main/java/com/willfp/eco/core/display/DisplayPriority.java index 1280e44b..aa41276c 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/display/DisplayPriority.java +++ b/eco-api/src/main/java/com/willfp/eco/core/display/DisplayPriority.java @@ -4,23 +4,51 @@ package com.willfp.eco.core.display; * The priority (order) of display modules. */ public enum DisplayPriority { + /** + * Custom weight. + */ + CUSTOM(250), + /** * Ran first. */ - LOWEST, + LOWEST(100), /** * Ran second. */ - LOW, + LOW(200), /** * Ran third. */ - HIGH, + HIGH(300), /** * Ran last. */ - HIGHEST + HIGHEST(400); + + /** + * The display priority weight. + */ + private final int weight; + + /** + * Create new display priority. + * + * @param weight The weight. + */ + DisplayPriority(final int weight) { + this.weight = weight; + } + + /** + * Get the weight. + * + * @return The weight. + */ + public int getWeight() { + return weight; + } } diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/display/EcoDisplayHandler.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/display/EcoDisplayHandler.kt index 2ccf69b2..76bf546a 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/display/EcoDisplayHandler.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/display/EcoDisplayHandler.kt @@ -4,7 +4,6 @@ import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.display.Display import com.willfp.eco.core.display.DisplayHandler import com.willfp.eco.core.display.DisplayModule -import com.willfp.eco.core.display.DisplayPriority import com.willfp.eco.core.fast.fast import org.bukkit.NamespacedKey import org.bukkit.entity.Player @@ -12,42 +11,36 @@ import org.bukkit.inventory.ItemStack import org.bukkit.persistence.PersistentDataType class EcoDisplayHandler(plugin: EcoPlugin) : DisplayHandler { - private val registeredModules = mutableMapOf>() + private val registeredModules = sortedMapOf>() private val finalizeKey: NamespacedKey = plugin.namespacedKeyFactory.create("finalized") - init { - for (priority in DisplayPriority.values()) { - registeredModules[priority] = mutableListOf() - } - } - override fun registerDisplayModule(module: DisplayModule) { - val modules = registeredModules[module.priority] ?: return - modules.removeIf { module1: DisplayModule -> - module1.pluginName.equals(module.pluginName, ignoreCase = true) + val modules = registeredModules[module.weight] ?: mutableListOf() + modules.removeIf { + it.pluginName.equals(module.pluginName, ignoreCase = true) } modules.add(module) - registeredModules[module.priority] = modules + registeredModules[module.weight] = modules } override fun display(itemStack: ItemStack, player: Player?): ItemStack { val pluginVarArgs = mutableMapOf>() - for (priority in DisplayPriority.values()) { - val modules = registeredModules[priority] ?: continue + for ((_, modules) in registeredModules) { for (module in modules) { pluginVarArgs[module.pluginName] = module.generateVarArgs(itemStack) } } + Display.revert(itemStack) if (!itemStack.hasItemMeta()) { return itemStack } - for (priority in DisplayPriority.values()) { - val modules = registeredModules[priority] ?: continue + + for ((_, modules) in registeredModules) { for (module in modules) { val varargs = pluginVarArgs[module.pluginName] ?: continue Display.callDisplayModule(module, itemStack, player, *varargs) @@ -73,8 +66,7 @@ class EcoDisplayHandler(plugin: EcoPlugin) : DisplayHandler { fast.lore = lore } - for (priority in DisplayPriority.values()) { - val modules = registeredModules[priority] ?: continue + for ((_, modules) in registeredModules) { for (module in modules) { module.revert(itemStack) }