diff --git a/src/main/java/fr/moribus/imageonmap/guiproko/list/MapDetailGui.java b/src/main/java/fr/moribus/imageonmap/guiproko/list/MapDetailGui.java index 764364c..5e89d72 100644 --- a/src/main/java/fr/moribus/imageonmap/guiproko/list/MapDetailGui.java +++ b/src/main/java/fr/moribus/imageonmap/guiproko/list/MapDetailGui.java @@ -18,10 +18,11 @@ package fr.moribus.imageonmap.guiproko.list; -import fr.moribus.imageonmap.guiproko.core.ExplorerGui; -import fr.moribus.imageonmap.map.PosterMap; -import fr.moribus.imageonmap.ui.MapItemManager; -import org.bukkit.inventory.ItemStack; +import fr.moribus.imageonmap.guiproko.core.*; +import fr.moribus.imageonmap.map.*; +import fr.moribus.imageonmap.ui.*; +import org.bukkit.inventory.*; + public class MapDetailGui extends ExplorerGui { @@ -43,5 +44,4 @@ public class MapDetailGui extends ExplorerGui setTitle("Details for map " + map.getName()); setDataShape(map.getColumnCount(), map.getRowCount()); } - } diff --git a/src/main/java/fr/moribus/imageonmap/guiproko/list/MapListGui.java b/src/main/java/fr/moribus/imageonmap/guiproko/list/MapListGui.java index fefeaf8..1af8edb 100644 --- a/src/main/java/fr/moribus/imageonmap/guiproko/list/MapListGui.java +++ b/src/main/java/fr/moribus/imageonmap/guiproko/list/MapListGui.java @@ -18,14 +18,22 @@ package fr.moribus.imageonmap.guiproko.list; +import fr.moribus.imageonmap.*; import fr.moribus.imageonmap.guiproko.core.*; import fr.moribus.imageonmap.map.*; import fr.moribus.imageonmap.ui.*; import org.bukkit.*; import org.bukkit.inventory.*; +import org.bukkit.inventory.meta.*; + +import java.text.*; +import java.util.*; + public class MapListGui extends ExplorerGui { + private final NumberFormat bigNumbersFormatter = new DecimalFormat("###,###,###,###", DecimalFormatSymbols.getInstance(Locale.ENGLISH)); + @Override protected ItemStack getViewItem(ImageMap data) @@ -66,5 +74,79 @@ public class MapListGui extends ExplorerGui setTitle("Your maps (" + maps.length + " total)"); setKeepHorizontalScrollingSpace(true); + + + /* ** Statistics ** */ + + int imagesCount = MapManager.getMapList(getPlayer().getUniqueId()).size(); + int mapPartCount = MapManager.getMapPartCount(getPlayer().getUniqueId()); + + int mapGlobalLimit = PluginConfiguration.MAP_GLOBAL_LIMIT.getInteger(); + int mapPersonalLimit = PluginConfiguration.MAP_PLAYER_LIMIT.getInteger(); + + int mapPartGloballyLeft = mapGlobalLimit - MapManager.getMapCount(); + int mapPartPersonallyLeft = mapPersonalLimit - mapPartCount; + + int mapPartLeft; + if(mapGlobalLimit <= 0 && mapPersonalLimit <= 0) + mapPartLeft = -1; + else if(mapGlobalLimit <= 0) + mapPartLeft = mapPartPersonallyLeft; + else if(mapPersonalLimit <= 0) + mapPartLeft = mapPartGloballyLeft; + else + mapPartLeft = Math.min(mapPartGloballyLeft, mapPartPersonallyLeft); + + double percentageUsed = mapPartLeft < 0 ? 0 : ((double) mapPartCount) / ((double) (mapPartCount + mapPartLeft)) * 100; + + + ItemStack statistics = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta meta = statistics.getItemMeta(); + + meta.setDisplayName(ChatColor.BLUE + "Usage statistics"); + meta.setLore(Arrays.asList( + "", + getStatisticText("Images rendered", imagesCount), + getStatisticText("Minecraft maps used", mapPartCount) + )); + + if(mapPartLeft >= 0) + { + List lore = meta.getLore(); + + lore.add(""); + lore.add(ChatColor.BLUE + "Minecraft maps limits"); + + lore.add(""); + lore.add(getStatisticText("Server-wide limit", mapGlobalLimit, true)); + lore.add(getStatisticText("Per-player limit", mapPersonalLimit, true)); + + lore.add(""); + lore.add(getStatisticText("Current consumption", ((int) Math.rint(percentageUsed)) + " %")); + lore.add(getStatisticText("Maps left", mapPartLeft)); + lore.add(""); + + meta.setLore(lore); + } + + fr.moribus.imageonmap.gui.core.GuiUtils.removeVanillaInfos(meta); + + statistics.setItemMeta(meta); + action("", getSize() - 5, statistics); + } + + private String getStatisticText(String title, Integer value) + { + return getStatisticText(title, value, false); + } + + private String getStatisticText(String title, Integer value, boolean zeroIsUnlimited) + { + return getStatisticText(title, zeroIsUnlimited && value <= 0 ? "unlimited" : bigNumbersFormatter.format(value)); + } + + private String getStatisticText(String title, String value) + { + return ChatColor.GRAY + title + ": " + ChatColor.WHITE + value; } }