All source projects
MrUltimateLibrary Source
Standalone source project / 68 files
MrUltimateLibrary is the backbone of all my plugins; it offers features that facilitate plugin creation, maintenance, and updates.
java
MrUltimateLibrary/src/main/java/eu/mrneznamy/mrultimatelibrary/guide/MrLibGuideManager.java
JAVA · Read-only source
package eu.mrneznamy.mrultimatelibrary.guide;
import eu.mrneznamy.mrultimatelibrary.MrLibVersionDetector;
import eu.mrneznamy.mrultimatelibrary.gui.MrLibGUI;
import eu.mrneznamy.mrultimatelibrary.utils.MrLibColors;
import eu.mrneznamy.mrultimatelibrary.utils.MrLibConsoleSayer;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class MrLibGuideManager {
private static MrLibGuideManager instance;
private final Map<String, GuideCategory> pluginCategories = new HashMap<>();
private MrLibGuideManager() {}
public static MrLibGuideManager getInstance() {
if (instance == null) {
instance = new MrLibGuideManager();
}
return instance;
}
public void registerPluginCategory(String pluginName, GuideCategory category) {
pluginCategories.put(pluginName, category);
}
public void unregisterPluginCategory(String pluginName) {
pluginCategories.remove(pluginName);
}
public void openGuide(Player player) {
if (!MrLibVersionDetector.isAtLeast(21)) {
MrLibConsoleSayer.MrSay_Warning("Old Server - Some functions cant be enabled.");
player.sendMessage(MrLibColors.colorize("&cThis feature requires Minecraft 1.21 or newer."));
return;
}
openCategory(player, null);
}
public void openCategory(Player player, GuideCategory category) {
openCategory(player, category, 0);
}
public void openCategory(Player player, GuideCategory category, int page) {
String title = category == null ? "&8MrUltimateLibrary - Guide" : category.getTitle();
MrLibGUI gui = new MrLibGUI(MrLibColors.colorize(title), 6);
ItemStack border = new ItemStack(Material.GRAY_STAINED_GLASS_PANE);
ItemMeta borderMeta = border.getItemMeta();
if (borderMeta != null) {
borderMeta.setDisplayName(" ");
border.setItemMeta(borderMeta);
}
gui.fillBorder(border);
ItemStack helpBook = new ItemStack(Material.BOOK);
ItemMeta helpMeta = helpBook.getItemMeta();
if (helpMeta != null) {
helpMeta.setDisplayName(MrLibColors.colorize("&b&lGuide Info"));
helpMeta.setLore(Arrays.asList(
MrLibColors.colorize("&7Left-Click: &fGive 1 item"),
MrLibColors.colorize("&7Right-Click: &fGive 64 items")
));
helpBook.setItemMeta(helpMeta);
}
gui.setItem(4, helpBook);
int slot = 10;
if (category == null) {
for (Map.Entry<String, GuideCategory> entry : pluginCategories.entrySet()) {
if (slot > 43) break;
GuideCategory pluginCategory = entry.getValue();
ItemStack icon = pluginCategory.getIcon().clone();
ItemMeta meta = icon.getItemMeta();
if (meta != null) {
String gradientTitle = "{#8B5CF6>}" + pluginCategory.getTitle() + "{#3B82F6<}";
meta.setDisplayName(MrLibColors.colorize(gradientTitle));
icon.setItemMeta(meta);
}
gui.setItem(slot, icon, event -> {
openCategory(player, pluginCategory);
});
slot++;
if (slot % 9 == 8) slot += 2;
}
} else {
java.util.List<Object> allItems = new java.util.ArrayList<>();
allItems.addAll(category.getSubCategories());
allItems.addAll(category.getItems());
int itemsPerPage = 28;
int totalPages = (int) Math.ceil((double) allItems.size() / itemsPerPage);
if (page < 0) page = 0;
if (page >= totalPages && totalPages > 0) page = totalPages - 1;
int startIndex = page * itemsPerPage;
int endIndex = Math.min(startIndex + itemsPerPage, allItems.size());
for (int i = startIndex; i < endIndex; i++) {
Object obj = allItems.get(i);
if (obj instanceof GuideCategory) {
GuideCategory sub = (GuideCategory) obj;
ItemStack icon = sub.getIcon().clone();
ItemMeta meta = icon.getItemMeta();
if (meta != null) {
String gradientTitle = "{#8B5CF6>}" + sub.getTitle() + "{#3B82F6<}";
meta.setDisplayName(MrLibColors.colorize(gradientTitle));
icon.setItemMeta(meta);
}
gui.setItem(slot, icon, event -> {
openCategory(player, sub);
});
} else if (obj instanceof GuideItem) {
GuideItem item = (GuideItem) obj;
ItemStack displayItem = item.getItem().clone();
gui.setItem(slot, displayItem, event -> {
if (event.isLeftClick()) {
ItemStack toGive = item.getItem().clone();
toGive.setAmount(1);
player.getInventory().addItem(toGive);
} else if (event.isRightClick()) {
ItemStack toGive = item.getItem().clone();
toGive.setAmount(64);
player.getInventory().addItem(toGive);
}
});
}
slot++;
if (slot % 9 == 8) slot += 2;
}
if (page > 0) {
ItemStack prevPage = new ItemStack(Material.ARROW);
ItemMeta meta = prevPage.getItemMeta();
if (meta != null) {
meta.setDisplayName(MrLibColors.colorize("&ePrevious Page"));
prevPage.setItemMeta(meta);
}
int finalPage = page;
gui.setItem(48, prevPage, event -> openCategory(player, category, finalPage - 1));
}
if (page < totalPages - 1) {
ItemStack nextPage = new ItemStack(Material.ARROW);
ItemMeta meta = nextPage.getItemMeta();
if (meta != null) {
meta.setDisplayName(MrLibColors.colorize("&eNext Page"));
nextPage.setItemMeta(meta);
}
int finalPage = page;
gui.setItem(50, nextPage, event -> openCategory(player, category, finalPage + 1));
}
if (category.getParent() != null || category != null) {
ItemStack back = new ItemStack(Material.BARRIER);
ItemMeta meta = back.getItemMeta();
if (meta != null) {
meta.setDisplayName(MrLibColors.colorize("&cBack"));
back.setItemMeta(meta);
}
gui.setItem(49, back, event -> {
openCategory(player, category.getParent());
});
}
}
gui.open(player);
}
}
194 linesGNU GENERAL PUBLIC LICENSE · Version 3, 29 June 2007 · UTF-8 · Read only