mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Some performance improvements
This commit is contained in:
parent
6ffa5ab9a7
commit
8d0c816ed2
@ -3,6 +3,7 @@ package io.github.thebusybiscuit.slimefun4.core.services;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.bukkit.Keyed;
|
import org.bukkit.Keyed;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
@ -65,7 +66,7 @@ public class CustomItemDataService implements PersistentDataService, Keyed {
|
|||||||
* @return An {@link Optional} describing the result
|
* @return An {@link Optional} describing the result
|
||||||
*/
|
*/
|
||||||
public Optional<String> getItemData(ItemStack item) {
|
public Optional<String> getItemData(ItemStack item) {
|
||||||
if (item == null || !item.hasItemMeta()) {
|
if (item == null || item.getType() == Material.AIR || !item.hasItemMeta()) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,14 @@ public class SolarHelmet extends SlimefunItem {
|
|||||||
addItemSetting(charge);
|
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().getHelmet());
|
||||||
recharge(p.getInventory().getChestplate());
|
recharge(p.getInventory().getChestplate());
|
||||||
recharge(p.getInventory().getLeggings());
|
recharge(p.getInventory().getLeggings());
|
||||||
|
@ -92,10 +92,17 @@ public class ArmorTask implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void checkForSolarHelmet(Player p) {
|
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)) {
|
if (item instanceof SolarHelmet && Slimefun.hasUnlocked(p, item, true)) {
|
||||||
((SolarHelmet) item).chargeItems(p);
|
((SolarHelmet) item).rechargeItems(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -805,19 +805,17 @@ public class SlimefunItem implements Placeable {
|
|||||||
return getByID(((SlimefunItemStack) item).getItemId());
|
return getByID(((SlimefunItemStack) item).getItemId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// This wrapper improves the heavy ItemStack#getItemMeta() call by caching it.
|
Optional<String> itemID = SlimefunPlugin.getItemDataService().getItemData(item);
|
||||||
ItemStackWrapper wrapper = new ItemStackWrapper(item);
|
|
||||||
|
|
||||||
if (item.hasItemMeta()) {
|
|
||||||
Optional<String> itemID = SlimefunPlugin.getItemDataService().getItemData(wrapper);
|
|
||||||
|
|
||||||
if (itemID.isPresent()) {
|
if (itemID.isPresent()) {
|
||||||
return getByID(itemID.get());
|
return getByID(itemID.get());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Backwards compatibility
|
// Backwards compatibility
|
||||||
if (SlimefunPlugin.getMinecraftVersion().isBefore(MinecraftVersion.MINECRAFT_1_14) || SlimefunPlugin.getRegistry().isBackwardsCompatible()) {
|
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
|
// Quite expensive performance-wise
|
||||||
// But necessary for supporting legacy items
|
// But necessary for supporting legacy items
|
||||||
for (SlimefunItem sfi : SlimefunPlugin.getRegistry().getAllSlimefunItems()) {
|
for (SlimefunItem sfi : SlimefunPlugin.getRegistry().getAllSlimefunItems()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user