diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/CustomItemDataService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/CustomItemDataService.java index 2345b5b00..b2ca07a7c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/CustomItemDataService.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/CustomItemDataService.java @@ -3,6 +3,7 @@ package io.github.thebusybiscuit.slimefun4.core.services; import java.util.Optional; import org.bukkit.Keyed; +import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -65,7 +66,7 @@ public class CustomItemDataService implements PersistentDataService, Keyed { * @return An {@link Optional} describing the result */ public Optional getItemData(ItemStack item) { - if (item == null || !item.hasItemMeta()) { + if (item == null || item.getType() == Material.AIR || !item.hasItemMeta()) { return Optional.empty(); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/gadgets/SolarHelmet.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/gadgets/SolarHelmet.java index 3c24a6cf5..79263be8f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/gadgets/SolarHelmet.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/gadgets/SolarHelmet.java @@ -33,7 +33,14 @@ public class SolarHelmet extends SlimefunItem { addItemSetting(charge); } - public void chargeItems(Player p) { + /** + * This method recharges the equipment of the given {@link Player} by the configured + * factor of this {@link SolarHelmet}. + * + * @param p + * The {@link Player} wearing this {@link SolarHelmet} + */ + public void rechargeItems(Player p) { recharge(p.getInventory().getHelmet()); recharge(p.getInventory().getChestplate()); recharge(p.getInventory().getLeggings()); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/ArmorTask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/ArmorTask.java index 32313de41..ffbdd1381 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/ArmorTask.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/ArmorTask.java @@ -92,10 +92,17 @@ public class ArmorTask implements Runnable { } private void checkForSolarHelmet(Player p) { - SlimefunItem item = SlimefunItem.getByItem(p.getInventory().getHelmet()); + ItemStack helmet = p.getInventory().getHelmet(); + + if (SlimefunPlugin.getRegistry().isBackwardsCompatible() && !SlimefunUtils.isItemSimilar(helmet, SlimefunItems.SOLAR_HELMET, true, false)) { + // Performance saver for slow backwards-compatible versions of Slimefun + return; + } + + SlimefunItem item = SlimefunItem.getByItem(helmet); if (item instanceof SolarHelmet && Slimefun.hasUnlocked(p, item, true)) { - ((SolarHelmet) item).chargeItems(p); + ((SolarHelmet) item).rechargeItems(p); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 9f56f65e3..58d084165 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -805,19 +805,17 @@ public class SlimefunItem implements Placeable { return getByID(((SlimefunItemStack) item).getItemId()); } - // This wrapper improves the heavy ItemStack#getItemMeta() call by caching it. - ItemStackWrapper wrapper = new ItemStackWrapper(item); + Optional itemID = SlimefunPlugin.getItemDataService().getItemData(item); - if (item.hasItemMeta()) { - Optional itemID = SlimefunPlugin.getItemDataService().getItemData(wrapper); - - if (itemID.isPresent()) { - return getByID(itemID.get()); - } + if (itemID.isPresent()) { + return getByID(itemID.get()); } // Backwards compatibility if (SlimefunPlugin.getMinecraftVersion().isBefore(MinecraftVersion.MINECRAFT_1_14) || SlimefunPlugin.getRegistry().isBackwardsCompatible()) { + // This wrapper improves the heavy ItemStack#getItemMeta() call by caching it. + ItemStackWrapper wrapper = new ItemStackWrapper(item); + // Quite expensive performance-wise // But necessary for supporting legacy items for (SlimefunItem sfi : SlimefunPlugin.getRegistry().getAllSlimefunItems()) {