diff --git a/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/commands/GetCoordinatesCommandHandler.java b/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/commands/GetCoordinatesCommandHandler.java index 18e9360..1ca5024 100644 --- a/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/commands/GetCoordinatesCommandHandler.java +++ b/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/commands/GetCoordinatesCommandHandler.java @@ -13,34 +13,39 @@ public class GetCoordinatesCommandHandler implements CoordinatesCommandHandler { @Override public boolean handleCommand(CommandSender sender, String[] args) { - if (sender instanceof Player player) { - List coords; - if (args.length < 2) { - coords = CoordinatesDatabaseManager.INSTANCE.getAllCoordinates(); - } else if (args[1].equalsIgnoreCase("world")) { - String world = player.getWorld().getName(); - coords = CoordinatesDatabaseManager.INSTANCE.getAllCoordinates(world); - } else { - sender.sendMessage("Invalid argument: " + args[1]); - return false; + try { + if (sender instanceof Player player) { + List coords; + if (args.length < 2) { + coords = CoordinatesDatabaseManager.INSTANCE.getAllCoordinates(); + } else if (args[1].equalsIgnoreCase("world")) { + String world = player.getWorld().getName(); + coords = CoordinatesDatabaseManager.INSTANCE.getAllCoordinates(world); + } else { + sender.sendMessage("Invalid argument: " + args[1]); + return false; + } + + if (coords.isEmpty()) { + player.sendMessage("No coordinates found! Add some with the §3/ic-coords §5add §fcommand."); + return true; + } + + StringBuilder res = new StringBuilder("Coordinates: "); + + for (Coordinate coordinate : coords) { + res.append(coordinate.toString()); + } + + player.sendMessage(res.toString()); + + CoordinatesGUI.open(player, coords); } - - if (coords.isEmpty()) { - player.sendMessage("No coordinates found! Add some with the §3/ic-coords §5add §fcommand."); - return true; - } - - StringBuilder res = new StringBuilder("Coordinates: "); - - for (Coordinate coordinate : coords) { - res.append(coordinate.toString()); - } - - player.sendMessage(res.toString()); - - CoordinatesGUI.open(player, coords); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; } - return true; } } diff --git a/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/gui/CoordinatesGUI.java b/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/gui/CoordinatesGUI.java index 12e37c8..a94be91 100644 --- a/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/gui/CoordinatesGUI.java +++ b/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/gui/CoordinatesGUI.java @@ -1,9 +1,12 @@ package nl.interestingcorner.coordinates.gui; +import java.util.ArrayList; import java.util.List; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import nl.interestingcorner.coordinates.db.Coordinate; import nl.interestingcorner.core.gui.GUI; @@ -11,12 +14,21 @@ import nl.interestingcorner.core.gui.GUI; public class CoordinatesGUI { public static void open(Player player, List coords) { // Convert coordinates to ItemStacks for GUI display - List items = coords.stream() - .map(coord -> { - ItemStack item = coord.toItem(); - return item; - }) - .toList(); + + List items = new ArrayList<>(); + + for (Coordinate coord : coords) { + ItemStack item = coord.toItem(); + items.add(item); + } + + for (int i = 0; i < 90; i++) { + ItemStack item = new ItemStack(Material.AMETHYST_BLOCK); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("Test Item " + (i + 1)); + item.setItemMeta(meta); + items.add(item); + } GUI gui = new GUI("Coordinates", GUI.DEFAULT_PAGE_SIZE); gui.setItems(items); diff --git a/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/ChestGUI.java b/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/ChestGUI.java deleted file mode 100644 index d3297c7..0000000 --- a/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/ChestGUI.java +++ /dev/null @@ -1,29 +0,0 @@ -package nl.interestingcorner.core.gui; - -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -/** - * Generalized chest GUI for use in plugins. - */ -public class ChestGUI { - public static void open(Player player, String title, List items) { - int itemsAmount = items.size(); - int size; - if (itemsAmount <= 9) { - size = 9; - } else { - // TODO: handle pagination for >54 items - size = ((itemsAmount / 9) + 1) * 9; - } - Inventory gui = Bukkit.createInventory(null, size, title); - for (ItemStack item : items) { - gui.addItem(item); - } - player.openInventory(gui); - } -} diff --git a/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/ChestGUIListener.java b/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/ChestGUIListener.java deleted file mode 100644 index 2a32aa0..0000000 --- a/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/ChestGUIListener.java +++ /dev/null @@ -1,27 +0,0 @@ -package nl.interestingcorner.core.gui; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; - -/** - * Generalized listener for chest GUIs. Extend or register with custom logic. - */ -public class ChestGUIListener implements Listener { - private final String guiTitle; - - public ChestGUIListener(String guiTitle) { - this.guiTitle = guiTitle; - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent event) { - if (event.getView().getTitle().equals(guiTitle)) { - event.setCancelled(true); - if (event.getCurrentItem() == null) return; - Player player = (Player) event.getWhoClicked(); - // Extend this class and override this method for custom slot handling - } - } -} diff --git a/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUI.java b/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUI.java index fe35300..8dd41ba 100644 --- a/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUI.java +++ b/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUI.java @@ -13,13 +13,58 @@ public class GUI implements InventoryHolder { public static final int MAX_INVENTORY_SIZE = 54; // max size of inventory before pages are needed public static final int DEFAULT_PAGE_SIZE = 45; // default items per page (excluding navigation row) +/** + * TODO add listener functionality for clicking on an item, something like + * + * +public interface GUIListener { + void onItemClick(Player player, GUI gui, ItemStack item, int slot); +} + +private GUIListener listener; + +public void setListener(GUIListener listener) { + this.listener = listener; +} + +public GUIListener getListener() { + return listener; +} + + +@EventHandler +public void onInventoryClick(InventoryClickEvent event) { + if (event.getInventory().getHolder() instanceof GUI gui) { + if (gui.getListener() != null) { + gui.getListener().onItemClick((Player) event.getWhoClicked(), gui, event.getCurrentItem(), event.getSlot()); + } + } +} + */ + /** * Inventory that will be displayed */ private Inventory inventory; + + /** + * Full list of items that the GUI holds + */ private List items; + + /** + * Current page being displayed + */ private int currentPage; + + /** + * Title of the GUI + */ private String title; + + /** + * Number of items per page + */ private int pageSize; public GUI(String title, int pageSize) { diff --git a/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUIBuilder.java b/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUIBuilder.java deleted file mode 100644 index 72ab21f..0000000 --- a/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUIBuilder.java +++ /dev/null @@ -1,39 +0,0 @@ -package nl.interestingcorner.core.gui; - -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -public class GUIBuilder { - - public Inventory buildInventory(List items) { - /** - * if more than 45, add pages. Split by 45 items per page. - * use bottom row leftmost and rightmost item for navigation. - * use paper item for page number display in middle. - * use lore of navigation items clicked to handle showing next/previous page. - * use player.getOpeninventory() to get current inventory and update or close - * it. - */ - - int itemsAmount = items.size(); - int pagesAmount = getPagesAmount(itemsAmount); - - Inventory gui = Bukkit.createInventory(null, GUI.MAX_INVENTORY_SIZE, "Coordinates Menu"); - - for (ItemStack item : items) { - gui.addItem(item); - } - - return gui; - } - - private static int getPagesAmount(int itemsAmount) { - if (itemsAmount > GUI.MAX_INVENTORY_SIZE) { - return ((itemsAmount / GUI.DEFAULT_PAGE_SIZE) + 1); - } - return 1; - } -}