From bbfab7dd79324e64ac17ddbabc6612473c056407 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Sat, 24 Feb 2024 01:31:50 +0800 Subject: [PATCH] optimize item detection order --- .../mechanic/item/ItemManagerImpl.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java index d48a4d49..c6867a0d 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/item/ItemManagerImpl.java @@ -85,12 +85,14 @@ public class ItemManagerImpl implements ItemManager, Listener { private final CustomFishingPlugin plugin; private final HashMap buildableItemMap; private final HashMap itemLibraryMap; + private final List itemDetectionList; public ItemManagerImpl(CustomFishingPlugin plugin) { instance = this; this.plugin = plugin; this.itemLibraryMap = new LinkedHashMap<>(); this.buildableItemMap = new HashMap<>(); + this.itemDetectionList = new ArrayList<>(); this.registerItemLibrary(new CustomFishingItemImpl()); this.registerItemLibrary(new VanillaItemImpl()); } @@ -98,12 +100,19 @@ public class ItemManagerImpl implements ItemManager, Listener { public void load() { this.loadItemsFromPluginFolder(); Bukkit.getPluginManager().registerEvents(this, plugin); + for (String plugin : CFConfig.itemDetectOrder) { + ItemLibrary library = itemLibraryMap.get(plugin); + if (library != null) { + itemDetectionList.add(library); + } + } } public void unload() { HandlerList.unregisterAll(this); HashMap tempMap = new HashMap<>(this.buildableItemMap); this.buildableItemMap.clear(); + this.itemDetectionList.clear(); for (Map.Entry entry : tempMap.entrySet()) { if (entry.getValue().persist()) { tempMap.put(entry.getKey(), entry.getValue()); @@ -249,13 +258,10 @@ public class ItemManagerImpl implements ItemManager, Listener { public String getAnyPluginItemID(ItemStack itemStack) { if (itemStack == null || itemStack.getType() == Material.AIR) return "AIR"; - for (String plugin : CFConfig.itemDetectOrder) { - ItemLibrary itemLibrary = itemLibraryMap.get(plugin); - if (itemLibrary != null) { - String id = itemLibrary.getItemID(itemStack); - if (id != null) { - return id; - } + for (ItemLibrary library : itemDetectionList) { + String id = library.getItemID(itemStack); + if (id != null) { + return id; } } // should not reach this because vanilla library would always work