From f4e2f9cb4694db60a262af16a771ffa95ac9e55e Mon Sep 17 00:00:00 2001 From: aro Date: Mon, 16 Jan 2023 19:07:55 +0100 Subject: [PATCH] feat: cache stats and ajustements --- .../SkinCacheInvalidateAllItem.java} | 11 ++--- .../invalidator/SkinCacheStatisticsItem.java | 44 +++++++++++++++++++ .../gui/sub/SkinInvalidatorSelectionGUI.java | 8 ++-- .../artelnatif/nicko/mojang/MojangAPI.java | 3 +- 4 files changed, 57 insertions(+), 9 deletions(-) rename nicko-core/src/main/java/net/artelnatif/nicko/gui/items/{invalidator/InvalidateAllItem.java => admin/invalidator/SkinCacheInvalidateAllItem.java} (76%) create mode 100644 nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/invalidator/SkinCacheStatisticsItem.java diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/invalidator/InvalidateAllItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/invalidator/SkinCacheInvalidateAllItem.java similarity index 76% rename from nicko-core/src/main/java/net/artelnatif/nicko/gui/items/invalidator/InvalidateAllItem.java rename to nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/invalidator/SkinCacheInvalidateAllItem.java index 43c28e9..f06462e 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/invalidator/InvalidateAllItem.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/invalidator/SkinCacheInvalidateAllItem.java @@ -1,4 +1,4 @@ -package net.artelnatif.nicko.gui.items.invalidator; +package net.artelnatif.nicko.gui.items.admin.invalidator; import de.studiocode.invui.item.ItemProvider; import de.studiocode.invui.item.builder.ItemBuilder; @@ -12,16 +12,17 @@ import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.jetbrains.annotations.NotNull; -public class InvalidateAllItem extends BaseItem { +public class SkinCacheInvalidateAllItem extends BaseItem { @Override public ItemProvider getItemProvider() { final ItemBuilder builder = new ItemBuilder(Material.BARRIER); - builder.setDisplayName("§fInvalidate §6all §fthe skin cache"); + builder.setDisplayName("§6Invalidate the full Skin Cache"); builder.addLoreLines( "§c§oNOT RECOMMENDED", "§7Invalidate every skin entry present in the cache,", - "§7without removing active player disguises.", - "§7Skins will have to be fetched again if asked by a disguise."); + "§7without resetting player disguises.", + "§7Could be useful if a skin has been updated", + "§7recently and the cache is now outdated."); return builder; } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/invalidator/SkinCacheStatisticsItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/invalidator/SkinCacheStatisticsItem.java new file mode 100644 index 0000000..66bc4f8 --- /dev/null +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/invalidator/SkinCacheStatisticsItem.java @@ -0,0 +1,44 @@ +package net.artelnatif.nicko.gui.items.admin.invalidator; + +import com.google.common.cache.CacheStats; +import com.google.common.cache.LoadingCache; +import de.studiocode.invui.item.ItemProvider; +import de.studiocode.invui.item.builder.ItemBuilder; +import de.studiocode.invui.item.impl.BaseItem; +import net.artelnatif.nicko.NickoBukkit; +import net.artelnatif.nicko.mojang.MojangSkin; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemFlag; +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; + +public class SkinCacheStatisticsItem extends BaseItem { + @Override + public ItemProvider getItemProvider() { + final ItemBuilder builder = new ItemBuilder(Material.OAK_SIGN); + final LoadingCache> cache = NickoBukkit.getInstance().getMojangAPI().getCache(); + final CacheStats stats = cache.stats(); + builder.addEnchantment(Enchantment.DAMAGE_ALL, 1, false); + builder.addItemFlags(ItemFlag.HIDE_ENCHANTS); + builder.setDisplayName("§6Skin Cache overview:"); + builder.addLoreLines( + "§d§oCache is cleared every 24 hours.", + "§6Average Load Penalty: §d" + Math.round(stats.averageLoadPenalty()), + "§6Request Count: §d" + stats.requestCount(), + "§6Skin Cached: §d" + Math.round(cache.size()), + "§7§o(Click to refresh)"); + return builder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick() || clickType.isRightClick()) { + notifyWindows(); + } + } +} \ No newline at end of file diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/sub/SkinInvalidatorSelectionGUI.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/sub/SkinInvalidatorSelectionGUI.java index cdffcec..20edb57 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/gui/sub/SkinInvalidatorSelectionGUI.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/sub/SkinInvalidatorSelectionGUI.java @@ -4,22 +4,24 @@ import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.builder.GUIBuilder; import de.studiocode.invui.gui.builder.guitype.GUIType; import de.studiocode.invui.window.impl.single.SimpleWindow; +import net.artelnatif.nicko.gui.items.admin.invalidator.SkinCacheStatisticsItem; import net.artelnatif.nicko.gui.items.common.BackItem; -import net.artelnatif.nicko.gui.items.invalidator.InvalidateAllItem; +import net.artelnatif.nicko.gui.items.admin.invalidator.SkinCacheInvalidateAllItem; import org.bukkit.entity.Player; public class SkinInvalidatorSelectionGUI { private final Player player; private final GUI gui; private final String[] structure = new String[]{ - "B # # A S", + "B # S A #", }; public SkinInvalidatorSelectionGUI(Player player) { this.gui = new GUIBuilder<>(GUIType.NORMAL) .setStructure(structure) .addIngredient('B', new BackItem(new AdminPanelGUI(player).getGUI())) - .addIngredient('A', new InvalidateAllItem()) + .addIngredient('A', new SkinCacheInvalidateAllItem()) + .addIngredient('S', new SkinCacheStatisticsItem()) .build(); this.player = player; } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java b/nicko-core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java index bb1c52d..7c5e25a 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java @@ -31,7 +31,8 @@ public class MojangAPI { }; private final LoadingCache> cache = CacheBuilder .newBuilder() - .expireAfterWrite(8, TimeUnit.HOURS) + .recordStats() + .expireAfterWrite(24, TimeUnit.HOURS) .build(loader); private final NickoBukkit instance;